-
-
Save gNikro/cba77bd96ce38389b043 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ui.style | |
{ | |
import core.fileSystem.IFS; | |
import core.utils.Cast; | |
public class Style | |
{ | |
//Инжектит файловую систему сюда | |
[Inject] | |
public var vfs:IFS; | |
//Хранилище стилей | |
public var styles:Object = { }; | |
public function Style() | |
{ | |
//Вызываем инжектилку | |
inject(this); | |
} | |
/** | |
* Оверрайдим другой стиль при этом заменяя в нем поля такие как у нас | |
* @param style | |
*/ | |
public function overrideStyle(style:Style):void | |
{ | |
for (var fieldName:String in style.styles) | |
this.styles[fieldName] = style.styles[fieldName]; | |
} | |
/** | |
* При парсинге стиля из файла создаем таблицу стиля | |
* @param value | |
* @param key | |
*/ | |
public function addStyleKey(value:String, key:String):void | |
{ | |
this.styles[value] = processStyleValue(key); | |
} | |
/** | |
* Парсим стиль | |
* @param styles | |
*/ | |
public function fillStyle(styles:Vector.<String>):void | |
{ | |
var styleValueString:String | |
var styleKey:String; | |
var styleString:String; | |
var stylesParts:Array; | |
for (var i:int = 0; i < styles.length; i++) | |
{ | |
styleString = styles[i]; | |
//разбиваем пары значений все такое | |
var splitterIndex:int = styleString.indexOf('='); | |
styleKey = styleString.substr(0, splitterIndex); | |
styleValueString = styleString.substr(splitterIndex + 1); | |
this.styles[styleKey] = processStyleValue(styleValueString) | |
} | |
} | |
/** | |
* Аплим поле стиля на соотвествующее ему поле объекта и инжектим туда нужный объект | |
* @param objToApply | |
* @param styleKey | |
* @param fieldName | |
*/ | |
public function applyStyle(objToApply:Object, styleKey:String, fieldName:String):void | |
{ | |
if(fieldName in objToApply && styleKey in styles) | |
objToApply[fieldName] = styles[styleKey]; | |
} | |
/** | |
* Процессим стайл вэлью т.к это может быть строка, номер, объект и т.д В данном случае это строка, номер, объект из файловой системы | |
* @param styleValueString | |
* @return | |
*/ | |
private function processStyleValue(styleValueString:String):* | |
{ | |
var isLink:Boolean = styleValueString.charAt(0) == '@'; | |
if (isLink) | |
return vfs.getFile(styleValueString.substr(1)).content; | |
else | |
{ | |
if (styleValueString == "true") | |
return true; | |
else if (styleValueString == "false") | |
return false; | |
return styleValueString; | |
} | |
} | |
/** | |
* Возвращаем значения в поле стилей по ключу например getStyleElement("width")//100 | |
* @param key | |
* @return | |
*/ | |
public function getStyleElement(key:String):* | |
{ | |
if (styles.hasOwnProperty(key)) | |
return styles[key]; | |
else | |
return null; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ui.style | |
{ | |
import core.collections.Iterable; | |
public class StyleSheet | |
{ | |
private var _styles:Iterable = new Iterable(); | |
public function StyleSheet() | |
{ | |
} | |
public function bindStyle(styleKey:String, fieldToBind:String):void | |
{ | |
_styles.addItem(styleKey, fieldToBind); | |
} | |
public function get styles():Iterable | |
{ | |
return _styles; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Вызвается перед <code>applyStyle</code> для добавления или замещение полей в стиль компонента | |
*/ | |
protected function buildStyleSheet():void | |
{ | |
} | |
/** | |
* Добавляет поле стиля в таблицу стилей | |
* @param styleKey | |
* @param fieldToBind | |
*/ | |
public function addStyleSheet(styleKey:String, fieldToBind:String):void | |
{ | |
styleSheet.bindStyle(styleKey, fieldToBind); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment