Index: /branches/testa-single-bookmark/css/style-3.css
===================================================================
--- /branches/testa-single-bookmark/css/style-3.css	(revision 35)
+++ /branches/testa-single-bookmark/css/style-3.css	(revision 36)
@@ -11,4 +11,5 @@
 .disabled {
     background-color: white;
+    display: none;
 }
 #all {
@@ -57,4 +58,14 @@
     grid-row:  2/3;
     grid-column:  7/8;
+}
+
+#data-down-url, #output-down-url, #setting-down-url{
+    grid-row:  1/2;
+    grid-column:  8/12;
+}
+
+#data-partial-down-url, #output-partial-down-url, #setting-partial-down-url{
+    grid-row:  2/3;
+    grid-column:  8/12;
 }
 
@@ -136,2 +147,5 @@
 }
 
+#data-menu-id {
+    display: none;
+}
Index: /branches/testa-single-bookmark/index.html
===================================================================
--- /branches/testa-single-bookmark/index.html	(revision 35)
+++ /branches/testa-single-bookmark/index.html	(revision 36)
@@ -8,20 +8,20 @@
     <link rel="stylesheet" href="./css/style.css" />
     <link href='https://fonts.googleapis.com/css?family=Varela+Round' rel='stylesheet' type='text/css'>
-    <link rel="stylesheet" href="css/style-3.css?7">
-    <link rel="stylesheet" href="css/tab.css?7">
-    <link rel="stylesheet" href="css/menu.css?7">
+    <link rel="stylesheet" href="css/style-3.css?84">
+    <link rel="stylesheet" href="css/tab.css?84">
+    <link rel="stylesheet" href="css/menu.css?84">
     <link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
     <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
     <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ace.js"></script>
-    <script src="js/storagex.js?7>"></script>
-    <script src="js/sidemenu.js?7>"></script>
-    <script src="js/bookmark.js?7>"></script>
-    <script src="js/bookmarkmgr.js?7"></script>
-    <script src="js/bookmarkmenu.js?7"></script>
-    <script src="js/tab.js?7"></script>
-    <script src="js/topmenu.js?7"></script>
-    <script src="js/remotex.js?7"></script>
-    <script src="js/main.js?7"></script>
+    <script src="js/storagex.js?84>"></script>
+    <script src="js/sidemenu.js?84>"></script>
+    <script src="js/bookmark.js?84>"></script>
+    <script src="js/bookmarkmgr.js?84"></script>
+    <script src="js/bookmarkmenu.js?84"></script>
+    <script src="js/tab.js?84"></script>
+    <script src="js/topmenu.js?84"></script>
+    <script src="js/remotex.js?84"></script>
+    <script src="js/main.js?84"></script>
 
 <!-- AREA-END -->
@@ -42,19 +42,19 @@
 	    <li><a href="#">File</a>
 	      <ul>
-		<li><a onclick="upload_to_host('data')">Save on host</a></li>
-		<li><a onclick="download_cmd('part')">Download</a></li>
-		<li><a class="disabled" >-Rename</a></li>
-		<li><a class="disabled" >-Move</a></li>
-		<li><a class="disabled" >-Delete</a></li>
-		<li><a class="disabled" >-Duplicate</a></li>
-	      </ul>
-	    </li>
-	    <li><a href="#">Dir</a>
-	      <ul>
-		<li><a class="disabled" href="#">-Create</a></li>
-		<li><a class="disabled" href="#">-Rename</a></li>
-		<li><a class="disabled" href="#">-Move</a></li>
-		<li><a class="disabled" href="#">-Delete</a></li>
-		<li><a class="disabled" href="#">-Duplicate</a></li>
+		<li><a id="data-file-upload" onclick="Globalx['data'].remotex.upload_to_host('data')">Save on host</a></li>
+		<li><a id="data-file-download" onclick="download_cmd('part')">Download</a></li>
+		<li><a id="data-file-rename" class="disabled" >X Rename</a></li>
+		<li><a id="data-file-move"class="disabled" >X Move</a></li>
+		<li><a id="data-file-delete"class="disabled" >X Delete</a></li>
+		<li><a id="data-file-duplicate"class="disabled" >X Duplicate</a></li>
+	      </ul>
+	    </li>
+	    <li id="data-menu-dir" class="disabled"><a href="#">Dir</a>
+	      <ul class="disabled">
+		<li id="data-dir-create" class="disabled"><a class="disabled" href="#">X Create</a></li>
+		<li id="data-dir-rename" class="disabled"><a href="#">X Rename</a></li>
+		<li id="data-dir-move" class="disabled"><a class="disabled" href="#">X Move</a></li>
+		<li id="data-dir-delete" class="disabled"><a class="disabled" href="#">X Delete</a></li>
+		<li id="data-dir-duplicate" class="disabled"><a class="disabled" href="#">X Duplicate</a></li>
 	      </ul>
 	    </li>
@@ -65,14 +65,10 @@
 	    <li><a href="#">Build</a>
 	      <ul>
-		<li><a href="#">Build</a></li>
-		<li><a href="#" onclick="get_filelist()">Get FileList</a></li>
-		<li><a href="#" onclick="update_filelist()">Forced to get FileList</a></li>
-		<li><a href="#" onclick="restore_filelist(0, '/rtk/fmp_kernel')">Restore FileList</a></li>
-	      </ul>
-	    </li>
-	    <li class="disabled"><a href="#">History</a>
-	      <ul>
-              </ul>
-
+		<li><a id="data-build-build" href="#">Build</a></li>
+		<li><a id="data-build-get-filelist" href="#" onclick="get_filelist()">Get FileList</a></li>
+		<li><a id="data-build-forced-to-get-filelist" href="#" onclick="update_filelist()">Forced to get FileList</a></li>
+		<li><a id="data-build-restore-filelist" href="#" onclick="restore_filelist(0, '/rtk/fmp_kernel')">Restore FileList</a></li>
+	      </ul>
+	    </li>
 	    <li><a href="#">config</a>
 	      <ul>
@@ -84,4 +80,8 @@
 	      </ul>
 	    </li>
+	    <li class="disabled"><a href="#">History</a>
+	      <ul>
+              </ul>
+
 	  </ul>
 	</div>
@@ -94,9 +94,10 @@
 	  <input type="text" id="data-filelist_key" value="/" />
 	  <label id="data-bookmark_label">
-<!--	    <input type="checkbox" id="data-bookmark_op" value="2" onclick="bookmark_op('data')"> -->
-	    <input type="checkbox" id="data-bookmark_op" disabled>
+	    <input type="checkbox" id="data-bookmark_op" >
 	    BK
 	  </label>
 	  <a id="data-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="data-down-url"></a>
+	  <a id="data-partial-down-url"></a>
 	</div>
 	<div id="data-side"  ></div>
@@ -110,19 +111,19 @@
 	  <li><a href="#">File</a>
 	    <ul>
-	      <li><a onclick="upload_to_host('data')">Save on host</a></li>
-	      <li><a onclick="download_cmd('part')">Download</a></li>
-	      <li><a class="disabled" >-Rename</a></li>
-	      <li><a class="disabled" >-Move</a></li>
-	      <li><a class="disabled" >-Delete</a></li>
-	      <li><a class="disabled" >-Duplicate</a></li>
-	    </ul>
-	  </li>
-	  <li><a href="#">Dir</a>
-	    <ul>
-	      <li><a class="disabled" href="#">-Create</a></li>
-	      <li><a class="disabled" href="#">-Rename</a></li>
-	      <li><a class="disabled" href="#">-Move</a></li>
-	      <li><a class="disabled" href="#">-Delete</a></li>
-	      <li><a class="disabled" href="#">-Duplicate</a></li>
+	      <li><a id="output-file-upload" onclick="upload_to_host('data')">Save on host</a></li>
+	      <li><a id="output-file-download" class="disabled" >-Download</a></li>
+	      <li><a id="output-file-rename" class="disabled" >-Rename</a></li>
+	      <li><a id="output-file-move" class="disabled" >-Move</a></li>
+	      <li><a id="output-file-delete" class="disabled" >-Delete</a></li>
+	      <li><a id="output-file-duplicate" class="disabled" >-Duplicate</a></li>
+	    </ul>
+	  </li>
+	  <li class="disabled"><a href="#">Dir</a>
+	    <ul>
+	      <li><a id="output-dir-create" class="disabled" href="#">-Create</a></li>
+	      <li><a id="output-dir-rename" class="disabled" href="#">-Rename</a></li>
+	      <li><a id="output-dir-move" class="disabled" href="#">-Move</a></li>
+	      <li><a id="output-dir-delete" class="disabled" href="#">-Delete</a></li>
+	      <li><a id="output-dir-duplicate" class="disabled" href="#">-Duplicate</a></li>
 	    </ul>
 	  </li>
@@ -147,9 +148,10 @@
 	  <input type="text" id="output-filelist_key" value="/" />
 	  <label id="output-bookmark_label">
-<!--	    <input type="checkbox" id="output-bookmark_op" onclick="bookmark_op('data')"> -->
-	    <input type="checkbox" id="output-bookmark_op" disabled>
+	    <input type="checkbox" id="output-bookmark_op">
 	    BK
 	  </label>
 	  <a id="output-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="output-down-url"></a>
+	  <a id="output-partial-down-url"></a>
 
 	</div>
@@ -165,23 +167,23 @@
 	  <li><a href="#">File</a>
 	    <ul>
-	      <li><a onclick="upload_to_host('data')">Save on host</a></li>
-	      <li><a onclick="download_cmd('part')">Download</a></li>
-	      <li><a class="disabled" >-Rename</a></li>
-	      <li><a class="disabled" >-Move</a></li>
-	      <li><a class="disabled" >-Delete</a></li>
-	      <li><a class="disabled" >-Duplicate</a></li>
-	    </ul>
-	  </li>
-	  <li><a href="#">Dir</a>
-	    <ul>
-	      <li><a class="disabled" href="#">-Create</a></li>
-	      <li><a class="disabled" href="#">-Rename</a></li>
-	      <li><a class="disabled" href="#">-Move</a></li>
-	      <li><a class="disabled" href="#">-Delete</a></li>
-	      <li><a class="disabled" href="#">-Duplicate</a></li>
+	      <li><a id="setting-file-upload" onclick="upload_to_host('data')">Save on host</a></li>
+	      <li><a id="setting-file-download" onclick="download_cmd('part')">Download</a></li>
+	      <li><a id="setting-file-rename" class="disabled" >-Rename</a></li>
+	      <li><a id="setting-file-move" class="disabled" >-Move</a></li>
+	      <li><a id="setting-file-delete" class="disabled" >-Delete</a></li>
+	      <li><a id="setting-file-duplicate" class="disabled" >-Duplicate</a></li>
+	    </ul>
+	  </li>
+	  <li class="disabled"><a href="#">Dir</a>
+	    <ul>
+	      <li><a id="setting-dir-create" class="disabled" href="#">-Create</a></li>
+	      <li><a id="setting-dir-rename" class="disabled" href="#">-Rename</a></li>
+	      <li><a id="setting-dir-move" class="disabled" href="#">-Move</a></li>
+	      <li><a id="setting-dir-delete" class="disabled" href="#">-Delete</a></li>
+	      <li><a id="setting-dir-duplicate" class="disabled" href="#">-Duplicate</a></li>
 	    </ul>
 	  </li>
 	  <li><a href="#">Bookmark</a>
-            <ul id="output-bookmark">
+            <ul id="setting-bookmark">
 	    </ul>
 	  </li>
@@ -202,9 +204,10 @@
 	  <input type="text" id="setting-filelist_key" value="/" />
 	  <label id="setting-bookmark_label">
-<!--	    <input type="checkbox" id="setting-bookmark_op" onclick="bookmark_op('data')"> -->
-	    <input type="checkbox" id="setting-bookmark_op" disabled>
+	    <input type="checkbox" id="setting-bookmark_op" >
 	    BK
 	  </label>
 	  <a id="setting-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="setting-down-url"></a>
+	  <a id="setting-partial-down-url"></a>
 	</div>
 	<div id="setting-side">
@@ -234,3 +237,2 @@
     </script>
   </body>
-</html>
Index: /branches/testa-single-bookmark/js/bookmarkmenu.js
===================================================================
--- /branches/testa-single-bookmark/js/bookmarkmenu.js	(revision 35)
+++ /branches/testa-single-bookmark/js/bookmarkmenu.js	(revision 36)
@@ -1,28 +1,51 @@
 class BookmarkMenu {
-    constructor(num, part) {
-	this.num = num
-	this.part = part
-	this.bookmark_op_sel = Globalx[part].bookmark_op_sel
-	this.bookmark_mgr = Globalx[part].bookmark_mgr
-	this.bookmark_sel = Globalx[part].bookmark_sel
-	this.key_sel = Globalx[part].key_sel
-	this.editor = Globalx[part].editor
-	this.textarea_sel = Globalx[part].textarea_sel
-	this.menu_sel = Globalx[part].menu_sel
+    constructor( bookmark_displayname_max_length , mgr ) {
+	this.bookmark_displayname_max_length = bookmark_displayname_max_length
+	this.bookmark_mgr = mgr
+    }
+
+    dlg(){
+console.log("BookmarkMenu dlg()")
+	$( '#bookmark_displayname' ).prop( 'maxlength' , Globalx.bookmark_displayname_max_length)
+	$('#bookmarkDlg').dialog({
+	    autoOpen: false,
+	    modal: true,
+	    buttons: {
+		"OK": function() {
+		    const part = Globalx.parts[ Globalx.index ]
+		    const path = $( '#bookmark_path' ).val()
+		    const displayname = $( '#bookmark_displayname' ).val()
+		    Globalx.bookmarkmenu.register_bookmark(path, displayname )
+		    $(this).dialog("close")},
+		"Cancel": function() {
+		    const part = Globalx.parts[ Globalx.index ]
+		    const bookmark_cb = $( Globalx[part].bookmark_op_sel )
+		    bookmark_cb.prop('checked', false)
+		    $(this).dialog("close")
+		}
+	    }
+	}) 
     }
 
     add_bookmark() {
-	$( '#bookmark_displayname' ).val( Globalx[this.part].bookmark_mgr.get_restricted_display_name( Globalx[this.part].key ) )
-	$( '#bookmark_path' ).val( Globalx[this.part].key )
+	let part = Globalx.parts[ Globalx.index ]
+console.log("add_bookmark part=" + part)
+	$( '#bookmark_displayname' ).val( this.bookmark_mgr.get_restricted_display_name( Globalx[part].key ) )
+	$( '#bookmark_path' ).val( Globalx[part].key )
 	$( '#bookmarkDlg' ).dialog("open")
     }
 
     remove_bookmark() {
-	this.bookmark_mgr.remove( Globalx[this.part].key )
-	this.rebuild_bookmark_menu()
+	let part = Globalx.parts[ Globalx.index ]
+console.log("remove_bookmark part=" + part)
+	this.bookmark_mgr.remove( part, Globalx[part].key )
+	this.rebuild_bookmark_menu(part)
     }
 
     bookmark_op() {
-	if( $( this.bookmark_op_sel ).is(':checked') == true ){
+	let part = Globalx.parts[ Globalx.index ]
+	let bookmark_op_sel = Globalx[part].bookmark_op_sel
+console.log("bookmark_op part=" + part + " bookmark_op_sel=" + bookmark_op_sel)
+	if( $( bookmark_op_sel ).is(':checked') == true ){
 	    this.add_bookmark()
 	}
@@ -32,24 +55,52 @@
     }
 
-    set_click_handler() {
-	console.log( "set_click_handler() part=" + this.part + " num=" + this.num )
-	$( this.bookmark_op_sel ).on( 'click' , () => { this.bookmark_op() } )
+    set_click_handler(part) {
+	let bookmark_op_sel = Globalx[part].bookmark_op_sel
+
+	console.log( "set_click_handler() part=" + part + " bookmark_op_sel=" + bookmark_op_sel )
+	$( bookmark_op_sel ).on( 'click' , () => { 
+	    console.log("bookmark_op_sel clicked")
+	    this.bookmark_op() } )
     }
 
-    register_bookmark_( path, displayname ) {
-	this.bookmark_mgr.add( path , displayname )
-	this.rebuild_bookmark_menu()
+    register_bookmark( path, displayname ) {
+	let part = Globalx.parts[ Globalx.index ]
+	console.log("BookmarkMenu register_bookmark part="+part+" path="+path)
+	this.bookmark_mgr.add( part, path , displayname )
+	this.rebuild_bookmark_menu(part)
     }
 
-    rebuild_bookmark_menu() {
-	$( this.bookmark_sel ).empty()
+    rebuild_bookmark_menu(part) {
+	let num = Globalx.num
+	let bookmark_sel = Globalx[part].bookmark_sel
+console.log("BookmarkMenu rebuld_bookmark_menu num="+num+ " part="+part)
+	$( bookmark_sel ).empty()
 
-	const array = this.bookmark_mgr.get_paths()
+	const array = this.bookmark_mgr.get_paths(part)
+console.log("BookmarkMenu rebuld_bookmark_menu array=" + array )
 
+	let content = null
+	let item = null
 	array.map( ( path ) => {
-	    const display_name = this.bookmark_mgr.display_name( path )
-	    content = `<li><a href="#" onclick="this.bookmark_action( '${this.part}' , '${this.path}' )">${display_name}</a></li>`;
-	    $( this.bookmark_sel ).append(content);
+	    const display_name = this.bookmark_mgr.display_name( part, path )
+	    content = `<li><a href="#" >${display_name}</a></li>`;
+	    console.log("BookmarkMenu rebuld_bookmark_menu content=" + content)
+	    $( bookmark_sel ).append( content );
+	    console.log( "bookmark_sel="+bookmark_sel)
+	    item = $( bookmark_sel ).last()
+	    console.log( "item=" + item )
+	    item.on('click' , () => {
+		console.log("BookmarkMenu rebuld_bookmark_menu bookmark_action part="+part + " path" + path )
+		this.bookmark_action( part , path )
+	    } )
+	    console.log("BookmarkMenu rebuld_bookmark_menu path=" + path )
 	})
+    }
+
+    set_globalx_item_name( part, item_name ) {
+	Globalx[part].item_name = item_name
+	let dl = $( Globalx[part].download_sel )
+	dl.attr('download' , Globalx[part].item_name)
+	dl.removeAttr('href')
     }
 
@@ -62,31 +113,31 @@
 	    return
 	}
-
-	let realData = Globalx.remotex.get_filelist( this.num )
+	let num = Globalx.num
+	let jsondata = Globalx.storagex.get_filelist( Globalx.num , part)
 	Globalx[part].key = key
 	Globalx[part].key_indicate_file = false;
 
 	this.set_globalx_item_name( part, key )
-	$( this.key_sel ).val( key )
 
-	if( realData[Globalx[part].key].length == 0 ){
+	$( Globalx[part].key_sel ).val( key )
+console.log("jsondata=" + jsondata)
+	if( jsondata[key].length == 0 ){
 	    Globalx[part].key_indicate_file = true;
-	    Globalx.remotex.get_content( this.num, this.part, Globalx[part].key , (content) => {
-		this.editor.getSession().setValue( content );
-		$( this.textarea_sel ).val( content );
+	    Globalx.remotex.get_content( num, part, Globalx[part].key , (content) => {
+		Globalx[part].editor.getSession().setValue( content )
+		$( Globalx[part].textarea_sel ).val( content )
 	    });
 	}
 	else{
 	    Globalx[part].key_indicate_file = false
-	    this.editor.getSession().setValue( "" );
-	    $( this.textarea_sel ).val( "" );
+	    Globalx[part].editor.getSession().setValue( "" );
+	    $( Globalx[part].textarea_sel ).val( "" );
 	}
-	const bookmark_cb = $( this.bookmark_op_sel )
+	const bookmark_cb = $( Globalx[part].bookmark_op_sel )
 	bookmark_cb.prop('checked', true)
 
-	$( this.menu_sel ).empty()
+	$( Globalx[part].menu_sel ).empty()
 
-	this.rebuild_bookmark_menu()
-	// this.make_menu_item_list(realData, Globalx[part].key)
+	this.make_menu_item_list(jsondata, Globalx[part].key)
     }
 }
Index: /branches/testa-single-bookmark/js/bookmarkmgr.js
===================================================================
--- /branches/testa-single-bookmark/js/bookmarkmgr.js	(revision 35)
+++ /branches/testa-single-bookmark/js/bookmarkmgr.js	(revision 36)
@@ -1,61 +1,70 @@
 class BookmarkMgr {
-    constructor( max_display_name_length ) {
-	this.paths = []
+    constructor( max_display_name_length , parts ) {
+	this.paths = {}
+
+	this.parts = parts
+	this.parts.map( (part) => {
+	    this.paths[part] = []
+	} )
 	this.items = {}
+	this.parts.map( (part) => {
+	    this.items[part] = {}
+	} )
 	this.max_display_name_length = max_display_name_length
     }
 
-    add( path , display_name = null){
-	let result = this.paths.indexOf( path )
+    add( part, path , display_name = null){
+console.log("BookmarkMgr add part=" + part + " path="+ path)
+	let result = this.paths[part].indexOf( path )
 	if( result < 0 ){
-	    this.paths.push( path )
-	    this.items[ path ] = new Bookmark( path , this.max_display_name_length , display_name )
+	    this.paths[part].push( path )
+	    this.items[part][ path ] = new Bookmark( path , this.max_display_name_length , display_name )
 	}
-	return this.items[ path ]
+	return this.items[part][ path ]
     }
 
-    remove( path ){
-	let result = this.paths.indexOf( path )
+    remove( part, path ){
+	let result = this.paths[part].indexOf( path )
 	if( result >= 0 ){
-	    delete this.items[ path ]
-	    delete this.paths[ result ]
+	    delete this.items[part][ path ]
+	    delete this.paths[part][ result ]
 	}
     }
 
-    get( path ){
+    get( part, path ){
 	let ret = null
-	let result = this.paths.indexOf( path )
+	let result = this.paths[part].indexOf( path )
 	if( result >= 0 ){
-	    ret = this.items[ path ]
+	    ret = this.items[part][ path ]
 	}
 	return ret
     }
 
-    display_name( path ){
-	let result = this.paths.indexOf( path )
+    display_name( part, path ){
+	let result = this.paths[part].indexOf( path )
 	let disp = null
 	if( result >= 0 ){
-	    disp = this.items[ path ].display_name
+	    disp = this.items[part][ path ].display_name
 	}
 	return disp
     }
 
-    get_paths(){
-	return this.paths
+    get_paths(part){
+	return this.paths[part]
     }
 
-    get_display_names(){
-	const array = thils.paths
+    get_display_names(part, path){
+	const array = thils.paths[part]
 	return array.map( function( path ){ 
-	    return this.items[ path ].display_name
+	    return this.items[part][ path ].display_name
 	} )
     }
 
     get_restricted_display_name( path ){
-	return path.substr( -this.max_display_name_length )
+	return path.substr( -(this.max_display_name_length) )
     }
 
-    get_items() {
-	return this.items
+    get_items(part) {
+	return this.items[part]
     }
 
Index: /branches/testa-single-bookmark/js/main.js
===================================================================
--- /branches/testa-single-bookmark/js/main.js	(revision 35)
+++ /branches/testa-single-bookmark/js/main.js	(revision 36)
@@ -1,8 +1,10 @@
 let Globalx = {};
-let GlobalxInitValue = {
+const GlobalxItems = ["output_url"]
+const GlobalxInitValue = {
     editor: null,
     key_indicate_file: false,
     key: '/'
 };
+const GlobalxInitValueItems = ["editor", "key_indicate_file", "key"]
 
 function init_globalx_storagex() {
@@ -11,19 +13,48 @@
 
 function init_globalx() {
-    Globalx.num = 0;
-    Globalx.index = 0;
+    Globalx.num = 0
+    Globalx.index = 0
     Globalx.parts = ["data", "output", "setting"]
     Globalx.bookmark_displayname_max_length = 18
+    Globalx.output_url = null
 
     tab_init()
     topmenu_init()
     Globalx.remotex = new Remotex('php/content.php')
+    console.log( "init_globalx 1 : Globalx.bookmark_mgr="  + Globalx.bookmark_mgr )
+    if( Globalx.bookmark_mgr === null || Globalx.bookmark_mgr === undefined ){
+	Globalx.bookmark_mgr = new BookmarkMgr(Globalx.bookmark_displayname_max_length, Globalx.parts)
+    }
+    console.log( "init_globalx 2 : Globalx.bookmark_mgr="  + Globalx.bookmark_mgr )
+    Globalx.bookmarkmenu = null
 }
 
-function menu_action(part, item_name , up_flag = false) {
-    //console.log("menu_action 1")
-    Globalx[part].sidemenu.menu_action(item_name , up_flag)
-    //console.log("menu_action 2")
+async function get_output_url_async( func ){
+    let realData = Globalx.storagex.get_output_url()
+
+    if( realData === undefined || realData === null ){
+	await Globalx.remotex.get_output_url( func )
+    }
+    else{
+	const obj = Globalx.storagex.get_output_url( num , part )
+	Globalx.output_url = obj.output_url
+	Globalx.storagex.save_as_info_from_globalx()
+    }
+} 
+
+async function setup(){
+    get_output_url_async( (text) => {
+	let str = text
+	let obj
+	if( str.match( /{.*}/ ) === null ){
+	    obj = {}
+	}
+	else {
+	    obj = JSON.parse( str )
+	}
+	Globalx.storagex.change_cache( obj, this.num , this.part )
+    } )
 }
+
 
 function main() {
@@ -32,25 +63,23 @@
     let need_to_save = Globalx.storagex.restore_globalx_from_info()
     init_globalx()
+    setup()
+
+    console.log("##### Globalx.bookmarkmenu=" + Globalx.bookmarkmenu)
+    console.log("##### Globalx.bookmark_mgr=" + Globalx.bookmark_mgr)
+    Globalx.bookmarkmenu = new BookmarkMenu( Globalx.bookmark_displayname_max_length , Globalx.bookmark_mgr )
+    Globalx.bookmarkmenu.dlg()
 
     Globalx.parts.map( ( part ) => {
 	set_globalx_editor(part)
-	Globalx[ part ].bookmarkmenu = new BookmarkMenu( Globalx.num, part )
+
 	Globalx[ part ].sidemenu = new SideMenu( Globalx.num, part )
 	Globalx[ part ].sidemenu.setup(`#${part}-side`)
-	Globalx[ part ].bookmarkmenu.set_click_handler()
-	Globalx[ part ].bookmarkmenu.rebuild_bookmark_menu(part)
 
 	$( Globalx[ part ].download_sel ).on('click', {num: Globalx.num, part: part}, handleDownload)
 	$( Globalx[ part ].textarea_sel ).val("");
+	Globalx.bookmarkmenu.rebuild_bookmark_menu(part)
+	Globalx.bookmarkmenu.set_click_handler(part)
     } )
-/*
-    Globalx.parts.map( (part) => {
-	Globalx[ part ].sidemenu.setup(`#${part}-side`)
-	Globalx[ part ].bookmarkmenu.rebuild_bookmark_menu(part)
 
-	$( Globalx[part].download_sel ).on('click', {num: Globalx.num, part: part}, handleDownload)
-	$( Globalx[part].textarea_sel ).val("");
-    }
-  */  
     if( need_to_save ){
 	// LocalStorageにまだ保存していない場合、ここで保存しておく
@@ -58,23 +87,8 @@
 	Globalx.storagex.save_as_info_from_globalx( (data) => { console.log( "data=" + data ) } )
     }
-
-    let part = "data"
-    $( '#bookmark_displayname' ).prop( 'maxlength' , Globalx.bookmark_displayname_max_length)
-    $('#bookmarkDlg').dialog({
-	autoOpen: false,
-	modal: true,
-	buttons: {
-	    "OK": function() {
-		part = Globalx.parts[ Globalx.index ]
-		path = $( '#bookmark_path' ).val()
-		displayname = $( '#bookmark_displayname' ).val()
-		register_bookmark_( part , path, displayname )
-		$(this).dialog("close")},
-	    "Cancel": function() {
-		bookmark_cb.prop('checked', false)
-		$(this).dialog("close")
-	    }
-	}
-    }) 
+/*
+    Object.keys(Globalx).forEach((key) => {
+	console.log(key)
+    }) */
 }
 
@@ -83,5 +97,5 @@
       Globalx[part] = {
 	  editor_id: `${part}-editor`,
-	  editor: null,
+	  editor: null, /* variable */
 	  textarea_sel: `textarea[name=${part}-editor-t`,
 /**/
@@ -91,9 +105,11 @@
           item_name: "",
 /**/
-	  bookmarks: [],
-          key_indicate_file: false,
-	  key: '/',
+	  bookmarks: [], 
+          key_indicate_file: false, /* variable */
+	  key: '/', 
 	  key_sel: `#${part}-filelist_key`,
-          download_sel: `#${part}-down-download`
+          download_sel: `#${part}-down-download`,
+          download_url_sel: `#${part}-down-url`,
+          download_partial_url_sel: `#${part}-partial-down-url`
       }
       editor_config(part);
@@ -102,5 +118,4 @@
       Globalx[part].bookmark_sel = `#${Globalx[part].bookmark_id}`
       Globalx[part].bookmark_op_sel = `#${Globalx[part].bookmark_op_id}`
-      Globalx[part].bookmark_mgr = new BookmarkMgr( Globalx.bookmark_displayname_max_length )
 }
 
@@ -113,8 +128,8 @@
       editor.getSession().setTabSize(2);
       Globalx[part].editor = editor;
-      let textarea = $( Globalx[part].textarea_sel );
-      Globalx[part].textarea = textarea;
-      editor.getSession().on("change", function () {
-          Globalx[part].textarea.val(editor.getSession().getValue());
+
+      let textarea = $( Globalx[part].textarea_sel )
+      editor.getSession().on("change", (textarea) => {
+          textarea.val(editor.getSession().getValue());
       });
 }
Index: /branches/testa-single-bookmark/js/remotex.js
===================================================================
--- /branches/testa-single-bookmark/js/remotex.js	(revision 35)
+++ /branches/testa-single-bookmark/js/remotex.js	(revision 36)
@@ -3,6 +3,6 @@
     constructor( filename ){
 	this.filename = filename
-//	this.num = num
-//	this.part = part
+	//	this.num = num
+	//	this.part = part
     }
 
@@ -17,5 +17,5 @@
 
     async get_filelist_from_remote( num, part, func ) {
-console.log("remotex get_filelist_from_remote num=" + num + " part=" + part )
+	console.log("remotex get_filelist_from_remote num=" + num + " part=" + part )
 	let param_array = [['cmd', 'get_filelistx'], ['num', num ], ['part', part ]]
 	await this.fetchx( this.filename , param_array, func )
@@ -23,5 +23,5 @@
 
     async update_filelist( num, part, func ) {
-console.log("remotex update_filelist num=" + num + " part=" + part )
+	console.log("remotex update_filelist num=" + num + " part=" + part )
 	let param_array = [['cmd', 'update_filelistx'], ['num', num ], ['part', part ]]
 	await this.fetchx( this.filename , param_array, func )
@@ -29,5 +29,5 @@
 
     async get_content(num, part, path , func) {
-console.log("remotex get_content num=" + num + " part=" + part )
+	console.log("remotex get_content num=" + num + " part=" + part )
 	console.log("part=" + part)
 	let param_array = [['cmd', 'get_content'], ['num', num ], ['part', part ], ['path', path]]
@@ -35,14 +35,71 @@
     }
 
+    async get_output_url(num, func) {
+console.log("get_output_url")
+	console.log("remotex get_output_url num=" + num )
+	let param_array = [['cmd', 'get_output_url'], ['num', num ] ]
+	await this.fetchx( this.filename , param_array, func )
+    }
+
     async fetchx( filename, param_array, func) {
+console.log("fetchx func" + func)
 	let params = this.make_url_params( param_array )
 	fetch(`${filename}?${params}`)
 	    .then((response) => response.text())
-	    .then((text) => { console.log(func) ; func(text)})
+	    .then((text) => { console.log(func) ; if( func !== undefined ){func(text)} else { console.log("func=undefined")} })
+	    .catch((error) => console.log(error));
+    }
+
+    upload_to_host(part) {
+	if( Globalx[part].key_indicate_file === true ){
+	    let textarea = $( Globalx[part].textarea_sel )
+	    upload_content(Globalx.num, part, Globalx[part].key, textarea.val())
+	}
+    }
+
+    upload_content(num, part, path, content) {
+	let form = document.createElement('form');
+	let req_content = document.createElement('input');
+	let req_path = document.createElement('input');
+	let req_cmd = document.createElement('input');
+	let req_num = document.createElement('input');
+
+	document.body.appendChild(form);
+	req_content.type = 'hidden';
+	req_content.name = 'mytext';
+	req_content.value = content;
+	
+	req_path.type = 'hidden';
+	req_path.name = 'path';
+	req_path.value = path;
+	
+	req_cmd.type = 'hidden';
+	req_cmd.name = 'cmd';
+	req_cmd.value = 'upload_content';
+	
+	req_num.type = 'hidden';
+	req_num.name = 'num';
+	req_num.value = num + '';
+	
+	form.appendChild(req_content);
+	form.appendChild(req_path);
+	form.appendChild(req_cmd);
+	form.appendChild(req_num);
+	
+	// FormDataオブジェクトを作成する
+	var form_data = new FormData(form);
+
+	fetch('php/content.php', {
+	    method: 'POST',
+	    mode: 'same-origin', /* 'no-cors' 'cors' 'same-origin' */
+	    body: form_data
+	})
+	    .then((response) => response.text())
+	    .then((data) => console.log(data))
 	    .catch((error) => console.log(error));
     }
 
     handleDownload(e) {
-	let dl = document.getElementById("data-down-download")
+	let dl = document.getElementById(`${e.data.part}-down-download`)
 
 	if( Globalx[ e.data.part ].key_indicate_file === true ){
Index: /branches/testa-single-bookmark/js/sidemenu.js
===================================================================
--- /branches/testa-single-bookmark/js/sidemenu.js	(revision 35)
+++ /branches/testa-single-bookmark/js/sidemenu.js	(revision 36)
@@ -70,7 +70,4 @@
 
     menu_action( item_name , up_flag = false ) {
-	if( Globalx[this.part].key != '/' ){
-	    
-	}
 	let part = this.part
 	let jsondata = Globalx.storagex.get_filelist( Globalx.num , part)
@@ -124,4 +121,10 @@
 	    if( jsondata[Globalx[part].key].length == 0 ){
 		Globalx[part].key_indicate_file = true;
+		let url = ""
+		$( Globalx[part].download_url_sel ).val( Globalx[part].key )
+		$( Globalx[part].download_url_sel ).attr('href' , url )
+		$( Globalx[part].download_partial_url_sel ).val( Globalx[part].key + "(parial)" )
+		url = url + ".tmp"
+		$( Globalx[part].download_partial_url_sel ).attr('href' , url )
 		Globalx.remotex.get_content( this.num, this.part, Globalx[part].key , (content) => {
 		    //console.log("content=" + content)
@@ -135,16 +138,27 @@
     make_menu_item_list( realData , key){
 	let content = null
+	let item = null
 	let ary = realData[ key ]
 	
 	let name = '..(Up)'
-	content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="menu_action( '${this.part}', '${this.name}', true)">${name}</div></li>`;
+	content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu">${name}</div></li>`;
+	// content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="menu_action( '${this.part}', '${this.name}', true)">${name}</div></li>`;
 	//	content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="this.menu_action_2">${name}</div></li>`;
 	$( this.menu_sel ).append(content);
+	item = $( this.menu_sel ).last()
+	item.on('click' , () => {
+	    this.menu_action( key , true )
+	} )
 
 	if( ary !== undefined ){
 	    ary.map( ( item_name ) => {
-		content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="menu_action( '${this.part}', '${item_name}' , false)">${item_name}</div></li>`;
+		content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu">${item_name}</div></li>`;
+		// content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="menu_action( '${this.part}', '${item_name}' , false)">${item_name}</div></li>`;
 		//	    content = `<li class="ui-menu-item"><div class="ui-menu-item-wrapper hasmenu" onclick="this.menu_action_2">${item_name}</div></li>`;
 		$( this.menu_sel ).append(content);
+		item = $( this.menu_sel ).last()
+		item.on('click' , () => {
+		    this.menu_action( item_name )
+		} )
 	    })
 	}
@@ -153,5 +167,5 @@
     set_globalx_item_name( item_name ) {
 	Globalx[this.part].item_name = item_name
-	let dl = $( '#download' )
+	let dl = $( Globalx[ this.part ].download_sel )
 	dl.attr('download' , Globalx[this.part].item_name)
 	dl.removeAttr('href')
@@ -175,2 +189,8 @@
     }
 }
+
+/*
+function menu_action(part, item_name , up_flag = false) {
+    Globalx[part].sidemenu.menu_action(item_name , up_flag)
+}
+*/
Index: /branches/testa-single-bookmark/js/storagex.js
===================================================================
--- /branches/testa-single-bookmark/js/storagex.js	(revision 35)
+++ /branches/testa-single-bookmark/js/storagex.js	(revision 36)
@@ -2,5 +2,5 @@
     constructor () {
 	this._globalStorage = {}
-	this._items = ["num", "index", "parts"]
+	this._items = GlobalxItems
     }
 
@@ -36,5 +36,5 @@
 	this.copy_obj_with_part(info, Globalx, part)
 	
-	info[part].bookmark_mgr = this.convert_to_plain_object_from_bookmark_mgr(Globalx[part].bookmark_mgr)
+	info.bookmark_mgr = this.convert_to_plain_object_from_bookmark_mgr(Globalx.bookmark_mgr)
     }
 
@@ -42,4 +42,9 @@
 	this._globalStorage[key] = obj
 	localStorage.setItem(key , JSON.stringify(obj) )
+    }
+
+    change_cache_x( obj ){
+	this._globalStorage[key] = obj
+//	localStorage.setItem(key , JSON.stringify(this._globalStorage[key]) )
     }
 
@@ -50,42 +55,65 @@
     }
 
-    convert_to_array_from_bookmark_mgr(mgr){
-	return {
-	    paths: mgr.get_paths(),
-	    items: mgr_to_array(mgr),
-	    max_display_name_length: mgr.max_display_name_length()
-	}
+    async convert_mgr_object_async( mgr, array ){
+	return await array.map( (path) => {
+	    const item = mgr.get(part , path)
+	    return { 
+		part: part,
+		path: item.path,
+		display_name: item.display_name
+	    }
+	})
     }
 
     convert_to_plain_object_from_bookmark_mgr(mgr){
-	const paths = mgr.get_paths()
-	const new_bk_items = paths.map( ( path ) => {
-	    let ret = {
-		path: "",
-		display_name: ""
-	    }
-	    item = mgr.get(path)
-	    if( item != null ){
-		ret.path = path
-		ret.display_name = item.display_name
-	    }
-	    return ret
-	} )
-	
-	return {
-	    max_display_name_length: mgr.max_display_name_length,
-	    items: new_bk_items
-	}
+	let obj = {}
+	obj.bms = {}
+
+	Object.entries( mgr.paths ).map( ([part, array]) => {
+	    obj.bms[part] = this.convert_mgr_object_async(mgr, array)
+	} )
+
+	obj.max_display_name_length = mgr.max_display_name_length
+	obj.parts = mgr.parts
+
+	return obj
+    }
+
+    convert_to_plain_object_from_bookmark_mgr0(mgr){
+	let obj = {}
+	obj.bms = Object.fromEntries( Object.entries( mgr.paths ).map( ([part, array]) => {
+	    const bk_items = this.convert_mgr_object_async(mgr, array)
+
+	    ([part, bk_items])
+	} ) )
+	obj.max_display_name_length = mgr.max_display_name_length
+	obj.parts = mgr.parts
+
+	return obj
     }
 
     copy_obj_with_part(to_obj, from_obj, part){
-	const items = ["editor_id", "textarea_sel" , "menu_id", "bookmark_id", "bookmark_op_id", "item_name", "bookmarks", "key_sel", "download_sel", "menu_sel", "bookmark_sel", "bookmark_op_sel", "bookmark_mgr" ]
-	const init_value_items = ["editor", "key_indicate_file", "key"]
-	
+	const items = [
+	    "editor_id", 
+	    "textarea_sel" , 
+	    "menu_id", 
+	    "bookmark_id", 
+	    "bookmark_op_id", 
+	    "item_name", 
+	    "bookmarks", 
+	    "key",
+	    "key_sel", 
+	    "download_sel", 
+	    "download_url_sel", 
+	    "download_partial_url_sel", 
+	    "menu_sel" ,
+	    "bookmark_mgr" ,
+	    "bookmark_op_sel" 
+	]
 	if( to_obj[part] === undefined ){
 	    to_obj[part] = {}
 	}
 	this.copy_object( to_obj[part], from_obj[part], items )
-	this.copy_object( to_obj[part], GlobalxInitValue, init_value_items )
+	this.copy_object( to_obj[part], GlobalxInitValue, GlobalxInitValueItems )
     }
 
@@ -115,5 +143,5 @@
 	if( str ){
 	    ret = this._globalStorage[key] = JSON.parse(str)
-//	    console.log("rfl 1 key=" + key + " str=" + str)
+//	    console.log("### rfl 1 key=" + key + " str=" + str)
 	}
 	else{
@@ -122,5 +150,5 @@
 	    }
 	    ret = this._globalStorage[key]
-	    console.log("rfl 2 key=" + key + " undefined")
+//	    console.log("### rfl 2 key=" + key + " undefined")
 	}
 
@@ -132,5 +160,5 @@
 	const info = this.restore_info()
 	if( info !== undefined && info !== null ){
-	    this.restore_info_to_globalx_with_items(info, this._items)
+	    need_to_save = this.restore_info_to_globalx_with_items(info, this._items)
 	}
 	else{
@@ -142,23 +170,39 @@
 
     convert_to_bookmark_mgr_from_plain_object(mgr) {
-	let new_mgr = new BookmarkMgr( mgr.max_display_name_length )
-	
-	const bk_items = mgr.items
-	bk_items.map( (bk_item) => {
-	    return new_mgr.add( bk_item.path , bk_item.display_name)
-	})
+	let new_mgr = new BookmarkMgr( mgr.max_display_name_length , mgr.parts)
+	
+	const bk_items = mgr.bms
+	Object.entries( ([part, bk_items]) => {
+	    new_bk_items = bk_items.map( (bk_item) => {
+		return new_mgr.add( bk_item.part , bk_item.path , bk_item.display_name)
+	    } )
+	    [part, new_bk_items]
+	} )
+	
 	return new_mgr
     }
 
     restore_info_to_globalx_with_items(info, items){
+	let need_to_save = true
+
 	this.copy_object( Globalx, info, items )
-	
-	info.parts.map( (part) => {
-	    this.restore_globalx_from_info_part(info , part)
-	} )
+
+	if( info.bookmark_mgr !== undefined ){
+	    info.bookmark_mgr = this.convert_to_bookmark_mgr_from_plain_object(info.bookmark_mgr)
+	
+	    if( info.parts !== undefined ){
+		info.parts.map( (part) => {
+		    this.restore_globalx_from_info_part(info , part)
+		} )
+		need_to_save = false
+	    }
+	}
+	else{
+	    Globalx.bookmark_mgr = null
+	}
+	return need_to_save
     }
 
     restore_globalx_from_info_part(info , part){
-	info[part].bookmark_mgr = this.convert_to_bookmark_mgr_from_plain_object(info[part].bookmark_mgr)
 	this.copy_obj_with_part(Globalx, info, part)
     }
@@ -168,5 +212,7 @@
     }
 
-
+    get_output_url() {
+	return this._globalStorage.output_url
+    }
 
     reset_info = () => {
@@ -186,4 +232,5 @@
 	localStorage.clear()
     }
+
     show_localstorage() {
 	window.open('local_storage.html', '_blank')
Index: /branches/testa-single-bookmark/tmp/script-area.txt
===================================================================
--- /branches/testa-single-bookmark/tmp/script-area.txt	(revision 35)
+++ /branches/testa-single-bookmark/tmp/script-area.txt	(revision 36)
@@ -13,5 +13,4 @@
     <script src="js/bookmarkmgr.js?<%= num %>"></script>
     <script src="js/bookmarkmenu.js?<%= num %>"></script>
-    <script src="js/bookmarkdlg.js?<%= num %>"></script>
     <script src="js/tab.js?<%= num %>"></script>
     <script src="js/topmenu.js?<%= num %>"></script>
Index: /branches/testa-single-bookmark/tmp/tmp.txt
===================================================================
--- /branches/testa-single-bookmark/tmp/tmp.txt	(revision 35)
+++ /branches/testa-single-bookmark/tmp/tmp.txt	(revision 36)
@@ -8,21 +8,20 @@
     <link rel="stylesheet" href="./css/style.css" />
     <link href='https://fonts.googleapis.com/css?family=Varela+Round' rel='stylesheet' type='text/css'>
-    <link rel="stylesheet" href="css/style-3.css?7">
-    <link rel="stylesheet" href="css/tab.css?7">
-    <link rel="stylesheet" href="css/menu.css?7">
+    <link rel="stylesheet" href="css/style-3.css?84">
+    <link rel="stylesheet" href="css/tab.css?84">
+    <link rel="stylesheet" href="css/menu.css?84">
     <link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
     <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
     <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
     <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.5/ace.js"></script>
-    <script src="js/storagex.js?7>"></script>
-    <script src="js/sidemenu.js?7>"></script>
-    <script src="js/bookmark.js?7>"></script>
-    <script src="js/bookmarkmgr.js?7"></script>
-    <script src="js/bookmarkmenu.js?7"></script>
-    <script src="js/bookmarkdlg.js?7"></script>
-    <script src="js/tab.js?7"></script>
-    <script src="js/topmenu.js?7"></script>
-    <script src="js/remotex.js?7"></script>
-    <script src="js/main.js?7"></script>
+    <script src="js/storagex.js?84>"></script>
+    <script src="js/sidemenu.js?84>"></script>
+    <script src="js/bookmark.js?84>"></script>
+    <script src="js/bookmarkmgr.js?84"></script>
+    <script src="js/bookmarkmenu.js?84"></script>
+    <script src="js/tab.js?84"></script>
+    <script src="js/topmenu.js?84"></script>
+    <script src="js/remotex.js?84"></script>
+    <script src="js/main.js?84"></script>
 
 <!-- AREA-END -->
@@ -43,19 +42,19 @@
 	    <li><a href="#">File</a>
 	      <ul>
-		<li><a onclick="upload_to_host('data')">Save on host</a></li>
-		<li><a onclick="download_cmd('part')">Download</a></li>
-		<li><a class="disabled" >-Rename</a></li>
-		<li><a class="disabled" >-Move</a></li>
-		<li><a class="disabled" >-Delete</a></li>
-		<li><a class="disabled" >-Duplicate</a></li>
-	      </ul>
-	    </li>
-	    <li><a href="#">Dir</a>
-	      <ul>
-		<li><a class="disabled" href="#">-Create</a></li>
-		<li><a class="disabled" href="#">-Rename</a></li>
-		<li><a class="disabled" href="#">-Move</a></li>
-		<li><a class="disabled" href="#">-Delete</a></li>
-		<li><a class="disabled" href="#">-Duplicate</a></li>
+		<li><a id="data-file-upload" onclick="Globalx['data'].remotex.upload_to_host('data')">Save on host</a></li>
+		<li><a id="data-file-download" onclick="download_cmd('part')">Download</a></li>
+		<li><a id="data-file-rename" class="disabled" >X Rename</a></li>
+		<li><a id="data-file-move"class="disabled" >X Move</a></li>
+		<li><a id="data-file-delete"class="disabled" >X Delete</a></li>
+		<li><a id="data-file-duplicate"class="disabled" >X Duplicate</a></li>
+	      </ul>
+	    </li>
+	    <li id="data-menu-dir" class="disabled"><a href="#">Dir</a>
+	      <ul class="disabled">
+		<li id="data-dir-create" class="disabled"><a class="disabled" href="#">X Create</a></li>
+		<li id="data-dir-rename" class="disabled"><a href="#">X Rename</a></li>
+		<li id="data-dir-move" class="disabled"><a class="disabled" href="#">X Move</a></li>
+		<li id="data-dir-delete" class="disabled"><a class="disabled" href="#">X Delete</a></li>
+		<li id="data-dir-duplicate" class="disabled"><a class="disabled" href="#">X Duplicate</a></li>
 	      </ul>
 	    </li>
@@ -66,14 +65,10 @@
 	    <li><a href="#">Build</a>
 	      <ul>
-		<li><a href="#">Build</a></li>
-		<li><a href="#" onclick="get_filelist()">Get FileList</a></li>
-		<li><a href="#" onclick="update_filelist()">Forced to get FileList</a></li>
-		<li><a href="#" onclick="restore_filelist(0, '/rtk/fmp_kernel')">Restore FileList</a></li>
-	      </ul>
-	    </li>
-	    <li class="disabled"><a href="#">History</a>
-	      <ul>
-              </ul>
-
+		<li><a id="data-build-build" href="#">Build</a></li>
+		<li><a id="data-build-get-filelist" href="#" onclick="get_filelist()">Get FileList</a></li>
+		<li><a id="data-build-forced-to-get-filelist" href="#" onclick="update_filelist()">Forced to get FileList</a></li>
+		<li><a id="data-build-restore-filelist" href="#" onclick="restore_filelist(0, '/rtk/fmp_kernel')">Restore FileList</a></li>
+	      </ul>
+	    </li>
 	    <li><a href="#">config</a>
 	      <ul>
@@ -85,4 +80,8 @@
 	      </ul>
 	    </li>
+	    <li class="disabled"><a href="#">History</a>
+	      <ul>
+              </ul>
+
 	  </ul>
 	</div>
@@ -95,9 +94,10 @@
 	  <input type="text" id="data-filelist_key" value="/" />
 	  <label id="data-bookmark_label">
-<!--	    <input type="checkbox" id="data-bookmark_op" value="2" onclick="bookmark_op('data')"> -->
-	    <input type="checkbox" id="data-bookmark_op">
+	    <input type="checkbox" id="data-bookmark_op" >
 	    BK
 	  </label>
 	  <a id="data-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="data-down-url"></a>
+	  <a id="data-partial-down-url"></a>
 	</div>
 	<div id="data-side"  ></div>
@@ -111,19 +111,19 @@
 	  <li><a href="#">File</a>
 	    <ul>
-	      <li><a onclick="upload_to_host('data')">Save on host</a></li>
-	      <li><a onclick="download_cmd('part')">Download</a></li>
-	      <li><a class="disabled" >-Rename</a></li>
-	      <li><a class="disabled" >-Move</a></li>
-	      <li><a class="disabled" >-Delete</a></li>
-	      <li><a class="disabled" >-Duplicate</a></li>
-	    </ul>
-	  </li>
-	  <li><a href="#">Dir</a>
-	    <ul>
-	      <li><a class="disabled" href="#">-Create</a></li>
-	      <li><a class="disabled" href="#">-Rename</a></li>
-	      <li><a class="disabled" href="#">-Move</a></li>
-	      <li><a class="disabled" href="#">-Delete</a></li>
-	      <li><a class="disabled" href="#">-Duplicate</a></li>
+	      <li><a id="output-file-upload" onclick="upload_to_host('data')">Save on host</a></li>
+	      <li><a id="output-file-download" class="disabled" >-Download</a></li>
+	      <li><a id="output-file-rename" class="disabled" >-Rename</a></li>
+	      <li><a id="output-file-move" class="disabled" >-Move</a></li>
+	      <li><a id="output-file-delete" class="disabled" >-Delete</a></li>
+	      <li><a id="output-file-duplicate" class="disabled" >-Duplicate</a></li>
+	    </ul>
+	  </li>
+	  <li class="disabled"><a href="#">Dir</a>
+	    <ul>
+	      <li><a id="output-dir-create" class="disabled" href="#">-Create</a></li>
+	      <li><a id="output-dir-rename" class="disabled" href="#">-Rename</a></li>
+	      <li><a id="output-dir-move" class="disabled" href="#">-Move</a></li>
+	      <li><a id="output-dir-delete" class="disabled" href="#">-Delete</a></li>
+	      <li><a id="output-dir-duplicate" class="disabled" href="#">-Duplicate</a></li>
 	    </ul>
 	  </li>
@@ -148,9 +148,10 @@
 	  <input type="text" id="output-filelist_key" value="/" />
 	  <label id="output-bookmark_label">
-<!--	    <input type="checkbox" id="output-bookmark_op" onclick="bookmark_op('data')"> -->
 	    <input type="checkbox" id="output-bookmark_op">
 	    BK
 	  </label>
 	  <a id="output-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="output-down-url"></a>
+	  <a id="output-partial-down-url"></a>
 
 	</div>
@@ -166,23 +167,23 @@
 	  <li><a href="#">File</a>
 	    <ul>
-	      <li><a onclick="upload_to_host('data')">Save on host</a></li>
-	      <li><a onclick="download_cmd('part')">Download</a></li>
-	      <li><a class="disabled" >-Rename</a></li>
-	      <li><a class="disabled" >-Move</a></li>
-	      <li><a class="disabled" >-Delete</a></li>
-	      <li><a class="disabled" >-Duplicate</a></li>
-	    </ul>
-	  </li>
-	  <li><a href="#">Dir</a>
-	    <ul>
-	      <li><a class="disabled" href="#">-Create</a></li>
-	      <li><a class="disabled" href="#">-Rename</a></li>
-	      <li><a class="disabled" href="#">-Move</a></li>
-	      <li><a class="disabled" href="#">-Delete</a></li>
-	      <li><a class="disabled" href="#">-Duplicate</a></li>
+	      <li><a id="setting-file-upload" onclick="upload_to_host('data')">Save on host</a></li>
+	      <li><a id="setting-file-download" onclick="download_cmd('part')">Download</a></li>
+	      <li><a id="setting-file-rename" class="disabled" >-Rename</a></li>
+	      <li><a id="setting-file-move" class="disabled" >-Move</a></li>
+	      <li><a id="setting-file-delete" class="disabled" >-Delete</a></li>
+	      <li><a id="setting-file-duplicate" class="disabled" >-Duplicate</a></li>
+	    </ul>
+	  </li>
+	  <li class="disabled"><a href="#">Dir</a>
+	    <ul>
+	      <li><a id="setting-dir-create" class="disabled" href="#">-Create</a></li>
+	      <li><a id="setting-dir-rename" class="disabled" href="#">-Rename</a></li>
+	      <li><a id="setting-dir-move" class="disabled" href="#">-Move</a></li>
+	      <li><a id="setting-dir-delete" class="disabled" href="#">-Delete</a></li>
+	      <li><a id="setting-dir-duplicate" class="disabled" href="#">-Duplicate</a></li>
 	    </ul>
 	  </li>
 	  <li><a href="#">Bookmark</a>
-            <ul id="output-bookmark">
+            <ul id="setting-bookmark">
 	    </ul>
 	  </li>
@@ -203,9 +204,10 @@
 	  <input type="text" id="setting-filelist_key" value="/" />
 	  <label id="setting-bookmark_label">
-<!--	    <input type="checkbox" id="setting-bookmark_op" onclick="bookmark_op('data')"> -->
-	    <input type="checkbox" id="setting-bookmark_op">
+	    <input type="checkbox" id="setting-bookmark_op" >
 	    BK
 	  </label>
 	  <a id="setting-down-download" class="xxbutton" role="button" download="some.txt" >DL</a>
+	  <a id="setting-down-url"></a>
+	  <a id="setting-partial-down-url"></a>
 	</div>
 	<div id="setting-side">
@@ -232,2 +234,5 @@
     </div>
     <script>
+      main()
+    </script>
+  </body>
