Adobe Air App: Drupal Jobs

Jan 22nd 2010
Please upgrade your Flash Player
This is the content that would be shown if the user does not have Flash Player 6.0.65 or higher installed.

Drupal Jobs is a simple Air app that I did that retrieves the latest drupal job listings from drupal.org. It then displays them in a list, where you can click the title and go directly to the relative web link of that particular job. Drupal Jobs uses a simple RSS feed url as the data source, so it only retrieves the default RSS listing.

I would like to add a custom itemRenderer to have a button for the link and also have that button display the job listing instead the Air app instead of opening up in the browser.

I’ve also included the mxml file from Flash Builder so you can use to your hearts content, even though it would be great if you would give me some credit if you do use it. I know it’s nothing spectacular, but it's FREE and I believe a great example of a simple RSS powered app.

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
					   xmlns:s="library://ns.adobe.com/flex/spark" 
					   xmlns:mx="library://ns.adobe.com/flex/halo" applicationComplete="init()"
					   width="300" height="464" showStatusBar="false">
	
	<fx:Style source="styles.css"/>
	
	<fx:Script>
		<![CDATA[
			import flash.events.Event;
			
			import mx.collections.ArrayCollection;
			import mx.rpc.events.FaultEvent;
			import mx.rpc.events.ResultEvent;
			import flash.net.navigateToURL;
			import mx.controls.Alert;
			import mx.events.CloseEvent;
			
			[Bindable]
			public var jobs:ArrayCollection = new ArrayCollection();
			
			protected function init():void {
				stage.nativeWindow.x = (Capabilities.screenResolutionX - stage.nativeWindow.width) / 2;
				stage.nativeWindow.y = (Capabilities.screenResolutionY - stage.nativeWindow.height) / 2;
				service.send();
				trace("started service");
				refresh.visible = false;
			}

			public function serviceResult(event:ResultEvent):void {
				trace("trying to get results");
				jobs = event.result.rss.channel.item as ArrayCollection;
				trace(jobs);
				refresh.visible = true;
			}
			
			public function serviceFault(event:FaultEvent):void {
				Alert.show('Sorry, there was a problem connecting to the drupal jobs site.', 'Connection Error', 4, this);
				refresh.visible = true;
			}

			public function serviceActive(event:Event):void {
				trace("active service, getting Jobs");
			}
			
			public function getNewJobs():void {
				service.send();
			}

		]]>
	</fx:Script>
	<fx:Declarations>
		<s:HTTPService url="http://groups.drupal.org/jobs/feed/feedSubscribeHandler.writeContent();"
					   id="service"
					   activate="serviceActive(event)"
					   result="serviceResult(event)"
					   fault="serviceFault(event)"
					   showBusyCursor="true" />
	</fx:Declarations>
	
	<mx:List styleName="list" id="myList" dataProvider="{jobs}" verticalScrollPolicy="auto" horizontalScrollPolicy="off"
			 borderVisible="false" right="0" left="0" top="43" bottom="29" paddingBottom="0" paddingTop="0" paddingLeft="0">
		<mx:itemRenderer>
			<fx:Component>
				<mx:VBox horizontalScrollPolicy="off" verticalScrollPolicy="off" paddingBottom="0" paddingTop="0">
					<fx:Script>
						<![CDATA[
							import flash.net.navigateToURL;

							public function getLink():void
							{
								trace(data.link);
								var urlRequest:URLRequest = new URLRequest(data.link);
								navigateToURL(urlRequest);
							}

						]]>
					</fx:Script>
					<s:Label styleName="titleHeader" text="{data.title}" click="getLink()" buttonMode="true" paddingLeft="15" paddingTop="10" fontSize="15" fontWeight="bold"/>
					<s:Label text="{data.pubDate}" paddingLeft="15"/>
					<mx:HRule width="100%" height="1" strokeColor="#BBBBBB" />
				</mx:VBox>
			</fx:Component>
		</mx:itemRenderer>
	</mx:List>
	<s:Border backgroundColor="#000000" height="31" left="0" bottom="0" right="0">
	<s:Button label="Refresh" id="refresh" click="getNewJobs();" width="70" height="21" left="8" bottom="6"/>
	</s:Border>
	<s:Label x="10" y="10" text="Drupal Jobs" fontSize="24"/>
</s:WindowedApplication>

And here is the Style.css file

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/halo";

s|Label {
	roll-over-color: red;
	mouseOver: red;
	selection-color: #C1FFC5;
}

Please let me know what you think, by following me on twitter, @gizmoko

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You may post PHP code. You should include <?php ?> tags.
  • Syntax highlight code surrounded by the {syntaxhighlighter OPTIONS}...{/syntaxhighlighter} tags.
  • Twitter-style @usersnames are linked to their Twitter account pages.
  • Twitter-style #hashtags are linked to search.twitter.com.

More information about formatting options