1  /**
     2   * com.sekati.services.Flink
     3   * @version 2.0.5
     4   * @author jason m horwitz | sekati.com
     5   * Copyright (C) 2007  jason m horwitz, Sekat LLC. All Rights Reserved.
     6   * Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
     7   */
     8  
     9  import com.sekati.core.App;
    10  import flash.external.ExternalInterface;
    11  
    12  /**
    13   * Easily add deeplinking into flash sites
    14   * 
    15   * {@code Usage:
    16   * // Add Flink.js to your swf html page:
    17   * <script language="javascript" src="js/Flink.js"></script>
    18   * 
    19   * // enable swLiveConnect:
    20   * fscommand ("swLiveConnect", "true");
    21   * }
    22   */
    23  class com.sekati.services.Flink {
    24  
    25  	private static var _link:String;
    26  	private static var _isAvailable:Boolean = ExternalInterface.available;
    27  
    28  	/**
    29  	 * get deeplink anchor
    30  	 * @return String
    31  	 * {@code Usage:
    32  	 * var currentDeeplink:String = Flink.getLink();
    33  	 * }
    34  	 */
    35  	public static function getLink():String {
    36  		_link = String( ExternalInterface.call( "getFlink" ) );
    37  		App.log.info( "Flink", "* Flink.getLink = '" + _link + "'" );
    38  		return _link;
    39  	}
    40  
    41  	/**
    42  	 * set deeplink anchor and page title
    43  	 * @param pgTitle (String)
    44  	 * @param anchor (String)
    45  	 * @return String
    46  	 * {@code
    47  	 * Flink.setLink("Section Three","section_three");
    48  	 * }
    49  	 */
    50  	public static function setLink(pgTitle:String, anchor:String):Void {
    51  		if( !App.FLINK_ENABLE ) return;
    52  		ExternalInterface.call( "setFlink", pgTitle, anchor );
    53  		_link = anchor;
    54  		App.log.info( "Flink", "* Flink.setLink = '" + _link + "'" );
    55  	}
    56  
    57  	/**
    58  	 * wrapper to Flink JavaScript lib - returns the entire current url
    59  	 * @return String
    60  	 */
    61  	public static function getRef():String {
    62  		var r:Object = ExternalInterface.call( "getRef" );
    63  		return String( r );
    64  	}	
    65  
    66  	/**
    67  	 * call a javascript function from actionscript
    68  	 * @return Void
    69  	 * {@code
    70  	 *  Flink.jsCall ("helloWorld", "boy", "jason");
    71  	 * }
    72  	 */
    73  	public static function jsCall():Void {
    74  		ExternalInterface.call.apply( null, arguments );
    75  	}
    76  
    77  	/**
    78  	 * allow javascript access to call an actionscript function
    79  	 * @param fnName (String) as function name as string
    80  	 * @param instance (Object) scope of fnName
    81  	 * @param fn (Function) as function name
    82  	 * @return Void
    83  	 * {@code Usage:
    84  	 * Flink.jsAllow ("helloFlash", this, helloFlash);
    85  	 * }
    86  	 */
    87  	public static function jsAllow(fnName:String, instance:Object, fn:Function):Void {
    88  		trace( "*** Flink.setAvailable: '" + fnName + "'" );
    89  		ExternalInterface.addCallback( fnName, instance, fn );
    90  	}
    91  
    92  	private function Flink() {
    93  	}
    94  }