JavaScriptを色々あれこれしようとするがひたすら失敗を繰り返している
| Revision | 34 (tree) |
|---|---|
| Time | 2016-11-29 22:45:29 |
| Author | |
ファイル保存,読み込み対応
| @@ -32,13 +32,18 @@ | ||
| 32 | 32 | this.dropinitsize = 100.0; // File dropで作成する Elementの長辺の長さ |
| 33 | 33 | } |
| 34 | 34 | initDOMobj() { |
| 35 | - if (null != this.DOMobject) { | |
| 35 | + if (null != this.DOMbase) { | |
| 36 | 36 | this.debuglog('initDOMobj() Clear the reference to DOM element'); |
| 37 | 37 | this.DOMobject.removeEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 38 | - document.getElementById('DispField').removeChild(this.DOMobject); | |
| 38 | + | |
| 39 | + this.DOMbase.removeChild(this.DOMobject); | |
| 39 | 40 | this.DOMobject.outerHTML = ""; |
| 40 | 41 | delete this.DOMobject; |
| 41 | 42 | this.DOMobject = null; |
| 43 | + document.getElementById('DispField').removeChild(this.DOMbase); | |
| 44 | + this.DOMbase.outerHTML = ""; | |
| 45 | + delete this.DOMbase; | |
| 46 | + this.DOMbase = null; | |
| 42 | 47 | } |
| 43 | 48 | } |
| 44 | 49 |
| @@ -200,24 +205,34 @@ | ||
| 200 | 205 | this.debuglog('createFromElement() ele=' + ele); |
| 201 | 206 | |
| 202 | 207 | this.DOMbase = ele; |
| 208 | + | |
| 203 | 209 | this.type = (null != ele.nodeName.match(/IMG/)) ? 'imagebox' : 'textbox'; |
| 204 | 210 | this.x = parseInt(ele.style.left); |
| 205 | 211 | this.y = parseInt(ele.style.top); |
| 206 | 212 | this.width = parseInt(ele.style.width); |
| 207 | 213 | this.height = parseInt(ele.style.height); |
| 208 | - this.originalWidth = ele.dataset.orgwidth; | |
| 209 | - this.originalHeight = ele.dataset.orgheight; | |
| 210 | 214 | this.ObjID = ele.dataset.objid; |
| 211 | 215 | this.degree = ele.dataset.degree; |
| 212 | 216 | this.DOMbase.addEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 213 | 217 | |
| 218 | + if( ele.children.length < 1 ){ | |
| 219 | + console.error('保存ファイルから前回の状態を復元できません 要素の構成エラー 表示に必要な要素の情報が欠けている\nobjid=' + ele.dataset.objid + ', className=' + ele.className); | |
| 220 | + return; | |
| 221 | + } | |
| 222 | + this.DOMobject = ele.children[0]; | |
| 223 | + if( parseInt(this.DOMbase.dataset.objid) != parseInt(this.DOMobject.dataset.objid) ){ | |
| 224 | + console.error('\ | |
| 225 | +保存ファイルから前回の状態を復元できません 要素の構成エラー 指定要素がずれています\n\ | |
| 226 | +base objid=' + this.DOMbase.dataset.objid + ', className=' + this.DOMbase.className + '\n\ | |
| 227 | +disp objid=' + this.DOMobject.dataset.objid + ', className=' + this.DOMobject.className); | |
| 228 | + return; | |
| 229 | + } | |
| 230 | + this.originalWidth = this.DOMobject.dataset.orgwidth; | |
| 231 | + this.originalHeight = this.DOMobject.dataset.orgheight; | |
| 214 | 232 | // 画像・テキストは既にelementに読み込み済み |
| 215 | 233 | // treeにも入っており、更新する必要もないのでこれで完了 |
| 216 | 234 | } |
| 217 | 235 | |
| 218 | - | |
| 219 | - | |
| 220 | - | |
| 221 | 236 | // DIV box 移動 (移動先確定後の移動) |
| 222 | 237 | // ※ Drag中の表示は別で行っている |
| 223 | 238 | movebox(x, y) { |
| @@ -81,7 +81,7 @@ | ||
| 81 | 81 | this.clear(); |
| 82 | 82 | |
| 83 | 83 | // 復元されたDispObj elementを取得 |
| 84 | - let listEle = document.getElementsByClassName('DispObj'); | |
| 84 | + let listEle = document.getElementsByClassName('DispBase'); | |
| 85 | 85 | |
| 86 | 86 | this.debuglog('読み込み処理 DOM element設定から内部instanceを作成\nElement=' + listEle.length); |
| 87 | 87 |
| @@ -138,7 +138,7 @@ | ||
| 138 | 138 | // 要素を DOM treeから 切り離すことで表示されないようにする |
| 139 | 139 | if (id < this.ObjIDLen) { |
| 140 | 140 | let displayField = document.getElementById('DispField'); |
| 141 | - displayField.removeChild(this.ObjIDarray[id].DOMobject); | |
| 141 | + displayField.removeChild(this.ObjIDarray[id].DOMbase); | |
| 142 | 142 | } |
| 143 | 143 | } |
| 144 | 144 | } // class CObjIDMgr |
| @@ -32,13 +32,18 @@ | ||
| 32 | 32 | this.dropinitsize = 100.0; // File dropで作成する Elementの長辺の長さ |
| 33 | 33 | } |
| 34 | 34 | initDOMobj() { |
| 35 | - if (null != this.DOMobject) { | |
| 35 | + if (null != this.DOMbase) { | |
| 36 | 36 | this.debuglog('initDOMobj() Clear the reference to DOM element'); |
| 37 | 37 | this.DOMobject.removeEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 38 | - document.getElementById('DispField').removeChild(this.DOMobject); | |
| 38 | + | |
| 39 | + this.DOMbase.removeChild(this.DOMobject); | |
| 39 | 40 | this.DOMobject.outerHTML = ""; |
| 40 | 41 | delete this.DOMobject; |
| 41 | 42 | this.DOMobject = null; |
| 43 | + document.getElementById('DispField').removeChild(this.DOMbase); | |
| 44 | + this.DOMbase.outerHTML = ""; | |
| 45 | + delete this.DOMbase; | |
| 46 | + this.DOMbase = null; | |
| 42 | 47 | } |
| 43 | 48 | } |
| 44 | 49 |
| @@ -200,24 +205,34 @@ | ||
| 200 | 205 | this.debuglog('createFromElement() ele=' + ele); |
| 201 | 206 | |
| 202 | 207 | this.DOMbase = ele; |
| 208 | + | |
| 203 | 209 | this.type = (null != ele.nodeName.match(/IMG/)) ? 'imagebox' : 'textbox'; |
| 204 | 210 | this.x = parseInt(ele.style.left); |
| 205 | 211 | this.y = parseInt(ele.style.top); |
| 206 | 212 | this.width = parseInt(ele.style.width); |
| 207 | 213 | this.height = parseInt(ele.style.height); |
| 208 | - this.originalWidth = ele.dataset.orgwidth; | |
| 209 | - this.originalHeight = ele.dataset.orgheight; | |
| 210 | 214 | this.ObjID = ele.dataset.objid; |
| 211 | 215 | this.degree = ele.dataset.degree; |
| 212 | 216 | this.DOMbase.addEventListener('mousedown', this.onMouseDown.bind(this), false); |
| 213 | 217 | |
| 218 | + if( ele.children.length < 1 ){ | |
| 219 | + console.error('保存ファイルから前回の状態を復元できません 要素の構成エラー 表示に必要な要素の情報が欠けている\nobjid=' + ele.dataset.objid + ', className=' + ele.className); | |
| 220 | + return; | |
| 221 | + } | |
| 222 | + this.DOMobject = ele.children[0]; | |
| 223 | + if( parseInt(this.DOMbase.dataset.objid) != parseInt(this.DOMobject.dataset.objid) ){ | |
| 224 | + console.error('\ | |
| 225 | +保存ファイルから前回の状態を復元できません 要素の構成エラー 指定要素がずれています\n\ | |
| 226 | +base objid=' + this.DOMbase.dataset.objid + ', className=' + this.DOMbase.className + '\n\ | |
| 227 | +disp objid=' + this.DOMobject.dataset.objid + ', className=' + this.DOMobject.className); | |
| 228 | + return; | |
| 229 | + } | |
| 230 | + this.originalWidth = this.DOMobject.dataset.orgwidth; | |
| 231 | + this.originalHeight = this.DOMobject.dataset.orgheight; | |
| 214 | 232 | // 画像・テキストは既にelementに読み込み済み |
| 215 | 233 | // treeにも入っており、更新する必要もないのでこれで完了 |
| 216 | 234 | } |
| 217 | 235 | |
| 218 | - | |
| 219 | - | |
| 220 | - | |
| 221 | 236 | // DIV box 移動 (移動先確定後の移動) |
| 222 | 237 | // ※ Drag中の表示は別で行っている |
| 223 | 238 | movebox(x, y) { |
| @@ -81,7 +81,7 @@ | ||
| 81 | 81 | this.clear(); |
| 82 | 82 | |
| 83 | 83 | // 復元されたDispObj elementを取得 |
| 84 | - let listEle = document.getElementsByClassName('DispObj'); | |
| 84 | + let listEle = document.getElementsByClassName('DispBase'); | |
| 85 | 85 | |
| 86 | 86 | this.debuglog('読み込み処理 DOM element設定から内部instanceを作成\nElement=' + listEle.length); |
| 87 | 87 |
| @@ -138,7 +138,7 @@ | ||
| 138 | 138 | // 要素を DOM treeから 切り離すことで表示されないようにする |
| 139 | 139 | if (id < this.ObjIDLen) { |
| 140 | 140 | let displayField = document.getElementById('DispField'); |
| 141 | - displayField.removeChild(this.ObjIDarray[id].DOMobject); | |
| 141 | + displayField.removeChild(this.ObjIDarray[id].DOMbase); | |
| 142 | 142 | } |
| 143 | 143 | } |
| 144 | 144 | } // class CObjIDMgr |