Factored out options pulldown into a separate "sub-class" of Pulldown.
This commit is contained in:
parent
0129c2a2c3
commit
8e6b152483
|
@ -524,56 +524,74 @@ Wiki.prototype.clear_pulldowns = function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
Wiki.prototype.toggle_editor_options = function ( event, editor ) {
|
Wiki.prototype.toggle_editor_options = function ( event, editor ) {
|
||||||
new Pulldown( this.notebook_id, this.invoker, editor );
|
// if the pulldown is already open, then just close it
|
||||||
|
var pulldown_id = "options_" + editor.id;
|
||||||
|
var existing_div = getElement( pulldown_id );
|
||||||
|
if ( existing_div ) {
|
||||||
|
existing_div.pulldown.shutdown();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Options_pulldown( this.notebook_id, this.invoker, editor );
|
||||||
event.stop();
|
event.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
connect( window, "onload", function ( event ) { new Wiki(); } );
|
connect( window, "onload", function ( event ) { new Wiki(); } );
|
||||||
|
|
||||||
|
|
||||||
function Pulldown( notebook_id, invoker, editor ) {
|
function Pulldown( notebook_id, pulldown_id, button ) {
|
||||||
// if the pulldown is already open, then just close it
|
|
||||||
var existing_div = getElement( "options_" + editor.id );
|
|
||||||
if ( existing_div ) {
|
|
||||||
existing_div.pulldown.shutdown();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.notebook_id = notebook_id;
|
this.notebook_id = notebook_id;
|
||||||
this.invoker = invoker;
|
this.div = createDOM( "div", { "id": pulldown_id, "class": "pulldown" } );
|
||||||
this.editor = editor;
|
|
||||||
this.div = createDOM( "div", { "id": "options_" + editor.id, "class": "pulldown" } );
|
|
||||||
this.div.pulldown = this;
|
this.div.pulldown = this;
|
||||||
addElementClass( this.div, "invisible" );
|
addElementClass( this.div, "invisible" );
|
||||||
|
|
||||||
this.close_button = createDOM( "input", { "type": "button", "value": " x ", "class": "pulldown_button" } );
|
this.close_button = createDOM( "input", { "type": "button", "value": " x ", "class": "pulldown_button" } );
|
||||||
|
|
||||||
|
appendChildNodes( this.div, this.close_button );
|
||||||
|
appendChildNodes( document.body, this.div );
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
connect( this.close_button, "onclick", function ( event ) { self.shutdown(); event.stop(); } );
|
||||||
|
|
||||||
|
// position the pulldown under the button that opened it
|
||||||
|
var position = getElementPosition( button );
|
||||||
|
var button_dimensions = getElementDimensions( button );
|
||||||
|
var div_dimensions = getElementDimensions( this.div );
|
||||||
|
position.x -= div_dimensions.w - button_dimensions.w;
|
||||||
|
position.y += button_dimensions.h;
|
||||||
|
setElementPosition( this.div, position );
|
||||||
|
|
||||||
|
removeElementClass( this.div, "invisible" );
|
||||||
|
}
|
||||||
|
|
||||||
|
Pulldown.prototype.shutdown = function () {
|
||||||
|
disconnectAll( this.close_button );
|
||||||
|
removeElement( this.div );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Options_pulldown = function ( notebook_id, invoker, editor ) {
|
||||||
|
Pulldown.call( this, notebook_id, "options_" + editor.id, editor.options_button );
|
||||||
|
|
||||||
|
this.invoker = invoker;
|
||||||
|
this.editor = editor;
|
||||||
this.startup_checkbox = createDOM( "input", { "type": "checkbox" } );
|
this.startup_checkbox = createDOM( "input", { "type": "checkbox" } );
|
||||||
this.startup_toggle = createDOM( "span", { "class": "pulldown_toggle" },
|
this.startup_toggle = createDOM( "span", { "class": "pulldown_toggle" },
|
||||||
this.startup_checkbox,
|
this.startup_checkbox,
|
||||||
"show on startup"
|
"show on startup"
|
||||||
);
|
);
|
||||||
|
|
||||||
appendChildNodes( this.div, this.close_button );
|
|
||||||
appendChildNodes( this.div, this.startup_toggle );
|
appendChildNodes( this.div, this.startup_toggle );
|
||||||
appendChildNodes( document.body, this.div );
|
|
||||||
this.startup_checkbox.checked = editor.startup;
|
this.startup_checkbox.checked = editor.startup;
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
connect( this.startup_toggle, "onclick", function ( event ) { self.startup_clicked( event ); event.stop(); } );
|
connect( this.startup_toggle, "onclick", function ( event ) { self.startup_clicked( event ); event.stop(); } );
|
||||||
connect( this.close_button, "onclick", function ( event ) { self.shutdown(); event.stop(); } );
|
|
||||||
|
|
||||||
// position the options pulldown under the options button
|
|
||||||
var position = getElementPosition( editor.options_button );
|
|
||||||
var options_dimensions = getElementDimensions( editor.options_button );
|
|
||||||
var div_dimensions = getElementDimensions( this.div );
|
|
||||||
position.x -= div_dimensions.w - options_dimensions.w;
|
|
||||||
position.y += options_dimensions.h;
|
|
||||||
setElementPosition( this.div, position );
|
|
||||||
|
|
||||||
removeElementClass( this.div, "invisible" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Pulldown.prototype.startup_clicked = function ( event ) {
|
Options_pulldown.prototype = Pulldown;
|
||||||
|
Options_pulldown.prototype.constructor = Options_pulldown;
|
||||||
|
|
||||||
|
Options_pulldown.prototype.startup_clicked = function ( event ) {
|
||||||
if ( event.target() != this.startup_checkbox )
|
if ( event.target() != this.startup_checkbox )
|
||||||
this.startup_checkbox.checked = this.startup_checkbox.checked ? false : true;
|
this.startup_checkbox.checked = this.startup_checkbox.checked ? false : true;
|
||||||
this.editor.startup = this.startup_checkbox.checked;
|
this.editor.startup = this.startup_checkbox.checked;
|
||||||
|
@ -589,8 +607,8 @@ Pulldown.prototype.startup_clicked = function ( event ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Pulldown.prototype.shutdown = function () {
|
Options_pulldown.prototype.shutdown = function () {
|
||||||
disconnectAll( this.close_button );
|
Pulldown.prototype.shutdown.call( this );
|
||||||
|
|
||||||
disconnectAll( this.startup_toggle );
|
disconnectAll( this.startup_toggle );
|
||||||
removeElement( this.div );
|
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue
Block a user