This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch feature/redo-formatters
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/feature/redo-formatters by 
this push:
     new 4fabdc7  Formatters appear to work
4fabdc7 is described below

commit 4fabdc796fb890ef92fc45f14aa5f06e49e30ae8
Author: Harbs <[email protected]>
AuthorDate: Tue Jan 22 19:09:20 2019 +0200

    Formatters appear to work
---
 .../JewelJS/src/main/config/compile-js-config.xml  |   1 +
 .../src/main/resources/basic-manifest.xml          |   6 +-
 .../royale/html/accessories/SimpleDateFormatter.as |   4 +-
 .../royale/html/accessories/StringDateFormatter.as | 119 +++++++++++++++++++++
 frameworks/projects/Jewel/pom.xml                  |  14 +++
 .../Jewel/src/main/config/compile-swf-config.xml   |   1 +
 .../projects/Jewel/src/main/resources/defaults.css |   2 +-
 .../royale/org/apache/royale/jewel/DateField.as    |   2 +-
 .../controls/datefield/DateFieldMaskedTextInput.as |  37 +++----
 .../royale/jewel/beads/views/DateFieldView.as      |  14 ++-
 10 files changed, 166 insertions(+), 34 deletions(-)

diff --git 
a/frameworks/js/projects/JewelJS/src/main/config/compile-js-config.xml 
b/frameworks/js/projects/JewelJS/src/main/config/compile-js-config.xml
index c49c05c..fe6ef45 100644
--- a/frameworks/js/projects/JewelJS/src/main/config/compile-js-config.xml
+++ b/frameworks/js/projects/JewelJS/src/main/config/compile-js-config.xml
@@ -66,6 +66,7 @@
             <path-element>../../../../../libs/CollectionsJS.swc</path-element>
             <path-element>../../../../../libs/BasicJS.swc</path-element>
             <path-element>../../../../../libs/HTMLJS.swc</path-element>
+            <path-element>../../../../../libs/FormattersJS.swc</path-element>
         </library-path>
         
         <namespaces>
diff --git 
a/frameworks/projects/Formatters/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Formatters/src/main/resources/basic-manifest.xml
index 05bc912..8f998e5 100644
--- a/frameworks/projects/Formatters/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Formatters/src/main/resources/basic-manifest.xml
@@ -20,11 +20,13 @@
 
 
 <componentPackage>
+    <component id="CurrencyFormatter" 
class="org.apache.royale.html.accessories.CurrencyFormatter"/>
+    <component id="DateAndTimeFormatter" 
class="org.apache.royale.html.accessories.DateAndTimeFormatter"/>
     <component id="DateFormatter" 
class="org.apache.royale.html.accessories.SimpleDateFormatter"/>
     <component id="DateFormatDDMMYYYY" 
class="org.apache.royale.html.accessories.DateFormatDDMMYYYY"/>
     <component id="DateFormatMMDDYYYY" 
class="org.apache.royale.html.accessories.DateFormatMMDDYYYY"/>
     <component id="DateFormatYYYYMMDD" 
class="org.apache.royale.html.accessories.DateFormatYYYYMMDD"/>
     <component id="NumberFormatter" 
class="org.apache.royale.html.accessories.NumberFormatter"/>
-    <component id="CurrencyFormatter" 
class="org.apache.royale.html.accessories.CurrencyFormatter"/>
-    <component id="DateAndTimeFormatter" 
class="org.apache.royale.html.accessories.DateAndTimeFormatter"/>
+    <component id="SimpleDateFormatter" 
class="org.apache.royale.html.accessories.SimpleDateFormatter"/>
+    <component id="StringDateFormatter" 
class="org.apache.royale.html.accessories.StringDateFormatter"/>
 </componentPackage>
diff --git 
a/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/SimpleDateFormatter.as
 
b/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/SimpleDateFormatter.as
index 05860bf..b2d7656 100644
--- 
a/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/SimpleDateFormatter.as
+++ 
b/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/SimpleDateFormatter.as
@@ -45,7 +45,7 @@ package org.apache.royale.html.accessories
                }
 
                private var _dateFormat:String;
-               private var _separator:String;
+               protected var _separator:String;
                
                /**
                 *  The dateFormat of the date string.
@@ -103,7 +103,7 @@ package org.apache.royale.html.accessories
                                var month:String = 
String(selectedDate.getMonth()+1);
                                var day:String = String(selectedDate.getDate());
                                var year:String = 
String(selectedDate.getFullYear());
-                               var tokens:Array = 
_dateFormat.split(_separator);
+                               var tokens:Array = dateFormat.split(_separator);
                                var length:int = tokens.length;
 
                                
diff --git 
a/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/StringDateFormatter.as
 
b/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/StringDateFormatter.as
new file mode 100644
index 0000000..2ce8c15
--- /dev/null
+++ 
b/frameworks/projects/Formatters/src/main/royale/org/apache/royale/html/accessories/StringDateFormatter.as
@@ -0,0 +1,119 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.html.accessories
+{
+  import org.apache.royale.core.FormatBase;
+  /**
+   * Formats a date from a string
+   * Because of the compleixities of date formatting, this formatter does not
+   * differentiate between single digit formats and double digit formats for 
days and months.
+   */
+  public class StringDateFormatter extends SimpleDateFormatter
+  {
+    public function StringDateFormatter()
+    {
+      super();
+    }
+    /**
+     * Formats the date.
+     * If a String is passed in, the date string is formatted using the 
dateFormat.
+     * If a Date is passed in, it formats the same as other Date formatters.
+     */
+    override public function format(value:Object):String
+    {
+      if(value is Date)
+      {
+        return super.format(value);
+      }
+      var str:String = value as String;
+      str = str.replace(/[^0-9]/g,"");
+      var result:String = "";
+      var tokens:Array = dateFormat.split(_separator);
+      var length:int = tokens.length;
+      var part:String;
+      var val:Number;
+                               
+      for (var i:int = 0; i < length; i++) {
+        if(!str)
+          break;
+        switch (tokens[i]) {
+          case "YYYY":
+            part = str.substr(0,4);
+            str = str.substr(4);
+            result += part;
+            break;
+          case "YY":
+            part = str.substr(0,2);
+            str = str.substr(2);
+            result += part;
+            break;
+          case "M":
+          case "MM":
+            part = str.substr(0,2);
+            val = Number(part);
+            if(val > 12)// should be single digit
+            {
+              part = "0" + str.substr(0,1);
+              str = str.substr(1);
+            } else
+            {
+              // part is ok. We need to slice the str
+              str = str.substr(2);
+            }
+            result += part;
+            break;
+          case "DD":
+          case "D":
+            part = str.substr(0,2);
+            val = Number(part);
+            if(val > 31)// should be single digit
+            {
+              part = "0" + str.substr(0,1);
+              str = str.substr(1);
+            } else
+            {
+              // part is ok. We need to slice the str
+              str = str.substr(2);
+            }
+            result += part;
+            break;
+        }
+        // if there's no more left, str is empty and no separator
+        if (str && i <= length - 2) {
+          result += _separator;
+        }
+      }
+
+                       return result;
+    }
+    // Some calendar systems can have a different value
+    private var _maxMonths:Number = 12;
+    private function isValidMonth(value:Number):Boolean
+    {
+      if(isNaN(value))
+        return false;
+      if(Math.round(value) != value)
+        return false;
+      if(value > _maxMonths)
+        return false;
+
+      return true;
+    }
+  }
+}
\ No newline at end of file
diff --git a/frameworks/projects/Jewel/pom.xml 
b/frameworks/projects/Jewel/pom.xml
index 2ac6519..74d84db 100644
--- a/frameworks/projects/Jewel/pom.xml
+++ b/frameworks/projects/Jewel/pom.xml
@@ -181,6 +181,20 @@
       <type>swc</type>
       <classifier>js</classifier>
     </dependency>
+    <dependency>
+      <groupId>org.apache.royale.framework</groupId>
+      <artifactId>Formatters</artifactId>
+      <version>0.9.6-SNAPSHOT</version>
+      <type>swc</type>
+      <classifier>swf</classifier>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.royale.framework</groupId>
+      <artifactId>Formatters</artifactId>
+      <version>0.9.6-SNAPSHOT</version>
+      <type>swc</type>
+      <classifier>js</classifier>
+    </dependency>
   </dependencies>
 
 </project>
diff --git a/frameworks/projects/Jewel/src/main/config/compile-swf-config.xml 
b/frameworks/projects/Jewel/src/main/config/compile-swf-config.xml
index 9656867..10f07d4 100644
--- a/frameworks/projects/Jewel/src/main/config/compile-swf-config.xml
+++ b/frameworks/projects/Jewel/src/main/config/compile-swf-config.xml
@@ -35,6 +35,7 @@
             <path-element>../../../../../libs/Basic.swc</path-element>
             <path-element>../../../../../libs/Collections.swc</path-element>
             <path-element>../../../../../libs/HTML.swc</path-element>
+            <path-element>../../../../../libs/Formatters.swc</path-element>
         </external-library-path>
         
         <allow-subclass-overrides>true</allow-subclass-overrides>
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css 
b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 3b7cbed..9efadea 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -568,7 +568,7 @@ j|DateField {
   IBeadView: 
ClassReference("org.apache.royale.jewel.beads.views.DateFieldView");
   IBeadModel: 
ClassReference("org.apache.royale.jewel.beads.models.DateChooserModel");
   IBeadController: 
ClassReference("org.apache.royale.jewel.beads.controllers.DateFieldMouseController");
-  IFormatter: 
ClassReference("org.apache.royale.html.accessories.DateFormatMMDDYYYY");
+  IFormatter: 
ClassReference("org.apache.royale.html.accessories.StringDateFormatter");
   IPopUp: ClassReference("org.apache.royale.jewel.DateChooser");
 }
 
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as
index 4053474..8bb8eb5 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DateField.as
@@ -76,7 +76,7 @@ package org.apache.royale.jewel
                override public function addedToParent():void
                {
                        super.addedToParent();
-                       loadBeadFromValuesManager(IFormatter, "IFormatter", 
this);
+                       loadBeadFromValuesManager(IFormatter, "iFormatter", 
this);
                        
                        loadBeadFromValuesManager(IDateControlConfigBead, 
"iDateControlConfigBead", this);
 
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldMaskedTextInput.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldMaskedTextInput.as
index b003690..b35c602 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldMaskedTextInput.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldMaskedTextInput.as
@@ -33,6 +33,7 @@ package org.apache.royale.jewel.beads.controls.datefield
     import org.apache.royale.core.UIBase;
        import org.apache.royale.events.Event;
        import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.core.IFormatter;
        
        /**
         *  The DateFieldMaskedTextInput class is a specialty bead that is used
@@ -116,6 +117,18 @@ package org.apache.royale.jewel.beads.controls.datefield
                        var n:Number = Number(value);
                        if (isNaN(n)) event.preventDefault();
                }
+
+               private var _formatter:IFormatter;
+
+               public function get formatter():IFormatter
+               {
+                       return _formatter;
+               }
+
+               public function set formatter(value:IFormatter):void
+               {
+                       _formatter = value;
+               }
                
                COMPILE::JS
                private function validateInput(event:BrowserEvent):void
@@ -156,29 +169,7 @@ package org.apache.royale.jewel.beads.controls.datefield
                 * (TODO carlosrovira): this should take into account IFormatter
                 */
                private function dateInputMask(event:BrowserEvent):void {
-                       if(event.keyCode < 47 || event.keyCode > 57) {
-                               event.preventDefault();
-                       }
-                       
-                       var len:int = event.target.value.length;
-                       
-                       // If we're at a particular place, let the user type 
the slash
-                       // i.e., 12/12/1212
-                       if(len !== 1 || len !== 3) {
-                               if(event.keyCode == 47) {
-                                       event.preventDefault();
-                               }
-                       }
-                       
-                       // If they don't add the slash, do it for them...
-                       if(len === 2) {
-                               event.target.value += '/';
-                       }
-
-                       // If they don't add the slash, do it for them...
-                       if(len === 5) {
-                               event.target.value += '/';
-                       }
+                       event.target.value = 
formatter.format(event.target.value);
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateFieldView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateFieldView.as
index fb1f9e5..1ba239b 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateFieldView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateFieldView.as
@@ -122,11 +122,6 @@ package org.apache.royale.jewel.beads.views
                        super.strand = value;
 
                        _textInput = new TextInput();
-                       _textInput.addBead(new DateFieldMaskedTextInput());
-                       
-                       var maxNumberCharacters:MaxNumberCharacters = new 
MaxNumberCharacters();
-                       maxNumberCharacters.maxlength = 10;
-                       _textInput.addBead(maxNumberCharacters);
                        
                        getHost().addElement(_textInput);
 
@@ -159,6 +154,15 @@ package org.apache.royale.jewel.beads.views
                {
                        model = _strand.getBeadByType(IDateChooserModel) as 
IDateChooserModel;
                        
IEventDispatcher(model).addEventListener("selectedDateChanged", 
selectionChangeHandler);
+                       var mask:DateFieldMaskedTextInput = new 
DateFieldMaskedTextInput();
+                       _textInput.addBead(mask);
+                       
+                       var maxNumberCharacters:MaxNumberCharacters = new 
MaxNumberCharacters();
+                       maxNumberCharacters.maxlength = 10;
+                       _textInput.addBead(maxNumberCharacters);
+                       
+                       var formatter:IFormatter = 
_strand.getBeadByType(IFormatter) as IFormatter;
+                       mask.formatter = formatter;
                }
                
                private function handlePopUpInitComplete(event:Event):void

Reply via email to