Index: branches/testa-single-bookmark/js/build.js
===================================================================
--- branches/testa-single-bookmark/js/build.js	(revision 59)
+++ branches/testa-single-bookmark/js/build.js	(revision 66)
@@ -3,29 +3,30 @@
     }
 
-    setup(){
-	let item = $( '#data-build-build' )
+    set_anchor_url( part, item_name, href, text , kind){
+	if( href === undefined ){
+	    href = ""
+	}
+	Globalx.output_url_listx[text] = href
+	Globalx[part].sidemenu.set_anchor_down_url( item_name, href, text , kind)
+    }
+
+    setup(part){
+	let item = $( `#${part}-build-build` )
 	item.on('click' , () => {
-	    const part = Globalx.parts[ Globalx.index ]
 	    const cmd = "build_one_html"
 	    let textarea = $( Globalx[part].textarea_sel )
 	    const content = textarea.val()
 
+	    this.set_anchor_url( part, Globalx[part].item_name, "", "" , "full")
+	    this.set_anchor_url( part, Globalx[part].item_name, "", "" , "partial")
+
 	    Globalx.remotex.upload_file( cmd, Globalx.num, part, Globalx[part].key, content , (data) => {
 		if ( data !== undefined ){
-		    let array = null
-		    let len = null
 		    const obj = JSON.parse(data)
+		    console.log("full_download_url=" + obj["full_download_url"])
+		    console.log("partial_download_url=" + obj["partial_download_url"])
 
-		    array = obj["full_download_url"].split('/')
-		    len = array.length
-		    $('#data-down-url').attr('href' , obj["full_download_url"])
-
-		    $('#data-down-url').text( "Full HTML:" + array[len - 1] )
-
-		    array = obj["partial_download_url"].split('/')
-		    len = array.length
-		    $('#data-partial-down-url').attr('href' , obj["partial_download_url"])
-		    $('#data-partial-down-url').text( "Partial HTML:" + array[len - 1] )
-
+		    this.set_anchor_url( part, Globalx[part].item_name, obj["full_download_url"],    Globalx[part].item_name, "full")
+		    this.set_anchor_url( part, Globalx[part].item_name, obj["partial_download_url"], Globalx[part].item_name, "partial")
 		}
 		else{
Index: branches/testa-single-bookmark/js/main.js
===================================================================
--- branches/testa-single-bookmark/js/main.js	(revision 59)
+++ branches/testa-single-bookmark/js/main.js	(revision 66)
@@ -30,4 +30,5 @@
     Globalx.bookmark_displayname_max_length = 18
     Globalx.output_url = null
+    Globalx.output_url_listx = null
     Globalx.remote_filename = 'php/content3.php'
     Globalx.build = new Build()
@@ -41,38 +42,59 @@
     Globalx.bookmarkmenu = null
 
-    Globalx.build.setup()
+    Globalx.build.setup('data')
 }
 
-async function update_all_filelist( ) {
+async function update_all_info_on_host_async( ) {
+    await Globalx.remotex.get_output_url_listx( Globalx.num , (text) => {
+	if( text.match( /{.*}/ ) !== null ){
+	    const obj = JSON.parse( text )
+//console.log("update_all_info_on_host text=" + text )
+	    Globalx.output_url_listx = obj
+	    Globalx.storagex.save_as_info_from_globalx()
+	}
+    } )
+
     Globalx.parts.map( ( part ) => {
 	Globalx[ part ].sidemenu.update(`#${part}-side`)
     } )
+
 }
 
+async function get_output_url( num ){
+    get_output_url_async( num, (str) => {
+	if( str.match( /{.*}/ ) !== null ){
+	    const obj = JSON.parse( str )
+//console.log("get_output_url obj=" + obj.output_url)
+	    Globalx.output_url = obj.output_url
+	    Globalx.storagex.save_as_info_from_globalx()
+	}
+    } )
+
+}
 async function get_output_url_async( num, func ){
-    let realData = Globalx.storagex.get_output_url()
+    let output_url = Globalx.storagex.get_output_url()
 
-    if( realData === undefined || realData === null ){
+    if( output_url === undefined || output_url === null ){
 	await Globalx.remotex.get_output_url( num, func )
     }
     else{
-	const obj = Globalx.storagex.get_output_url( num )
-	Globalx.output_url = obj.output_url
+	Globalx.output_url = output_url
 	Globalx.storagex.save_as_info_from_globalx()
     }
 } 
 
+async function get_output_url_listx_async( num ) {
+    await Globalx.remotex.get_output_url_listx( num , (text) => {
+	if( text.match( /{.*}/ ) !== null ){
+	    const obj = JSON.parse( text )
+//console.log("update_all_info_on_host text=" + text )
+	    Globalx.output_url_listx = obj
+	    Globalx.storagex.save_as_info_from_globalx()
+	}
+    } )
+}
 async function setup(){
-    get_output_url_async( Globalx.num, (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 )
-    } )
+    await get_output_url_listx_async( Globalx.num )
+    await get_output_url( Globalx.num )
 }
 
Index: branches/testa-single-bookmark/js/remotex.js
===================================================================
--- branches/testa-single-bookmark/js/remotex.js	(revision 59)
+++ branches/testa-single-bookmark/js/remotex.js	(revision 66)
@@ -5,13 +5,4 @@
 	//	this.num = num
 	//	this.part = part
-    }
-
-    make_url_params0( arrayx ){
-	let params = new URLSearchParams();
-	arrayx.reduce(function(acc, element, index, array) {
-	    acc.append(element[0], element[1]);
-	    return acc;
-	}, params)
-	return params.toString();
     }
 
@@ -42,4 +33,9 @@
     async get_output_url(num, func) {
 	let param_array = [['cmd', 'get_output_url'], ['num', num ] ]
+	await this.fetchx( this.filename , param_array, 2, func )
+    }
+
+    async get_output_url_listx( num, func) {
+	let param_array = [['cmd', 'get_output_url_listx'] , ['num', num]]
 	await this.fetchx( this.filename , param_array, 2, func )
     }
Index: branches/testa-single-bookmark/js/sidemenu.js
===================================================================
--- branches/testa-single-bookmark/js/sidemenu.js	(revision 59)
+++ branches/testa-single-bookmark/js/sidemenu.js	(revision 66)
@@ -7,5 +7,8 @@
 	this.textarea_sel = Globalx[part].textarea_sel
 	this.bookmark_op_sel = Globalx[part].bookmark_op_sel
-    }
+	this.full_download_url_sel = `#${part}-down-url`
+	this.partial_download_url_sel = `#${part}-partial-down-url`
+    }
+
     set_editor( editor ){
 	this.editor = editor /* Globalx[part].editor */
@@ -79,5 +82,9 @@
 	    this.set_globalx_item_name(part, "")
 	    Globalx[part].editor.getSession().setValue( "" );
+
 	    $( this.textarea_sel ).val( "" );
+	    this.set_anchor_url( part, Globalx[part].item_name, "", "" , "full")
+	    this.set_anchor_url( part, Globalx[part].item_name, "", "" , "partial")
+
 	    if( Globalx[part].key != '/' ){
 		let array = Globalx[part].key.split("/")
@@ -134,4 +141,11 @@
 		    $( Globalx[part].textarea_sel ).val( content );
 		});
+
+		this.set_anchor_down_url( item_name, Globalx.output_url_listx[item_name], item_name , "full" )
+		this.set_anchor_down_url( item_name, Globalx.output_url_listx[item_name], item_name , "partial" )
+	    }
+	    else{
+		this.set_anchor_url( part, Globalx[part].item_name, "", "" , "full")
+		this.set_anchor_url( part, Globalx[part].item_name, "", "" , "partial")
 	    }
 	}
@@ -168,4 +182,28 @@
 	dl.attr('download' , Globalx[part].item_name)
 	dl.removeAttr('href')
+    }
+
+    set_anchor_down_url( item_name, href, text , kind ){
+	let sel = null
+	if( href === undefined ){
+	    href = ""
+	}
+	Globalx.output_url_listx[item_name] = href
+
+	if( kind === "full" ){
+	    sel = this.full_download_url_sel
+	    if( text !== "" ){
+		text = "Full HTML:" + text
+	    }
+	}
+	else{
+	    sel = this.partial_download_url_sel
+	    if( text !== "" ){
+		text = "Partial HTML:" + text
+	    }
+	}
+
+	$( sel ).attr( "href" , href )
+	$( sel ).text( text )
     }
 
Index: branches/testa-single-bookmark/js/storagex.js
===================================================================
--- branches/testa-single-bookmark/js/storagex.js	(revision 59)
+++ branches/testa-single-bookmark/js/storagex.js	(revision 66)
@@ -126,4 +126,8 @@
     }
 
+    get_filelist(num, part) {
+	return this.restore_from_localstorage(num, part)
+    }
+
     restore_info(){
 	const item_name = "info"
@@ -208,12 +212,4 @@
     }
 
-    get_filelist(num, part) {
-	return this.restore_from_localstorage(num, part)
-    }
-
-    get_output_url() {
-	return this._globalStorage.output_url
-    }
-
     reset_info() {
 	reset_localstorage('info')
