This is an automated email from the ASF dual-hosted git repository. carlosrovira pushed a commit to branch feature/themes in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 6f11ef29501cedf20f903173a1ebd8e054369bcc Author: Carlos Rovira <carlosrov...@apache.org> AuthorDate: Thu Feb 8 18:31:08 2018 +0100 Vivid new UI Set for "themeing" initial commit --- frameworks/projects/Vivid/.vscode/launch.json | 21 ++ frameworks/projects/Vivid/.vscode/tasks.json | 8 + frameworks/projects/Vivid/asconfig.json | 34 +++ frameworks/projects/Vivid/pom.xml | 164 ++++++++++++ .../projects/Vivid/src/main/resources/defaults.css | 65 +++++ .../Vivid/src/main/resources/vivid-as-manifest.xml | 25 ++ .../Vivid/src/main/resources/vivid-manifest.xml | 27 ++ .../projects/Vivid/src/main/royale/VividClasses.as | 32 +++ .../royale/org/apache/royale/vivid/Application.as | 65 +++++ .../main/royale/org/apache/royale/vivid/Button.as | 296 +++++++++++++++++++++ 10 files changed, 737 insertions(+) diff --git a/frameworks/projects/Vivid/.vscode/launch.json b/frameworks/projects/Vivid/.vscode/launch.json new file mode 100644 index 0000000..5dfb672 --- /dev/null +++ b/frameworks/projects/Vivid/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Chrome against debug.html, with sourcemaps", + "type": "chrome", + "request": "launch", + "file": "${workspaceRoot}/target/javascript/bin/js-debug/index.html", + "sourceMaps": true, + "preLaunchTask": "mvn" + }, + { + "name": "Launch Firefox against debug.html, with sourcemaps", + "type": "firefox", + "request": "launch", + "file": "${workspaceRoot}/target/javascript/bin/js-debug/index.html", + "sourceMaps": true, + "preLaunchTask": "mvn" + } + ] +} diff --git a/frameworks/projects/Vivid/.vscode/tasks.json b/frameworks/projects/Vivid/.vscode/tasks.json new file mode 100644 index 0000000..5d6198d --- /dev/null +++ b/frameworks/projects/Vivid/.vscode/tasks.json @@ -0,0 +1,8 @@ +{ + // for the documentation about the tasks.json format + "version": "0.1.0", + "command": "mvn", + "args": ["clean", "install", "-DskipTests"], + "isShellCommand": true, + "showOutput": "always" +} \ No newline at end of file diff --git a/frameworks/projects/Vivid/asconfig.json b/frameworks/projects/Vivid/asconfig.json new file mode 100644 index 0000000..36edd42 --- /dev/null +++ b/frameworks/projects/Vivid/asconfig.json @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { + "config": "royale", + "type": "lib", + "compilerOptions": { + "debug": true, + "targets": [ + "JSRoyale", + "SWF" + ], + "include-classes": [ + "VividClasses" + ], + "include-sources": [ + "src/main/royale" + ], + "output": "target/Vivid.swc" + } +} diff --git a/frameworks/projects/Vivid/pom.xml b/frameworks/projects/Vivid/pom.xml new file mode 100644 index 0000000..f02d1d6 --- /dev/null +++ b/frameworks/projects/Vivid/pom.xml @@ -0,0 +1,164 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.royale.framework</groupId> + <artifactId>projects</artifactId> + <version>0.9.2-SNAPSHOT</version> + </parent> + + <artifactId>Vivid</artifactId> + <version>0.9.2-SNAPSHOT</version> + <packaging>swc</packaging> + + <name>Apache Royale: Framework: Libs: Vivid</name> + + <build> + <sourceDirectory>src/main/royale</sourceDirectory> + <plugins> + <plugin> + <groupId>org.apache.royale.compiler</groupId> + <artifactId>royale-maven-plugin</artifactId> + <version>${royale.compiler.version}</version> + <extensions>true</extensions> + <configuration> + <namespaces> + <namespace> + <uri>library://ns.apache.org/royale/vivid</uri> + <manifest>${project.basedir}/src/main/resources/vivid-manifest.xml</manifest> + </namespace> + <namespace> + <type>as</type> + <uri>library://ns.apache.org/royale/vivid</uri> + <manifest>${project.basedir}/src/main/resources/vivid-as-manifest.xml</manifest> + </namespace> + <!--<namespace> + <uri>library://ns.apache.org/royale/svg</uri> + <manifest>${project.basedir}/src/main/resources/svg-manifest.xml</manifest> + </namespace>--> + </namespaces> + <includeClasses> + <includeClass>VividClasses</includeClass> + </includeClasses> + <includeFiles> + <include-file> + <name>defaults.css</name> + <path>../src/main/resources/defaults.css</path> + </include-file> + </includeFiles> + <includeLookupOnly>true</includeLookupOnly> + <!--<allowSubclassOverrides>true</allowSubclassOverrides>--> + <skipExtern>true</skipExtern> + <!--<additionalCompilerOptions>-compiler.fxg-base-class=flash.display.Sprite</additionalCompilerOptions>--> + </configuration> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Core</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Core</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Binding</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Binding</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Graphics</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Graphics</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Collections</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Collections</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Basic</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>Basic</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>HTML</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>swf</classifier> + </dependency> + <dependency> + <groupId>org.apache.royale.framework</groupId> + <artifactId>HTML</artifactId> + <version>0.9.2-SNAPSHOT</version> + <type>swc</type> + <classifier>js</classifier> + </dependency> + </dependencies> + +</project> diff --git a/frameworks/projects/Vivid/src/main/resources/defaults.css b/frameworks/projects/Vivid/src/main/resources/defaults.css new file mode 100644 index 0000000..8abcb8c --- /dev/null +++ b/frameworks/projects/Vivid/src/main/resources/defaults.css @@ -0,0 +1,65 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +@namespace "library://ns.apache.org/royale/vivid"; +/*@namespace svg "library://ns.apache.org/royale/svg";*/ + +/* +* Vivid TextButton +*/ + +TextButton { + /* Background: */ + background: #D8D8D8; + border: 1px solid #979797; + border-radius: 3px; + + /* TextField: */ + font-family: HelveticaNeue; + font-size: 12px; + color: #646D7A; +} + +TextButton:hover { + background-color: #CFCFCF; + vertical-align: middle; + border: none; + border-radius: 6px; +} + +TextButton:active { + background-color: #77CEFF; + color: #FFFFFF; +} + +/* +* Vivid TextInput +*/ + +TextInput { + padding: 5px; + border: solid 1px #666666; + border-radius: 6px; + color: #333333; +} + +TextInput:hover { + padding: 5px; + background-color: #DFDFDF; +} diff --git a/frameworks/projects/Vivid/src/main/resources/vivid-as-manifest.xml b/frameworks/projects/Vivid/src/main/resources/vivid-as-manifest.xml new file mode 100644 index 0000000..e38496a --- /dev/null +++ b/frameworks/projects/Vivid/src/main/resources/vivid-as-manifest.xml @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + +<componentPackage> + + +</componentPackage> diff --git a/frameworks/projects/Vivid/src/main/resources/vivid-manifest.xml b/frameworks/projects/Vivid/src/main/resources/vivid-manifest.xml new file mode 100644 index 0000000..616b9d7 --- /dev/null +++ b/frameworks/projects/Vivid/src/main/resources/vivid-manifest.xml @@ -0,0 +1,27 @@ +<?xml version="1.0"?> +<!-- + + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--> + + +<componentPackage> + + <component id="Application" class="org.apache.royale.vivid.Application"/> + <component id="Button" class="org.apache.royale.vivid.Button"/> + +</componentPackage> diff --git a/frameworks/projects/Vivid/src/main/royale/VividClasses.as b/frameworks/projects/Vivid/src/main/royale/VividClasses.as new file mode 100644 index 0000000..35fb517 --- /dev/null +++ b/frameworks/projects/Vivid/src/main/royale/VividClasses.as @@ -0,0 +1,32 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package +{ + + /** + * @private + * This class is used to link additional classes into vivid.swc + * beyond those that are found by dependecy analysis starting + * from the classes specified in manifest.xml. + */ + internal class VividClasses + { + } + +} \ No newline at end of file diff --git a/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Application.as b/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Application.as new file mode 100644 index 0000000..4f13beb --- /dev/null +++ b/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Application.as @@ -0,0 +1,65 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.royale.vivid +{ + import org.apache.royale.core.Application; + import org.apache.royale.core.SimpleCSSValuesImpl; + + /** + * Vivid Application holds specific Vivid need in a Royale Application. + * + * This class extends the standard Application and sets up the + * SimpleCSSValuesImpl (implementation) for convenience. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.2 + */ + public class Application extends org.apache.royale.core.Application + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.2 + */ + public function Application() + { + super(); + + this.valuesImpl = new SimpleCSSValuesImpl(); + + // this a is temp solution until we get a better way to get a reference to Application + //topLevelApplication = this; + } + + /** + * static reference to this application used mainly for dialog (Dialog class) + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.2 + */ + //public static var topLevelApplication:Object; + } +} diff --git a/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Button.as b/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Button.as new file mode 100644 index 0000000..1fdb61d --- /dev/null +++ b/frameworks/projects/Vivid/src/main/royale/org/apache/royale/vivid/Button.as @@ -0,0 +1,296 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//////////////////////////////////////////////////////////////////////////////// +package org.apache.royale.vivid +{ + import org.apache.royale.html.TextButton; + + COMPILE::JS + { + import org.apache.royale.core.WrappedHTMLElement; + import org.apache.royale.html.util.addElementToWrapper; + } + + /** + * The Button class provides a Vivid Design Library UI-like appearance for + * a Button. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.2 + */ + public class Button extends TextButton + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.9.2 + */ + public function Button() + { + super(); + + className = ""; //set to empty string avoid 'undefined' output when no class selector is assigned by user; + } + + /** + * @private + * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement + */ + COMPILE::JS + override protected function createElement():WrappedHTMLElement + { + //typeNames = ""; + + return addElementToWrapper(this,'button'); + } + + //private var _materialIcon:IMaterialIcon; + /** + * A material icon to use with the button. + * Optional + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get materialIcon():IMaterialIcon + { + return _materialIcon; + } + public function set materialIcon(value:IMaterialIcon):void + { + _materialIcon = value; + + COMPILE::JS + { + addElement(_materialIcon); + } + }*/ + + //private var _fab:Boolean = false; + /** + * A boolean flag to activate "mdl-button--fab" effect selector. + * Applies fab (circular) display effect. Mutually exclusive with raised, mini-fab, and icon. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get fab():Boolean + { + return _fab; + } + public function set fab(value:Boolean):void + { + _fab = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--fab", _fab); + typeNames = element.className; + } + }*/ + + //private var _raised:Boolean = false; + /** + * A boolean flag to activate "mdl-button--raised" effect selector. + * Applies raised display effect. Mutually exclusive with fab, mini-fab, and icon. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get raised():Boolean + { + return _raised; + } + public function set raised(value:Boolean):void + { + _raised = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--raised", _raised); + typeNames = element.className; + } + }*/ + + //private var _colored:Boolean = false; + /** + * A boolean flag to activate "mdl-button--colored" effect selector. + * Applies colored display effect (primary or accent color, depending on the type of button). + * Colors are defined in material.min.css + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get colored():Boolean + { + return _colored; + } + public function set colored(value:Boolean):void + { + _colored = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--colored", _colored); + typeNames = element.className; + } + }*/ + + //private var _accent:Boolean = false; + /** + * A boolean flag to activate "mdl-button--accent" effect selector. + * Applies accent color display effect. + * Colors are defined in material.min.css. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get accent():Boolean + { + return _accent; + } + public function set accent(value:Boolean):void + { + _accent = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--accent", _accent); + typeNames = element.className; + } + }*/ + + //private var _primary:Boolean = false; + /** + * A boolean flag to activate "mdl-button--primary" effect selector. + * Applies primary color display effect. + * Colors are defined in material.min.css + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get primary():Boolean + { + return _primary; + } + public function set primary(value:Boolean):void + { + _primary = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--primary", _primary); + typeNames = element.className; + } + }*/ + + //private var _minifab:Boolean = false; + /** + * A boolean flag to activate "mdl-button--mini-fab" effect selector. + * Applies mini-fab (small fab circular) display effect. + * Mutually exclusive with raised, fab, and icon + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get minifab():Boolean + { + return _minifab; + } + public function set minifab(value:Boolean):void + { + _minifab = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--mini-fab", _minifab); + typeNames = element.className; + } + }*/ + + //private var _icon:Boolean = false; + /** + * A boolean flag to activate "mdl-button--icon" effect selector. + * Applies icon (small plain circular) display effect. + * Mutually exclusive with raised, fab, and mini-fab + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get icon():Boolean + { + return _icon; + } + public function set icon(value:Boolean):void + { + _icon = value; + + COMPILE::JS + { + element.classList.toggle("mdl-button--icon", _icon); + typeNames = element.className; + } + }*/ + + //protected var _ripple:Boolean = false; + /** + * A boolean flag to activate "mdl-js-ripple-effect" effect selector. + * Applies ripple click effect. May be used in combination with any other classes + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion Royale 0.8 + */ + /*public function get ripple():Boolean + { + return _ripple; + } + public function set ripple(value:Boolean):void + { + _ripple = value; + + COMPILE::JS + { + element.classList.toggle("mdl-js-ripple-effect", _ripple); + typeNames = element.className; + } + }*/ + } +} -- To stop receiving notification emails like this one, please contact carlosrov...@apache.org.