var style=document.createElement("style") style.innerHTML=` @charset "UTF-8"; [qd_login_links='login']:before{content:'既にIDをお持ちの方のログインはこちら';} [qd_login_links='reset_password']:before{content:'パスワードを忘れた場合はこちら';} [qd_login_links='register_new']:before{content:'新規登録はこちら';} [qd_login_links]{display:block;} [qd_login_menu='login']:before{content:'';} .qd_form[action='#login'] button[type='qd_submit']:before{content:'ログイン';} .qd_form[action='#register_new'] button[type='qd_submit']:before{content:'新規登録';} .qd_form[action='#reset_password'] button[type='qd_submit']:before{content:'リセット';} .qd_form[action='#input_code_ajax'] button[type='qd_submit']:before{content:'コードを確認';} /* ダミーを消す場合はライブラリを読み込んだときに処理数る [type='dummy']{ display:none; } */ /* ロード中の要素の表示を修正 */ [qd_loading='1']{ opacity:.1; } [view]{ transition:opacity .3s; } /* body:not([debug_mode='1'])>div[qd_error_console], */ body:not([qd_developer_mode='1'])>div[qd_error_console]{ display:none; } body>div[qd_error_console]:empty{ display:none; } body>div[qd_error_console]{ position:fixed; bottom:0; right:0; background:rgba(255,255,255,.8); border:1px solid gray; z-index:100000; min-height:300px; min-width:300px; max-width:600px; pointer-events:none; } [type$='format']:not(tr):not([copied]) { /* display: none; */ max-height:1px !important; max-width:1px !important; overflow:hidden !important; opacity:0 !important; margin:0 !important; padding:1px !important; pointer-events:none; /* display:blockを無理につけると制御で動かないシステムあり */ /* display:block !important; */ /* position :fixedとかつけるとアクティブロード(後からロード)できなくなるみたい */ /* position:fixed; */ top:0; left:0; z-index:10000; /* display:flex !important; */ /* displayはblockで良し、なぜなら要素としてだすだけだから */ } tr[type$='format']:not([copied]) { display: none; max-height:1px !important; max-width:1px !important; overflow:hidden !important; opacity:0 !important; margin:0 !important; padding:1px !important; pointer-events:none; /* displayはblockで良し、なぜなら要素としてだすだけだから */ } tr[copied] + tr[type$='format']:not([copied]) { /* display:table !important; */ } tr[type$='format']:not([copied])>:where(td,th){ /* display:none; */ } /* ロード中の背景変更 */ body[openhttps]:not([openhttps='0'])>*:not([qd_info_window]){ pointer-events:none; /* opacity:.3; */ /* background:rgba(50,50,50,.7); */ transition:opacity .3s,background-color .1s; } body>*{ transition:opacity 1s,background-color 1s; } /* loading時のアニメーション */ body[openhttps]{--openhttps:attr(openhttps);} body{ --memory_usage_meter:0; --loading_meter:0; } body[openhttps='0']{--openhttps:'No';} body[openhttps='1']{--openhttps:'1';} body[openhttps='2']{--openhttps:'2';} body[openhttps='3']{--openhttps:'3';} body[openhttps='4']{--openhttps:'4';} body[openhttps='5']{--openhttps:'5';} body[openhttps='6']{--openhttps:'6';} body[openhttps='7']{--openhttps:'7';} body[openhttps='8']{--openhttps:'8';} body[openhttps='9']{--openhttps:'8';} body[openhttps='10']{--openhttps:'10';} body[openhttps='11']{--openhttps:'11';} body[openhttps='12']{--openhttps:'12';} body[openhttps='13']{--openhttps:'13';} body[openhttps='14']{--openhttps:'14';} body[openhttps='15']{--openhttps:'15';} body[openhttps='16']{--openhttps:'16';} body[openhttps='17']{--openhttps:'17';} body[openhttps='18']{--openhttps:'18';} body[openhttps='19']{--openhttps:'19';} body[openhttps='20']{--openhttps:'20';} body:not([openhttps]) [qd_info_window], body[openhttps='0'] [qd_info_window]{ pointer-events:none; opacity:0; transition:opacity .8s .2s; } body[openhttps='0'] [gauge]{ pointer-events:none; opacity:0; display:none; } /* ローディングアイコンの位置及びサイズ調整 */ [qd_loading_info_container]{ transform: scale(.3,.3) translateY(-10%) translateX(10%); transform-origin: bottom right; } /* アイコンのカラーパラメータ */ [qd_loading_icon]{ --background:#8a8a8a; --background_inner:#8a8a8a; --background:transparent; --outer_circle:black; --outer_meter:#42f5ad; } @media screen and (orientation: portrait) { [qd_loading_info_container] { height:100vw; width:100vw; font-size:4vw; /* 縦向きの場合専用の追加装飾 */ } } @media screen and (orientation: landscape) { [qd_loading_info_container] { height:100vh; width:100vh; font-size:4vh; /* 縦向きの場合専用の追加装飾 */ } } [qd_loading_info_container]{ position:absolute; bottom:0; right:0; } [qd_info_window]{ transition:opacity .3s; position:fixed; top:0; left:0; height:100vh; width:100vw; z-index:10000; } [qd_info_window]>*{ margin:0 !important; position:absolute; height:100%; width:100%; bottom:0; right:0; } [info]{ width:50%; height:40%; position:absolute; top: 53%; left: 50%; transform: translateY(-50%) translateX(-50%); z-index:2; font-size:100%; } body [qd_info_window] [upload_status]:before{ content:'Data uploading... ' var(--uploading_percent_caption); display:block; text-align:center; } body [qd_info_window] [upload_status_bar]:before{ content:var(--data_uploaded) ' / ' var(--data_post_total) ' KB'; position:absolute; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); z-index:4; font-size:50%; display:block; text-align:center; } body [qd_info_window] [upload_status_bar]{ position:relative; width:100%; } body [qd_info_window] [upload_status_bar_inner]{ width:var(--uploading_percent_caption); background:greenyellow; border:solid 1px green; border-radius:1em; height:0.5em; } body [qd_info_window] [upload_status_bar_inner]{ content:'Data uploading... ' ; width:var(--uploading_percent); } body [qd_info_window] [status]:before{ content:'Data loading... ' var(--loading_percent); display:block; text-align:center; } body[openhttps='0'] [qd_info_window] [status]:before{ content:'Data transfer completed'; display:block; text-align:center; } [qd_info_window] [connections]:before{ content:var(--openhttps) ' connections'; display:block; text-align:center; } [qd_info_window] [data_compression]:before{ content:'Data Compression ' var(--compression_ratio) ''; display:block; text-align:center; } [qd_info_window] [data_count]:before{ content:var(--data_loaded) ' / ' var(--data_total) ' KB'; display:block; text-align:center; } [qd_loading_icon]{ background:var(--background); transition:opacity 1s; opacity:.9; } [qd_loading_icon] [gauge_outer]{ position:absolute; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); z-index:1; width:65%; height:65%; } [qd_loading_icon] [gauge_outer2]{ background:var(--outer_circle); border-radius:100%; width:100%; height:100%; /* padding:2.5vw; */ display:block; position:absolute; top:0; left:0; margin:0; } [qd_loading_icon] [gauge_outer2] [rad1] { background:var(--outer_meter); border-radius: 50% 50% 0 0/100% 100% 0 0; width: 92%; height: 46%; position: absolute; content: ''; top:4%; left:4%; z-index:1; margin:0; } [qd_loading_icon] [gauge_outer2] [rad2] { background:var(--outer_circle); border-radius: 50% 50% 0 0/100% 100% 0 0; width: 94%; height: 46%; left:3%; top:3%; position: absolute; content: ''; transform-origin: bottom center; /* transform:rotateZ(var(--memory_usage_meter)); */ transform:rotateZ(var(--loading_meter)); transition:transform .2s; z-index:2; margin:0; } [qd_loading_icon] [gauge_outer2] [rad3] { background:var(--background); border-radius: 50% 50% 0 0/100% 100% 0 0; width: 92%; height: 46%; position: absolute; content: ''; transform-origin: bottom center; transform:rotateZ(0.5turn); top:4%; left:4%; z-index:3; margin:0; } [qd_loading_icon] [rad4]{ position:absolute; background:var(--outer_circle); border-radius:100%; width:85%; height:85%; left:7.5%; top:7.5%; z-index:4; margin:0; } [qd_loading_icon] [gauge_outer3]{ position:absolute; background:var(--background_inner); border-radius:100%; width:84%; height:84%; left:8%; top:8%; z-index:5; margin:0; } [qd_loading_icon] [gauge] { margin:6%; position: relative; /* font-size: 5vw; */ /* text-indent: -9999em; */ /* max-width:300px; max-height:300px; */ width: 88%; height: 88%; border-radius: 50%; background: #ffffff; background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%); background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%); animation: load3 1.4s infinite linear; } [qd_loading_icon] [gauge]:before { width: 50%; height: 50%; background: #ffffff; border-radius: 100% 0 0 0; position: absolute; top: 0; left: 0; content: ''; } [qd_loading_icon] [gauge]:after { background:var(--background); width: 75%; height: 75%; border-radius: 50%; content: ''; margin: auto; position: absolute; top: 0; left: 0; bottom: 0; right: 0; } @-webkit-keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes load3 { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } /* データ更新中の更新がわかる表記 bodyにqd_default_indication属性がある時だけ */ body[qd_default_indication] [view],[qd_paratition],[view]:before,[qd_paratition]:before{ transition:opacity 1s ,background-color 1s,color 1s; } body[qd_default_indication] [view][qd_update],[qd_paratition][qd_update]{ transition:opacity .2s ,background-color .2s; position:relative; } body[qd_default_indication] [qd_update='0']{ background:rgba(0,0,0,.3); } body[qd_default_indication] [qd_update='1']{ background:rgba(80,80,80,.6); } body[qd_default_indication] [qd_update='0']>*{ opacity:.3; } body[qd_default_indication] [qd_update]:not(tr):before,tr[qd_update]>td:before{ position:absolute; margin-top:auto; margin-left:auto; margin-right:auto; margin-bottom:auto; /* top:0; left:0; right:0; bottom:0; */ color:transparent; top: 50%; left: 50%; transform: translateY(-50%) translateX(-50%); opacity:1; font-size:2em; font-weight:900; } body[qd_default_indication] [qd_update='0']:not(tr):before,tr[qd_update='0']>td:nth-of-type(1):before{ content:'updating...'; color:orange; } body[qd_default_indication] [qd_update='1']:not(tr):before,tr[qd_update='1']>td:nth-of-type(1):before{ content:'updated'; color:orange; } [name][direct_insert]:before,[name2][direct_insert]:after{ /* display:none !important; */ } a[name]:before,a[name2]:after{ display:none !important; } /*ページ処理*/ [qd_pager] [qd_page_setter]:before{ content:attr(data-page); } [qd_pager] [qd_page_setter]:not([data-current_page='1']){ color:#AAA; } [qd_pager] [qd_page_setter][data-current_page='1']{ pointer-events:none; } [qd_pager][data-pages='1']{ display:none; } @charset "UTF-8"; [qd_login_links='login']:before{content:'既にIDをお持ちの方のログインはこちら';} [qd_login_links='reset_password']:before{content:'パスワードを忘れた場合はこちら';} [qd_login_links='register_new']:before{content:'新規登録はこちら';} [qd_login_links]{display:block;} [qd_login_menu='login']:before{content:'';} .qd_form[action='#login'] button[type='qd_submit']:before{content:'ログイン';} .qd_form[action='#register_new'] button[type='qd_submit']:before{content:'新規登録';} .qd_form[action='#reset_password'] button[type='qd_submit']:before{content:'リセット';} .qd_form[action='#input_code_ajax'] button[type='qd_submit']:before{content:'コードを確認';} body[qd_login][login='1'] { height: auto; margin: 0; padding: 0; } body[qd_login] .login * { box-sizing: border-box; margin: 0; padding: 0 } body[qd_login][login='1'] [qd_memeber_area]:not([initial_content='member_top']) ba { display: none; } body[qd_login][login='1'] > #pass_change:target ~ .login #login { display: flex; } body[qd_login][login='1'] .login #login { display: none; } html body[auto_hide_before_login]:not([login='1']) > *:not(.login) { /* opacity:0; */ pointer-events: none; position: absolute; top: 0; z-index: -1; /* display:flex; */ display: none !important; } html body[qd_login] > #pass_change:target ~ *:not(.login) { opacity: 0; pointer-events: none; position: absolute; top: 0; z-index: -1; display: flex; /* display:none; */ } [qd_message='login'] { display: none; } body[qd_login] .login form .input,body[qd_login] .login input[type=password] { font-size: 24px; width: 100%; padding: 3px; margin: 2px 6px 16px 0; } body[qd_login] .qd_form[action='#reset_password'] button[type='qd_submit']:before { content: 'パスワードの再発行をする'; } #loginform a:-webkit-any-link { /*color: -webkit-link;*/ color: white; cursor: pointer; text-decoration: underline; } [qd_login_links='reset_password']:before { display: block; } [qd_login_links='register_new']:before { display: block; } .qd_form[action='#reset_password'] [for='email'] .qd_row { visibility: hidden; } .qd_form[action='#reset_password'] [for='email'] .qd_row:before { visibility: visible; content: '登録メールアドレス'; } .qd_form[action='#reset_password']:before { visibility: visible; content: 'パスワードの再発行を行います。\Aご登録時にお使いいただいたメールアドレスを\Aご入力ください。'; white-space: pre; text-align: center; display: block; margin-bottom: 20px; } .qd_form[action='#register_new'] button[type='qd_submit']:before { content: '上記情報で仮登録する'; } .qd_form[action='#register_new'] [for='email'] .qd_row { visibility: hidden; display: none; } .qd_form[action='#register_new'] [for='email']:before { visibility: visible; content: 'メールアドレス'; } .qd_form[action='#login'] [for='email'] .qd_row { visibility: hidden; display: none; } .qd_form[action='#login'] [for='email']:before { visibility: visible; content: 'メールアドレス'; } `; document.head.appendChild(style); var qd_log={} qd_log.error=function(){}; qd_log.info=function(){}; qd_log.warn=function(){}; qd_log.log=function(){}; if(localStorage.debug=='1'){//デバッグモード var qd_log=console; } function ajax_initializer(){ let ajax_auto_resume = { set: function(obj, prop, value) { if (prop === 'openHTTPs') { if (!Number.isInteger(value)) { throw new TypeError('リクエスト数が整数ではありません'); } if (value > 20) { throw new RangeError('リクエストが多すぎます'); } if (value == 0) { qd_log.log('通信が終了しました。'); if(exec=qd_window.functions.shift()){ exec(); } } } // 値を保存する既定の挙動 obj[prop] = value; } }; qd_window = new Proxy(window, ajax_auto_resume); qd_window.functions=[]; qd_window.done=function(func){ qd_window.functions.push(func); } qd_window.reset=function(){ qd_window.functions=[]; } var oldOpen = XMLHttpRequest.prototype.open; qd_window.openHTTPs = 0; setTimeout(function(){ if(document.body){ document.body.setAttribute('openHTTPs',qd_window.openHTTPs); } },50); qd_window.ajaxes={}; XMLHttpRequest.prototype.open = function(method, url, async, user, pass) { qd_window.openHTTPs++; document.body.setAttribute('openHTTPs',qd_window.openHTTPs); this.id=(new Date().getTime())+':'+url+':'+qd_window.openHTTPs; this.startTime=(new Date().getTime()); this.finishTime=0; qd_window.ajaxes[this.id]=this; this.addEventListener("readystatechange", function(){ if(this.readyState == 4){ qd_window.openHTTPs--; document.body.setAttribute('openHTTPs',qd_window.openHTTPs); this.finishTime=(new Date().getTime()); // console.error(this.id) var my_id=this.id; var my_func=function(my_id){ var my_id2=my_id; return function(){ delete qd_window.ajaxes[my_id2]; // console.error(my_id2); } } setTimeout(my_func(my_id),1000); } }, false); oldOpen.call(this, method, url, async, user, pass); } }; //ajax_initializer(); function create_loading_icon(){ var loading_icon=document.createElement("div") loading_icon.setAttribute("qd_info_window",1); loading_icon.innerHTML=`
`; document.body.appendChild(loading_icon); } function create_db_error_console(){ var error_console=document.createElement("div") error_console.setAttribute("qd_error_console",1); error_console.innerHTML=``; document.body.appendChild(error_console); } if(performance){ //parseInt(performance.memory.totalJSHeapSize*10000/performance.memory.jsHeapSizeLimit)/100 + '%' // parseInt(performance.memory.totalJSHeapSize*10000/performance.memory.jsHeapSizeLimit)/100 + '%' // parseInt(performance.memory.totalJSHeapSize*100/( 1024 * 1024 ) )/100 + 'MB' // parseInt(performance.memory.jsHeapSizeLimit*100/( 1024 * 1024 ) )/100 + 'MB' function qd_check_memory(){ var percent=parseInt(performance.memory.totalJSHeapSize*10000/performance.memory.jsHeapSizeLimit)/100; document.body.style.setProperty("--memory_usage_meter",percent/200 + 'turn'); } // setInterval(qd_check_memory,500); // var timing = window.performance.timing; // console.log("リダイレクト: " + (timing.redirectEnd - timing.redirectStart)); // console.log("APキャッシュ: " + (timing.domainLookupStart - timing.fetchStart)); // console.log("DNS取得時間: " + (timing.domainLookupEnd - timing.domainLookupStart)); // console.log("TCP接続時間: " + (timing.connectEnd - timing.connectStart)); // console.log("リクエスト時間: " + (timing.responseStart - timing.requestStart)); // console.log("レスポンス時間: " + (timing.responseEnd - timing.responseStart)); // console.log("DOMの構築時間: " + (timing.domComplete - timing.domLoading)); // console.log("onLoadイベント: " + (timing.loadEventEnd - timing.loadEventStart)); // for (let resource of performance.getEntriesByType('resource')) { // console.log(resource); // console.log( // 'Name: ' + resource.name + '\n' + // 'Entry Type: ' + resource.entryType + '\n' + // 'Start Time: ' + parseInt((resource.startTime)*100)/100 + '\n' + // 'Duration: ' + parseInt((resource.duration)*100)/100 + '\n' + // 'Redirect: ' + parseInt((resource.redirectEnd - resource.redirectStart)*100)/100 + '\n' + // 'App Cache: ' + parseInt((resource.domainLookupStart - resource.fetchStart)*100)/100 + '\n' + // 'DNS: ' + parseInt((resource.domainLookupEnd - resource.domainLookupStart)*100)/100 + '\n' + // 'TCP: ' + parseInt((resource.connectEnd - resource.connectStart)*100)/100 + '\n' + // 'Request: ' + parseInt((resource.responseStart - resource.requestStart)*100)/100 + '\n' + // 'Response: ' + parseInt((resource.responseEnd - resource.responseStart)*100)/100 + '\n' /*+ // 'Processing: ' + (resource.loadEventStart - resource.responseEnd) + '\n'*/ // ); // } // var observer_qd1 = new PerformanceObserver(function(list, obj) { // var entries = list.getEntries(); // for (var i=0; i < entries.length; i++) { // // Process "mark" and "frame" events // } // }); // //observer_qd1.observe({entryTypes: ["mark", "frame"]}); // observer_qd1.observe({entryTypes: ["mark"]}); // function perf_observer(list, observer) { // // Process the "measure" event // } // var observer_qd2 = new PerformanceObserver(perf_observer); // observer_qd2.observe({entryTypes: ["measure"]}); // var aPE = []; // var observer_qd3 = new PerformanceObserver(function(list) { // var perfEntries = list.getEntries(); // for (var i = 0; i < perfEntries.length; i++) { // var p = perfEntries[i]; // aPE.push(p); // } // }); // observer_qd3.observe( { entryTypes: ["longtask"], buffered: true } ); } function prepare_Css(){ var style=document.createElement("style") style.innerHTML=` body:not([openhttps='0']){ pointer-events:none; opacity:.3; background:rgba(50,50,50,.7); } body{ trnasition:opacity 1s,background 1s; } `; document.head.appendChild(style); } //prepare_Css(); // パラメータを取得する var getUrlVars = function(url){ var vars = {}; if(url){ try{ var param = url.split('?')[1].split('&'); }catch(e){ var params={}; } }else{ var param = location.search.substring(1).split('&'); } try{ for(var i = 0; i < param.length; i++) { var keySearch = param[i].search(/=/); var key = ''; if(keySearch != -1) key = param[i].slice(0, keySearch); var val = param[i].slice(param[i].indexOf('=', 0) + 1); qd_log.log(val); if(key != '') vars[key] = decodeURI(val); } }catch(e){ qd_log.warn(e); var vars={}; } return vars; } function qd_upload_file(elem,return_func) { // let formData = new FormData(); // formData.append("myFile", elem.files[0]); var postData={}; if(elem.files){ qd_log.log("File input要素が渡されました"); postData["myFile"]=elem.files[0]; }else{ qd_log.log("バイナリデータが渡されました"); postData["myFile"]=elem; } // console.warn(elem); // console.warn(elem.files[0]); var func=new ajaxObjReady(); var base=get_homedir(1); var elemP=querySelectorParent(elem,"[type$='format'],[view]"); if(elemP){ if(elem.getAttribute('server')){ var sql_target=elem.getAttribute('server')+'./upload/'; }else{ var sql_target=get_homedir(1)+'./upload/'; } }else{ var sql_target=get_homedir(1)+'./upload/'; } if(!return_func){ return_func=function(data){ console.log(data); } } var return_func2=function(data){ console.log(data); if(!data){ alert("ファイルのアップロードに失敗しました"); }else{ return_func(data); } } var func=new ajaxObjReady(); var func2=func.url(sql_target).base(base).post(postData).connected(return_func2).sync(true).ready(); func2(); // await fetch(sql_target, { // method: "POST", // body: formData // }).then(response => response.json()).then(data => func2(data)); } // ===== 本システムのホームディレクトリの絶対URLを得る =============== // [入力] // ・なし // [出力] // ・本システムのホームディレクトリーの絶対URL文字列 // - 文字列の最後には "/" が付いている。従ってこのURLを元に、別のファ // イルやディレクトリーの絶対URLを作る時、付け足す文字列の先頭に "/" // は不要である。 // - 失敗時はnull // [備考] // ・JavaScriptにとって、自分のプログラムファイルが置かれている絶対URL // を自力で知るのは難しい。理由は、呼び出し側HTMLのカレントURL(絶対 // URL)が与えられるからだ。 // ・そこで呼び出し側HTMLの中にある、呼び出し元の