JavaScriptを色々あれこれしようとするがひたすら失敗を繰り返している
| Revision | 35 (tree) |
|---|---|
| Time | 2016-12-01 19:25:51 |
| Author | |
Canvas objectの上にframe objectを追加
| @@ -44,9 +44,17 @@ | ||
| 44 | 44 | /* キャンバス要素の定義 */ |
| 45 | 45 | #DispField{ |
| 46 | 46 | display:block; |
| 47 | - width:400px; height:300px; | |
| 48 | - border:1px solid black; | |
| 49 | - margin: 10px; | |
| 47 | + width:400px; height:300px; | |
| 48 | + border: none; | |
| 49 | + margin: 0; padding: 0; | |
| 50 | + background-color: transparent; | |
| 51 | + } | |
| 52 | + | |
| 53 | + #FrameArea{ | |
| 54 | + display:block; | |
| 55 | + width: 100%; height: 100%; | |
| 56 | + border: 1px solid black; | |
| 57 | + margin: 0; padding: 0; | |
| 50 | 58 | background-color: white; |
| 51 | 59 | } |
| 52 | 60 |
| @@ -61,6 +69,12 @@ | ||
| 61 | 69 | left:0; top:0; |
| 62 | 70 | width: 100%; height: 100%; |
| 63 | 71 | } |
| 72 | + div.DispObj { | |
| 73 | + -webkit-user-select: text; | |
| 74 | + -khtml-user-select: text; | |
| 75 | + -moz-user-select: text; | |
| 76 | + user-select: text; | |
| 77 | + } | |
| 64 | 78 | |
| 65 | 79 | |
| 66 | 80 | /* パレットグループ要素の定義 */ |
| @@ -10,9 +10,11 @@ | ||
| 10 | 10 | <body> |
| 11 | 11 | |
| 12 | 12 | <div id="apparea" data-objid="apparea"> |
| 13 | - <!-- 編集領域 --> | |
| 14 | - <div id="DispField" data-objid="DisplayField" data-focus="true"> | |
| 13 | + <!-- Editting area from here --------------------- --> | |
| 14 | + <div id="DispField" data-objid="DisplayField"> | |
| 15 | + <div id="FrameArea" data-objid="FrameArea"></div> | |
| 15 | 16 | </div> |
| 17 | + <!-- ------------------------------------ to here. --> | |
| 16 | 18 | <!-- 固定ボタン (選択要素の削除, 保存, …) --> |
| 17 | 19 | <button type=button class="pal" data-objid="pal" data-palid="0" title="フォーカス中の要素を削除します">削除</button> |
| 18 | 20 | <button type=button class="pal" data-objid="pal" data-palid="1" title="現在のパレット設定を保存します">設定保存</button> |
| @@ -199,6 +201,7 @@ | ||
| 199 | 201 | <script type="text/javascript" src="js/DispObj.js"></script> |
| 200 | 202 | <script type="text/javascript" src="js/ObjIDMgr.js"></script> |
| 201 | 203 | <script type="text/javascript" src="js/ThreadMessage.js"></script> |
| 204 | + <script type="text/javascript" src="js/framearea.js"></script> | |
| 202 | 205 | <script type="text/javascript" src="js/DisplayField.js"></script> |
| 203 | 206 | <script type="text/javascript" src="js/apparea.js"></script> |
| 204 | 207 | <script type="text/javascript" src="js/main.js"></script> |
| @@ -40,7 +40,7 @@ | ||
| 40 | 40 | this.DOMobject.outerHTML = ""; |
| 41 | 41 | delete this.DOMobject; |
| 42 | 42 | this.DOMobject = null; |
| 43 | - document.getElementById('DispField').removeChild(this.DOMbase); | |
| 43 | + window.frameArea.DOMobject.removeChild(this.DOMbase); | |
| 44 | 44 | this.DOMbase.outerHTML = ""; |
| 45 | 45 | delete this.DOMbase; |
| 46 | 46 | this.DOMbase = null; |
| @@ -192,7 +192,7 @@ | ||
| 192 | 192 | this.DOMbase.style.top = this.y.toString() + "px"; |
| 193 | 193 | this.DOMbase.style.width = this.width.toString() + "px"; |
| 194 | 194 | this.DOMbase.style.height = this.height.toString() + "px"; |
| 195 | - document.getElementById('DispField').appendChild(this.DOMbase); | |
| 195 | + window.frameArea.DOMobject.appendChild(this.DOMbase); | |
| 196 | 196 | |
| 197 | 197 | this.debuglog("renderCreate() left=" + this.DOMbase.style.left |
| 198 | 198 | + ", top=" + this.DOMbase.style.top |
| @@ -9,6 +9,7 @@ | ||
| 9 | 9 | this.DOMobject = dom; |
| 10 | 10 | this.mouseMoveFunc = null; |
| 11 | 11 | this.mouseUpFunc = null; |
| 12 | + this.objid = "DisplayField"; | |
| 12 | 13 | } |
| 13 | 14 | |
| 14 | 15 | debuglog(str) { |
| @@ -48,7 +49,23 @@ | ||
| 48 | 49 | setFieldData(text) { |
| 49 | 50 | this.DOMobject.innerHTML = text; |
| 50 | 51 | } |
| 52 | + /* | |
| 53 | + clear() { | |
| 54 | + this.debuglog("clear()"); | |
| 55 | + if (null != this.DOMobject) { | |
| 56 | + this.DOMobject.removeEventListener('dragstart', this.onDragStart.bind(this), false); | |
| 57 | + this.DOMobject.removeEventListener('dragover', this.onDragover.bind(this), false); | |
| 58 | + this.DOMobject.removeEventListener('drop', this.onDrop.bind(this), false); | |
| 51 | 59 | |
| 60 | + document.getElementById('apparea').removeChild(this.DOMobject); | |
| 61 | + this.DOMobject.outerHTML = ""; | |
| 62 | + delete this.DOMobject; | |
| 63 | + this.DOMobject = null; | |
| 64 | + } | |
| 65 | + this.mouseMoveFunc = null; | |
| 66 | + this.mouseUpFunc = null; | |
| 67 | + } | |
| 68 | + */ | |
| 52 | 69 | |
| 53 | 70 | |
| 54 | 71 | // Event handler ------------------- |
| @@ -7,6 +7,11 @@ | ||
| 7 | 7 | this.mouseMoveFunc = null; |
| 8 | 8 | this.mouseUpFunc = null; |
| 9 | 9 | } |
| 10 | + // 保存ファイルから編集エリア内容 (DispFieldの divとそこに連なるelement) を | |
| 11 | + // 取得するための正規表現object取得 | |
| 12 | + getEditAreaRegexp() { | |
| 13 | + return /<!-- Editting area from here --------------------- -->([\s\S]*?)<!-- ------------------------------------ to here. -->/; | |
| 14 | + } | |
| 10 | 15 | debuglog(str) { |
| 11 | 16 | debuglog("【appArea】" + str); |
| 12 | 17 | } |
| @@ -25,7 +30,55 @@ | ||
| 25 | 30 | |
| 26 | 31 | |
| 27 | 32 | // 操作関数 ----------------------------------- |
| 33 | + getFieldData() { | |
| 34 | + // 表示情報取得 | |
| 35 | + let data = this.DOMobject.innerHTML; | |
| 36 | + let editarea = data.match(this.getEditAreaRegexp())[0]; | |
| 37 | + if (null == editarea) { | |
| 38 | + console.error('ファイル保存 失敗 キャンバス情報が取得できません data=' + data); | |
| 39 | + return null; | |
| 40 | + } | |
| 41 | + // CSS情報取得 | |
| 42 | + let stylebg = document.getElementById('stylepalbg'); | |
| 43 | + let styletextcol = document.getElementById('stylepaltxtcol'); | |
| 44 | + let styleaction = document.getElementById('stylepalact'); | |
| 45 | + let cssbg = stylebg.sheet.cssText; | |
| 46 | + let csstextcol = styletextcol.sheet.cssText; | |
| 47 | + let cssaction = getAnimationCssFromElement(styleaction); // keyframe情報を取得するため、専用関数になっている | |
| 28 | 48 | |
| 49 | + // 最終出力 | |
| 50 | + let savestr = '<style id="stylepalbg">' + cssbg + '</style><style id="stylepaltxtcol">' + csstextcol + '</style><style id="stylepalact">' + cssaction + '</style>' + editarea; | |
| 51 | + | |
| 52 | + return savestr; | |
| 53 | + } | |
| 54 | + setFieldData(text) { | |
| 55 | + this.DOMobject.innerHTML = text; | |
| 56 | + } | |
| 57 | + replaceFieldData(text) { | |
| 58 | + if (null == text) { | |
| 59 | + console.error('キャンバス情報の置き換えに失敗 置き換え情報がない'); | |
| 60 | + return false; | |
| 61 | + } | |
| 62 | + | |
| 63 | + let newstr = text.match(this.getEditAreaRegexp()); | |
| 64 | + if (null == newstr) { | |
| 65 | + console.error('キャンバス情報の置き換えに失敗 置き換え情報データ不正 newstr=' + text); | |
| 66 | + return false; | |
| 67 | + } | |
| 68 | + | |
| 69 | + let elestr = this.DOMobject.innerHTML; | |
| 70 | + let result = elestr.replace(this.getEditAreaRegexp(), newstr[0]); | |
| 71 | + if (null == result) { | |
| 72 | + console.error('キャンバス情報の置き換えに失敗 置き換え要求に失敗 oldstr=' + elestr + '\nnewstr=' + newstr); | |
| 73 | + return false; | |
| 74 | + } | |
| 75 | + | |
| 76 | + this.DOMobject.innerHTML = result; | |
| 77 | + return true; | |
| 78 | + } | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 29 | 82 | // Mouse eventを拾ったときに通知してほしいときにセット |
| 30 | 83 | // 上書きすると前に設定されていた callbackが消えます |
| 31 | 84 | // callback: function mouseMove( evt ) move eventの evt.targetは目的のelementでない場合が多いため検索しない |
| @@ -0,0 +1,55 @@ | ||
| 1 | +class FrameArea { | |
| 2 | + constructor() { | |
| 3 | + this.DOMobject = null; | |
| 4 | + this.objid = "FrameArea"; | |
| 5 | + } | |
| 6 | + debuglog(str) { | |
| 7 | + let funcname = null; | |
| 8 | + let funcline = null; | |
| 9 | + let optinfo = ""; | |
| 10 | +/* let err = new Error(); | |
| 11 | + let strstack = err.stack; | |
| 12 | + | |
| 13 | + strstack = strstack.split(/\r\n|\r|\n/); // 改行区切りで配列に取得 | |
| 14 | + if (4 < strstack.length) { // 0:"Error", 1:This func, 2:Caller func, 3... | |
| 15 | + // 呼び出し元関数名取得 | |
| 16 | + if (-1 != strstack[2].indexOf("(")) { | |
| 17 | + funcname = strstack[2].match(/^ *at +(.+) +\(/)[1]; | |
| 18 | + } | |
| 19 | + else { | |
| 20 | + funcname = "Global code"; | |
| 21 | + } | |
| 22 | + // 呼び出し元の呼び出し元行番号取得 | |
| 23 | + funcline = strstack[3].match(/[^\/]*$/); | |
| 24 | + optinfo = funcline + ' ' + funcname + ': '; | |
| 25 | + } | |
| 26 | + */ | |
| 27 | + debuglog("【FrameArea】" + optinfo + str); | |
| 28 | + } | |
| 29 | + | |
| 30 | + // ■ 初期化 | |
| 31 | + initialize(dom) { | |
| 32 | + this.debuglog("initialize"); | |
| 33 | + if (null == dom) { | |
| 34 | + console.error("【DisplayField】 initialize() DOMobject is null."); | |
| 35 | + return false; | |
| 36 | + } | |
| 37 | + this.DOMobject = dom; | |
| 38 | + } | |
| 39 | + | |
| 40 | + | |
| 41 | + // 操作関数 ----------------------------------- | |
| 42 | + | |
| 43 | + clear() { | |
| 44 | + this.debuglog('clear()'); | |
| 45 | + if (null != this.DOMobject) { | |
| 46 | + window.displayField.DOMobject.removeChild(this.DOMobject); | |
| 47 | + this.DOMobject.outerHTML = ""; | |
| 48 | + delete this.DOMobject; | |
| 49 | + this.DOMobject = null; | |
| 50 | + } | |
| 51 | + } | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | +} |
| @@ -118,8 +118,13 @@ | ||
| 118 | 118 | |
| 119 | 119 | // 読み込んだ文字列を 「animation定義」と「keyframe定義」に分割 |
| 120 | 120 | let keyframeStartIndex = cssdata.indexOf('@keyframe'); |
| 121 | - let strAnimation = cssdata.slice(0, keyframeStartIndex - 1); | |
| 121 | + let strTmp = cssdata.slice(0, keyframeStartIndex - 1); | |
| 122 | + let strAnimation = strTmp.match(/\{([\s\S]*)\}/)[1]; | |
| 122 | 123 | let strKeyframe = cssdata.slice(keyframeStartIndex); |
| 124 | + if (null == strAnimation || null == strKeyframe) { | |
| 125 | + console.error('パレットへの drop file読み込み失敗 \npalette=' + ele.dataset.objid + ', file=' + file.name); | |
| 126 | + return false; | |
| 127 | + } | |
| 123 | 128 | |
| 124 | 129 | // CSS定義の差し替え |
| 125 | 130 | let defAnimNum = id * 2; // CSS定義が 'animation' と '@keyframe'のため |
| @@ -44,9 +44,17 @@ | ||
| 44 | 44 | /* キャンバス要素の定義 */ |
| 45 | 45 | #DispField{ |
| 46 | 46 | display:block; |
| 47 | - width:400px; height:300px; | |
| 48 | - border:1px solid black; | |
| 49 | - margin: 10px; | |
| 47 | + width:400px; height:300px; | |
| 48 | + border: none; | |
| 49 | + margin: 0; padding: 0; | |
| 50 | + background-color: transparent; | |
| 51 | + } | |
| 52 | + | |
| 53 | + #FrameArea{ | |
| 54 | + display:block; | |
| 55 | + width: 100%; height: 100%; | |
| 56 | + border: 1px solid black; | |
| 57 | + margin: 0; padding: 0; | |
| 50 | 58 | background-color: white; |
| 51 | 59 | } |
| 52 | 60 |
| @@ -61,6 +69,12 @@ | ||
| 61 | 69 | left:0; top:0; |
| 62 | 70 | width: 100%; height: 100%; |
| 63 | 71 | } |
| 72 | + div.DispObj { | |
| 73 | + -webkit-user-select: text; | |
| 74 | + -khtml-user-select: text; | |
| 75 | + -moz-user-select: text; | |
| 76 | + user-select: text; | |
| 77 | + } | |
| 64 | 78 | |
| 65 | 79 | |
| 66 | 80 | /* パレットグループ要素の定義 */ |
| @@ -10,9 +10,11 @@ | ||
| 10 | 10 | <body> |
| 11 | 11 | |
| 12 | 12 | <div id="apparea" data-objid="apparea"> |
| 13 | - <!-- 編集領域 --> | |
| 14 | - <div id="DispField" data-objid="DisplayField" data-focus="true"> | |
| 13 | + <!-- Editting area from here --------------------- --> | |
| 14 | + <div id="DispField" data-objid="DisplayField"> | |
| 15 | + <div id="FrameArea" data-objid="FrameArea"></div> | |
| 15 | 16 | </div> |
| 17 | + <!-- ------------------------------------ to here. --> | |
| 16 | 18 | <!-- 固定ボタン (選択要素の削除, 保存, …) --> |
| 17 | 19 | <button type=button class="pal" data-objid="pal" data-palid="0" title="フォーカス中の要素を削除します">削除</button> |
| 18 | 20 | <button type=button class="pal" data-objid="pal" data-palid="1" title="現在のパレット設定を保存します">設定保存</button> |
| @@ -199,6 +201,7 @@ | ||
| 199 | 201 | <script type="text/javascript" src="js/DispObj.js"></script> |
| 200 | 202 | <script type="text/javascript" src="js/ObjIDMgr.js"></script> |
| 201 | 203 | <script type="text/javascript" src="js/ThreadMessage.js"></script> |
| 204 | + <script type="text/javascript" src="js/framearea.js"></script> | |
| 202 | 205 | <script type="text/javascript" src="js/DisplayField.js"></script> |
| 203 | 206 | <script type="text/javascript" src="js/apparea.js"></script> |
| 204 | 207 | <script type="text/javascript" src="js/main.js"></script> |
| @@ -40,7 +40,7 @@ | ||
| 40 | 40 | this.DOMobject.outerHTML = ""; |
| 41 | 41 | delete this.DOMobject; |
| 42 | 42 | this.DOMobject = null; |
| 43 | - document.getElementById('DispField').removeChild(this.DOMbase); | |
| 43 | + window.frameArea.DOMobject.removeChild(this.DOMbase); | |
| 44 | 44 | this.DOMbase.outerHTML = ""; |
| 45 | 45 | delete this.DOMbase; |
| 46 | 46 | this.DOMbase = null; |
| @@ -192,7 +192,7 @@ | ||
| 192 | 192 | this.DOMbase.style.top = this.y.toString() + "px"; |
| 193 | 193 | this.DOMbase.style.width = this.width.toString() + "px"; |
| 194 | 194 | this.DOMbase.style.height = this.height.toString() + "px"; |
| 195 | - document.getElementById('DispField').appendChild(this.DOMbase); | |
| 195 | + window.frameArea.DOMobject.appendChild(this.DOMbase); | |
| 196 | 196 | |
| 197 | 197 | this.debuglog("renderCreate() left=" + this.DOMbase.style.left |
| 198 | 198 | + ", top=" + this.DOMbase.style.top |
| @@ -9,6 +9,7 @@ | ||
| 9 | 9 | this.DOMobject = dom; |
| 10 | 10 | this.mouseMoveFunc = null; |
| 11 | 11 | this.mouseUpFunc = null; |
| 12 | + this.objid = "DisplayField"; | |
| 12 | 13 | } |
| 13 | 14 | |
| 14 | 15 | debuglog(str) { |
| @@ -48,7 +49,23 @@ | ||
| 48 | 49 | setFieldData(text) { |
| 49 | 50 | this.DOMobject.innerHTML = text; |
| 50 | 51 | } |
| 52 | + /* | |
| 53 | + clear() { | |
| 54 | + this.debuglog("clear()"); | |
| 55 | + if (null != this.DOMobject) { | |
| 56 | + this.DOMobject.removeEventListener('dragstart', this.onDragStart.bind(this), false); | |
| 57 | + this.DOMobject.removeEventListener('dragover', this.onDragover.bind(this), false); | |
| 58 | + this.DOMobject.removeEventListener('drop', this.onDrop.bind(this), false); | |
| 51 | 59 | |
| 60 | + document.getElementById('apparea').removeChild(this.DOMobject); | |
| 61 | + this.DOMobject.outerHTML = ""; | |
| 62 | + delete this.DOMobject; | |
| 63 | + this.DOMobject = null; | |
| 64 | + } | |
| 65 | + this.mouseMoveFunc = null; | |
| 66 | + this.mouseUpFunc = null; | |
| 67 | + } | |
| 68 | + */ | |
| 52 | 69 | |
| 53 | 70 | |
| 54 | 71 | // Event handler ------------------- |
| @@ -7,6 +7,11 @@ | ||
| 7 | 7 | this.mouseMoveFunc = null; |
| 8 | 8 | this.mouseUpFunc = null; |
| 9 | 9 | } |
| 10 | + // 保存ファイルから編集エリア内容 (DispFieldの divとそこに連なるelement) を | |
| 11 | + // 取得するための正規表現object取得 | |
| 12 | + getEditAreaRegexp() { | |
| 13 | + return /<!-- Editting area from here --------------------- -->([\s\S]*?)<!-- ------------------------------------ to here. -->/; | |
| 14 | + } | |
| 10 | 15 | debuglog(str) { |
| 11 | 16 | debuglog("【appArea】" + str); |
| 12 | 17 | } |
| @@ -25,7 +30,55 @@ | ||
| 25 | 30 | |
| 26 | 31 | |
| 27 | 32 | // 操作関数 ----------------------------------- |
| 33 | + getFieldData() { | |
| 34 | + // 表示情報取得 | |
| 35 | + let data = this.DOMobject.innerHTML; | |
| 36 | + let editarea = data.match(this.getEditAreaRegexp())[0]; | |
| 37 | + if (null == editarea) { | |
| 38 | + console.error('ファイル保存 失敗 キャンバス情報が取得できません data=' + data); | |
| 39 | + return null; | |
| 40 | + } | |
| 41 | + // CSS情報取得 | |
| 42 | + let stylebg = document.getElementById('stylepalbg'); | |
| 43 | + let styletextcol = document.getElementById('stylepaltxtcol'); | |
| 44 | + let styleaction = document.getElementById('stylepalact'); | |
| 45 | + let cssbg = stylebg.sheet.cssText; | |
| 46 | + let csstextcol = styletextcol.sheet.cssText; | |
| 47 | + let cssaction = getAnimationCssFromElement(styleaction); // keyframe情報を取得するため、専用関数になっている | |
| 28 | 48 | |
| 49 | + // 最終出力 | |
| 50 | + let savestr = '<style id="stylepalbg">' + cssbg + '</style><style id="stylepaltxtcol">' + csstextcol + '</style><style id="stylepalact">' + cssaction + '</style>' + editarea; | |
| 51 | + | |
| 52 | + return savestr; | |
| 53 | + } | |
| 54 | + setFieldData(text) { | |
| 55 | + this.DOMobject.innerHTML = text; | |
| 56 | + } | |
| 57 | + replaceFieldData(text) { | |
| 58 | + if (null == text) { | |
| 59 | + console.error('キャンバス情報の置き換えに失敗 置き換え情報がない'); | |
| 60 | + return false; | |
| 61 | + } | |
| 62 | + | |
| 63 | + let newstr = text.match(this.getEditAreaRegexp()); | |
| 64 | + if (null == newstr) { | |
| 65 | + console.error('キャンバス情報の置き換えに失敗 置き換え情報データ不正 newstr=' + text); | |
| 66 | + return false; | |
| 67 | + } | |
| 68 | + | |
| 69 | + let elestr = this.DOMobject.innerHTML; | |
| 70 | + let result = elestr.replace(this.getEditAreaRegexp(), newstr[0]); | |
| 71 | + if (null == result) { | |
| 72 | + console.error('キャンバス情報の置き換えに失敗 置き換え要求に失敗 oldstr=' + elestr + '\nnewstr=' + newstr); | |
| 73 | + return false; | |
| 74 | + } | |
| 75 | + | |
| 76 | + this.DOMobject.innerHTML = result; | |
| 77 | + return true; | |
| 78 | + } | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 29 | 82 | // Mouse eventを拾ったときに通知してほしいときにセット |
| 30 | 83 | // 上書きすると前に設定されていた callbackが消えます |
| 31 | 84 | // callback: function mouseMove( evt ) move eventの evt.targetは目的のelementでない場合が多いため検索しない |
| @@ -0,0 +1,55 @@ | ||
| 1 | +class FrameArea { | |
| 2 | + constructor() { | |
| 3 | + this.DOMobject = null; | |
| 4 | + this.objid = "FrameArea"; | |
| 5 | + } | |
| 6 | + debuglog(str) { | |
| 7 | + let funcname = null; | |
| 8 | + let funcline = null; | |
| 9 | + let optinfo = ""; | |
| 10 | +/* let err = new Error(); | |
| 11 | + let strstack = err.stack; | |
| 12 | + | |
| 13 | + strstack = strstack.split(/\r\n|\r|\n/); // 改行区切りで配列に取得 | |
| 14 | + if (4 < strstack.length) { // 0:"Error", 1:This func, 2:Caller func, 3... | |
| 15 | + // 呼び出し元関数名取得 | |
| 16 | + if (-1 != strstack[2].indexOf("(")) { | |
| 17 | + funcname = strstack[2].match(/^ *at +(.+) +\(/)[1]; | |
| 18 | + } | |
| 19 | + else { | |
| 20 | + funcname = "Global code"; | |
| 21 | + } | |
| 22 | + // 呼び出し元の呼び出し元行番号取得 | |
| 23 | + funcline = strstack[3].match(/[^\/]*$/); | |
| 24 | + optinfo = funcline + ' ' + funcname + ': '; | |
| 25 | + } | |
| 26 | + */ | |
| 27 | + debuglog("【FrameArea】" + optinfo + str); | |
| 28 | + } | |
| 29 | + | |
| 30 | + // ■ 初期化 | |
| 31 | + initialize(dom) { | |
| 32 | + this.debuglog("initialize"); | |
| 33 | + if (null == dom) { | |
| 34 | + console.error("【DisplayField】 initialize() DOMobject is null."); | |
| 35 | + return false; | |
| 36 | + } | |
| 37 | + this.DOMobject = dom; | |
| 38 | + } | |
| 39 | + | |
| 40 | + | |
| 41 | + // 操作関数 ----------------------------------- | |
| 42 | + | |
| 43 | + clear() { | |
| 44 | + this.debuglog('clear()'); | |
| 45 | + if (null != this.DOMobject) { | |
| 46 | + window.displayField.DOMobject.removeChild(this.DOMobject); | |
| 47 | + this.DOMobject.outerHTML = ""; | |
| 48 | + delete this.DOMobject; | |
| 49 | + this.DOMobject = null; | |
| 50 | + } | |
| 51 | + } | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | +} |
| @@ -34,6 +34,12 @@ | ||
| 34 | 34 | dom = document.getElementById("DispField"); |
| 35 | 35 | window.displayField = new CDisplayField(dom); |
| 36 | 36 | window.displayField.initialize(); |
| 37 | + | |
| 38 | + dom = document.getElementById("FrameArea"); | |
| 39 | + window.frameArea = new FrameArea(); | |
| 40 | + window.frameArea.initialize(dom); | |
| 41 | + | |
| 42 | + | |
| 37 | 43 | window.ObjIDMgr = new CObjIDMgr(); |
| 38 | 44 | // ------------- |
| 39 | 45 | // 選択 itemの focus状態表示用 |
| @@ -231,17 +237,22 @@ | ||
| 231 | 237 | // 3. html部分を DisplayFieldに読み込み |
| 232 | 238 | window.partsFocus.setClingingPartner(null); // Focus消去 |
| 233 | 239 | window.ObjIDMgr.clear(); // 表示中の要素を削除 (ObjIDMgr.deletebox()は隠すだけなので注意) |
| 234 | - // canvas上の要素は div or imgのみ。どちらが先頭かは不確定 | |
| 235 | - let data = str.match(/<(div|img) +class=[\s\S]*/); | |
| 240 | + window.frameArea.clear(); | |
| 241 | + // canvas上の要素 | |
| 242 | + let data = str.match(/<div id=\"FrameArea\"[\s\S]*/); | |
| 236 | 243 | if (null == data) { |
| 237 | - console.error('File読み込み失敗 parseDdText() html要素がマッチしない\nindexDiv=' + indexDiv + ', indexImg=' + indexImg + ', str=' +str); | |
| 244 | + console.error('ファイル読みこみ 失敗 キャンバス情報が取得できません data=' + data); | |
| 238 | 245 | return; |
| 239 | 246 | } |
| 240 | 247 | // 表示データをそのまま DisplayFieldにセットする (見た目上は再現される) |
| 241 | 248 | window.displayField.setFieldData(data[0]); |
| 249 | + // FrameArea取得 | |
| 250 | + let frameDom = document.getElementById("FrameArea"); | |
| 251 | + window.frameArea.initialize(frameDom); | |
| 242 | 252 | |
| 243 | 253 | // 4. DOM treeに合わせて DispObj instanceを作成 |
| 244 | 254 | window.ObjIDMgr.adjustEnvToDOM(); |
| 255 | + | |
| 245 | 256 | } |
| 246 | 257 | |
| 247 | 258 |
| @@ -250,7 +261,6 @@ | ||
| 250 | 261 | |
| 251 | 262 | |
| 252 | 263 | |
| 253 | - | |
| 254 | 264 | // 固定ボタン押下 event handler ---------------- |
| 255 | 265 | |
| 256 | 266 | function onClickPalButton(evt) { |
| @@ -118,8 +118,13 @@ | ||
| 118 | 118 | |
| 119 | 119 | // 読み込んだ文字列を 「animation定義」と「keyframe定義」に分割 |
| 120 | 120 | let keyframeStartIndex = cssdata.indexOf('@keyframe'); |
| 121 | - let strAnimation = cssdata.slice(0, keyframeStartIndex - 1); | |
| 121 | + let strTmp = cssdata.slice(0, keyframeStartIndex - 1); | |
| 122 | + let strAnimation = strTmp.match(/\{([\s\S]*)\}/)[1]; | |
| 122 | 123 | let strKeyframe = cssdata.slice(keyframeStartIndex); |
| 124 | + if (null == strAnimation || null == strKeyframe) { | |
| 125 | + console.error('パレットへの drop file読み込み失敗 \npalette=' + ele.dataset.objid + ', file=' + file.name); | |
| 126 | + return false; | |
| 127 | + } | |
| 123 | 128 | |
| 124 | 129 | // CSS定義の差し替え |
| 125 | 130 | let defAnimNum = id * 2; // CSS定義が 'animation' と '@keyframe'のため |
| @@ -1,4 +1,6 @@ | ||
| 1 | -animation: animeY1 1.5s ease-in 0.3s infinite alternate; | |
| 1 | +dummy { | |
| 2 | + animation: animeY1 1.5s ease-in 0.3s infinite alternate; | |
| 3 | +} | |
| 2 | 4 | @keyframes animeY1 { |
| 3 | 5 | 0% {transform: translateY(-60px) translateX(-30px);} |
| 4 | 6 | 10% {transform: translateY(20px) translateX(30px);} |
| @@ -0,0 +1,43 @@ | ||
| 1 | +Logに出力したい項目 | |
| 2 | + ・設定状態 | |
| 3 | + ・アプリ設定情報 | |
| 4 | + ・実行環境 | |
| 5 | + ・ブラウザ種別 | |
| 6 | + ・OS | |
| 7 | + ・Hardware resource | |
| 8 | + ・実行中のPC状況 | |
| 9 | + ・CPU resource | |
| 10 | + ・memory resource | |
| 11 | + ・Storage | |
| 12 | + | |
| 13 | + | |
| 14 | + ・User Input | |
| 15 | + ・マウス押下 | |
| 16 | + ・要素選択 | |
| 17 | + ・関数呼び出し順 | |
| 18 | + ・コマンド履歴 | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | +ファイル読み込みについて | |
| 25 | + | |
| 26 | + 【DOM構成】 Function Color Size overflow position z-index | |
| 27 | + appArea Input event handling transparent Device hidden relative - | |
| 28 | + DisplayField Drop event handling transparent 10x10 visible relative 1 | |
| 29 | + FrameArea 背景画像 user setting user setting hidden absolute 100 | |
| 30 | + DispBase 配置要素(操作用) transparent user setting visible absolute 200 | |
| 31 | + DispObj 配置要素(表示用) user setting default visible absolute 300 | |
| 32 | + DispBase transparent user setting visible absolute 200 | |
| 33 | + DispObj user setting default visible absolute 300 | |
| 34 | + focusbar フォーカス要素 default default visible absolute 500 | |
| 35 | + PalGroup パレット要素 grouping default default visible absolute 1000 | |
| 36 | + palbg 背景画像設定 drop file default visible absolute 1100 | |
| 37 | + paltxtcol テキスト色設定 drop file default visible absolute 1100 | |
| 38 | + palaction 動き設定 drop file default visible absolute 1100 | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + |