Allow toolbar construction in js

Base of allowing a full toolbar construction in js without altering the
html template, and use it to construct our toolbar as example.

still need some work to be totally decoupled.
pull/37/head
Matthias BUSSONNIER 14 years ago
parent b43f24da5f
commit 2f28e4c4a1

@ -60,7 +60,7 @@ span#notebook_name {
z-index: 10;
}
#toolbar {
.toolbar {
padding: 3px 15px;
}

@ -1,5 +1,5 @@
//----------------------------------------------------------------------------
// Copyright (C) 2008-2011 The IPython Development Team
// Copyright (C) 2008 The IPython Development Team
//
// Distributed under the terms of the BSD License. The full license is in
// the file COPYING, distributed as part of this software.
@ -14,99 +14,195 @@ var IPython = (function (IPython) {
var ToolBar = function (selector) {
this.selector = selector;
if (this.selector !== undefined) {
this.construct();
this.addDropDownList();
this.element = $(selector);
this.style();
this.bind_events();
}
};
// add a group of button into the current toolbar.
//
// First argument : Mandatory
// list of dict as argument, each dict should contain
// 3 mandatory keys and values :
// 'label' : string -- the text to show on hover
// 'icon' : string -- the jQuery-ui icon to add on this button
// 'callback' : function -- the callback to execute on a click
//
// and optionnaly an 'id' key that is assigned to the button element
//
// Second Argument, optionnal,
// string reprensenting the id to give to the button group.
//
// Example
//
// IPython.toolbar.addButtonsGroup([
// {'label':'my button',
// 'icon':'ui-icon-disk',
// 'callback':function(){alert('hoho'),
// 'id' : 'my_button_id', // this is optionnal
// }
// },
// {'label':'my second button',
// 'icon':'ui-icon-scissors',
// 'callback':function(){alert('be carefull I cut')}
// }
// ],
// "my_button_group_id"
// )
//
ToolBar.prototype.addButtonsGroup = function(list, group_id){
var span_group = $('<span/>');
if( group_id != undefined )
span_group.attr('id',group_id)
for(var el in list)
{
var button = $('<button/>').button({
icons : {primary: list[el]['icon']},
text : false,
label: list[el]['label'],
});
var id = list[el]['id'];
if( id != undefined )
button.attr('id',id);
var fun = list[el]['callback']
button.click(fun);
span_group.append(button);
}
span_group.buttonset();
$(this.selector).append(span_group)
}
ToolBar.prototype.style = function () {
this.element.addClass('border-box-sizing').
addClass('ui-widget ui-widget-content').
addClass('ui-widget ui-widget-content toolbar').
css('border-top-style','none').
css('border-left-style','none').
css('border-right-style','none');
this.element.find('#cell_type').addClass('ui-widget ui-widget-content');
this.element.find('#save_b').button({
icons : {primary: 'ui-icon-disk'},
text : false
});
this.element.find('#cut_b').button({
icons: {primary: 'ui-icon-scissors'},
text : false
});
this.element.find('#copy_b').button({
icons: {primary: 'ui-icon-copy'},
text : false
});
this.element.find('#paste_b').button({
icons: {primary: 'ui-icon-clipboard'},
text : false
});
this.element.find('#cut_copy_paste').buttonset();
this.element.find('#move_up_b').button({
icons: {primary: 'ui-icon-arrowthick-1-n'},
text : false
});
this.element.find('#move_down_b').button({
icons: {primary: 'ui-icon-arrowthick-1-s'},
text : false
});
this.element.find('#move_up_down').buttonset();
this.element.find('#insert_above_b').button({
icons: {primary: 'ui-icon-arrowthickstop-1-n'},
text : false
});
this.element.find('#insert_below_b').button({
icons: {primary: 'ui-icon-arrowthickstop-1-s'},
text : false
});
this.element.find('#insert_above_below').buttonset();
this.element.find('#run_b').button({
icons: {primary: 'ui-icon-play'},
text : false
});
this.element.find('#interrupt_b').button({
icons: {primary: 'ui-icon-stop'},
text : false
});
this.element.find('#run_int').buttonset();
};
ToolBar.prototype.addDropDownList = function()
{
var select = $(this.selector)
.append($('<select/>')
.attr('id','cell_type')
.addClass('ui-widget ui-widget-content')
.append($('<option/>').attr('value','code').text('Code'))
.append($('<option/>').attr('value','markdown').text('Markdown'))
.append($('<option/>').attr('value','raw').text('Raw Text'))
.append($('<option/>').attr('value','heading1').text('Heading 1'))
.append($('<option/>').attr('value','heading2').text('Heading 2'))
.append($('<option/>').attr('value','heading3').text('Heading 3'))
.append($('<option/>').attr('value','heading4').text('Heading 4'))
.append($('<option/>').attr('value','heading5').text('Heading 5'))
.append($('<option/>').attr('value','heading6').text('Heading 6'))
.append($('<option/>').attr('value','heading7').text('Heading 7'))
.append($('<option/>').attr('value','heading8').text('Heading 8'))
);
}
ToolBar.prototype.construct = function() {
this.addButtonsGroup([
{
'id':'save_b',
'label':'Save',
'icon':'ui-icon-disk',
'callback':function(){
IPython.notebook.save_notebook();
},
},
]);
this.addButtonsGroup([
{
'id':'cut_b',
'label':'Cut Cell',
'icon':'ui-icon-scissors',
'callback':function(){
IPython.notebook.cut_cell();
},
},
{
'id':'copy_b',
'label':'Copy Cell',
'icon':'ui-icon-copy',
'callback':function(){
IPython.notebook.copy_cell();
},
},
{
'id':'paste_b',
'label':'Paste Cell',
'icon':'ui-icon-clipboard',
'callback':function(){
IPython.notebook.paste_cell();
},
},
],'cut_copy_paste');
this.addButtonsGroup([
{
'id':'move_up_b',
'label':'Move Cell Up',
'icon':'ui-icon-arrowthick-1-n',
'callback':function(){
IPython.notebook.move_cell_up();
},
},
{
'id':'move_down_b',
'label':'Move Cell Down',
'icon':'ui-icon-arrowthick-1-s',
'callback':function(){
IPython.notebook.move_cell_down();
},
},
],'move_up_down');
this.addButtonsGroup([
{
'id':'insert_above_b',
'label':'Insert Cell Above',
'icon':'ui-icon-arrowthickstop-1-n',
'callback':function(){
IPython.notebook.insert_cell_above('code');
},
},
{
'id':'insert_below_b',
'label':'Insert Cell Below',
'icon':'ui-icon-arrowthickstop-1-s',
'callback':function(){
IPython.notebook.insert_cell_below('code');
},
},
],'insert_above_below');
this.addButtonsGroup([
{
'id':'run_b',
'label':'Run Cell',
'icon':'ui-icon-play',
'callback':function(){
IPython.notebook.execute_selected_cell();
},
},
{
'id':'interrupt_b',
'label':'Interrupt',
'icon':'ui-icon-stop',
'callback':function(){
IPython.notebook.kernel.interrupt();
},
},
],'run_int');
}
ToolBar.prototype.bind_events = function () {
var that = this;
this.element.find('#save_b').click(function () {
IPython.notebook.save_notebook();
});
this.element.find('#cut_b').click(function () {
IPython.notebook.cut_cell();
});
this.element.find('#copy_b').click(function () {
IPython.notebook.copy_cell();
});
this.element.find('#paste_b').click(function () {
IPython.notebook.paste_cell();
});
this.element.find('#move_up_b').click(function () {
IPython.notebook.move_cell_up();
});
this.element.find('#move_down_b').click(function () {
IPython.notebook.move_cell_down();
});
this.element.find('#insert_above_b').click(function () {
IPython.notebook.insert_cell_above('code');
});
this.element.find('#insert_below_b').click(function () {
IPython.notebook.insert_cell_below('code');
});
this.element.find('#run_b').click(function () {
IPython.notebook.execute_selected_cell();
});
this.element.find('#interrupt_b').click(function () {
IPython.notebook.kernel.interrupt();
});
this.element.find('#cell_type').change(function () {
var cell_type = $(this).val();
if (cell_type === 'code') {

@ -154,43 +154,7 @@ data-notebook-id={{notebook_id}}
</div>
<div id="toolbar">
<span>
<button id="save_b">Save</button>
</span>
<span id="cut_copy_paste">
<button id="cut_b" title="Cut Cell">Cut Cell</button>
<button id="copy_b" title="Copy Cell">Copy Cell</button>
<button id="paste_b" title="Paste Cell">Paste Cell</button>
</span>
<span id="move_up_down">
<button id="move_up_b" title="Move Cell Up">Move Cell Up</button>
<button id="move_down_b" title="Move Cell Down">Move Down</button>
</span>
<span id="insert_above_below">
<button id="insert_above_b" title="Insert Cell Above">Insert Cell Above</button>
<button id="insert_below_b" title="Insert Cell Below">Insert Cell Below</button>
</span>
<span id="run_int">
<button id="run_b" title="Run Cell">Run Cell</button>
<button id="interrupt_b" title="Interrupt">Interrupt</button>
</span>
<span>
<select id="cell_type">
<option value="code">Code</option>
<option value="markdown">Markdown</option>
<option value="raw">Raw Text</option>
<option value="heading1">Heading 1</option>
<option value="heading2">Heading 2</option>
<option value="heading3">Heading 3</option>
<option value="heading4">Heading 4</option>
<option value="heading5">Heading 5</option>
<option value="heading6">Heading 6</option>
</select>
</span>
</div>
<div id="toolbar"></div>
<div id="main_app">

Loading…
Cancel
Save