Rearranged the links on the left and right side of the wiki editing page. Added an "add note to note tree" button that's not quite complete.
This commit is contained in:
parent
7185a9f8a3
commit
68de634b38
5
NEWS
5
NEWS
|
@ -1,5 +1,8 @@
|
|||
1.5.7:
|
||||
*
|
||||
* Rearranged the links on the left and right side of the wiki editing page
|
||||
so the note title links have a little more horizontal breathing room.
|
||||
* Fixed a bug in which search result note summaries were not showing the
|
||||
portion of the note that matched the search term. (Luminotes Server)
|
||||
|
||||
1.5.6: November 12, 2008
|
||||
* Greatly improved the speed of wiki searching for Luminotes Server and
|
||||
|
|
|
@ -277,7 +277,7 @@ h1 {
|
|||
|
||||
#note_tree_area {
|
||||
position: fixed;
|
||||
width: 15em;
|
||||
width: 20em;
|
||||
max-width: 20%;
|
||||
text-align: left;
|
||||
line-height: 140%;
|
||||
|
@ -289,7 +289,8 @@ h1 {
|
|||
#note_tree_area_holder {
|
||||
max-height: 100%;
|
||||
overflow: auto;
|
||||
margin-left: 0.5em;
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
#note_tree_root_table {
|
||||
|
@ -298,7 +299,6 @@ h1 {
|
|||
}
|
||||
|
||||
#recent_notes_table {
|
||||
margin-bottom: 1em;
|
||||
font-size: 72%;
|
||||
}
|
||||
|
||||
|
@ -359,15 +359,14 @@ h1 {
|
|||
line-height: 140%;
|
||||
top: 80px;
|
||||
bottom: 1em;
|
||||
width: 20em;
|
||||
width: 15em;
|
||||
max-width: 20%;
|
||||
}
|
||||
|
||||
#link_area_holder {
|
||||
max-height: 100%;
|
||||
overflow: auto;
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
|
||||
#this_notebook_area_title {
|
||||
|
@ -411,6 +410,7 @@ h1 {
|
|||
padding: 0.25em;
|
||||
border: #999999 1px solid;
|
||||
width: 95%;
|
||||
max-width: 15em;
|
||||
}
|
||||
|
||||
#clutter_link {
|
||||
|
@ -660,6 +660,10 @@ h1 {
|
|||
border: #999999 1px solid;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.link_area_item {
|
||||
font-size: 75%;
|
||||
padding: 0.25em 0.25em 0.25em 0.5em;
|
||||
|
@ -815,10 +819,6 @@ h1 {
|
|||
font-weight: normal;
|
||||
}
|
||||
|
||||
#note_tree_instructions {
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.new_feature_text {
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
|
@ -842,6 +842,9 @@ h1 {
|
|||
.middle_image {
|
||||
vertical-align: middle;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.padding_left {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
|
|
|
@ -436,6 +436,17 @@ Wiki.prototype.populate = function ( startup_notes, current_notes, note_read_wri
|
|||
|
||||
this.make_image_button( "new_notebook", "new_note", true );
|
||||
}
|
||||
|
||||
var new_note_tree_link_button = getElement( "new_note_tree_link" );
|
||||
if ( new_note_tree_link_button ) {
|
||||
connect( new_note_tree_link_button, "onclick", function ( event ) {
|
||||
if ( self.note_tree )
|
||||
self.note_tree.start_link_add();
|
||||
event.stop();
|
||||
} );
|
||||
|
||||
this.make_image_button( "new_note_tree_link", "new_note", true );
|
||||
}
|
||||
}
|
||||
|
||||
Wiki.prototype.background_clicked = function ( event ) {
|
||||
|
@ -1206,7 +1217,7 @@ Wiki.prototype.connect_image_button = function ( button, filename_prefix ) {
|
|||
button.src = toolbar_image_dir + button.filename_prefix + "_button.png";
|
||||
} );
|
||||
|
||||
if ( button.name == "newNote" || button.name == "new_notebook" ) {
|
||||
if ( button.name == "newNote" || button.name == "new_notebook" || button.name == "new_note_tree_link" ) {
|
||||
connect( button, "onmousedown", function ( event ) {
|
||||
var toolbar_image_dir = self.get_toolbar_image_dir( button.always_small );
|
||||
if ( /_hover/.test( button.src ) )
|
||||
|
@ -2760,8 +2771,8 @@ Wiki.prototype.start_notebook_rename = function () {
|
|||
"input", {
|
||||
"type": "button",
|
||||
"class": "message_button",
|
||||
"value": "ok",
|
||||
"title": "dismiss this message"
|
||||
"value": "rename",
|
||||
"title": "rename this notebook"
|
||||
}
|
||||
);
|
||||
|
||||
|
@ -4162,11 +4173,11 @@ Suggest_pulldown.prototype.shutdown = function () {
|
|||
}
|
||||
|
||||
|
||||
|
||||
function Note_tree( wiki, notebook_id, invoker ) {
|
||||
this.wiki = wiki;
|
||||
this.notebook_id = notebook_id;
|
||||
this.invoker = invoker;
|
||||
this.suggest_pulldown = null;
|
||||
|
||||
// add onclick handlers to the initial note links within the tree
|
||||
var links = getElementsByTagAndClassName( "a", "note_tree_link", "note_tree_area" );
|
||||
|
@ -4189,7 +4200,7 @@ function Note_tree( wiki, notebook_id, invoker ) {
|
|||
|
||||
// connect to the wiki note events
|
||||
connect( wiki, "note_renamed", function ( editor, new_title ) { self.rename_link( editor, new_title ); } );
|
||||
connect( wiki, "note_added", function ( editor ) { self.add_root_link( editor ); } );
|
||||
connect( wiki, "note_added", function ( editor ) { self.add_root_link( editor.id, editor.title, editor.contents(), editor.startup ); } );
|
||||
connect( wiki, "note_removed", function ( id ) { self.remove_link( id ); } );
|
||||
connect( wiki, "note_saved", function ( editor ) { self.update_link( editor ); } );
|
||||
}
|
||||
|
@ -4209,41 +4220,40 @@ Note_tree.prototype.link_clicked = function ( event ) {
|
|||
|
||||
LINK_PATTERN = /<a\s+([^>]+\s)?href="[^"]+"[^>]*>/i;
|
||||
|
||||
Note_tree.prototype.add_root_link = function ( editor ) {
|
||||
Note_tree.prototype.add_root_link = function ( note_id, title, contents, startup ) {
|
||||
// for now, only add startup notes to the note tree
|
||||
if ( !editor.startup )
|
||||
if ( !startup )
|
||||
return;
|
||||
|
||||
// if the root note is already present in the tree, no need to add it again
|
||||
if ( getElement( "note_tree_item_" + editor.id ) )
|
||||
var item = getElement( "note_tree_item_" + note_id );
|
||||
if ( item ) {
|
||||
new Highlight( item, { "endcolor": "#fafafa" } );
|
||||
return;
|
||||
}
|
||||
|
||||
// display the tree expander arrow if the given note's editor contains any outgoing links
|
||||
if ( LINK_PATTERN.exec( editor.contents() ) )
|
||||
var expander = createDOM( "div", { "class": "tree_expander", "id": "note_tree_expander_" + editor.id } );
|
||||
// display the tree expander arrow if the given note's contents contains any outgoing links
|
||||
if ( LINK_PATTERN.exec( contents ) )
|
||||
var expander = createDOM( "div", { "class": "tree_expander", "id": "note_tree_expander_" + note_id } );
|
||||
else
|
||||
var expander = createDOM( "div", { "class": "tree_expander_empty", "id": "note_tree_expander_" + editor.id } );
|
||||
var expander = createDOM( "div", { "class": "tree_expander_empty", "id": "note_tree_expander_" + note_id } );
|
||||
|
||||
var link = createDOM( "a", {
|
||||
"href": "/notebooks/" + this.notebook_id + "?note_id=" + editor.id,
|
||||
"id": "note_tree_link_" + editor.id,
|
||||
"href": "/notebooks/" + this.notebook_id + "?note_id=" + note_id,
|
||||
"id": "note_tree_link_" + note_id,
|
||||
"class": "note_tree_link"
|
||||
}, editor.title || "untitled note" );
|
||||
}, title || "untitled note" );
|
||||
|
||||
appendChildNodes( "note_tree_root_table_body", createDOM(
|
||||
insertSiblingNodesBefore( "new_note_tree_link_row", createDOM(
|
||||
"tr",
|
||||
{ "id": "note_tree_item_" + editor.id, "class": "note_tree_item" },
|
||||
{ "id": "note_tree_item_" + note_id, "class": "note_tree_item" },
|
||||
createDOM( "td", {}, expander ),
|
||||
createDOM( "td", {}, link )
|
||||
) );
|
||||
|
||||
var self = this;
|
||||
connect( expander, "onclick", function ( event ) { self.expand_collapse_link( event, editor.id ); } );
|
||||
connect( expander, "onclick", function ( event ) { self.expand_collapse_link( event, note_id ); } );
|
||||
connect( link, "onclick", function ( event ) { self.link_clicked( event ); } );
|
||||
|
||||
var instructions = getElement( "note_tree_instructions" );
|
||||
if ( instructions )
|
||||
addElementClass( instructions, "undisplayed" );
|
||||
}
|
||||
|
||||
Note_tree.prototype.remove_link = function ( note_id ) {
|
||||
|
@ -4254,10 +4264,6 @@ Note_tree.prototype.remove_link = function ( note_id ) {
|
|||
|
||||
if ( getFirstElementByTagAndClassName( "a", null, "note_tree_root_table" ) )
|
||||
return;
|
||||
|
||||
var instructions = getElement( "note_tree_instructions" );
|
||||
if ( instructions )
|
||||
removeElementClass( instructions, "undisplayed" );
|
||||
}
|
||||
|
||||
Note_tree.prototype.rename_link = function ( editor, new_title ) {
|
||||
|
@ -4270,7 +4276,7 @@ Note_tree.prototype.update_link = function ( editor ) {
|
|||
var link = getElement( "note_tree_link_" + editor.id );
|
||||
|
||||
if ( !link && editor.startup ) {
|
||||
this.add_root_link( editor );
|
||||
this.add_root_link( editor.id, editor.title, editor.contents(), editor.startup );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -4418,6 +4424,92 @@ Note_tree.prototype.display_child_links = function ( result, link, children_area
|
|||
connect_expander( expander, note_id );
|
||||
}
|
||||
|
||||
Note_tree.prototype.start_link_add = function () {
|
||||
// if the add is already in progress, end the add instead of starting one
|
||||
var new_note_tree_link_field = getElement( "new_note_tree_link_field" );
|
||||
if ( new_note_tree_link_field ) {
|
||||
this.end_link_add();
|
||||
return;
|
||||
}
|
||||
|
||||
link_field = createDOM(
|
||||
"input", {
|
||||
"type": "text",
|
||||
"value": "",
|
||||
"id": "new_note_tree_link_field",
|
||||
"name": "new_note_tree_link_field",
|
||||
"size": "10",
|
||||
"class": "text_field"
|
||||
}
|
||||
);
|
||||
|
||||
var ok_button = createDOM(
|
||||
"input", {
|
||||
"type": "button",
|
||||
"class": "message_button",
|
||||
"value": "add",
|
||||
"title": "add the note"
|
||||
}
|
||||
);
|
||||
|
||||
var form = createDOM(
|
||||
"form", { "id": "new_note_tree_link_form", "class": "inline" }, link_field, ok_button
|
||||
);
|
||||
|
||||
replaceChildNodes( "new_note_tree_link_area", form );
|
||||
|
||||
// add a suggest pulldown beneath the link name text field
|
||||
var self = this;
|
||||
this.suggest_pulldown = new Suggest_pulldown(
|
||||
this.wiki, this.notebook_id, this.invoker, link_field, null, "", link_field
|
||||
);
|
||||
connect( this.suggest_pulldown, "suggestion_selected", function ( note ) {
|
||||
replaceChildNodes( "new_note_tree_link_area", "" );
|
||||
self.suggest_pulldown.shutdown();
|
||||
// TODO: actually set the startup flag on the note (on the server)
|
||||
self.add_root_link( note.object_id, note.title, note.contents, true );
|
||||
} );
|
||||
|
||||
connect( form, "onsubmit", function ( event ) {
|
||||
self.end_link_add();
|
||||
event.stop();
|
||||
} );
|
||||
connect( form, "onkeyup", function ( event ) {
|
||||
self.suggest_pulldown.update_suggestions( link_field.value );
|
||||
} );
|
||||
connect( ok_button, "onclick", function ( event ) {
|
||||
self.end_link_add();
|
||||
event.stop();
|
||||
} );
|
||||
|
||||
link_field.focus();
|
||||
link_field.select();
|
||||
}
|
||||
|
||||
Note_tree.prototype.end_link_add = function () {
|
||||
var note_name = getElement( "new_note_tree_link_field" ).value;
|
||||
this.suggest_pulldown.shutdown();
|
||||
replaceChildNodes( "new_note_tree_link_area", "" );
|
||||
|
||||
// if the new name is blank, bail
|
||||
if ( /^\s*$/.test( note_name ) )
|
||||
return;
|
||||
|
||||
// load the requested note by title and add it as a root link
|
||||
var self = this;
|
||||
this.invoker.invoke( "/notebooks/load_note_by_title", "GET", {
|
||||
"notebook_id": this.notebook_id,
|
||||
"note_title": note_name
|
||||
}, function ( result ) {
|
||||
// TODO: actually set the startup flag on the note (on the server)
|
||||
var note = result.note;
|
||||
if ( note )
|
||||
self.add_root_link( note.object_id, note.title, note.contents, true );
|
||||
else
|
||||
self.wiki.display_message( "Sorry, a note by that title doesn't exist. (If you're trying to create a new note, then simply click that large \"+\" button on the left.)" );
|
||||
} );
|
||||
}
|
||||
|
||||
function Recent_notes( wiki, notebook_id, invoker ) {
|
||||
this.wiki = wiki;
|
||||
this.notebook_id = notebook_id;
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
from Tags import Div, P, Span, H4, A, Strong, Img, Input, Br
|
||||
from Tags import Div, P, Span, H4, A, Strong, Img, Br
|
||||
from Rounded_div import Rounded_div
|
||||
from Search_form import Search_form
|
||||
from model.Notebook import Notebook
|
||||
|
||||
|
||||
class Link_area( Div ):
|
||||
def __init__( self, notebooks, notebook, parent_id, notebook_path, updates_path, user, rate_plan ):
|
||||
def __init__( self, toolbar, notebooks, notebook, parent_id, notebook_path, updates_path, user, rate_plan ):
|
||||
linked_notebooks = [ nb for nb in notebooks if
|
||||
(
|
||||
nb.read_write == Notebook.READ_WRITE or
|
||||
|
@ -26,24 +25,13 @@ class Link_area( Div ):
|
|||
|
||||
Div.__init__(
|
||||
self,
|
||||
toolbar,
|
||||
Div(
|
||||
Div(
|
||||
H4(
|
||||
u"this %s" % notebook_word,
|
||||
notebook.read_write != Notebook.READ_ONLY and Input(
|
||||
type = u"button",
|
||||
class_ = u"note_button small_text",
|
||||
id = u"save_button",
|
||||
value = u"saved",
|
||||
disabled = u"true",
|
||||
title = u"save your work",
|
||||
) or None,
|
||||
id = u"this_notebook_area_title",
|
||||
),
|
||||
Div(
|
||||
Search_form(),
|
||||
class_ = u"link_area_item",
|
||||
),
|
||||
|
||||
( rate_plan.get( u"notebook_sharing" ) and notebook.name == u"Luminotes blog" ) and Div(
|
||||
A(
|
||||
|
@ -53,7 +41,7 @@ class Link_area( Div ):
|
|||
title = u"Subscribe to the RSS feed for the Luminotes blog.",
|
||||
),
|
||||
A(
|
||||
Img( src = u"/static/images/rss.png", width = u"14", height = u"14", class_ = u"middle_image" ),
|
||||
Img( src = u"/static/images/rss.png", width = u"14", height = u"14", class_ = u"middle_image padding_left" ),
|
||||
href = u"%s?rss" % notebook_path,
|
||||
title = u"Subscribe to the RSS feed for the Luminotes blog.",
|
||||
),
|
||||
|
@ -66,7 +54,7 @@ class Link_area( Div ):
|
|||
title = u"Subscribe to the RSS feed for this %s." % notebook_word,
|
||||
),
|
||||
A(
|
||||
Img( src = u"/static/images/rss.png", width = u"14", height = u"14", class_ = u"middle_image" ),
|
||||
Img( src = u"/static/images/rss.png", width = u"14", height = u"14", class_ = u"middle_image padding_left" ),
|
||||
href = updates_path,
|
||||
title = u"Subscribe to the RSS feed for this %s." % notebook_word,
|
||||
),
|
||||
|
@ -169,13 +157,6 @@ class Link_area( Div ):
|
|||
( not forum_tag ) and Div(
|
||||
( len( linked_notebooks ) > 0 ) and H4(
|
||||
u"notebooks",
|
||||
Img(
|
||||
src = u"/static/images/toolbar/small/new_note_button.png",
|
||||
width = u"20", height = u"20",
|
||||
id = "new_notebook",
|
||||
class_ = u"middle_image",
|
||||
title = u"Create a new wiki notebook."
|
||||
),
|
||||
id = u"notebooks_area_title",
|
||||
) or None,
|
||||
[ ( nb.object_id == notebook.object_id ) and Rounded_div(
|
||||
|
@ -203,14 +184,15 @@ class Link_area( Div ):
|
|||
) for nb in linked_notebooks ],
|
||||
id = u"notebooks_area"
|
||||
) or None,
|
||||
|
||||
( user.username is None and notebook_path != "/" ) and P(
|
||||
A( u"Download", href = u"/download", class_ = u"hook_action" ),
|
||||
Span( u" or ", class_ = u"hook_action_or" ),
|
||||
A( u"Sign up", href = u"/pricing", class_ = u"hook_action" ), Br(),
|
||||
Span( "Get started in seconds.", class_ = u"hook_action_detail" ),
|
||||
class_ = u"hook_action_area",
|
||||
separator = u"",
|
||||
( not forum_tag ) and Div(
|
||||
Img(
|
||||
src = u"/static/images/toolbar/small/new_note_button.png",
|
||||
width = u"20", height = u"20",
|
||||
id = "new_notebook",
|
||||
class_ = u"middle_image",
|
||||
title = u"Create a new wiki notebook."
|
||||
),
|
||||
class_ = u"link_area_item",
|
||||
) or None,
|
||||
|
||||
Div(
|
||||
|
|
|
@ -166,16 +166,13 @@ class Main_page( Page ):
|
|||
Header( user, header_notebook, login_url, logout_url, header_note_title, rate_plan ),
|
||||
Div(
|
||||
Div(
|
||||
Note_tree_area(
|
||||
Link_area(
|
||||
Toolbar(
|
||||
notebook,
|
||||
hide_toolbar = parent_id or notebook.read_write == Notebook.READ_ONLY,
|
||||
note_word = ( notebook.read_write == Notebook.READ_WRITE_FOR_OWN_NOTES ) and u"post" or u"note",
|
||||
),
|
||||
notebook,
|
||||
root_notes,
|
||||
recent_notes,
|
||||
total_notes_count,
|
||||
notebooks, notebook, parent_id, notebook_path, updates_path, user, rate_plan,
|
||||
),
|
||||
id = u"left_area",
|
||||
),
|
||||
|
@ -247,7 +244,13 @@ class Main_page( Page ):
|
|||
id = u"center_content_area",
|
||||
),
|
||||
Div(
|
||||
Link_area( notebooks, notebook, parent_id, notebook_path, updates_path, user, rate_plan ),
|
||||
Note_tree_area(
|
||||
notebook,
|
||||
root_notes,
|
||||
recent_notes,
|
||||
total_notes_count,
|
||||
user,
|
||||
),
|
||||
id = u"right_area",
|
||||
),
|
||||
id = u"everything_area",
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
import re
|
||||
from Tags import Div, Span, H4, A, Table, Tbody, Tr, Td
|
||||
from model.Notebook import Notebook
|
||||
from Tags import Div, Span, H4, A, Table, Tbody, Tr, Td, Img, P, Br, Input
|
||||
from Search_form import Search_form
|
||||
|
||||
|
||||
class Note_tree_area( Div ):
|
||||
LINK_PATTERN = re.compile( u'<a\s+(?:[^>]+\s)?href="[^"]+"[^>]*>', re.IGNORECASE )
|
||||
|
||||
def __init__( self, toolbar, notebook, root_notes, recent_notes, total_notes_count ):
|
||||
def __init__( self, notebook, root_notes, recent_notes, total_notes_count, user ):
|
||||
tags = [ tag for tag in notebook.tags if tag.name == u"forum" ]
|
||||
|
||||
if tags:
|
||||
|
@ -17,7 +19,6 @@ class Note_tree_area( Div ):
|
|||
|
||||
Div.__init__(
|
||||
self,
|
||||
toolbar,
|
||||
Div(
|
||||
H4(
|
||||
forum_tag and u"posts" or u"notes",
|
||||
|
@ -25,8 +26,20 @@ class Note_tree_area( Div ):
|
|||
Span( total_notes_count, id = u"total_notes_count" ), u"total",
|
||||
class_ = u"small_text link_area_item",
|
||||
),
|
||||
notebook.read_write != Notebook.READ_ONLY and Input(
|
||||
type = u"button",
|
||||
class_ = u"note_button small_text",
|
||||
id = u"save_button",
|
||||
value = u"saved",
|
||||
disabled = u"true",
|
||||
title = u"save your work",
|
||||
) or None,
|
||||
id = u"note_tree_area_title",
|
||||
) or None,
|
||||
Div(
|
||||
Search_form(),
|
||||
class_ = u"link_area_item",
|
||||
),
|
||||
forum_tag and Div(
|
||||
A( u"%s forum" % forum_name, href = "/forums/%s" % forum_name ),
|
||||
class_ = u"link_area_item",
|
||||
|
@ -39,11 +52,20 @@ class Note_tree_area( Div ):
|
|||
has_children = ( notebook.name != u"trash" ) and self.LINK_PATTERN.search( note.contents ) or False,
|
||||
root_note_id = note.object_id,
|
||||
) for note in root_notes ],
|
||||
Tr( Td(
|
||||
( notebook.name != u"trash" ) and u'To add a note here, click the "options" tab on a note, then "show on startup".' or None,
|
||||
id = "note_tree_instructions",
|
||||
class_ = ( ( len( root_notes ) > 0 ) and u"undisplayed" or u"" ),
|
||||
) ) or None,
|
||||
Tr(
|
||||
Td(),
|
||||
( notebook.name != u"trash" and notebook.read_write == Notebook.READ_WRITE ) and Td(
|
||||
Img(
|
||||
src = u"/static/images/toolbar/small/new_note_button.png",
|
||||
width = u"20", height = u"20",
|
||||
id = u"new_note_tree_link",
|
||||
class_ = u"middle_image",
|
||||
title = u"Add a note to this note tree."
|
||||
),
|
||||
Span( id = u"new_note_tree_link_area" ),
|
||||
) or None,
|
||||
id = u"new_note_tree_link_row",
|
||||
) or None,
|
||||
tree_id = "note_tree_root_table",
|
||||
) or None,
|
||||
( not forum_tag and recent_notes is not None and notebook.name != u"trash" ) and Span(
|
||||
|
@ -70,6 +92,14 @@ class Note_tree_area( Div ):
|
|||
tree_id = "recent_notes_table",
|
||||
),
|
||||
) or None,
|
||||
( user.username is None ) and P(
|
||||
A( u"Download", href = u"/download", class_ = u"hook_action" ),
|
||||
Span( u" or ", class_ = u"hook_action_or" ),
|
||||
A( u"Sign up", href = u"/pricing", class_ = u"hook_action" ), Br(),
|
||||
Span( "Get started in seconds.", class_ = u"hook_action_detail" ),
|
||||
class_ = u"hook_action_area",
|
||||
separator = u"",
|
||||
) or None,
|
||||
id = u"note_tree_area_holder",
|
||||
),
|
||||
Span( id = "tree_arrow_hover_preload" ),
|
||||
|
|
Reference in New Issue