Revamped positioning of new editors and messages so that they show up
immediately after the editor you're working on instead of at the bottom of the page. Also, if you undo a note's deletion, it'll show up right back where it was amonst the notes.
This commit is contained in:
parent
b5b29c3e97
commit
9d7c38c396
|
@ -1,4 +1,4 @@
|
|||
function Editor( id, notebook_id, note_text, deleted_from_id, revision, read_write, startup, highlight, focus ) {
|
||||
function Editor( id, notebook_id, note_text, deleted_from_id, revision, read_write, startup, highlight, focus, position_after ) {
|
||||
this.id = id;
|
||||
this.notebook_id = notebook_id;
|
||||
this.initial_text = note_text;
|
||||
|
@ -90,8 +90,13 @@ function Editor( id, notebook_id, note_text, deleted_from_id, revision, read_wri
|
|||
this.hide_button ? this.hide_button : null
|
||||
);
|
||||
|
||||
appendChildNodes( "notes", this.note_controls );
|
||||
appendChildNodes( "notes", this.iframe );
|
||||
if ( position_after ) {
|
||||
insertSiblingNodesAfter( position_after, this.note_controls );
|
||||
insertSiblingNodesAfter( this.note_controls, this.iframe );
|
||||
} else {
|
||||
appendChildNodes( "notes", this.note_controls );
|
||||
appendChildNodes( "notes", this.iframe );
|
||||
}
|
||||
|
||||
connect( this.iframe, "onload", function ( event ) { self.init_document(); } );
|
||||
}
|
||||
|
@ -313,7 +318,7 @@ Editor.prototype.mouse_clicked = function ( event ) {
|
|||
var query = parse_query( link );
|
||||
var title = link_title( link, query );
|
||||
var id = query.note_id;
|
||||
signal( this, "load_editor", title, id, null, link );
|
||||
signal( this, "load_editor", title, id, null, link, this.iframe );
|
||||
}
|
||||
|
||||
Editor.prototype.scrape_title = function () {
|
||||
|
|
|
@ -189,7 +189,7 @@ Wiki.prototype.populate = function ( startup_notes, current_notes, note_read_wri
|
|||
var all_notes_link = getElement( "all_notes_link" );
|
||||
if ( all_notes_link ) {
|
||||
connect( all_notes_link, "onclick", function ( event ) {
|
||||
self.load_editor( "all notes", "null" );
|
||||
self.load_editor( "all notes", "null", null, null, getElement( "notes_top" ) );
|
||||
event.stop();
|
||||
} );
|
||||
}
|
||||
|
@ -236,9 +236,9 @@ Wiki.prototype.create_blank_editor = function ( event ) {
|
|||
this.add_all_notes_link( editor.id, "" );
|
||||
}
|
||||
|
||||
Wiki.prototype.load_editor = function ( note_title, note_id, revision, link ) {
|
||||
Wiki.prototype.load_editor = function ( note_title, note_id, revision, link, position_after ) {
|
||||
if ( this.notebook.name == "trash" && !revision ) {
|
||||
this.display_message( "If you'd like to use this note, try undeleting it first." );
|
||||
this.display_message( "If you'd like to use this note, try undeleting it first.", undefined, position_after );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -319,7 +319,7 @@ Wiki.prototype.load_editor = function ( note_title, note_id, revision, link ) {
|
|||
"note_title": note_title,
|
||||
"revision": revision
|
||||
},
|
||||
function ( result ) { self.parse_loaded_editor( result, note_title, revision, link ); }
|
||||
function ( result ) { self.parse_loaded_editor( result, note_title, revision, link, position_after ); }
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
@ -330,7 +330,7 @@ Wiki.prototype.load_editor = function ( note_title, note_id, revision, link ) {
|
|||
"note_id": note_id,
|
||||
"revision": revision
|
||||
},
|
||||
function ( result ) { self.parse_loaded_editor( result, note_title, revision, link ); }
|
||||
function ( result ) { self.parse_loaded_editor( result, note_title, revision, link, position_after ); }
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -399,7 +399,7 @@ Wiki.prototype.resolve_link = function ( note_title, link, callback ) {
|
|||
);
|
||||
}
|
||||
|
||||
Wiki.prototype.parse_loaded_editor = function ( result, note_title, requested_revision, link ) {
|
||||
Wiki.prototype.parse_loaded_editor = function ( result, note_title, requested_revision, link, position_after ) {
|
||||
if ( result.note_id_in_trash ) {
|
||||
var undelete_button = createDOM( "input", {
|
||||
"type": "button",
|
||||
|
@ -410,9 +410,9 @@ Wiki.prototype.parse_loaded_editor = function ( result, note_title, requested_re
|
|||
var trash_link = createDOM( "a", {
|
||||
"href": "/notebooks/" + this.notebook.trash_id + "?parent_id=" + this.notebook.object_id
|
||||
}, "trash" );
|
||||
this.display_message( "That note is in the", [ trash_link, ". ", undelete_button ] )
|
||||
var message_div = this.display_message( "That note is in the", [ trash_link, ". ", undelete_button ], position_after )
|
||||
var self = this;
|
||||
connect( undelete_button, "onclick", function ( event ) { self.undelete_editor_via_undelete( event, result.note_id_in_trash ); } );
|
||||
connect( undelete_button, "onclick", function ( event ) { self.undelete_editor_via_undelete( event, result.note_id_in_trash, message_div ); } );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -438,7 +438,7 @@ Wiki.prototype.parse_loaded_editor = function ( result, note_title, requested_re
|
|||
else
|
||||
var read_write = this.notebook.read_write;
|
||||
|
||||
var editor = this.create_editor( id, note_text, deleted_from_id, actual_revision, actual_creation, read_write, true, false );
|
||||
var editor = this.create_editor( id, note_text, deleted_from_id, actual_revision, actual_creation, read_write, true, false, position_after );
|
||||
id = editor.id;
|
||||
|
||||
// if a link that launched this editor was provided, update it with the created note's id
|
||||
|
@ -446,7 +446,7 @@ Wiki.prototype.parse_loaded_editor = function ( result, note_title, requested_re
|
|||
link.href = "/notebooks/" + this.notebook_id + "?note_id=" + id;
|
||||
}
|
||||
|
||||
Wiki.prototype.create_editor = function ( id, note_text, deleted_from_id, revision, creation, read_write, highlight, focus ) {
|
||||
Wiki.prototype.create_editor = function ( id, note_text, deleted_from_id, revision, creation, read_write, highlight, focus, position_after ) {
|
||||
var self = this;
|
||||
if ( isUndefinedOrNull( id ) ) {
|
||||
if ( this.notebook.read_write ) {
|
||||
|
@ -471,7 +471,7 @@ Wiki.prototype.create_editor = function ( id, note_text, deleted_from_id, revisi
|
|||
}
|
||||
|
||||
var startup = this.startup_notes[ id ];
|
||||
var editor = new Editor( id, this.notebook_id, note_text, deleted_from_id, revision, read_write, startup, highlight, focus );
|
||||
var editor = new Editor( id, this.notebook_id, note_text, deleted_from_id, revision, read_write, startup, highlight, focus, position_after );
|
||||
|
||||
if ( this.notebook.read_write ) {
|
||||
connect( editor, "state_changed", this, "editor_state_changed" );
|
||||
|
@ -491,6 +491,9 @@ Wiki.prototype.create_editor = function ( id, note_text, deleted_from_id, revisi
|
|||
self.invoker.invoke( url, "POST", null, null, form );
|
||||
} );
|
||||
|
||||
this.clear_messages();
|
||||
this.clear_pulldowns();
|
||||
|
||||
return editor;
|
||||
}
|
||||
|
||||
|
@ -811,9 +814,9 @@ Wiki.prototype.delete_editor = function ( event, editor ) {
|
|||
var trash_link = createDOM( "a", {
|
||||
"href": "/notebooks/" + this.notebook.trash_id + "?parent_id=" + this.notebook.object_id
|
||||
}, "trash" );
|
||||
this.display_message( "The note has been moved to the", [ trash_link, ". ", undo_button ] )
|
||||
var message_div = this.display_message( "The note has been moved to the", [ trash_link, ". ", undo_button ], editor.iframe );
|
||||
var self = this;
|
||||
connect( undo_button, "onclick", function ( event ) { self.undelete_editor_via_undo( event, editor ); } );
|
||||
connect( undo_button, "onclick", function ( event ) { self.undelete_editor_via_undo( event, editor, message_div ); } );
|
||||
}
|
||||
|
||||
this.remove_all_notes_link( editor.id );
|
||||
|
@ -862,10 +865,7 @@ Wiki.prototype.undelete_editor_via_trash = function ( event, editor ) {
|
|||
event.stop();
|
||||
}
|
||||
|
||||
Wiki.prototype.undelete_editor_via_undo = function( event, editor ) {
|
||||
this.clear_messages();
|
||||
this.clear_pulldowns();
|
||||
|
||||
Wiki.prototype.undelete_editor_via_undo = function( event, editor, position_after ) {
|
||||
if ( editor ) {
|
||||
if ( this.notebook.read_write && editor.read_write ) {
|
||||
var self = this;
|
||||
|
@ -877,16 +877,13 @@ Wiki.prototype.undelete_editor_via_undo = function( event, editor ) {
|
|||
|
||||
this.startup_notes[ editor.id ] = true;
|
||||
this.increment_total_notes_count();
|
||||
this.load_editor( "Note not found.", editor.id, null );
|
||||
this.load_editor( "Note not found.", editor.id, null, null, position_after );
|
||||
}
|
||||
|
||||
event.stop();
|
||||
}
|
||||
|
||||
Wiki.prototype.undelete_editor_via_undelete = function( event, note_id ) {
|
||||
this.clear_messages();
|
||||
this.clear_pulldowns();
|
||||
|
||||
if ( this.notebook.read_write ) {
|
||||
var self = this;
|
||||
this.invoker.invoke( "/notebooks/undelete_note", "POST", {
|
||||
|
@ -897,7 +894,7 @@ Wiki.prototype.undelete_editor_via_undelete = function( event, note_id ) {
|
|||
|
||||
this.startup_notes[ note_id ] = true;
|
||||
this.increment_total_notes_count();
|
||||
this.load_editor( "Note not found.", note_id, null );
|
||||
this.load_editor( "Note not found.", note_id, null, null, position_after );
|
||||
|
||||
event.stop();
|
||||
}
|
||||
|
@ -907,8 +904,8 @@ Wiki.prototype.compare_versions = function( event, editor, previous_revision ) {
|
|||
this.clear_pulldowns();
|
||||
|
||||
// display the two revisions for comparison by the user
|
||||
this.load_editor( editor.title, editor.id, previous_revision );
|
||||
this.load_editor( editor.title, editor.id );
|
||||
this.load_editor( editor.title, editor.id, previous_revision, null, editor.iframe );
|
||||
this.load_editor( editor.title, editor.id, null, null, editor.iframe );
|
||||
}
|
||||
|
||||
Wiki.prototype.save_editor = function ( editor, fire_and_forget ) {
|
||||
|
@ -947,7 +944,7 @@ Wiki.prototype.update_editor_revisions = function ( result, editor ) {
|
|||
"value": "compare versions",
|
||||
"title": "compare your version with the modified version"
|
||||
} );
|
||||
this.display_error( 'Your changes to the note titled "' + editor.title + '" have overwritten changes made in another window.', [ compare_button ] );
|
||||
this.display_error( 'Your changes to the note titled "' + editor.title + '" have overwritten changes made in another window.', [ compare_button ], editor.iframe );
|
||||
|
||||
var self = this;
|
||||
connect( compare_button, "onclick", function ( event ) {
|
||||
|
@ -983,7 +980,7 @@ Wiki.prototype.search = function ( event ) {
|
|||
Wiki.prototype.display_search_results = function ( result ) {
|
||||
// if there are no search results, indicate that and bail
|
||||
if ( !result || result.notes.length == 0 ) {
|
||||
this.display_message( "No matching notes." );
|
||||
this.display_message( "No matching notes.", undefined, getElement( "notes_top" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1019,7 +1016,7 @@ Wiki.prototype.display_search_results = function ( result ) {
|
|||
);
|
||||
}
|
||||
|
||||
this.search_results_editor = this.create_editor( "search_results", "<h3>search results</h3>" + list.innerHTML, undefined, undefined, undefined, false, true, true );
|
||||
this.search_results_editor = this.create_editor( "search_results", "<h3>search results</h3>" + list.innerHTML, undefined, undefined, undefined, false, true, true, getElement( "notes_top" ) );
|
||||
}
|
||||
|
||||
Wiki.prototype.display_all_notes_list = function ( result ) {
|
||||
|
@ -1052,10 +1049,10 @@ Wiki.prototype.display_all_notes_list = function ( result ) {
|
|||
}
|
||||
var list_holder = createDOM( "div", {}, list );
|
||||
|
||||
this.all_notes_editor = this.create_editor( "all_notes", "<h3>all notes</h3>" + list_holder.innerHTML, undefined, undefined, undefined, false, true, true );
|
||||
this.all_notes_editor = this.create_editor( "all_notes", "<h3>all notes</h3>" + list_holder.innerHTML, undefined, undefined, undefined, false, true, true, getElement( "notes_top" ) );
|
||||
}
|
||||
|
||||
Wiki.prototype.display_message = function ( text, nodes ) {
|
||||
Wiki.prototype.display_message = function ( text, nodes, position_after ) {
|
||||
this.clear_messages();
|
||||
this.clear_pulldowns();
|
||||
|
||||
|
@ -1075,11 +1072,17 @@ Wiki.prototype.display_message = function ( text, nodes ) {
|
|||
var div = DIV( { "class": "message" }, inner_div );
|
||||
div.nodes = nodes;
|
||||
|
||||
appendChildNodes( "notes", div );
|
||||
ScrollTo( div );
|
||||
if ( position_after )
|
||||
insertSiblingNodesAfter( position_after, div )
|
||||
else if ( this.focused_editor )
|
||||
insertSiblingNodesAfter( this.focused_editor.iframe, div )
|
||||
else
|
||||
appendChildNodes( "notes", div );
|
||||
|
||||
return div;
|
||||
}
|
||||
|
||||
Wiki.prototype.display_error = function ( text, nodes ) {
|
||||
Wiki.prototype.display_error = function ( text, nodes, position_after ) {
|
||||
this.clear_messages();
|
||||
this.clear_pulldowns();
|
||||
|
||||
|
@ -1107,8 +1110,14 @@ Wiki.prototype.display_error = function ( text, nodes ) {
|
|||
var div = DIV( { "class": "error" }, inner_div );
|
||||
div.nodes = nodes;
|
||||
|
||||
appendChildNodes( "notes", div );
|
||||
ScrollTo( div );
|
||||
if ( position_after )
|
||||
insertSiblingNodesAfter( position_after, div )
|
||||
else if ( this.focused_editor )
|
||||
insertSiblingNodesAfter( this.focused_editor.iframe, div )
|
||||
else
|
||||
appendChildNodes( "notes", div );
|
||||
|
||||
return div;
|
||||
}
|
||||
|
||||
Wiki.prototype.clear_messages = function () {
|
||||
|
@ -1124,17 +1133,6 @@ Wiki.prototype.clear_messages = function () {
|
|||
} catch ( e ) { }
|
||||
} } );
|
||||
}
|
||||
|
||||
var results = getElementsByTagAndClassName( "div", "error" );
|
||||
|
||||
for ( var i in results ) {
|
||||
var result = results[ i ];
|
||||
blindUp( result, options = { "duration": 0.5, afterFinish: function () {
|
||||
try {
|
||||
removeElement( result );
|
||||
} catch ( e ) { }
|
||||
} } );
|
||||
}
|
||||
}
|
||||
|
||||
Wiki.prototype.clear_pulldowns = function () {
|
||||
|
@ -1456,7 +1454,7 @@ Changes_pulldown.prototype.constructor = Changes_pulldown;
|
|||
|
||||
Changes_pulldown.prototype.link_clicked = function( event, note_id ) {
|
||||
var revision = event.target().revision;
|
||||
this.wiki.load_editor( "Revision not found.", note_id, revision );
|
||||
this.wiki.load_editor( "Revision not found.", note_id, revision, null, this.editor.iframe );
|
||||
event.stop();
|
||||
}
|
||||
|
||||
|
|
|
@ -118,6 +118,7 @@ class Main_page( Page ):
|
|||
Rounded_div(
|
||||
( notebook.name == u"trash" ) and u"trash_notebook_inner" or u"current_notebook_inner",
|
||||
Div(
|
||||
Span( id = u"notes_top" ),
|
||||
id = u"notes",
|
||||
),
|
||||
notebook.read_write and Div(
|
||||
|
|
Reference in New Issue