2014-08-28 09:52:31 +08:00
seajs . config ( {
2014-09-11 10:22:08 +08:00
base : 'http://static.alipayobjects.com/' ,
alias : {
'$' : 'jquery/jquery/1.7.2/jquery' ,
'Backbone' : 'gallery/backbone/1.1.2/backbone.js' ,
'Underscore' : 'gallery/underscore/1.6.0/underscore.js'
}
} ) ;
2014-08-28 09:52:31 +08:00
2014-10-11 16:03:43 +08:00
seajs . use ( [ '$' , 'Underscore' , 'Backbone' , "./detail" ] , function ( $ , _ , Backbone , Detail ) {
2014-08-28 09:52:31 +08:00
Backbone . $ = $ ;
2014-10-11 16:03:43 +08:00
var isInApp = window . webkit && window . webkit . messageHandlers && window . webkit . messageHandlers . list ;
2014-08-28 09:52:31 +08:00
$ ( function ( ) {
//record detail
var DetailView = function ( ) {
var self = this ,
$detailEl = $ ( ".J_recordDetailOverlay" ) ,
$mask ;
//init mask
$mask = $ ( "<div></div>" ) . addClass ( "overlay_mask" ) . hide ( ) ;
$ ( "body" ) . append ( $mask ) ;
//bind events
$ ( document ) . on ( "keyup" , function ( e ) {
if ( e . keyCode == 27 ) { //ESC
self . hideDetail ( ) ;
}
} ) ;
$mask . on ( "click" , function ( e ) {
self . hideDetail ( ) ;
} ) ;
$ ( ".J_escBtn" , $detailEl ) . on ( "click" , function ( e ) {
self . hideDetail ( ) ;
} ) ;
self . showDetail = function ( data ) {
2014-10-11 16:03:43 +08:00
Detail . render ( data , function ( tpl ) {
$ ( ".J_recordDetailOverlayContent" , $detailEl ) . html ( tpl ) ;
$detailEl . show ( ) ;
$mask . show ( ) ;
} ) ;
2014-08-28 09:52:31 +08:00
} ;
self . hideDetail = function ( ) {
$detailEl . hide ( ) ;
$mask . hide ( ) ;
} ;
} ;
var detailPanel = new DetailView ( ) ;
//record list
var RecordModel = Backbone . Model . extend ( { } ) ;
var RecordList = Backbone . Collection . extend ( {
initialize : function ( ) {
var self = this ;
self . on ( "add" , function ( data ) {
new RecordRowView ( {
model : data ,
detailPanel : detailPanel
} ) ;
} ) ;
self . on ( "reset" , function ( ) {
$ ( ".J_tableBody" ) . empty ( ) ;
} ) ;
}
} ) ;
var RecordRowView = Backbone . View . extend ( {
tagName : "tr" ,
className : function ( ) {
return this . model . toJSON ( ) . id % 2 ? "row_odd" : "row_even" ;
} ,
tpl : $ ( "#main_table_row" ) . html ( ) ,
initialize : function ( data ) {
var self = this ;
self . model . on ( "change" , self . render , self ) ;
self . addNewRecord ( ) ;
self . detailPanel = data . detailPanel ;
} ,
events : {
click : function ( e ) {
e . stopPropagation ( ) ;
var self = this ;
var detailData = self . model . toJSON ( ) ;
2014-10-11 16:03:43 +08:00
if ( ! isInApp ) {
self . detailPanel . showDetail ( detailData ) ;
} else {
window . webkit . messageHandlers . list . postMessage ( JSON . stringify ( detailData ) )
}
2014-08-28 09:52:31 +08:00
}
} ,
render : function ( ) {
var self = this ,
data = self . model . toJSON ( ) ;
if ( ! data . statusCode ) {
data . statusCode = "-" ;
} else {
self . $el . addClass ( "record_status_done" )
}
if ( ! data . mime ) {
data . mime = "-" ;
}
var html = _ . template ( self . tpl , data ) ;
self . $el . attr ( "recordId" , data . id ) . empty ( ) . html ( html ) ;
return self ;
} ,
addNewRecord : function ( ) {
$ ( ".J_tableBody" ) . prepend ( this . render ( ) . $el ) ;
}
} ) ;
var recList = new RecordList ( ) ;
//other controllers
$ ( ".J_clearBtn" ) . on ( "click" , function ( e ) {
e . stopPropagation ( ) ;
e . preventDefault ( ) ;
clearLogs ( ) ;
} ) ;
$ ( document ) . on ( "keyup" , function ( e ) {
2014-08-28 11:36:19 +08:00
if ( e . keyCode == 88 && e . ctrlKey ) { // ctrl + x
2014-08-28 09:52:31 +08:00
clearLogs ( ) ;
}
} ) ;
function clearLogs ( ) {
recList . reset ( ) ;
}
2014-09-02 15:59:58 +08:00
//pause btn
var ifPause = false ;
( function ( ) {
var statusBtn = $ ( ".J_statusBtn" ) ;
statusBtn . on ( "click" , function ( e ) {
e . stopPropagation ( ) ;
e . preventDefault ( ) ;
$ ( ".J_statusBtn" ) . removeClass ( "btn_disable" ) ;
$ ( this ) . addClass ( "btn_disable" ) ;
if ( /stop/i . test ( $ ( this ) . html ( ) ) ) {
ifPause = true ;
} else {
ifPause = false ;
}
} ) ;
} ) ( ) ;
2014-08-28 09:52:31 +08:00
//data via web socket
2014-09-02 14:54:45 +08:00
if ( ! WebSocket ) {
alert ( "WebSocket is required. Please use a modern browser." ) ;
return ;
2014-09-01 16:38:43 +08:00
}
2014-10-10 10:55:46 +08:00
var socketPort = $ ( "#socketPort" ) . val ( ) ,
baseUrl = $ ( "#baseUrl" ) . val ( ) ,
dataSocket = new WebSocket ( "ws://" + baseUrl + ":" + socketPort ) ;
2014-09-02 14:54:45 +08:00
dataSocket . onopen = function ( ) { }
2014-09-01 16:38:43 +08:00
2014-08-28 09:52:31 +08:00
dataSocket . onmessage = function ( event ) {
2014-09-02 15:59:58 +08:00
if ( ifPause ) return ;
2014-08-28 09:52:31 +08:00
var data = JSON . parse ( event . data ) ;
2014-08-28 11:53:39 +08:00
var reqDate = new Date ( data . startTime ) ;
2014-10-11 16:03:43 +08:00
data . startTimeStr = reqDate . toLocaleTimeString ( ) + "" ;
2014-08-28 11:53:39 +08:00
2014-08-28 09:52:31 +08:00
var previous ;
if ( previous = recList . get ( data . id ) ) {
previous . set ( data ) ;
} else {
recList . add ( new RecordModel ( data ) , { merge : true } ) ;
}
}
dataSocket . onerror = function ( e ) {
console . log ( e ) ;
2014-10-10 10:55:46 +08:00
alert ( "socket err, please refresh" ) ;
2014-08-28 09:52:31 +08:00
}
} ) ;
2014-08-28 10:40:18 +08:00
//draggable panel
( function ( ) {
2014-08-28 11:36:19 +08:00
var i = 0 ;
2014-08-28 10:40:18 +08:00
var dragging = false ,
pageX = 0 ;
$ ( '#dragbar' ) . mousedown ( function ( e ) {
pageX = e . pageX ;
e . preventDefault ( ) ;
dragging = true ;
var main = $ ( '.J_recordDetailOverlay' ) ;
var ghostbar = $ ( '<div>' , {
id : 'ghostbar' ,
css : {
height : main . outerHeight ( ) ,
top : main . offset ( ) . top ,
left : main . offset ( ) . left
}
} ) . appendTo ( 'body' ) ;
$ ( document ) . mousemove ( function ( e ) {
ghostbar . css ( "left" , e . pageX ) ;
} ) ;
} ) ;
$ ( document ) . mouseup ( function ( e ) {
if ( dragging ) {
var deltaPageX = e . pageX - pageX ;
$ ( '.J_recordDetailOverlay' ) . css ( "left" , pageX + deltaPageX ) ;
if ( $ ( '.J_recordDetailOverlay' ) . width ( ) <= 100 ) {
$ ( '.J_recordDetailOverlay' ) . animate ( {
'right' : $ ( '.J_recordDetailOverlay' ) . width ( )
} , 300 , function ( ) {
$ ( '.J_escBtn' ) . trigger ( 'click' ) ;
} ) ;
}
pageX = e . pageX ;
$ ( '#ghostbar' ) . remove ( ) ;
$ ( document ) . unbind ( 'mousemove' ) ;
dragging = false ;
}
} ) ;
} ) ( ) ;
2014-10-11 16:03:43 +08:00
// Date.prototype.Format = function (fmt) {
// var o = {
// "M+": this.getMonth() + 1, //月份
// "d+": this.getDate(), //日
// "h+": this.getHours(), //小时
// "m+": this.getMinutes(), //分
// "s+": this.getSeconds(), //秒
// "q+": Math.floor((this.getMonth() + 3) / 3), //季度
// "S": this.getMilliseconds() //毫秒
// };
// if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
// for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
// return fmt;
// }
2014-08-28 09:52:31 +08:00
} ) ;