Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
9년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
2 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
103 행
복사
19 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
109 행
복사
(function(Chart) {
(function(Chart) {
var cloneArray = function(srcAry) {
var cloneArray = function(srcAry) {
var dstAry = [];
var dstAry = [];
var length = srcAry.length;
var length = srcAry.length;
for (var i = 0; i < length; i++) {
for (var i = 0; i < length; i++) {
dstAry.push(srcAry[i]);
dstAry.push(srcAry[i]);
}
}
return dstAry;
return dstAry;
};
};
var setOriginalData = function(data) {
var setOriginalData = function(data) {
data.originalData = data.datasets.map(function(dataset) {
data.originalData = data.datasets.map(function(dataset) {
return cloneArray(dataset.data);
return cloneArray(dataset.data);
});
});
};
};
// set calculated rate (xx%) to data.calculatedData
// set calculated rate (xx%) to data.calculatedData
var calculateRate = function(data) {
var calculateRate = function(data) {
var visibles = data.datasets.map(function(dataset) {
var visibles = data.datasets.map(function(dataset) {
if (!dataset._meta) return true;
if (!dataset._meta) return true;
for (var i in dataset._meta) {
for (var i in dataset._meta) {
return !dataset._meta[i].hidden;
return !dataset._meta[i].hidden;
}
}
});
});
복사
복사됨
복사
복사됨
var totals = Array.apply(null, new Array(data.datasets[0].data.length)).map(function(el, i) {
var totals = Array.apply(null, new Array(data.datasets[0].data.length)).map(function(el, i) {
return data.datasets.reduce(function(sum, dataset, j) {
return data.datasets.reduce(function(sum, dataset, j) {
var key = dataset.stack;
var key = dataset.stack;
if (!sum[key]) sum[key] = 0;
if (!sum[key]) sum[key] = 0;
sum[key] +=
dataset.data[i]
* visibles[j];
sum[key] +=
(dataset.type === "line" ? 0 :
dataset.data[i]
)
* visibles[j];
복사
복사됨
복사
복사됨
return sum;
return sum;
}, {});
}, {});
});
});
data.calculatedData = data.datasets.map(function(dataset, i) {
data.calculatedData = data.datasets.map(function(dataset, i) {
return dataset.data.map(function(val, i) {
return dataset.data.map(function(val, i) {
복사
복사됨
복사
복사됨
var total = totals[i][dataset.stack];
if(dataset.type === "line") {
return val && total ? Math.round(val * 1000 / total) / 10 : 0;
return val;
} else {
var total = totals[i][dataset.stack];
return val && total ? Math.round(val * 1000 / total) / 10 : 0;
}
});
});
});
});
};
};
var tooltipLabel = function(tooltipItem, data) {
var tooltipLabel = function(tooltipItem, data) {
var datasetIndex = tooltipItem.datasetIndex;
var datasetIndex = tooltipItem.datasetIndex;
var index = tooltipItem.index;
var index = tooltipItem.index;
var datasetLabel = data.datasets[datasetIndex].label || "";
var datasetLabel = data.datasets[datasetIndex].label || "";
var originalValue = data.originalData[datasetIndex][index];
var originalValue = data.originalData[datasetIndex][index];
var rateValue = data.calculatedData[datasetIndex][index];
var rateValue = data.calculatedData[datasetIndex][index];
return "" + datasetLabel + ": " + rateValue + "% (" + originalValue + ")";
return "" + datasetLabel + ": " + rateValue + "% (" + originalValue + ")";
};
};
var reflectData = function(srcData, datasets) {
var reflectData = function(srcData, datasets) {
if (!srcData) return;
if (!srcData) return;
srcData.forEach(function(data, i) {
srcData.forEach(function(data, i) {
datasets[i].data = data;
datasets[i].data = data;
});
});
};
};
var Stacked100Plugin = {
var Stacked100Plugin = {
id: "stacked100",
id: "stacked100",
beforeInit: function(chartInstance, pluginOptions) {
beforeInit: function(chartInstance, pluginOptions) {
if (!pluginOptions.enable) return;
if (!pluginOptions.enable) return;
var xAxes = chartInstance.options.scales.xAxes;
var xAxes = chartInstance.options.scales.xAxes;
var yAxes = chartInstance.options.scales.yAxes;
var yAxes = chartInstance.options.scales.yAxes;
var isVertical = chartInstance.config.type === "bar" || chartInstance.config.type === "line";
var isVertical = chartInstance.config.type === "bar" || chartInstance.config.type === "line";
[xAxes, yAxes].forEach(function(axes) {
[xAxes, yAxes].forEach(function(axes) {
axes.forEach(function(hash) {
axes.forEach(function(hash) {
복사
복사됨
복사
복사됨
hash.stacked = true;
if(hash.stacked === false) return;
hash.stacked = true;
});
});
});
});
(isVertical ? yAxes : xAxes).forEach(function(hash) {
(isVertical ? yAxes : xAxes).forEach(function(hash) {
복사
복사됨
복사
복사됨
if(hash.stacked === false) return;
hash.ticks.min = 0;
hash.ticks.min = 0;
hash.ticks.max = 100;
hash.ticks.max = 100;
});
});
chartInstance.options.tooltips.callbacks.label = tooltipLabel;
chartInstance.options.tooltips.callbacks.label = tooltipLabel;
},
},
beforeDatasetsUpdate: function(chartInstance, pluginOptions) {
beforeDatasetsUpdate: function(chartInstance, pluginOptions) {
if (!pluginOptions.enable) return;
if (!pluginOptions.enable) return;
setOriginalData(chartInstance.data);
setOriginalData(chartInstance.data);
calculateRate(chartInstance.data);
calculateRate(chartInstance.data);
reflectData(chartInstance.data.calculatedData, chartInstance.data.datasets);
reflectData(chartInstance.data.calculatedData, chartInstance.data.datasets);
},
},
afterDatasetsUpdate: function(chartInstance, pluginOptions) {
afterDatasetsUpdate: function(chartInstance, pluginOptions) {
if (!pluginOptions.enable) return;
if (!pluginOptions.enable) return;
reflectData(chartInstance.data.originalData, chartInstance.data.datasets);
reflectData(chartInstance.data.originalData, chartInstance.data.datasets);
}
}
};
};
Chart.pluginService.register(Stacked100Plugin);
Chart.pluginService.register(Stacked100Plugin);
}.call(this, Chart));
}.call(this, Chart));
저장된 비교 결과
원본
파일 열기
(function(Chart) { var cloneArray = function(srcAry) { var dstAry = []; var length = srcAry.length; for (var i = 0; i < length; i++) { dstAry.push(srcAry[i]); } return dstAry; }; var setOriginalData = function(data) { data.originalData = data.datasets.map(function(dataset) { return cloneArray(dataset.data); }); }; // set calculated rate (xx%) to data.calculatedData var calculateRate = function(data) { var visibles = data.datasets.map(function(dataset) { if (!dataset._meta) return true; for (var i in dataset._meta) { return !dataset._meta[i].hidden; } }); var totals = Array.apply(null, new Array(data.datasets[0].data.length)).map(function(el, i) { return data.datasets.reduce(function(sum, dataset, j) { var key = dataset.stack; if (!sum[key]) sum[key] = 0; sum[key] += dataset.data[i] * visibles[j]; return sum; }, {}); }); data.calculatedData = data.datasets.map(function(dataset, i) { return dataset.data.map(function(val, i) { var total = totals[i][dataset.stack]; return val && total ? Math.round(val * 1000 / total) / 10 : 0; }); }); }; var tooltipLabel = function(tooltipItem, data) { var datasetIndex = tooltipItem.datasetIndex; var index = tooltipItem.index; var datasetLabel = data.datasets[datasetIndex].label || ""; var originalValue = data.originalData[datasetIndex][index]; var rateValue = data.calculatedData[datasetIndex][index]; return "" + datasetLabel + ": " + rateValue + "% (" + originalValue + ")"; }; var reflectData = function(srcData, datasets) { if (!srcData) return; srcData.forEach(function(data, i) { datasets[i].data = data; }); }; var Stacked100Plugin = { id: "stacked100", beforeInit: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; var xAxes = chartInstance.options.scales.xAxes; var yAxes = chartInstance.options.scales.yAxes; var isVertical = chartInstance.config.type === "bar" || chartInstance.config.type === "line"; [xAxes, yAxes].forEach(function(axes) { axes.forEach(function(hash) { hash.stacked = true; }); }); (isVertical ? yAxes : xAxes).forEach(function(hash) { hash.ticks.min = 0; hash.ticks.max = 100; }); chartInstance.options.tooltips.callbacks.label = tooltipLabel; }, beforeDatasetsUpdate: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; setOriginalData(chartInstance.data); calculateRate(chartInstance.data); reflectData(chartInstance.data.calculatedData, chartInstance.data.datasets); }, afterDatasetsUpdate: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; reflectData(chartInstance.data.originalData, chartInstance.data.datasets); } }; Chart.pluginService.register(Stacked100Plugin); }.call(this, Chart));
수정본
파일 열기
(function(Chart) { var cloneArray = function(srcAry) { var dstAry = []; var length = srcAry.length; for (var i = 0; i < length; i++) { dstAry.push(srcAry[i]); } return dstAry; }; var setOriginalData = function(data) { data.originalData = data.datasets.map(function(dataset) { return cloneArray(dataset.data); }); }; // set calculated rate (xx%) to data.calculatedData var calculateRate = function(data) { var visibles = data.datasets.map(function(dataset) { if (!dataset._meta) return true; for (var i in dataset._meta) { return !dataset._meta[i].hidden; } }); var totals = Array.apply(null, new Array(data.datasets[0].data.length)).map(function(el, i) { return data.datasets.reduce(function(sum, dataset, j) { var key = dataset.stack; if (!sum[key]) sum[key] = 0; sum[key] += (dataset.type === "line" ? 0 : dataset.data[i]) * visibles[j]; return sum; }, {}); }); data.calculatedData = data.datasets.map(function(dataset, i) { return dataset.data.map(function(val, i) { if(dataset.type === "line") { return val; } else { var total = totals[i][dataset.stack]; return val && total ? Math.round(val * 1000 / total) / 10 : 0; } }); }); }; var tooltipLabel = function(tooltipItem, data) { var datasetIndex = tooltipItem.datasetIndex; var index = tooltipItem.index; var datasetLabel = data.datasets[datasetIndex].label || ""; var originalValue = data.originalData[datasetIndex][index]; var rateValue = data.calculatedData[datasetIndex][index]; return "" + datasetLabel + ": " + rateValue + "% (" + originalValue + ")"; }; var reflectData = function(srcData, datasets) { if (!srcData) return; srcData.forEach(function(data, i) { datasets[i].data = data; }); }; var Stacked100Plugin = { id: "stacked100", beforeInit: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; var xAxes = chartInstance.options.scales.xAxes; var yAxes = chartInstance.options.scales.yAxes; var isVertical = chartInstance.config.type === "bar" || chartInstance.config.type === "line"; [xAxes, yAxes].forEach(function(axes) { axes.forEach(function(hash) { if(hash.stacked === false) return; hash.stacked = true; }); }); (isVertical ? yAxes : xAxes).forEach(function(hash) { if(hash.stacked === false) return; hash.ticks.min = 0; hash.ticks.max = 100; }); chartInstance.options.tooltips.callbacks.label = tooltipLabel; }, beforeDatasetsUpdate: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; setOriginalData(chartInstance.data); calculateRate(chartInstance.data); reflectData(chartInstance.data.calculatedData, chartInstance.data.datasets); }, afterDatasetsUpdate: function(chartInstance, pluginOptions) { if (!pluginOptions.enable) return; reflectData(chartInstance.data.originalData, chartInstance.data.datasets); } }; Chart.pluginService.register(Stacked100Plugin); }.call(this, Chart));
비교하기