package com.oxylusflash.book { import caurina.transitions.Tweener; import com.oxylusflash.utils.StringUtil; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.events.ProgressEvent; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFieldAutoSize; public class SocialEntry extends Sprite { private static const TXT_LEFT_MARGIN:Number = 5; public var labelTxt:TextField; public var labelOverTxt:TextField; private var iconLoader:Loader = new Loader; private var hitZone:Sprite = new Sprite; private var link:URLRequest; private var linkTarget:String; /** * Social links entry. */ public function SocialEntry() { this.buttonMode = true; this.mouseChildren = false; labelTxt.autoSize = labelOverTxt.autoSize = TextFieldAutoSize.LEFT; labelTxt.styleSheet = labelOverTxt.styleSheet = Global.styleSheet; labelTxt.condenseWhite = labelOverTxt.condenseWhite = true; labelTxt.multiline = labelOverTxt.multiline = false; labelTxt.wordWrap = labelOverTxt.wordWrap = false; labelTxt.y = labelOverTxt.y = Math.round((Global.xmlTellAFriend.iconHeight - labelTxt.height) * 0.5); labelTxt.x = labelOverTxt.x = Global.xmlTellAFriend.iconWidth + TXT_LEFT_MARGIN; labelOverTxt.alpha = 0; iconLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, iconLoader_ioErrorHandler, false, 0, true); iconLoader.contentLoaderInfo.addEventListener(Event.INIT, iconLoader_initHandler, false, 0, true); } /** * init social link entry. * @param xmlData XML data. * @param w Width in pixels. */ public function init(xmlData:XML, w:Number):void { labelTxt.htmlText = xmlData.text(); labelOverTxt.htmlText = String(Global.xmlTranslate.str52).replace(/%SOCIAL_LINK_TEXT%/g, xmlData.text()); iconLoader.load(new URLRequest(xmlData.@icon)); labelTxt.width = w - labelTxt.x; labelOverTxt.width = labelTxt.width; hitZone.graphics.beginFill(0, 0); hitZone.graphics.drawRect(0, 0, w, Global.xmlTellAFriend.iconWidth); this.addChildAt(hitZone, 0); this.hitArea = hitZone; if (!StringUtil.isBlank(xmlData.@link)) { link = new URLRequest(xmlData.@link); this.addEventListener(MouseEvent.CLICK, eventHandler, false, 0, true); this.addEventListener(MouseEvent.ROLL_OVER, eventHandler, false, 0, true); this.addEventListener(MouseEvent.ROLL_OUT, eventHandler, false, 0, true); } } /** * Mouse events handler. * @param e */ private function eventHandler(e:MouseEvent):void { switch(e.type) { case MouseEvent.CLICK: navigateToURL(link, linkTarget); break; case MouseEvent.ROLL_OVER: Tweener.addTween(labelOverTxt, { alpha: 1, base: Global.baseTween } ); break; case MouseEvent.ROLL_OUT: Tweener.addTween(labelOverTxt, { alpha: 0, base: Global.baseTween } ); break; } } /** * Icon load events handlers. * @param e */ private function iconLoader_ioErrorHandler(e:IOErrorEvent):void { trace("[ERROR] Social icon load I/O error: " + e.text); iconLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, iconLoader_ioErrorHandler); iconLoader.contentLoaderInfo.removeEventListener(Event.INIT, iconLoader_initHandler); } private function iconLoader_initHandler(e:Event):void { iconLoader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, iconLoader_ioErrorHandler); iconLoader.contentLoaderInfo.removeEventListener(Event.INIT, iconLoader_initHandler); iconLoader.alpha = 0; this.addChild(iconLoader); Tweener.addTween(iconLoader, { alpha: 1, base: Global.baseTween } ); } /** * Overrides. */ override public function get height():Number { return Global.xmlTellAFriend.iconHeight; } override public function set height(value:Number):void { } override public function get width():Number { return labelTxt.x + labelTxt.width; } override public function set width(value:Number):void { } } }