2013-09-05 16:02:48 +02:00
/ * *
2015-03-02 23:55:34 +01:00
* Copyright 2013 , 2015 IBM Corp .
2013-09-05 16:02:48 +02:00
*
* Licensed under the Apache License , Version 2.0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
* * /
2014-08-08 01:01:35 +02:00
RED . sidebar = ( function ( ) {
2013-09-05 16:02:48 +02:00
2013-10-28 21:06:46 +01:00
//$('#sidebar').tabs();
var sidebar _tabs = RED . tabs . create ( {
id : "sidebar-tabs" ,
2014-02-21 10:54:50 +01:00
onchange : function ( tab ) {
2013-10-28 21:06:46 +01:00
$ ( "#sidebar-content" ) . children ( ) . hide ( ) ;
2014-02-21 10:54:50 +01:00
$ ( "#" + tab . id ) . show ( ) ;
2014-01-25 23:31:43 +01:00
} ,
2014-02-21 10:54:50 +01:00
onremove : function ( tab ) {
$ ( "#" + tab . id ) . remove ( ) ;
2013-10-28 21:06:46 +01:00
}
} ) ;
2014-11-11 11:15:02 +01:00
2014-01-25 23:31:43 +01:00
function addTab ( title , content , closeable ) {
2013-10-28 21:06:46 +01:00
$ ( "#sidebar-content" ) . append ( content ) ;
$ ( content ) . hide ( ) ;
2014-01-25 23:31:43 +01:00
sidebar _tabs . addTab ( { id : "tab-" + title , label : title , closeable : closeable } ) ;
2013-10-28 21:06:46 +01:00
//content.style.position = "absolute";
//$('#sidebar').tabs("refresh");
}
2013-09-05 16:02:48 +02:00
2014-08-28 01:35:07 +02:00
function removeTab ( title ) {
sidebar _tabs . removeTab ( "tab-" + title ) ;
}
2013-09-05 16:02:48 +02:00
var sidebarSeparator = { } ;
$ ( "#sidebar-separator" ) . draggable ( {
axis : "x" ,
start : function ( event , ui ) {
2014-05-13 01:01:05 +02:00
sidebarSeparator . closing = false ;
sidebarSeparator . opening = false ;
2013-09-05 16:02:48 +02:00
var winWidth = $ ( window ) . width ( ) ;
sidebarSeparator . start = ui . position . left ;
2013-10-23 01:02:22 +02:00
sidebarSeparator . chartWidth = $ ( "#workspace" ) . width ( ) ;
sidebarSeparator . chartRight = winWidth - $ ( "#workspace" ) . width ( ) - $ ( "#workspace" ) . offset ( ) . left - 2 ;
2014-05-13 01:01:05 +02:00
2014-08-20 22:58:54 +02:00
if ( ! RED . menu . isSelected ( "btn-sidebar" ) ) {
2014-05-13 01:01:05 +02:00
sidebarSeparator . opening = true ;
var newChartRight = 15 ;
$ ( "#sidebar" ) . addClass ( "closing" ) ;
$ ( "#workspace" ) . css ( "right" , newChartRight ) ;
$ ( "#chart-zoom-controls" ) . css ( "right" , newChartRight + 20 ) ;
$ ( "#sidebar" ) . width ( 0 ) ;
2014-08-20 22:58:54 +02:00
RED . menu . setSelected ( "btn-sidebar" , true ) ;
2014-05-13 01:01:05 +02:00
RED . view . resize ( ) ;
2015-03-02 23:55:34 +01:00
eventHandler . emit ( "resize" ) ;
2014-05-13 01:01:05 +02:00
}
sidebarSeparator . width = $ ( "#sidebar" ) . width ( ) ;
2013-09-05 16:02:48 +02:00
} ,
drag : function ( event , ui ) {
var d = ui . position . left - sidebarSeparator . start ;
var newSidebarWidth = sidebarSeparator . width - d ;
2014-05-13 01:01:05 +02:00
if ( sidebarSeparator . opening ) {
newSidebarWidth -= 13 ;
2013-09-05 16:02:48 +02:00
}
2014-05-13 01:01:05 +02:00
if ( newSidebarWidth > 150 ) {
if ( sidebarSeparator . chartWidth + d < 200 ) {
ui . position . left = 200 + sidebarSeparator . start - sidebarSeparator . chartWidth ;
d = ui . position . left - sidebarSeparator . start ;
newSidebarWidth = sidebarSeparator . width - d ;
}
2013-09-05 16:02:48 +02:00
}
2014-05-13 01:01:05 +02:00
if ( newSidebarWidth < 150 ) {
if ( ! sidebarSeparator . closing ) {
$ ( "#sidebar" ) . addClass ( "closing" ) ;
sidebarSeparator . closing = true ;
}
if ( ! sidebarSeparator . opening ) {
newSidebarWidth = 150 ;
ui . position . left = sidebarSeparator . width - ( 150 - sidebarSeparator . start ) ;
d = ui . position . left - sidebarSeparator . start ;
}
} else if ( newSidebarWidth > 150 && ( sidebarSeparator . closing || sidebarSeparator . opening ) ) {
2013-09-05 16:02:48 +02:00
sidebarSeparator . closing = false ;
$ ( "#sidebar" ) . removeClass ( "closing" ) ;
}
2014-05-13 01:01:05 +02:00
var newChartRight = sidebarSeparator . chartRight - d ;
$ ( "#workspace" ) . css ( "right" , newChartRight ) ;
$ ( "#chart-zoom-controls" ) . css ( "right" , newChartRight + 20 ) ;
$ ( "#sidebar" ) . width ( newSidebarWidth ) ;
2013-10-28 21:06:46 +01:00
sidebar _tabs . resize ( ) ;
2013-10-23 11:44:08 +02:00
RED . view . resize ( ) ;
2015-03-02 23:55:34 +01:00
eventHandler . emit ( "resize" ) ;
2013-09-05 16:02:48 +02:00
} ,
stop : function ( event , ui ) {
2014-05-13 01:01:05 +02:00
RED . view . resize ( ) ;
2013-09-05 16:02:48 +02:00
if ( sidebarSeparator . closing ) {
$ ( "#sidebar" ) . removeClass ( "closing" ) ;
2014-08-20 22:58:54 +02:00
RED . menu . setSelected ( "btn-sidebar" , false ) ;
2014-05-13 01:01:05 +02:00
if ( $ ( "#sidebar" ) . width ( ) < 180 ) {
$ ( "#sidebar" ) . width ( 180 ) ;
$ ( "#workspace" ) . css ( "right" , 208 ) ;
$ ( "#chart-zoom-controls" ) . css ( "right" , 228 ) ;
}
2013-09-05 16:02:48 +02:00
}
2014-05-13 01:01:05 +02:00
$ ( "#sidebar-separator" ) . css ( "left" , "auto" ) ;
$ ( "#sidebar-separator" ) . css ( "right" , ( $ ( "#sidebar" ) . width ( ) + 13 ) + "px" ) ;
2015-03-02 23:55:34 +01:00
eventHandler . emit ( "resize" ) ;
2013-09-05 16:02:48 +02:00
}
} ) ;
2014-08-20 22:58:54 +02:00
function toggleSidebar ( state ) {
if ( ! state ) {
2013-09-05 16:02:48 +02:00
$ ( "#main-container" ) . addClass ( "sidebar-closed" ) ;
} else {
$ ( "#main-container" ) . removeClass ( "sidebar-closed" ) ;
2014-10-30 15:19:44 +01:00
sidebar _tabs . resize ( ) ;
2013-09-05 16:02:48 +02:00
}
2015-03-02 23:55:34 +01:00
eventHandler . emit ( "resize" ) ;
2013-09-05 16:02:48 +02:00
}
2014-01-25 23:31:43 +01:00
function showSidebar ( id ) {
2014-11-11 11:15:02 +01:00
if ( id ) {
sidebar _tabs . activateTab ( "tab-" + id ) ;
}
2014-01-25 23:31:43 +01:00
}
function containsTab ( id ) {
return sidebar _tabs . contains ( "tab-" + id ) ;
}
2013-09-05 16:02:48 +02:00
2014-11-11 11:15:02 +01:00
function init ( ) {
2014-08-20 22:58:54 +02:00
RED . keyboard . add ( /* SPACE */ 32 , { ctrl : true } , function ( ) { RED . menu . setSelected ( "btn-sidebar" , ! RED . menu . isSelected ( "btn-sidebar" ) ) ; d3 . event . preventDefault ( ) ; } ) ;
2014-11-11 11:15:02 +01:00
showSidebar ( ) ;
RED . sidebar . info . show ( ) ;
}
2014-08-20 22:58:54 +02:00
2015-03-02 23:55:34 +01:00
var eventHandler = ( function ( ) {
var handlers = { } ;
return {
on : function ( evt , func ) {
handlers [ evt ] = handlers [ evt ] || [ ] ;
handlers [ evt ] . push ( func ) ;
} ,
emit : function ( evt , arg ) {
if ( handlers [ evt ] ) {
for ( var i = 0 ; i < handlers [ evt ] . length ; i ++ ) {
handlers [ evt ] [ i ] ( arg ) ;
}
}
}
}
} ) ( ) ;
2013-09-05 16:02:48 +02:00
return {
2014-11-11 11:15:02 +01:00
init : init ,
2014-01-25 23:31:43 +01:00
addTab : addTab ,
2014-08-28 01:35:07 +02:00
removeTab : removeTab ,
2014-01-25 23:31:43 +01:00
show : showSidebar ,
2014-08-20 22:58:54 +02:00
containsTab : containsTab ,
2015-03-02 23:55:34 +01:00
toggleSidebar : toggleSidebar ,
on : eventHandler . on
2013-09-05 16:02:48 +02:00
}
2014-08-08 01:01:35 +02:00
} ) ( ) ;