@ -16,98 +16,12 @@ export class DashRowCtrl {
/** @ngInject */
constructor ( private $scope , private $rootScope , private $timeout ) {
this . row . title = this . row . title || 'Row title' ;
if ( this . row . isNew ) {
this . dropView = 1 ;
}
}
onDrop ( panelId , dropTarget ) {
var dragObject ;
// if string it's a panel type
if ( _ . isString ( panelId ) ) {
// setup new panel
dragObject = {
row : this.row ,
panel : {
title : config.new_panel_title ,
type : panelId ,
id : this.dashboard.getNextPanelId ( ) ,
isNew : true ,
} ,
} ;
} else {
dragObject = this . dashboard . getPanelInfoById ( panelId ) ;
}
if ( dropTarget ) {
dropTarget = this . dashboard . getPanelInfoById ( dropTarget . id ) ;
// if draging new panel onto existing panel split it
if ( dragObject . panel . isNew ) {
dragObject . panel . span = dropTarget . panel . span = dropTarget . panel . span / 2 ;
// insert after
dropTarget . row . panels . splice ( dropTarget . index + 1 , 0 , dragObject . panel ) ;
} else if ( this . row === dragObject . row ) {
// just move element
this . row . movePanel ( dragObject . index , dropTarget . index ) ;
} else {
// split drop target space
dragObject . panel . span = dropTarget . panel . span = dropTarget . panel . span / 2 ;
// insert after
dropTarget . row . panels . splice ( dropTarget . index + 1 , 0 , dragObject . panel ) ;
// remove from source row
dragObject . row . removePanel ( dragObject . panel , false ) ;
}
} else {
dragObject . panel . span = 12 - this . row . span ;
this . row . panels . push ( dragObject . panel ) ;
// if not new remove from source row
if ( ! dragObject . panel . isNew ) {
dragObject . row . removePanel ( dragObject . panel , false ) ;
}
}
this . dropView = 0 ;
this . row . panelSpanChanged ( ) ;
this . $timeout ( ( ) = > {
this . $rootScope . $broadcast ( 'render' ) ;
} ) ;
}
setHeight ( height ) {
this . row . height = height ;
this . $scope . $broadcast ( 'render' ) ;
}
moveRow ( direction ) {
var rowsList = this . dashboard . rows ;
var rowIndex = _ . indexOf ( rowsList , this . row ) ;
var newIndex = rowIndex + direction ;
if ( newIndex >= 0 && newIndex <= ( rowsList . length - 1 ) ) {
_ . move ( rowsList , rowIndex , newIndex ) ;
}
}
toggleCollapse() {
this . closeDropView ( ) ;
this . row . collapse = ! this . row . collapse ;
}
onMenuAddPanel() {
this . dropView = 1 ;
}
onMenuRowOptions() {
this . dropView = 2 ;
}
closeDropView() {
this . dropView = 0 ;
}
onMenuDeleteRow() {
this . dashboard . removeRow ( this . row ) ;
}
@ -127,116 +41,8 @@ coreModule.directive('dashRow', function($rootScope) {
link : function ( scope , element ) {
scope . $watchGroup ( [ 'ctrl.row.collapse' , 'ctrl.row.height' ] , function ( ) {
element . toggleClass ( 'dash-row--collapse' , scope . ctrl . row . collapse ) ;
element . find ( '.panels-wrapper' ) . css ( { minHeight : scope.ctrl.row.collapse ? '5px' : scope . ctrl . row . height } ) ;
} ) ;
$rootScope . onAppEvent ( 'panel-fullscreen-enter' , function ( evt , info ) {
var hasPanel = _ . find ( scope . ctrl . row . panels , { id : info.panelId } ) ;
if ( ! hasPanel ) {
element . hide ( ) ;
}
} , scope ) ;
$rootScope . onAppEvent ( 'panel-fullscreen-exit' , function ( ) {
element . show ( ) ;
} , scope ) ;
}
} ;
} ) ;
coreModule . directive ( 'panelWidth' , function ( $rootScope ) {
return function ( scope , element ) {
var fullscreen = false ;
function updateWidth() {
if ( ! fullscreen ) {
element [ 0 ] . style . width = ( ( scope . panel . span / 1.2 ) * 10 ) + '%' ;
}
}
$rootScope . onAppEvent ( 'panel-fullscreen-enter' , function ( evt , info ) {
fullscreen = true ;
if ( scope . panel . id !== info . panelId ) {
element . hide ( ) ;
} else {
element [ 0 ] . style . width = '100%' ;
}
} , scope ) ;
$rootScope . onAppEvent ( 'panel-fullscreen-exit' , function ( evt , info ) {
fullscreen = false ;
if ( scope . panel . id !== info . panelId ) {
element . show ( ) ;
}
updateWidth ( ) ;
} , scope ) ;
scope . $watch ( 'panel.span' , updateWidth ) ;
if ( fullscreen ) {
element . hide ( ) ;
}
} ;
} ) ;
coreModule . directive ( 'panelDropZone' , function ( $timeout ) {
return function ( scope , element ) {
var row = scope . ctrl . row ;
var dashboard = scope . ctrl . dashboard ;
var indrag = false ;
var textEl = element . find ( '.panel-drop-zone-text' ) ;
function showPanel ( span , text ) {
element . find ( '.panel-container' ) . css ( 'height' , row . height ) ;
element [ 0 ] . style . width = ( ( span / 1.2 ) * 10 ) + '%' ;
textEl . text ( text ) ;
element . show ( ) ;
}
function hidePanel() {
element . hide ( ) ;
}
function updateState() {
if ( row . panels . length === 0 && indrag === false ) {
return showPanel ( 12 , 'Empty Space' ) ;
}
var dropZoneSpan = 12 - row . span ;
if ( dropZoneSpan > 0 ) {
if ( indrag ) {
return showPanel ( dropZoneSpan , 'Drop Here' ) ;
} else {
return showPanel ( dropZoneSpan , 'Empty Space' ) ;
}
}
if ( indrag === true ) {
if ( dropZoneSpan > 1 ) {
return showPanel ( dropZoneSpan , 'Drop Here' ) ;
}
}
hidePanel ( ) ;
}
row . events . on ( 'span-changed' , updateState , scope ) ;
scope . $on ( "ANGULAR_DRAG_START" , function ( ) {
indrag = true ;
updateState ( ) ;
} ) ;
scope . $on ( "ANGULAR_DRAG_END" , function ( ) {
indrag = false ;
updateState ( ) ;
} ) ;
updateState ( ) ;
} ;
} ) ;