hICS&98&;P)1qD9Tx>f;Oz6fIv!9C$+
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 {
+ // generate tab ID
+ while (tabID === null || sessionStorage.getItem(tabID)) {
+ tabID = Math.random();
+ }
+ // hide loading screen
+ const loading = $('.loading');
+ loading.addClass('hide');
+
+ initializeDateTime();
+
+ const endProcs = genProcessDropdownData(procConfigs);
+
+ // add first end process
+ const endProcItem = addEndProcMultiSelect(endProcs.ids, endProcs.names, {
+ showDataType: true,
+ showStrColumn: true,
+ showCatExp: true,
+ isRequired: true,
+ showColor: true,
+ colorAsDropdown: true,
+ hasDiv: true,
+ });
+ endProcItem(() => {
+ onChangeDivInFacet();
+ });
+
+
+ // add first condition process
+ const condProcItem = addCondProc(endProcs.ids, endProcs.names, '', formElements.formID, 'btn-add-cond-proc');
+ condProcItem();
+
+ // click even of condition proc add button
+ $(formElements.btnAddCondProc).click(() => {
+ condProcItem();
+ });
+
+ // click even of end proc add button
+ $('#btn-add-end-proc').click(() => {
+ endProcItem(() => {
+ onChangeDivInFacet();
+ });
+ updateSelectedItems();
+ // checkAndHideStratifiedVar();
+ addAttributeToElement();
+ });
+
+ formElements.divideOption.trigger('change');
+ renderCyclicCalenderModal();
+
+
+ // validation
+ initValidation(formElements.formID);
+
+ onChangeDivideOption();
+
+ initTargetPeriod();
+ toggleDisableAllInputOfNoneDisplayEl($('#for-cyclicTerm'));
+ toggleDisableAllInputOfNoneDisplayEl($('#for-directTerm'));
+ toggleDisableAllInputOfNoneDisplayEl($('#for-category'));
+
+ // add limit after running load_user_setting
+ setTimeout(() => {
+ // add validations for target period
+ validateTargetPeriodInput();
+ keepValueEachDivision();
+ }, 2000);
+
+
+ initializeDateTimeRangePicker();
+ initializeDateTimePicker();
+});
+
+
+const showAgP = (clearOnFlyFilter = true) => {
+ requestStartedAt = performance.now();
+ const isValid = checkValidations({ max: MAX_END_PROC });
+ updateStyleOfInvalidElements();
+ if (isValid) {
+ // close sidebar
+ beforeShowGraphCommon(clearOnFlyFilter);
+
+ beforeShowAGP(clearOnFlyFilter);
+
+ queryDataAndShowAGP(clearOnFlyFilter);
+ }
+};
+
+const beforeShowAGP = (clearOnFlyFilter) => {
+ if (clearOnFlyFilter) {
+ formElements.plotCard.empty();
+ }
+};
+
+const afterShowAGP = () => {
+ formElements.resultSection.css('display', 'block');
+ const agpCard = $(`${formElements.agpCard}`);
+ agpCard.show();
+ loadingHide();
+};
+
+const collectInputAsFormData = (clearOnFlyFilter) => {
+ const traceForm = $(formElements.formID);
+ let formData = new FormData(traceForm[0]);
+
+ if (clearOnFlyFilter) {
+ resetCheckedCats();
+ formData = transformFacetParams(formData);
+ formData = bindCategoryParams(formData);
+ formData = transformColorsParams(formData);
+
+ // choose default or recent datetime
+ formData = genDatetimeRange(formData);
+ const compareType = formData.get('compareType');
+ if (compareType === divideOptions.cyclicCalender) {
+ if (!formData.get(CYCLIC_TERM.DIV_OFFSET)) {
+ const offsetH = Number(divOffset.split(':')[0]) + Number(divOffset.split(':')[1]) / 60;
+ formData.set(CYCLIC_TERM.DIV_OFFSET, offsetH.toString());
+ }
+
+ const divDate = [...divFromTo];
+ divDate.push(lastFrom);
+ formData.set('divDates', JSON.stringify(divDate));
+ formData.set('divFormats', JSON.stringify(divFormats))
+ }
+
+ if (compareType !== divideOptions.cyclicCalender) {
+ formData.delete(CYCLIC_TERM.DIV_OFFSET);
+ formData.delete('divDates');
+ formData.delete('divFormats');
+ }
+
+ // append client timezone
+ formData.set('client_timezone', detectLocalTimezone());
+ lastUsedFormData = formData;
+ } else {
+ formData = lastUsedFormData;
+ formData = transformCatFilterParams(formData);
+ }
+ return formData;
+};
+
+const transformColorsParams = (formData) => {
+ // delete colorVar because there is empty selection in value
+ formData.delete('colorVar');
+ // get colorVar from active GUI
+ const colorVars = {};
+ $('select[name=colorVar]').get().forEach(ele => {
+ const targetID = $(ele).data('target-var-id');
+ const colorVal = $(ele).val();
+ const isObjectiveVar = $(`input[name^=GET02_VALS_SELECT][value=${targetID}]`).prop('checked');
+ if (colorVal && colorVal !== '' && isObjectiveVar) {
+ colorVars[targetID] = colorVal;
+ }
+ });
+
+ formData.append('aggColorVar', JSON.stringify(colorVars));
+ return formData;
+};
+const queryDataAndShowAGP = (clearOnFlyFilter = true) => {
+ const formData = collectInputAsFormData(clearOnFlyFilter);
+
+
+
+ // validate form
+ const hasDiv = !!formData.get('div');
+ const isDivideByCat = formData.get('compareType') === CONST.CATEGORY;
+ if (!hasDiv && isDivideByCat) {
+ // did not select catExpBox as endProcCate
+ loadingHide();
+ showToastrMsg(i18n.selectDivRequiredMessage);
+ return;
+ }
+
+ showGraphCallApi('/ap/api/agp/plot', formData, REQUEST_TIMEOUT, async (res) => {
+ afterShowAGP();
+
+ currentData = res;
+ graphStore.setTraceData(_.cloneDeep(res));
+
+ drawAGP(res);
+
+ // show info table
+ showInfoTable(res);
+
+ loadGraphSetings(clearOnFlyFilter);
+
+ const {catExpBox, cat_on_demand, unique_color} = res;
+ if (clearOnFlyFilter) {
+ clearGlobalDict();
+ initGlobalDict(catExpBox);
+ initGlobalDict(cat_on_demand);
+ initGlobalDict(unique_color);
+ initDicChecked(getDicChecked());
+ initUniquePairList(res.dic_filter);
+ }
+
+
+ longPolling(formData, () => {
+ $(`input[name=${CYCLIC_TERM.DIV_CALENDER}]:checked`).trigger('change');
+ queryDataAndShowAGP(true);
+ });
+ });
+};
+
+const drawAGP = (orgData) => {
+ const data = _.cloneDeep(orgData); // if slow, change
+ if (!data) {
+ return;
+ }
+
+ const isCyclicCalender = orgData.COMMON.compareType === divideOptions.cyclicCalender;
+
+ // orgData.array_plotdata = array_plotdata;
+ renderAgPAllChart(orgData.array_plotdata, isCyclicCalender)
+
+ // implement order
+ $(formElements.agpCard).sortable({});
+
+ formElements.plotCard.empty();
+ formElements.plotCard.show();
+
+ $('html, body').animate({
+ scrollTop: $(formElements.agpCard).offset().top,
+ }, 500);
+
+ // init filter modal
+ fillDataToFilterModal(orgData.catExpBox, [], orgData.cat_on_demand,[], orgData.unique_color || [], () => {
+ queryDataAndShowAGP(false);
+ });
+};
+
+const dumpData = (exportType, dataSrc) => {
+ const formData = lastUsedFormData || collectInputAsFormData(true);
+ formData.set('export_from', dataSrc);
+ if (exportType === EXPORT_TYPE.TSV_CLIPBOARD) {
+ tsvClipBoard(AGP_EXPORT_URL.TSV.url, formData);
+ } else {
+ exportData(
+ AGP_EXPORT_URL[exportType].url,
+ AGP_EXPORT_URL[exportType].ext_name,
+ formData,
+ );
+ }
+};
+
+const handleExportData = (exportType) => {
+ // hide export menu
+ showGraphAndDumpData(exportType, dumpData);
+};
+
+const renderCyclicCalenderModal = () => {
+ const calenderList = $('.cyclic-calender-select-option');
+ calenderList.empty();
+ const renderItem = (key, format, isChecked) => `
+
+
+
+
+ ${format}
+
+
+
2022040112
+
+ `;
+ let calenderListHtml = ''
+ let index = 1;
+ for (const key of Object.keys(calenderFormat)) {
+ const groups = calenderFormat[key];
+ let groupHtml = '';
+ for (const group of Object.keys(groups)) {
+ let itemHtml = '';
+ const formatList = groups[group];
+ for (const format of formatList) {
+ const isCheck = index === 1;
+ itemHtml += renderItem(key, format, isCheck);
+ index ++;
+ }
+
+ const html = `
+
+ ${itemHtml}
+
+ `;
+
+ groupHtml += html;
+ }
+
+ const width = {
+ 1: 210,
+ 2: 266,
+ 3: 100,
+ 4: 220,
+ }
+
+ calenderListHtml += `
+
+ ${groupHtml}
+
+ `;
+ }
+
+ calenderList.append(calenderListHtml);
+ showDateTimeRangeValue();
+ generateCalenderExample();
+ changeFormatAndExample($(`input[name=${CYCLIC_TERM.DIV_CALENDER}]:checked`));
+};
+
+const onChangeDivideFormat = (e) => {
+ changeFormatAndExample(e)
+}
+
+const renderAgPChartLayout = (chartOption, chartHeight = '40vh', isCTCol = false) => {
+ const { processName, columnName, facetLevel1, facetLevel2, chartId } = chartOption;
+ let facet = [facetLevel1, facetLevel2].filter(f => checkTrue(f));
+ const levelTitle = facet.map((el, i) => `${el}${i}`).join(' | ');
+ const CTLabel = isCTCol ? ` (${DataTypes.DATETIME.short}) [sec]` : ''
+ const chartLayout = `
+
+
+
+ ${processName}
+ ${columnName}${CTLabel}
+ ${facet.join(' | ')}
+
+
+
+
+ `;
+
+ //
+ //
+ //
+
+ return chartLayout;
+}
+
+const renderAgPAllChart = (plots, isCyclicCalender = false) => {
+ if (!plots) return;
+ $(formElements.agpCard).empty();
+ let chartHeight = '';
+ const maxCardInScreen = 3;
+ if (plots.length >= maxCardInScreen) {
+ chartHeight = `${98 / maxCardInScreen}vh`;
+ } else {
+ chartHeight = `${98 / plots.length}vh`;
+ }
+ plots.forEach((plotData, i) => {
+ const canvasId = `agp-Chart${i}`;
+ const { agg_function, color_name, end_proc_id, end_col_id } = plotData;
+ const catExpBox = plotData.catExpBox ? plotData.catExpBox : [];
+ const facetLevel1 = catExpBox[0];
+ const facetLevel2 = catExpBox.length > 1 ? catExpBox[1] : undefined;
+ const chartOption = {
+ processName: plotData.end_proc_name,
+ columnName: plotData.shown_name,
+ facetLevel1,
+ facetLevel2,
+ chartId: canvasId,
+ }
+ const isCTCol = isCycleTimeCol(end_proc_id, end_col_id);
+ const chartHtml = renderAgPChartLayout(chartOption, chartHeight, isCTCol);
+
+ $(formElements.agpCard).append(chartHtml);
+ const countByXAxis = {};
+ const sumCountByXAxis = (key, n) => {
+ const count = n || 0;
+ if (key in countByXAxis) {
+ countByXAxis[key] += count;
+ } else {
+ countByXAxis[key] = count;
+ }
+ };
+
+ const div = isCyclicCalender ? [...divArrays] : plotData.unique_div;
+ // reduce full div range
+ const data = plotData.data.map(data => {
+ const trace = {
+ ...data,
+ hoverinfo: 'none',
+ line: {
+ width: 0.6,
+ },
+ marker: {
+ size: 5,
+ },
+ }
+ const { x, y } = trace;
+ const newX = []
+ const newY = []
+ for (let i = 0; i < div.length; i += 1) {
+ const currDiv = div[i];
+ const indexOfCurrDiv = x.indexOf(currDiv);
+ newX.push(currDiv);
+ if (indexOfCurrDiv !== -1) {
+ newY.push(y[indexOfCurrDiv]);
+ } else {
+ newY.push(null);
+ }
+ }
+ trace.x = [...newX]
+ trace.y = [...newY]
+
+ for (let i = 0; i < trace.x.length; i += 1) {
+ const currDiv = trace.x[i];
+ const indexOfCurrDiv = trace.x.indexOf(currDiv);
+ sumCountByXAxis(currDiv, trace.y[indexOfCurrDiv]);
+ }
+
+ trace.x = trace.x.map(val => `t${val}`);
+ return trace;
+ })
+ const dataFmt = plotData.fmt;
+ drawAgPPlot(data, agg_function, countByXAxis, div,
+ color_name || plotData.shown_name, isCyclicCalender, `${canvasId}`, divArrays, dataFmt);
+ });
+}
diff --git a/ap/static/aggregate_plot/js/aggregation_chart.js b/ap/static/aggregate_plot/js/aggregation_chart.js
new file mode 100644
index 0000000..0c2276c
--- /dev/null
+++ b/ap/static/aggregate_plot/js/aggregation_chart.js
@@ -0,0 +1,138 @@
+const drawAgPPlot = (data, aggFunc, countByXAxis, div, colorName, isCyclicCalender, canvasId, divArrays=[], fmt=null) => {
+ let xTitles = data[0] ? [...data[0].x] : [];
+ const tickLen = xTitles.length ? xTitles[0].length : 0;
+ const tickSize = tickLen > 5 ? 10 : 12;
+
+ const layout = {
+ barmode: 'stack',
+ plot_bgcolor: '#222222',
+ paper_bgcolor: '#222222',
+ autosize: true,
+ xaxis: {
+ tickmode: 'array',
+ ticktext: reduceTicksArray(xTitles.map(val => val.slice(1)), tickLen),
+ tickvals: reduceTicksArray(xTitles, tickLen),
+ gridcolor: '#444444',
+ tickfont: {
+ color: 'rgba(255,255,255,1)',
+ size: tickSize,
+ },
+ spikemode: 'across',
+ spikethickness: 1,
+ spikedash: 'solid',
+ spikecolor: 'rgb(255, 0, 0)',
+ tickformat: 'c',
+ domain: [0, 1],
+ },
+ yaxis: {
+ gridcolor: '#444444',
+ tickfont: {
+ color: 'rgba(255,255,255,1)',
+ size: 12,
+ },
+ spikemode: 'across',
+ spikethickness: 1,
+ spikedash: 'solid',
+ spikecolor: 'rgb(255, 0, 0)',
+ tickformat: fmt ? (fmt.includes('e') ? '.1e' : fmt) : '',
+ },
+ showlegend: true,
+ legend: {
+ title: {
+ text: `${aggFunc}${colorName} `,
+ },
+ font: {
+ family: 'sans-serif',
+ size: 12,
+ color: '#ffffff'
+ },
+ bgcolor: 'transparent',
+ xanchor: 'right',
+ x: 1.07,
+ // itemsizing: "constant",
+ // itemwidth: 200
+ },
+ margin: {
+ b: 60,
+ t: 20,
+ r: 10,
+ }
+ };
+
+ const isLineChart = aggFunc && aggFunc.toLowerCase() !== 'count';
+
+ if (isLineChart) {
+ layout.xaxis.range = [-0.5, div.length - 0.5];
+ layout.legend.traceorder = "reversed";
+ }
+
+ const heatmapIconSettings = genPlotlyIconSettings();
+ const config = {
+ ...heatmapIconSettings,
+ responsive: true, // responsive histogram
+ useResizeHandler: true, // responsive histogram
+ style: { width: '100%', height: '100%' },
+ };
+ Plotly.react(canvasId, data, layout, config);
+
+ const agPPlot = document.getElementById(canvasId);
+
+ agPPlot.on('plotly_hover', (data) => {
+ const dpIndex = getDataPointIndex(data);
+ const { x, y, name, type } = data.points[0].data;
+ const xVal = x[dpIndex].slice(1);
+ const color = name;
+ const nByXAndColor = y[dpIndex];
+ let dataTable = '';
+ const isShowFromTo = div.length === divFromTo.length;
+ const period = [];
+ if (isCyclicCalender && isShowFromTo) {
+ const index = divArrays.indexOf(xVal);
+ let from, to;
+ if (index !== -1) {
+ from = divFromTo[index];
+ if (index + 1 >= divFromTo.length) {
+ to = lastFrom;
+ } else {
+ to = divFromTo[index + 1];
+ }
+ }
+
+ if (from && to) {
+ // period.push(['Period', `${from}${DATETIME_PICKER_SEPARATOR}${to}`])
+ }
+ }
+ if (type.includes('lines')) {
+ dataTable = genHoverDataTable([['x', xVal], ...period, ['Color', color], [aggFunc, applySignificantDigit(nByXAndColor)]]);
+ } else {
+ const nByX = countByXAxis[xVal];
+ dataTable = genHoverDataTable([['x', xVal], ...period, ['Color', color], ['N by x and Color', applySignificantDigit(nByXAndColor)], ['N by x', applySignificantDigit(nByX)]]);
+ }
+ genDataPointHoverTable(
+ dataTable,
+ {
+ x: data.event.pageX - 120, y: data.event.pageY,
+ },
+ 0,
+ true,
+ canvasId,
+ 1
+ );
+ });
+ unHoverHandler(agPPlot);
+};
+
+const reduceTicksArray = (array, tickLen) => {
+ const nTicks = tickLen > 9 ? 20 : 30;
+ const isReduce = (tickLen > 9 && array.length > 20) || array.length > 30;
+ if (!isReduce) return array;
+ const nextIndex = array.length / nTicks < 2 ? 2 : Math.floor(array.length / nTicks);
+ const res = [];
+ let i = 0;
+ while (i < array.length) {
+ res.push(array[i]);
+ i += nextIndex;
+ }
+
+ return res;
+};
\ No newline at end of file
diff --git a/ap/static/analyze/js/hotelling_common.js b/ap/static/analyze/js/hotelling_common.js
index 7079a5d..8856480 100644
--- a/ap/static/analyze/js/hotelling_common.js
+++ b/ap/static/analyze/js/hotelling_common.js
@@ -223,16 +223,8 @@ const broadcastClickEvent = (dataPoint, startingChart, jsonPCAScoreTest = {}) =>
$('[href="#table-info"]').tab('show');
};
-const contributionChartLayout = (objData, type = 't2', sampleNo = null,
- chartConfig = {}, shortName=null) => {
- const getShortNameVar = (varName) => {
- const shortKey = Object.keys(shortName).filter(keyName => keyName.includes(varName)) || null;
- if (shortKey) {
- return shortName[shortKey];
- }
- return '';
-};
- const textVar = objData.Ratio.map((v, k) => getShortNameVar(objData.Var[k])).reverse();
+const contributionChartLayout = (objData, type = 't2', sampleNo = null) => {
+ const textVar = objData.Var.reverse();
const layout = {
margin: {
t: 38.139200221392,
@@ -266,7 +258,7 @@ const contributionChartLayout = (objData, type = 't2', sampleNo = null,
type: 'linear',
autorange: false,
range: [
- -0.0486537209559121,
+ 0,
1.05 * Math.max(...objData.Ratio.map(x => Math.abs(x))),
],
tickmode: 'array',
@@ -379,7 +371,7 @@ const contributionChartLayout = (objData, type = 't2', sampleNo = null,
return layout;
};
-const genContributionChartData = (objData, type = 't2', dpInfo=null) => {
+const genContributionChartData = (objData, type = 't2', dpInfo = null) => {
const colorScale = {
t2: [
[0, '#51A5E1'],
@@ -490,35 +482,35 @@ const genContributionChartData = (objData, type = 't2', dpInfo=null) => {
const retData = objData.Ratio.map((v, k) => {
const varFullName = getFullNameVar(objData.Var[k]);
return {
- orientation: 'h',
- width: 0.9,
- base: 0,
- x: [
- Math.abs(v),
- ],
- y: [
- objData.Ratio.length - k,
- ],
- hovertext: `${objData.Var[k]} abs(Ratio): ${
- applySignificantDigit(Math.abs(v))
- } Ratio: ${
- applySignificantDigit(v)
- }`,
- type: 'bar',
- marker: {
- autocolorscale: false,
- color: markerColor(v),
- line: {
- width: 1.88976377952756,
- color: 'transparent',
+ orientation: 'h',
+ width: 0.9,
+ base: 0,
+ x: [
+ Math.abs(v),
+ ],
+ y: [
+ objData.Ratio.length - k,
+ ],
+ hovertext: `${objData.Var[k]} abs(Ratio): ${
+ applySignificantDigit(Math.abs(v))
+ } Ratio: ${
+ applySignificantDigit(v)
+ }`,
+ type: 'bar',
+ marker: {
+ autocolorscale: false,
+ color: markerColor(v),
+ line: {
+ width: 1.88976377952756,
+ color: 'transparent',
+ },
},
- },
- showlegend: false,
- xaxis: 'x',
- yaxis: 'y',
- hoverinfo: 'text',
- frame: null,
- };
+ showlegend: false,
+ xaxis: 'x',
+ yaxis: 'y',
+ hoverinfo: 'text',
+ frame: null,
+ };
});
const ratioChart = {
diff --git a/ap/static/analyze/js/hotelling_q_contribution.js b/ap/static/analyze/js/hotelling_q_contribution.js
index 55f7523..bc8d2f8 100644
--- a/ap/static/analyze/js/hotelling_q_contribution.js
+++ b/ap/static/analyze/js/hotelling_q_contribution.js
@@ -49,14 +49,14 @@ const drawQContributionChart = (json, chartConfig = {}, sizeOfData = null) => {
};
const drawQContributionChartFromObj = (objData, sampleNo = null, chartConfig = {},
- sizeOfData = null, dpInfo=null,
- shortName= null) => {
+ sizeOfData = null, dpInfo = null,
+ shortName = null) => {
if (!objData) return;
const startTime = performance.now();
Plotly.newPlot('qContributionChart',
genContributionChartData(objData, 'q', dpInfo),
- contributionChartLayout(objData, 'q', sampleNo, chartConfig, shortName), {
+ contributionChartLayout(objData, 'q', sampleNo), {
...genPlotlyIconSettings(),
responsive: true, // responsive histogram
useResizeHandler: true, // responsive histogram
diff --git a/ap/static/analyze/js/pca.js b/ap/static/analyze/js/pca.js
index 552ef92..eff9c42 100644
--- a/ap/static/analyze/js/pca.js
+++ b/ap/static/analyze/js/pca.js
@@ -434,7 +434,10 @@ $(() => {
// generate process dropdown data
const endProcs = genProcessDropdownData(procConfigs);
// add first end process
- const endProcItem = addEndProcMultiSelect(endProcs.ids, endProcs.names, true, false, false, true);
+ const endProcItem = addEndProcMultiSelect(endProcs.ids, endProcs.names, {
+ showDataType: true,
+ isRequired: true,
+ });
endProcItem();
updateSelectedItems();
addAttributeToElement();
diff --git a/ap/static/categorical_plot/js/categorical_plot.js b/ap/static/categorical_plot/js/categorical_plot.js
index 1baa9c1..65af5ec 100644
--- a/ap/static/categorical_plot/js/categorical_plot.js
+++ b/ap/static/categorical_plot/js/categorical_plot.js
@@ -129,8 +129,12 @@ $(() => {
const endProcs = genProcessDropdownData(procConfigs);
// add first end process
- const varEndProcItem = addEndProcMultiSelect(endProcs.ids, endProcs.names, true, true,
- true, true);
+ const varEndProcItem = addEndProcMultiSelect(endProcs.ids, endProcs.names, {
+ showDataType: true,
+ showStrColumn: true,
+ showCatExp: true,
+ isRequired: true,
+ });
varEndProcItem();
// for multiple end procs setting
@@ -175,8 +179,6 @@ $(() => {
}, 2000);
// validate and change to default and max value cyclic term
- validateInputByNameWithOnchange(CYCLIC_TERM.WINDOW_LENGTH, CYCLIC_TERM.WINDOW_LENGTH_MIN_MAX);
- validateInputByNameWithOnchange(CYCLIC_TERM.INTERVAL, CYCLIC_TERM.INTERVAL_MIN_MAX);
validateInputByNameWithOnchange(CYCLIC_TERM.DIV_NUM, { MAX: 32, MIN: 1 });
initializeDateTimeRangePicker();
diff --git a/ap/static/common/css/main.css b/ap/static/common/css/main.css
index 2c995ab..8d5f751 100644
--- a/ap/static/common/css/main.css
+++ b/ap/static/common/css/main.css
@@ -1949,7 +1949,6 @@ span.deleteicon input {
min-width: 165px;
border: 1px solid #444;
padding: 0.5rem;
- font-size: smaller;
background: #222222;
border-radius: 3px;
position: absolute;
@@ -2046,7 +2045,7 @@ span.deleteicon input {
}
#dp-info-content table td {
- padding: 0px;
+ padding: 0px 2px;
height: 10px;
}
@@ -2168,6 +2167,13 @@ table.table-hover-light {
animation: blinker 3s linear infinite;
}
+.tschart-title span, .chm-card-title span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: inline-block;
+ width: 90%;
+}
+
@keyframes blinker {
0% {
opacity: 1;
diff --git a/ap/static/common/css/user-setting-table.css b/ap/static/common/css/user-setting-table.css
index bd7dea2..cf09404 100644
--- a/ap/static/common/css/user-setting-table.css
+++ b/ap/static/common/css/user-setting-table.css
@@ -47,7 +47,7 @@
}
#tblUserSetting th:nth-child(2){
- min-width: 50px !important;
+ min-width: 65px !important;
}
#tblUserSetting th:nth-child(3){
width: 100px !important;
@@ -67,7 +67,7 @@
width: 150px;
}
.col-with-button {
- width: 100px !important;
+ min-width: 70px !important;
}
#tblUserSetting th:nth-child(10){
diff --git a/ap/static/common/icons/AgP.ico b/ap/static/common/icons/AgP.ico
new file mode 100644
index 0000000000000000000000000000000000000000..8aaed86008cdb0eca6caae307dccb2aca7c3bf53
GIT binary patch
literal 41203
zcmeFZ2Rzr^`#*l{J&MQ*B}vhuC>8Cx8#GV}(I%vfwoz%&6cs{?q*6+|$lkK|-djZ?
zuj_xkUhj6@_x<^PzW3+*{r&!r-+4SP=XLgV)^*OguIC#eY=n=9ii)DoNmSSf@gW4m
z1jD>!3l||TF^&~hAX_*IQRX2;L4lROk)4o}0(6*_Ka`gcN8vAF1rmz&43i{e{P@r5
zn3gc=OBmBf5@ItM8$`!O6iC?|LL^KGQNb`4#TYss8$}n*{QdP02OAsVU}q!Tn8e3H
zh!7te86wC*WCrt)anihG+DJaKZlWNuo;8T9HCsY*W&nMf)f3w42lZvGOL`Bg8?M@d(M}CnNwz_|F_0c8eQF
zm0-^}aI_gGM6id14CeW9oak)maL#_`ei$dLi5@FH%*%%@@Zy~EAqnuX69H}x!iQDy
zBZ=VLitut0abb2MAIrFei~5#72e<<|cAt!eqD3?Ix#bcP8M
zZ6zKuU0IOmj$QX~tP=#%X`c9K&IJROgzgj}kM?tuBlCunL-Uo0$HI~1*a9VTZs{m;
zX!&GvbonIWZaAF;EmI`7*Qk+a7UM{i#YFPjM2RGuE0MJADkN^-a1y&|0*T);iR5e>
zPs;X8BzZfuNYPGh;%+jJ9N)Z>oY}sHJlZ*%+^}0tp1X6A7l(Pt^Fw^(rH2TKJ%qFD
z$w@N3I7!ACUQ!&uNy_{MNW7;gNpzPYdA<^)+*gcL9Tg!R0rKQMhO4e{l9ua&go+d*
z@2*Rbo{%BrZO|~%b5))sxsM=O?n)%jVTt$Qha1J$-JUR-rQVD-h?eB^&yK%`q2%f(A$O-2J9pC5gU;+B+B;)
zDY))Na<6!hqG0r|d6K*vUZm*GDN+#bO-dj7lCnsDQhCpplsvsbiXVrP+Q-49@%1TE
z9~Vf`R+5&+M$*ww{caimzqo&61f)lO6EV7r^oI{Nn1ef;amuS!
z&L$#y3luS=aZFQU@|0O99Au2=Da|!nbNu?g`G%^KRLF?ntB0=n2A#X?(7+(Q?iI_Y`S|L{UGdc~#leoF&%2
zJ-E?it(p0HM;F)4Gx^7BP2`Z(o;prQkeic>hgWRZUWXye_UxAX%+#Pw_UhBN?NIw1
zB%)h%#@gD=_!1;T*C}kb*&zNkEH!MpwWa*mAbv;+^L-!uDrdiq1AVeEVwIra!?O-0
zAQFmIG6-os(gY-Jq>!J^BL$2@$2yi+-=F`Y{G(8wQ7CKa#rwB}a*0BjL!o@3P&QI1
zUn!I`6v`(GscbxyzKtbAdv+
zMWGy^Q07o56DX8f6v_w+6?=D3oOs%5SDTo+A{>XbNQ!g))jl
zc|@Tcr%)bID6c4#K@`e33S}CF@{B?`Nuj)+7Pzq%(g))yq`9-1JqfmxXD3_V?cz#hR=P8u^6v|!-GF7wpzz$J@V-Fd
z`A6aTN8wpX;eF#@Dvx&%3hx{gp8XV_p%k9A6y87nrLy0T3EpWay!%jiC;Bgz&G>wu
z`zBurnT=Jmkee(%H`AUMX65<<#A4CC37wOBrSC`KIlfx@7
z;o`uXJCYDD-pvHKh}@n0eY)6!B1U)t9U{%QElmzJi>%D|JBmS#tX<1qZP
zJ!))PS~5!2RdaS?xcz1O{FSTdwmdN#R+Q47l9rN|mP7*DOVi3*@$%f--kO$HMEu*^
z%GygYTuO(NiGMkMXSAo$>7|$+kkMZLIgELV$nEs@j5bz!TYDRZ%i7D^(%akU{2A>`
z7;D5zus&9}yuFNZSTB?RyKotu|9e+VR$sgrcJboHOJR%);SCE5A*x|vS6H1U{AFdu
zB)zOG=DRS)l`4D-7kHJG6?_iT`Gc^5pl{()LCpRoi0L^2Wo5bFg%4wPmv7->A-ct{
zjz0?-j{X`X{Kqi+cXP_Y9~Kt+E&2bruOHVrFN?p=-p|a^Yn`2W<9%84?97^{-z1`Z
zoMZ_7CK2Q&vRGbDh=a%q^AIs1{;&H%Nt%$ca@<5ooSl@DsJ6f<#kJkl7=8>Re>r
zcrLO8kNKrj30a0@q{BrPjuIow$4C%kbxE>ZZ75ki4r!tU**IC6Y(?6vHH>V-_sX_u
z3dB$sce5@VF`Gq*8E*A;v)PI19Q?)|ZZ?OVSl|xdxPYBlE#fAdX5*V?o&d34AV6#k
z*vRgcy!gHuM66~HA=`DO$*x6WWY=72vVWEWvu{0hgo)c)9^$b;idPslF&qDt(4x7|C}iX*nxJ8ZQnb
zotKA^@*p14ew&jtTooiu*ZIlEFb?wJwh-yNBS`x03L}XSc*aQv9`F-*AwpV$2b1nl
zG4k=27k@dV=dNS5n7
zQtH2eWV#uW?4t&x=+bIZ9%4djBF#wpu?-~W)E1I?X)k%>y_4i!vL`wI`$_4oouuZO
z6G7=jaspgPPS9aec-@ucUOz#KZhMll`$tIT?Mo!@<{46O%bVoi_93OW&ykV`XG!@J
zZ&G~k5-EKWNGhKmB_+?pNm+ClsY(hVwOMyaRr+I6o%NI?Bqo!}jCfL)pG>L>-jLdo
z9DJ)~lUfv&^)+RruDY7k*VmA`np#pq&h>BdKp{M(QFBt(~Nyt(!Eqza{l;
zeWbCon>2KNB2DjlNmF+pY3dmuEguI+Q!kKan)-mW()0<)+nzr19^Zbbc){ZmRUN-^
z5`QdQxaf~XyhI5%(65efrJa?Pl>Mnep*WUTc3Dc*A
z@7h&c`>d&U*QUpf9oexJy(uPXAJa@sa{BT&D-bgMVc5Fdj?#Cz>%ulauWGL@u8v=q
z-kZL5ZBB3goe_lS+`HlOq^+y%iOY=}F4u40bh&=rrQlszdU0FV3r~CwY6YG+a;T)G
z0{n<_O^_3Fw^YifV
z@E`hf8XcZ=X+AmNedf%Wi+aCHCR(S6-o>+L&tBZm@!Rw%lB$m`pgT>!nSbNBiTad@
z6UI$I9q|8+P6e4(K+;8GW4`c16zNw7)8s_}?;e0j|2R#N69&(PBjE5{MZohO@Vtjp
ze<*T>J
z3$CnE{YQB?{l`d1wbB5*vjE;%7(d-w6Y!4owQahucvpiojHl_U;h2Af2h)jCkhy&_
zyx1_|E8+bH!q$uh)X)6TKHd=_%Vr9^+B69=(Z69l7R33ve#rA*nUnF-LXd2w39(x=
z0Pk50(cg*NGy(6hztp>C{7`sftA+VAkOvLqK?|-S4|q5JCGQtL@NEe32}zKao(ZvW
z32^l2F~Bz@pa}(Tn~Vdz!!dQybw+R2fK=-#uy%sfZ|lRmIE)bE2YFFmkmDmDi-h-W
zoQFRjgTSCG5E>E!humBtBs3I{e1PbfSit)`jFJ!pyw8IiFM(m`D-7lX`9ZwDZTm}q
z=8qf%K}PD}zkLPxZCwm!7LNqqWy;{UTm}3Ll)-=H7`SG)9Io510{>NNfOl%Zdo$pj
z8St(RcyEGkE0d|JqyG{qrEE*1HmyCpq2BTQ@VVxnyV?cMf=vSWb
zZ2*P#T7Y*Yc=vGt@LmV8YZV~gatyp)EeCj?gKi3-sW21b*N=w$%Lf7PPJnkFsLxJ<
z;+J=zxw{YY{r5x6N=d+b8+<^1%I;l&IJ1$=+|%>_g$nGo0pBTK+ut-r7Vv%!*}+Eu
z?^96t=sMt?8d5ygqi+Z$F%O{SBLLnhA%53f3AKyigV>1~No&SKkni^43(zF2MUAG`4m!VZ1v+ob@!w#`aqJ0rGGA!b>ALc)3aja**#9oPG7u7W&VfXyKX5;2!fQ)4h})(GIrciBKUVT<|F>w%LxICgz;_Ci#zaEX`##9K
zb_`PXEQNyGKG59r2})l@K+I|dz`HTiR?cNth_x6Cu~;YS7MbzM2{?#(t?3MAm%#+xWW{#6fX#`(!bp5jb~BadgHsiz;x
zurE124p>*f*D=jJY7X@LuTcNCAGgnx1AK!(hJyxV?3o6&UZXJhYOKFUgg_1~b
z!23Gj8v;t5)L_+wZ{u$_XDHzN2Jk%uIlE<{{HYI9KfWuVp|cOlAD?65^XT-w!vWtr
zP+OFNd*@vZ46uHpt#N2+AHDheq50W%t|x-=~nXOBBi;orWfitBAe=
zwTBeJNOSPl@!z>E*px9$5lm#q=`sTM#-`0zB*a@Zn^O<-$y~Jw-6df4~
z#V3XXzS+?K96qkd#1$VN4ERQZhIat?CW4B{{ZJKu73=AO`u0zN?=-;oCajq%{Iz{2
zeIdYiBj8&Us(d7&%6l;2y9)4a1htvr7#_rmr_;aCc?qb*eE6=#G`bw^W7#u&fbTr0
ztE~lmb3sF6Bkt82s4I*Hd>=yPSz&mGZJEsA|Jwc`6CS{~Ea3YV3H>{Q&=)Zn`XXgn
zJ{@M#==8rMA?Uj&j%8&4-@WJ~-5&}c!+GH2O~RDNH!*Bp@a=q2kRpKk5I|iDL#S7Q
zRnrNeZUj&_0;neeI_^vQ7a#R5fO-=^eaUyk!IWXj(&azbVK#>i^I#g%=0zNUI$x&$
z)070kWr-|U&6EObU1^3K=gY!m`ET>X&&dt;b7Ww<9xI*BXM^94^JIXJ^Uu$zFXzi&
z`KZHze*baMczWzt>cjA%<*faQIxIll3%v6k2dEEV(W$XmW;~!y2T-5;bsqn!oj*%M
zJrcB>9|fq7_)6`*D&V@Dbw_hpBo1`A=opR&m^=C)Hb0>M=PVmj(`l+aqX^Y!6#;c~|E+$18IR3#gaGwE
zP<{^O&RJPNy$#qb5C&8o0_u_g^+HTMokkPtc3{ISp?{=png`VDF?%2NQP6co8X_FU
zn7S`*9)$5SK*!VjoAzlL5o|r^A8VU#f7=2+=n0j8mLPGcx+o5ag8^e5Ug*6k0X2T&
zEV?8PZC8c>>eK-Br~hdCR*QI`@Ae>uP^StqV(id*71!hyQ9xZC)FU+pi^BVxg8=oe
z|7hEE|E>Pu#>*qVlPp