# 情報共有 差分 https://did2memo.net/2015/03/05/pdf-diff-tools/ # Qiitaのネタ ## Asp .Net Coreのアプリを外部公開する方法。 **概要** Asp .Net coreのアプリはデフォルトでlocalhostのみアクセス可能になっている。 それをlocalhost以外でアクセス可能にする方法を説明。 ## EF coreのテスト方法 **概要** データベース周りのテストを行う際、MockDBを立てないといけないのだが、その方法を説明。 ## EF core migrations **概要** https://medium.com/@hasangi/everything-you-wanna-know-about-ef-core-migrations-ca6f0926f71d#:~:text=Designer.,migrations%20used%20by%20Entity%20Framework. ## Extensionメソッド **概要** メソッドの中身を書き換えず、追加でメソッドを作成する方法。 ## コード ```javascript= var Differences = { id: '', title: '', current: '', previous: '', //tr要素が親だったら、childrenにはtd要素がはいる。 children: {}, get currentText() { return this.current.text() }, get previousText() { return this.previous.text() }, } function Test1() { var differences = console.log(Differences) } Test1() const getDifferences = () => { //現在のHTML function getCurrentHtml() { return '' } //過去のHTML function getPreviousHtml() { //tr要素全て取得 return '' } function getDiff() { //複数のtr取得 var trElement = document .getElementsByTagName('tr') .querySelectorAll('[data-val]') } //同じidをもつtd要素を1つのオブジェクトに挿入する。 //1. tr要素を取得し、objectを作成 //2. tr要素のchildrenであるtd要素を取得し、1で取得したobject内に挿入する。 } var Differences = { id: 'root', name: 'ルート', current: '', previous: '', children: [ //共通部分 { id: 'commonId', title: '共通', current: '', previous: '', children: [ //会社の名前 { id: 'companyName', title: '会社名', current: '', previous: '', }, //会社の現場 { id: 'companyField', title: '会社現場', current: '', previous: '', }, ], }, //作業員一覧 { //workerId id: '298765', title: '作業員A', current: '', previous: '', //tr要素が親だったら、childrenにはtd要素がはいる。 children: [ //漢字の項目 { id: 'namekanji', title: '作業員A漢字', current: '作業員A現在', previous: '作業員A前回', }, //カタカナの項目 { id: 'namekana', title: '作業員Aカナ', current: 'サギョウインゲンザイ', previous: 'サギョウインゼンカイ', }, ], }, ], } ``` ### 2022/7/1作成分 ``` //差分オブジェクト作成 const newDifferenceObj = (key, current, previous, status, children) => { var differences = { key: key, current: current, previous: previous, status: status, children: children // children: new Map(["parentKey", "Differences"]) } return differences; } //現在のHTML要素取得 const GetCurrentHtml = () => { return document.documentElement; } //前回のHTML要素取得 const GetPreviousHtml = () => { const url = new URL(location.href); url.searchParams.append("getPrevious", true); const response = await fetch(url.href); const html = await response.text(); return new DOMParser.parseFromString(html, "text/html"); } //前回、現在のHTMLから差分を抽出。 const GetDifferences = (currentHtml, previousHtml) => { //現在のtr属性を取得 const trCurrentElement = $(currentHtml).find('[data-difference-key]').find('tr'); //現在のtr属性のchildrenを取得する。 const trCurrentChildren = trCurrentElement.children().find('[data-difference-key]'); // //現在のtd属性を取得 // const tdCurrentElement = $(currentHtml).find('[data-difference-key]').find('td'); // //前回のtr属性を取得する。 // const trPreviousElement = $(previousHtml).find('[data-difference-key]').find('tr'); // //現在のtd属性を取得 // const tdPreviousElement = $(previousHtml).find('[data-difference-key]').find('td'); trCurrentElement.forEach((e) => { const key = $(e).data('difference-key'); //配下の子要素(td要素であると仮定する。) const children = trCurrentElement.children().find(('[data-difference-key]')); var childMap = new Map(); children.forEach((ce) => { const keyChild = $(ce).data('difference-key'); childMap.set(key, newDifferenceObj(keyChild, ce)); }); }); } ```