2010-11-26 15:07:24 +00:00
/ * * *
Pandora API
* * * /
var app = new Ox . App ( {
apiURL : '/api/' ,
2011-01-22 19:29:56 +00:00
init : 'init' ,
2010-11-26 15:07:24 +00:00
} ) . launch ( function ( data ) {
app . config = data . config ;
app . user = data . user ;
if ( app . user . group == 'guest' ) {
app . user = data . config . user ;
$ . browser . safari && Ox . theme ( 'modern' ) ;
}
2011-01-26 12:12:51 +00:00
app . config . default _info = '<div class="OxSelectable"><h2>Overview</h2>use this api in the browser with Ox.app or use <a href="http://code.0x2620.org/pandora_client">pandora_client</a> to use it in python</div>' ;
2010-11-26 15:07:24 +00:00
app . $body = $ ( 'body' ) ;
app . $document = $ ( document ) ;
app . $window = $ ( window ) ;
//app.$body.html('');
app . $ui = { } ;
app . $ui . actionList = constructList ( ) ;
2011-01-26 12:12:51 +00:00
app . $ui . actionInfo = Ox . Container ( ) . css ( { padding : '16px' } ) . html ( app . config . default _info ) ;
2010-11-26 15:07:24 +00:00
2011-01-26 13:25:26 +00:00
app . api . api ( { docs : true , code : true } , function ( results ) {
2011-01-14 10:55:05 +00:00
app . actions = results . data . actions ;
2010-12-24 13:07:52 +00:00
if ( document . location . hash ) {
app . $ui . actionList . triggerEvent ( 'select' , { ids : document . location . hash . substring ( 1 ) . split ( ',' ) } ) ;
}
} ) ;
2010-11-26 15:07:24 +00:00
2011-01-26 12:12:51 +00:00
var $left = new Ox . SplitPanel ( {
elements : [
{
2011-01-26 12:28:37 +00:00
element : new Ox . Element ( ) . append ( new Ox . Element ( )
. html ( app . config . site . name + ' API' ) . css ( {
'padding' : '4px' ,
} ) ) . css ( {
2011-01-26 12:12:51 +00:00
'background-color' : '#ddd' ,
'font-weight' : 'bold' ,
} ) ,
size : 24
} ,
{
element : app . $ui . actionList
}
] ,
orientation : 'vertical'
} ) ;
2010-11-26 15:07:24 +00:00
var $main = new Ox . SplitPanel ( {
elements : [
{
2011-01-26 12:12:51 +00:00
element : $left ,
2010-11-26 15:07:24 +00:00
size : 160
} ,
{
element : app . $ui . actionInfo ,
}
] ,
orientation : 'horizontal'
} ) ;
$main . appendTo ( app . $body ) ;
} ) ;
function constructList ( ) {
return new Ox . TextList ( {
columns : [
{
align : "left" ,
id : "name" ,
operator : "+" ,
title : "Name" ,
unique : true ,
visible : true ,
width : 140
} ,
] ,
columnsMovable : false ,
columnsRemovable : false ,
id : 'actionList' ,
2011-02-25 10:23:46 +00:00
items : function ( data , callback ) {
2011-01-22 19:09:02 +00:00
function _sort ( a , b ) {
if ( a . name > b . name )
return 1 ;
else if ( a . name == b . name )
return 0 ;
return - 1 ;
}
2010-11-26 15:07:24 +00:00
if ( ! data . keys ) {
2010-12-24 10:14:13 +00:00
app . api . api ( function ( results ) {
2010-11-26 15:07:24 +00:00
var items = [ ] ;
2011-01-13 19:40:50 +00:00
$ . each ( results . data . actions , function ( i , k ) { items . push ( { 'name' : i } ) } ) ;
2011-01-22 19:09:02 +00:00
items . sort ( _sort ) ;
2010-11-26 15:07:24 +00:00
var result = { 'data' : { 'items' : items . length } } ;
callback ( result ) ;
} ) ;
} else {
2010-12-24 10:14:13 +00:00
app . api . api ( function ( results ) {
2010-11-26 15:07:24 +00:00
var items = [ ] ;
2011-01-13 19:40:50 +00:00
$ . each ( results . data . actions , function ( i , k ) { items . push ( { 'name' : i } ) } ) ;
2011-01-22 19:09:02 +00:00
items . sort ( _sort ) ;
2010-11-26 15:07:24 +00:00
var result = { 'data' : { 'items' : items } } ;
callback ( result ) ;
} ) ;
}
} ,
2011-01-26 12:12:51 +00:00
scrollbarVisible : true ,
2010-11-26 15:07:24 +00:00
sort : [
{
key : "name" ,
operator : "+"
}
]
} ) . bindEvent ( {
select : function ( event , data ) {
2010-12-25 10:14:38 +00:00
var info = $ ( '<div>' ) . addClass ( 'OxSelectable' ) ,
2010-12-24 10:31:20 +00:00
hash = '#' ;
2011-01-26 12:12:51 +00:00
if ( data . ids . length )
$ . each ( data . ids , function ( v , k ) {
2010-11-26 15:07:24 +00:00
info . append ( $ ( "<h2>" ) . html ( k ) ) ;
2011-01-26 13:58:13 +00:00
var $doc = $ ( '<pre>' )
. html ( app . actions [ k ] . doc . replace ( '/\n/<br>\n/g' ) )
. appendTo ( info ) ;
var $code = $ ( '<code class=" python">' )
2011-01-26 14:16:40 +00:00
. html ( app . actions [ k ] . code [ 1 ] . replace ( '/\n/<br>\n/g' ) )
2011-01-26 13:58:13 +00:00
. hide ( ) ;
2011-01-26 13:25:26 +00:00
var $button = new Ox . Button ( {
title : [
{ id : "one" , title : "expand" } ,
{ id : "two" , title : "collapse" } ,
] ,
type : "image"
} )
. addClass ( "margin" )
. click ( function ( ) { $code . toggle ( ) } )
. appendTo ( info )
2011-01-26 14:16:40 +00:00
var f = app . actions [ k ] . code [ 0 ] ;
$ ( '<span>' ) . html ( ' View Source (' + f + ')' ) . appendTo ( info )
2011-01-26 13:58:13 +00:00
$ ( '<pre>' ) . append ( $code ) . appendTo ( info )
hljs . highlightBlock ( $code [ 0 ] , ' ' ) ;
2010-12-24 10:31:20 +00:00
hash += k + ','
2011-01-26 12:12:51 +00:00
} ) ;
else
info . html ( app . config . default _info ) ;
2010-12-24 10:31:20 +00:00
document . location . hash = hash . substring ( 0 , hash . length - 1 ) ;
2010-11-26 15:07:24 +00:00
app . $ui . actionInfo . html ( info ) ;
}
} ) ;
}