1 package net.systemeD.potlatch2.mapfeatures {
3 import flash.events.EventDispatcher;
4 import flash.events.Event;
5 import net.systemeD.halcyon.connection.Entity;
7 public class Feature extends EventDispatcher {
8 private var mapFeatures:MapFeatures;
10 private static var variablesPattern:RegExp = /[$][{]([^}]+)[}]/g;
11 private var _tags:Array;
12 private var _editors:Array;
14 public function Feature(mapFeatures:MapFeatures, _xml:XML) {
15 this.mapFeatures = mapFeatures;
21 private function parseTags():void {
24 for each(var tag:XML in definition.tag) {
25 var tagObj:Object = new Object();
32 private function parseEditors():void {
33 _editors = new Array();
35 for each(var inputXML:XML in definition.input) {
36 var inputType:String = inputXML.@type;
37 var presenceStr:String = inputXML.@presence;
38 var sortOrderStr:String = inputXML.@priority;
39 var editor:EditorFactory = EditorFactory.createFactory(inputType, inputXML);
40 if ( editor != null ) {
41 editor.presence = Presence.getPresence(presenceStr);
42 editor.sortOrder = EditorFactory.getPriority(sortOrderStr);
43 _editors.push(editor);
47 _editors.sortOn(["sortOrder", "name"], [Array.DESCENDING | Array.NUMERIC, Array.CASEINSENSITIVE]);
50 public function get editors():Array {
54 public function get definition():XML {
58 [Bindable(event="nameChanged")]
59 public function get name():String {
63 [Bindable(event="imageChanged")]
64 public function get image():String {
65 var icon:XMLList = _xml.icon;
67 if ( icon.length() > 0 && icon[0].hasOwnProperty("@image") )
68 return icon[0].@image;
73 public function htmlDetails(entity:Entity):String {
74 var icon:XMLList = _xml.icon;
78 var txt:String = icon.children().toXMLString();
79 var replaceTag:Function = function():String {
80 var value:String = entity.getTag(arguments[1]);
81 return value == null ? "" : value;
83 txt = txt.replace(variablesPattern, replaceTag);
87 public function isInCategory(category:String):Boolean {
88 var cats:XMLList = _xml.category;
89 if ( cats.length() == 0 )
92 for each( var cat:XML in cats )
93 if ( cat.text()[0] == category )
98 public function get tags():Array {
102 public function findFirstCategory():Category {
103 for each( var cat:Category in mapFeatures.categories ) {
104 if ( isInCategory(cat.id) )