source: trunk/fl5/src/com/longtailvideo/jwplayer/utils/TypeChecker.as @ 1778

Revision 1778, 2.2 KB checked in by pablo, 2 years ago (diff)

Fixes an issue which causes empty string plugin properties to be interpreted as 0. (1318)

Line 
1package com.longtailvideo.jwplayer.utils {
2        import com.longtailvideo.jwplayer.model.Color;
3       
4        import flash.utils.describeType;
5
6        public class TypeChecker {
7               
8                public static function getType(object:Object, property:String):String {
9                        var description:XML = describeType(object);
10                        var type:String;
11                       
12                        if ((description.accessor as XMLList).length()) {
13                                type = description.accessor.(@name == property).@type;
14                        } else {
15                                type = description.variable.(@name == property).@type;
16                        }
17                        return type.replace(/(.+::)(.*)/,"$2");
18                }
19
20                public static function guessType(value:String):String {
21                        var bools:Array = ["true", "false", "t", "f"];
22                        if (bools.indexOf(value.toLowerCase().replace(" ","")) >= 0) {
23                                return "Boolean";
24                        } else if ( value.search(/^(#|0x)[0-9a-fA-F]{3,6}/) >= 0 ) {
25                                return "Color";
26                        } else if (value === "") {
27                                return "String";
28                        } else if (!isNaN(Number(value)) ) {
29                                return "Number";
30                        } else {
31                                return "String";
32                        }
33                }
34               
35                public static function fromString(value:String, type:String=null):* {
36                        if (type == null)
37                                type = guessType(value);
38
39                        switch(type.toLowerCase()) {
40                                case "color":
41                                        if (value.length > 0) {
42                                                return new Color(stringToColor(value));
43                                        } else return null;
44                                case "number":
45                                        return Number(value);
46                                case "boolean":
47                                        if (value.toLowerCase() == "true") return true;
48                                        else if (value == "1") return true;
49                                        else return false;
50                        }
51                        return value;
52                }
53               
54                public static function stringToColor(value:String):uint {
55                        switch(value.toLowerCase()) {
56                                case "blue": return 0x0000FF; break;
57                                case "green": return 0x00FF00; break;
58                                case "red": return 0xFF0000; break;
59                                case "cyan": return 0x00FFFF; break;
60                                case "magenta": return 0xFF00FF; break;
61                                case "yellow": return 0xFFFF00; break;
62                                case "black": return 0x000000; break;
63                                case "white": return 0xFFFFFF; break;
64                                default:
65                                        value = value.replace(/(#|0x)?([0-9A-F]{3,6})$/gi, "$2");
66                                        if (value.length == 3)
67                                                value = value.charAt(0) + value.charAt(0) + value.charAt(1) + value.charAt(1) + value.charAt(2) + value.charAt(2);
68                                        return uint("0x" + value);
69                                        break;
70                        }
71                       
72                        return 0x000000;
73                }
74
75        }
76       
77}
Note: See TracBrowser for help on using the repository browser.