# 情報共有
差分
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));
});
});
}
```