Index: /branches/testa/index.php
===================================================================
--- /branches/testa/index.php	(revision 26)
+++ /branches/testa/index.php	(revision 27)
@@ -18,12 +18,17 @@
     <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/storage.js?0"></script>
-    <script src="js/remote.js?9"></script>
-    <script src="js/menux.js?9"></script>
+<!--    <script src="js/storage.js?0"></script> -->
+    <script src="js/storagex.js?1"></script>
+<!--    <script src="js/remote.js?9"></script> -->
+<!--    <script src="js/menux.js?0"></script> -->
+    <script src="js/sidemenu.js?1"></script>
     <script src="js/bookmark.js?0>"></script>
     <script src="js/bookmarkmgr.js?9"></script>
+    <script src="js/bookmarkmenu.js?1"></script>
     <script src="js/tab.js?9"></script>
     <script src="js/topmenu.js?2"></script>
-    <script src="js/main.js?9"></script>
+
+    <script src="js/remotex.js?2"></script>
+    <script src="js/main.js?1"></script>
 
     <!--    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.ui-contextmenu/1.18.1/jquery.ui-contextmenu.min.js" integrity="sha256-cI6Q7epHX696CtqUt0dJouTIkNh0w67o5YOhUZygI/s=" crossorigin="anonymous"></script> -->
@@ -77,7 +82,7 @@
 	    <li><a href="#">config</a>
 	      <ul>
-		<li><a href="#" onclick="save_info_from_globalx()">Save info</a></li>
-		<li><a href="#" onclick="reset_info()">Reset Info</a></li>
-		<li><a href="#" onclick="clear_localstorage()">Clear local</a></li>
+		<li><a href="#" onclick="Globalx.storagex.save_info_from_globalx()">Save info</a></li>
+		<li><a href="#" onclick="Globalx.storagex.reset_info()">Reset Info</a></li>
+		<li><a href="#" onclick="Globalx.storagex.clear_localstorage()">Clear local</a></li>
 	      </ul>
 	    </li>
@@ -105,8 +110,20 @@
       <div id="area-output" class="panel">
 	<div id="output-menubar"></div>
+	  <ul class="nav">
+	    <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>
+</ul>
 	<div id="output-bar">
 	  <textarea id="output-editor" name="output-editor"></textarea>
 	</div>
-	<div id="output-side">output</div>
+	<div id="output-side"></div>
 	<div id="output-work">
 	  <div id="output-editor"></div>
@@ -118,5 +135,5 @@
 	  <textarea id="setting-editor" name="setting-editor"></textarea>
 	</div>
-	<div id="setting-side">setting</div>
+	<div id="setting-side"></div>
 	<div id="setting-work">
 	  <div id="setting-editor"></div>
Index: /branches/testa/js/main.js
===================================================================
--- /branches/testa/js/main.js	(revision 26)
+++ /branches/testa/js/main.js	(revision 27)
@@ -6,30 +6,59 @@
 };
 
-function main() {
-    restore_info_to_globalx()
+function init_globalx_storagex() {
+    Globalx.storagex = new Storagex();
+}
 
-    editor_func("data");
-    make_ul_for_menu('data' , '#data-side')
-    menux( "data" )
-    
-    editor_func("setting");
-    make_ul_for_menu("setting" , '#setting-side')
-    
-    editor_func("output");
-    make_ul_for_menu("output" , '#output-side')
+function init_globalx() {
+    Globalx.num = 0;
+    Globalx.index = 0;
+    Globalx.parts = ["data", "output", "setting"]
+    Globalx.bookmark_displayname_max_length = 18
 
     tab_init()
     topmenu_init()
+    Globalx.remotex = new Remotex('php/content.php')
+}
 
-    rebuild_bookmark_menu("data")
+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")
+}
 
-    // LocalStorageにまだ保存していない場合を想定して、ここで保存しておく
-    console.log("call save_info_from_globalx()")
-    save_info_from_globalx()
+function main() {
+    init_globalx_storagex()
 
-    part = "data"
-    $('#down-download').on('click', {part: part}, handleDownload)
-    $( Globalx['data'].textarea_sel ).val("");
-    $( '#bookmark_displayname' ).prop( 'maxlength' , Globalx[part].bookmark_displayname_max_length)
+    let need_to_save = Globalx.storagex.restore_globalx_from_info()
+    init_globalx()
+
+    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.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にまだ保存していない場合、ここで保存しておく
+	//console.log("call save_as_info_from_globalx()")
+	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,
@@ -50,14 +79,4 @@
 }
 
-function init_globalx() {
-    Globalx.num = 0;
-    Globalx.index = 0;
-    Globalx.parts = ["data", "output", "setting"]
-    
-    Globalx.parts.map( function( part ){
-	console.log("init_globalx part=" + part )
-	set_globalx_editor(part)
-    } )
-}
 
 function set_globalx_editor(part) {
@@ -73,18 +92,18 @@
 /**/
 	  bookmarks: [],
-	  bookmark_displayname_max_length: 18,
           key_indicate_file: false,
 	  key: '/',
 	  key_sel: `#${part}-filelist_key`,
-          download_sel: `#${part}-download_sel`
+          download_sel: `#${part}-down-download`
       }
+      editor_config(part);
+
       Globalx[part].menu_sel = `#${Globalx[part].menu_id}`
       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[part].bookmark_displayname_max_length )
-
+      Globalx[part].bookmark_mgr = new BookmarkMgr( Globalx.bookmark_displayname_max_length )
 }
 
-function editor_func(part) {
+function editor_config(part) {
       let editor = ace.edit( Globalx[part].editor_id )
       editor.setTheme("ace/theme/monokai");
@@ -100,3 +119,2 @@
       });
 }
-
Index: /branches/testa/js/tab.js
===================================================================
--- /branches/testa/js/tab.js	(revision 26)
+++ /branches/testa/js/tab.js	(revision 27)
@@ -10,4 +10,5 @@
         // クリックしたタブと同じインデックス番号をもつコンテンツを表示
         $('.panel').eq(index).addClass('is-show');
+	console.log("tab index="+index )
     })
 }
Index: /branches/testa/js/topmenu.js
===================================================================
--- /branches/testa/js/topmenu.js	(revision 26)
+++ /branches/testa/js/topmenu.js	(revision 27)
@@ -1,12 +1,2 @@
-function topmenu_init0() {
-    const nav = $('.nav');
-    $('li', nav)
-	.mouseover(function(e) {
-	    $('ul', this).stop().slideDown('fast');
-	})
-	.mouseout(function(e) {
-	    $('ul', this).stop().slideUp('fast');
-	})
-}
 function topmenu_init() {
     const nav = $('.nav');
Index: /branches/testa/php/content.php
===================================================================
--- /branches/testa/php/content.php	(revision 26)
+++ /branches/testa/php/content.php	(revision 27)
@@ -12,6 +12,6 @@
 function get_url_data_array()
 {
-        $yaml= spyc_load_file( dirname(__FILE__) . "/../settings.yml");// ☆の部分にはyamlファイルがあるパスを入れます
-        return $yaml;
+    $yaml= spyc_load_file( dirname(__FILE__) . "/../settings.yml");// ☆の部分にはyamlファイルがあるパスを入れます
+    return $yaml;
 }
 
@@ -33,12 +33,38 @@
 }
 
-function get_path_from_url_data( $num ){
-    return get_url_data( $num )['path'];
-}
-
-function get_path_list_by_url( $num ){
-    $pattern = "*.md";
-    $top_path = get_path_from_url_data($num);
-    $cmd_line_items = array("find" , $top_path , "-name", $pattern);
+function get_path_from_url_data( $num , $part){
+    switch($part){
+    case 'data':
+        $ret = get_url_data( $num )['path'];
+        break;
+    case 'setting':
+        $ret = get_url_data( $num )['setting_path'];
+        break;
+    case 'output':
+        $ret = get_url_data( $num )['output_path'];
+        break;
+    default:
+        //exit(200);
+        echo "get_path_from_url_data " . $part . "<br>";
+    }
+
+    return $ret;
+}
+
+function get_path_list_by_url( $num , $part){
+    $top_path = get_path_from_url_data($num, $part);
+
+    switch($part){
+    case 'data':
+        $pattern = "*.md";
+        $cmd_line_items = array("find" , $top_path , "-name", $pattern);
+        break;
+    case 'setting':
+        $cmd_line_items = array("find" , $top_path , "-type", "f");
+        break;
+    default:
+        echo "get_path_list_by_url=" . $part . "<br>";
+        exit(100);
+    }
     $cmd_line = implode(" " , $cmd_line_items);
 
@@ -67,5 +93,5 @@
         }
         echo $v . "||(" . strlen($v) . ")\n";
-   }
+    }
 }
 
@@ -81,19 +107,28 @@
 }
 
-function get_path_info( $num ){
-    $path_info = get_path_list_by_url( $num );
+function get_path_info( $num , $part){
+    $path_info = get_path_list_by_url( $num , $part);
     $pathinfo = new ns\PathInfo($path_info["top_path"]);
-#    $pathinfo = new PathInfo($path_info["top_path"]);
     foreach($path_info["file_list"] as $path){
         $pathinfo->register($path);
     }
     return $pathinfo->pathinfo_list_in_json();
-#    $pathinfo->dump();
-#    $pathinfo->dump_root();
-#    dump_hier_list($pathinfo);
-}
-
-function print_get_path_info( $num ){
-    echo get_path_info( $num );
+}
+
+function get_setting_path_info( $num ){
+    $path_info = get_setting_path_list_by_url( $num );
+    $pathinfo = new ns\PathInfo($path_info["top_path"]);
+    foreach($path_info["file_list"] as $path){
+        $pathinfo->register($path);
+    }
+    return $pathinfo->pathinfo_list_in_json();
+}
+
+function print_get_path_info( $num ,$part){
+    echo get_path_info( $num , $part);
+}
+
+function print_get_setting_path_info( $num ){
+    echo get_setting_path_info( $num );
 }
 
@@ -113,6 +148,6 @@
 }
 
-function get_content( $num , $path ) {
-    $top_dir = get_path_from_url_data( $num );
+function get_content( $num , $path , $part) {
+    $top_dir = get_path_from_url_data( $num , $part);
     $full_path = implode( '/', [$top_dir, $path]);
     $result = input_file( $full_path );
@@ -121,6 +156,5 @@
 
 function cmdx(){
-    $filelist_filename = "filelist.json";
-    $setting_filelist_filename = "setting-filelist.json";
+    $filelist_filename = array("data"=> "filelist.json", "setting"=> "setting-filelist.json");
     $storage_dir = dirname(__FILE__) . '/../storage';
 
@@ -130,69 +164,88 @@
         if (isset($_GET['num'])) {
             $num = $_GET['num'];
-
-            switch ($cmd) {
-            case 'get_setting_filelist':
-                $path = ensure_storage_dir( $storage_dir , $num, $setting_filelist_filename );
-                if( file_exists($path) ){
-                    $content = input_file( $path );
+            if (isset($_GET['part'])) {
+                $part = $_GET['part'];
+
+                switch ($cmd) {
+                case 'update_setting_filelist':
+                    $path = ensure_storage_dir( $storage_dir , $num, $setting_filelist_filename );
+                    $content = get_setting_path_info( $num );
+                    output_file( $path , $content );
+                    break;
+                case 'get_setting_filelist':
+                    $path = ensure_storage_dir( $storage_dir , $num, $setting_filelist_filename );
+                    if( file_exists($path) ){
+                        $content = input_file( $path );
+                    }
+                    else {
+                        $content = get_setting_path_info( $num );
+                        output_file( $path , $content );
+                    }
+                    break;
+                case 'get_setting_content':
+                    if (isset($_GET['path'])) {
+                        $path = $_GET['path'];
+                        $content = get_setting_content( $num , $path );
+                    }
+                    break;
+                case 'build':
+                    break;
+                case 'get_content':
+                    if (isset($_GET['path'])) {
+                        $path = $_GET['path'];
+                        $content = get_content( $num , $path , $part );
+                    }
+                    break;
+                case 'update_filelistx':
+                    $path = ensure_storage_dir( $storage_dir , $num, $filelist_filename[$part] );
+                    $content = get_path_info( $num , $part);
+                    output_file( $path , $content );
+                    break;
+                case 'get_filelistx':
+                    $path = ensure_storage_dir( $storage_dir , $num, $filelist_filename[$part] );
+                    if( file_exists($path) ){
+                        $content = input_file( $path );
+                    }
+                    else {
+                        $content = get_path_info( $num , $part);
+                        output_file( $path , $content );
+                    }
+                    break;
+                default:
+                    break;
                 }
-                else {
-                    $content = get_path_info( $num );
-                    output_file( $path , $content );
-                }
-                break;
-            case 'build':
-                break;
-            case 'get_content':
-                if (isset($_GET['path'])) {
-                    $path = $_GET['path'];
-                    $content = get_content( $num , $path );
-                }
-                break;
-            case 'update_filelist':
-                $path = ensure_storage_dir( $storage_dir , $num, $filelist_filename );
-                $content = get_path_info( $num );
-                output_file( $path , $content );
-                break;
-            case 'get_filelist':
-                $path = ensure_storage_dir( $storage_dir , $num, $filelist_filename );
-                if( file_exists($path) ){
-                    $content = input_file( $path );
-                }
-                else {
-                    $content = get_path_info( $num );
-                    output_file( $path , $content );
-                }
-                break;
-            default:
-                break;
             }
         }
     }
+
     elseif (isset($_POST['cmd'])) {
         $cmd = $_POST['cmd'];
         if (isset($_POST['num'])) {
             $num = $_POST['num'];
-
-            switch ($cmd) {
-            case 'upload_content':
-                $array = get_lines_from_formdata( "mytext" );
-                $upload_content = implode( "\n" , $array );
-                if (isset($_POST['path'])) {
-                    $path = $_POST['path'];
-                    $top_path = get_path_from_url_data( $num );
-                    $filename_abs_path = $top_path . DIRECTORY_SEPARATOR . $path;
-
-                    output_file( $filename_abs_path , $upload_content );
-                    $content = "P-UPLOAD_CONTENT-OK=" . $filename_abs_path;
+            if (isset($_POST['part'])) {
+                $part = $_POST['part'];
+
+
+                switch ($cmd) {
+                case 'upload_content':
+                    $array = get_lines_from_formdata( "mytext" );
+                    $upload_content = implode( "\n" , $array );
+                    if (isset($_POST['path'])) {
+                        $path = $_POST['path'];
+                        $top_path = get_path_from_url_data( $num , $part);
+                        $filename_abs_path = $top_path . DIRECTORY_SEPARATOR . $path;
+                        
+                        output_file( $filename_abs_path , $upload_content );
+                        $content = "P-UPLOAD_CONTENT-OK=" . $filename_abs_path;
+                    }
+                    else{
+                        $content = "P-UPLOAD_CONTENT-NO-PATH";
+                    }
+                    
+                default:
+                    debug_x("P-DEFAULT");
+                    /* $content = "P-DEFAULT";*/
+                    break;
                 }
-                else{
-                    $content = "P-UPLOAD_CONTENT-NO-PATH";
-                }
-
-            default:
-                debug_x("P-DEFAULT");
-                /* $content = "P-DEFAULT";*/
-                break;
             }
         }
@@ -221,4 +274,10 @@
 #print_get_path_info( 0 );
 #print_get_path_info( 1 );
+#dump_url_data( 0 );
+#echo( get_setting_path_from_url_data( 0 ) );
+#var_dump( get_setting_path_list_by_url( 0 ) );
+#echo( get_setting_path_info( 0 ) );
+#print_get_setting_path_info( 0 );
+
 cmdx();
 
