public
Description: Github flash badge
Homepage: http://spinach.andascarygoat.com/tags/badjo
Clone URL: git://github.com/zmack/badjo.git
badjo / src / GithubBadge.as
100644 102 lines (82 sloc) 2.532 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package {
  import flash.display.Sprite;
  import flash.display.DisplayObject;
  import flash.display.LoaderInfo;
  import skins.GithubBadgeSkin;
  import dataexchange.*;
  import com.adobe.serialization.json.JSON;
 
  import flash.external.ExternalInterface;
 
  /*
  Data looks pretty much like this:
 
  {"user":
    {  "name": "Andrei Bocan",
      "repositories":
      [
        {"name": "badjo", "url": "http://github.com/zmack/badjo", "description": "Github flash badge ", "homepage": ""},
        {"name": "mephisto", "url": "http://github.com/zmack/mephisto", "description": "A mirror of the mephisto code-base", "homepage": "http://mephistoblog.com/"}
      ],
      "blog": "http://spinach.andascarygoat.com",
      "login": "zmack",
      "email": "zmaxor@gmail.com",
      "location": "Bucharest, Romania"
    }
  }
  */
 
  public class GithubBadge extends Sprite {
    private var _gw:Gateway;
    private var _pl:ProjectList;
    private var _user:String;
 
    public function GithubBadge() {
      var user:String;
      addExternalInterface();
 
      try {
        user = getParams().gitUser;
      } catch (e:Error) {
        user = 'evilchelu';
      }
 
      _gw = new Gateway();
      
      this.requestData(user);
    }
 
    private function addExternalInterface():void {
      if ( ExternalInterface.available ) {
        ExternalInterface.addCallback("requestData",requestData);
      }
    }
 
    private function getParams():Object {
      return LoaderInfo(this.loaderInfo).parameters;
    }
 
    private function onDataLoaded(e:GatewayEvent):void {
      trace(e);
    }
 
    private function displayProjectList(user:Object):void {
      if ( _pl != null ) _pl.parent.removeChild(_pl);
      _pl = new ProjectList()
 
      _pl.setHeader({image: SpriteWrapper(new GithubBadgeSkin.DefaultAvatar()), text: user.name });
      user.repositories.forEach( function(repo:Object, index:uint, arr:Array):void {
        _pl.addButton({image: SpriteWrapper(new GithubBadgeSkin.PublicProject()), text: repo.name });
      });
 
      addChild(_pl);
    }
 
    private function displayError():void {
      _pl.addChild(SpriteWrapper(new GithubBadgeSkin.OctocatImage()));
    }
 
    private function requestData(user:String):void {
      _user = user;
      _gw.getUserInfo(user);
      _gw.addEventListener(GatewayEvent.DATA_RECEIVED, dataLoaded);
    }
 
    private function dataLoaded(e:GatewayEvent):void {
      if ( e.succeeded ) {
        displayProjectList(JSON.decode(e.data).user);
      } else {
        displayError();
      }
      trace(e.data);
    }
 
    private function SpriteWrapper(d:DisplayObject):Sprite {
      var s:Sprite = new Sprite();
      s.addChild(d);
 
      return s;
    }
  }
}