@ -6,16 +6,17 @@ Ext.define('Rambox.view.main.MainController', {
, alias : 'controller.main'
, showSimpleModal : function ( record ) {
, showSimpleModal : function ( record , edit ) {
var me = this ;
var win = Ext . create ( 'Ext.window.Window' , {
title : 'Add '+ record . get ( 'name' )
title : ( edit ? 'Edit ' : 'Add ') + record . get ( 'name' )
, modal : true
, width : 400
, resizable : false
, draggable : false
, bodyPadding : 20
, icon : 'resources/icons/' + record . get ( 'logo' )
, items : [
{
xtype : 'form'
@ -25,6 +26,14 @@ Ext.define('Rambox.view.main.MainController', {
, fieldLabel : 'Name'
, value : record . get ( 'name' )
, name : 'serviceName'
, allowBlank : true
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
}
, {
xtype : 'fieldset'
@ -34,7 +43,7 @@ Ext.define('Rambox.view.main.MainController', {
{
xtype : 'checkbox'
, boxLabel : 'Separate'
, checked : false
, checked : edit ? ( record . get ( 'align' ) === 'right' ? true : false ) : false
, name : 'align'
, uncheckedValue : 'left'
, inputValue : 'right'
@ -43,7 +52,7 @@ Ext.define('Rambox.view.main.MainController', {
xtype : 'checkbox'
, boxLabel : 'Show notifications'
, name : 'notifications'
, checked : true
, checked : edit ? record . get ( 'notifications' ) : true
, uncheckedValue : false
, inputValue : true
}
@ -51,7 +60,7 @@ Ext.define('Rambox.view.main.MainController', {
xtype : 'checkbox'
, boxLabel : 'Mute all sounds'
, name : 'muted'
, checked : false
, checked : edit ? record . get ( 'muted' ) : false
, uncheckedValue : false
, inputValue : true
}
@ -70,20 +79,31 @@ Ext.define('Rambox.view.main.MainController', {
}
, '->'
, {
text : 'Add service'
text : edit ? 'Save' : 'Add service'
, itemId : 'submit'
, handler : function ( ) {
var formValues = win . down ( 'form' ) . getValues ( ) ;
var service = Ext . getStore ( 'Services' ) . add ( {
if ( edit ) {
record . set ( {
name : formValues . serviceName
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) ;
Ext . getCmp ( 'tab_' + record . get ( 'id' ) ) . setTitle ( formValues . serviceName ) ;
} else {
var service = Ext . create ( 'Rambox.model.Service' , {
type : record . get ( 'id' )
, name : formValues . serviceName
, url : record . get ( 'url' )
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) [ 0 ] ;
} ) ;
service . save ( ) ;
me . getView ( ) . add ( {
var tabData = {
xtype : 'webview'
, id : 'tab_' + service . get ( 'id' )
, title : service . get ( 'name' )
@ -93,13 +113,27 @@ Ext.define('Rambox.view.main.MainController', {
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) . show ( ) ;
, tabConfig : {
service : service
}
} ;
if ( formValues . align === 'left' ) {
var tbfill = me . getView ( ) . getTabBar ( ) . down ( 'tbfill' ) ;
me . getView ( ) . insert ( me . getView ( ) . getTabBar ( ) . items . indexOf ( tbfill ) , tabData ) . show ( ) ;
} else {
me . getView ( ) . add ( tabData ) . show ( ) ;
}
}
win . close ( ) ;
}
}
]
} ) . show ( ) ;
// Make focus to the name field
win . down ( 'textfield[name="serviceName"]' ) . focus ( true , 100 ) ;
}
, showCustomModal : function ( record ) {
@ -112,6 +146,7 @@ Ext.define('Rambox.view.main.MainController', {
, resizable : false
, draggable : false
, bodyPadding : 20
, icon : 'resources/icons/' + record . get ( 'logo' )
, items : [
{
xtype : 'form'
@ -121,6 +156,14 @@ Ext.define('Rambox.view.main.MainController', {
, fieldLabel : 'Name'
, value : record . get ( 'name' )
, name : 'serviceName'
, allowBlank : true
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
}
, {
xtype : 'container'
@ -129,6 +172,14 @@ Ext.define('Rambox.view.main.MainController', {
xtype : 'textfield'
, fieldLabel : record . get ( 'name' ) + ' team'
, name : 'url'
, allowBlank : false
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
} , {
xtype : 'displayfield'
, value : record . get ( 'url' ) . split ( '___' ) [ 1 ] . slice ( 0 , - 1 ) // Get the URL and remove the final slash (/)
@ -180,19 +231,21 @@ Ext.define('Rambox.view.main.MainController', {
, '->'
, {
text : 'Add service'
, itemId : 'submit'
, handler : function ( ) {
var formValues = win . down ( 'form' ) . getValues ( ) ;
var service = Ext . getStore ( 'Services' ) . add ( {
var service = Ext . create ( 'Rambox.model.Service' , {
type : record . get ( 'id' )
, name : formValues . serviceName
, url : record . get ( 'url' ) . replace ( '___' , formValues . url )
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) [ 0 ] ;
} ) ;
service . save ( ) ;
me . getView ( ) . add ( {
var tabData = {
xtype : 'webview'
, id : 'tab_' + service . get ( 'id' )
, title : service . get ( 'name' )
@ -202,20 +255,33 @@ Ext.define('Rambox.view.main.MainController', {
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) . show ( ) ;
, tabConfig : {
service : service
}
} ;
if ( formValues . align === 'left' ) {
var tbfill = me . getView ( ) . getTabBar ( ) . down ( 'tbfill' ) ;
me . getView ( ) . insert ( me . getView ( ) . getTabBar ( ) . items . indexOf ( tbfill ) , tabData ) . show ( ) ;
} else {
me . getView ( ) . add ( tabData ) . show ( ) ;
}
win . close ( ) ;
}
}
]
} ) . show ( ) ;
// Make focus to the name field
win . down ( 'textfield[name="serviceName"]' ) . focus ( true , 100 ) ;
}
, onNewServiceSelect : function ( view , record , item , index , e ) {
if ( record . get ( 'url' ) . indexOf ( '___' ) >= 0 ) {
this . showCustomModal ( record ) ;
} else {
this . showSimpleModal ( record ) ;
this . showSimpleModal ( record , false ) ;
}
}
@ -223,11 +289,16 @@ Ext.define('Rambox.view.main.MainController', {
Ext . Msg . confirm ( 'Please confirm...' , 'Are you sure you want to remove ' + rec . get ( 'name' ) + '?' , function ( btnId ) {
if ( btnId === 'yes' ) {
gridView . getStore ( ) . remove ( rec ) ;
//webview.webContents.session.clearCache();
Ext . getCmp ( 'tab_' + rec . get ( 'id' ) ) . close ( ) ;
}
} ) ;
}
, configureService : function ( gridView , rowIndex , colIndex , col , e , rec , rowEl ) {
this . showSimpleModal ( rec , true ) ;
}
, doFilter : function ( cg , newValue , oldValue ) {
var values = Ext . cq1 ( 'checkboxgroup' ) . getValue ( ) ;
Ext . getStore ( 'ServicesList' ) . getFilters ( ) . replaceAll ( {
@ -236,4 +307,151 @@ Ext.define('Rambox.view.main.MainController', {
}
} ) ;
}
, addCustomService : function ( event , toolEl , owner , tool ) {
var me = this ;
var win = Ext . create ( 'Ext.window.Window' , {
title : 'Add Custom Service'
, modal : true
, width : 400
, resizable : false
, draggable : false
, bodyPadding : 20
, items : [
{
xtype : 'form'
, items : [
{
xtype : 'textfield'
, fieldLabel : 'Name'
, name : 'serviceName'
, allowBlank : true
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
}
, {
xtype : 'textfield'
, fieldLabel : 'URL'
, emptyText : 'http://service.url.com'
, name : 'url'
, vtype : 'url'
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
}
, {
xtype : 'textfield'
, fieldLabel : 'Logo'
, emptyText : 'http://image.url.com/image.png'
, name : 'logo'
, vtype : 'url'
, listeners : {
specialkey : function ( field , e ) {
if ( e . getKey ( ) == e . ENTER && field . up ( 'form' ) . isValid ( ) ) {
field . up ( 'window' ) . down ( '#submit' ) . handler ( ) ;
}
}
}
}
, {
xtype : 'fieldset'
, title : 'Options'
, margin : '10 0 0 0'
, items : [
{
xtype : 'checkbox'
, boxLabel : 'Separate'
, checked : false
, name : 'align'
, uncheckedValue : 'left'
, inputValue : 'right'
}
, {
xtype : 'checkbox'
, boxLabel : 'Show notifications'
, name : 'notifications'
, checked : true
, uncheckedValue : false
, inputValue : true
}
, {
xtype : 'checkbox'
, boxLabel : 'Mute all sounds'
, name : 'muted'
, checked : false
, uncheckedValue : false
, inputValue : true
}
]
}
]
}
]
, buttons : [
{
text : 'Cancel'
, ui : 'decline'
, handler : function ( ) {
win . close ( ) ;
}
}
, '->'
, {
text : 'Add service'
, itemId : 'submit'
, handler : function ( ) {
var formValues = win . down ( 'form' ) . getValues ( ) ;
var service = Ext . create ( 'Rambox.model.Service' , {
type : 'custom'
, logo : formValues . logo
, name : formValues . serviceName
, url : formValues . url
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
} ) ;
service . save ( ) ;
var tabData = {
xtype : 'webview'
, id : 'tab_' + service . get ( 'id' )
, title : service . get ( 'name' )
, icon : formValues . logo
, src : service . get ( 'url' )
, type : service . get ( 'type' )
, align : formValues . align
, notifications : formValues . notifications
, muted : formValues . muted
, tabConfig : {
service : service
}
} ;
if ( formValues . align === 'left' ) {
var tbfill = me . getView ( ) . getTabBar ( ) . down ( 'tbfill' ) ;
me . getView ( ) . insert ( me . getView ( ) . getTabBar ( ) . items . indexOf ( tbfill ) , tabData ) . show ( ) ;
} else {
me . getView ( ) . add ( tabData ) . show ( ) ;
}
win . close ( ) ;
}
}
]
} ) . show ( ) ;
// Make focus to the name field
win . down ( 'textfield[name="serviceName"]' ) . focus ( true , 100 ) ;
}
} ) ;