Event Timeline
Comment Actions
deposit.js:
/** * Copyright (C) 2018-2020 The Software Heritage developers * See the AUTHORS file at the top-level directory of this distribution * License: GNU Affero General Public License version 3, or any later version * See top-level LICENSE file for more information */ function genSwhLink(data, type) { if (type === 'display') { if (data && data.startsWith('swh')) { let browseUrl = Urls.browse_swh_id(data); return `<a href="${browseUrl}">${data}</a>`; } } return data; } function swhPatternMatch(string, pattern) { // Check if a string match a given pattern return (typeof string === 'string' || string instanceof String) && string.search(pattern) !== -1; } function swhUpdateDataWithoutExcludedPattern(settings, data, dataIndex) { // expect data to be a dict console.log('swh update - settings', settings); console.log('swh update - data index', dataIndex); console.log('swh update - data', data); let excludePattern = $('#swh-admin-deposit-list-exclude-filter').val(); console.log('swh update - exclude pattern', excludePattern); if (swhPatternMatch(data["external_id"], excludePattern)) { return false; } return true; // for (const key in data) { // console.log('swh update - key: ', key); // let value = data[key]; // console.log('swh update - value: ', value); // if (swhPatternMatch(value, excludePattern)) { // return false; // exclude the data from filtering // } // } // return true; } export function initDepositAdmin() { let depositsTable; $(document).ready(() => { $.fn.dataTable.ext.errMode = 'none'; // none (prod), alert (default), throw // including the custom exclude filtering $.fn.dataTable.ext.search.push(swhUpdateDataWithoutExcludedPattern); depositsTable = $('#swh-admin-deposit-list') .on('error.dt', (e, settings, techNote, message) => { $('#swh-admin-deposit-list-error').text(message); }) .DataTable({ serverSide: true, processing: true, // let's define the order of table options display // f: (f)ilter // l: (l)ength changing // r: p(r)ocessing // t: (t)able // i: (i)nfo // p: (p)agination // see https://datatables.net/examples/basic_init/dom.html dom: '<<f<"#list-exclude">l>rt<"bottom"ip>>', // list-exclude is a custom filter // see https://datatables.net/examples/advanced_init/dom_toolbar.html ajax: Urls.admin_deposit_list(), // rowCallback: function(row, data) { // const api = this.api(); // let excludePattern = $('#swh-admin-deposit-list-exclude-filter').val(); // // console.log('row-callback - ', row); // // console.log('row-callback - ', data); // for (const key in data) { // // console.log('row callback - key: ', key); // let value = data[key]; // // console.log('row callback - value: ', value); // if (swhPatternMatch(value, excludePattern)) { // console.log('row callback, should be removed', key, value); // api.rows(row).remove().draw(); // break; // } // } // }, columns: [ { data: 'id', name: 'id' }, { data: 'swh_id_context', name: 'swh_id_context', render: (data, type, row) => { if (data && type === 'display') { let originPattern = ';origin='; let originPatternIdx = data.indexOf(originPattern); if (originPatternIdx !== -1) { let originUrl = data.slice(originPatternIdx + originPattern.length); let nextSepPattern = ';'; let nextSepPatternIdx = originUrl.indexOf(nextSepPattern); if (nextSepPatternIdx !== -1) { /* Remove extra context */ originUrl = originUrl.slice(0, nextSepPatternIdx); } return `<a href="${originUrl}">${originUrl}</a>`; } } return data; } }, { data: 'reception_date', name: 'reception_date', render: (data, type, row) => { if (type === 'display') { let date = new Date(data); return date.toLocaleString(); } return data; } }, { data: 'status', name: 'status' }, { data: 'status_detail', name: 'status_detail', render: (data, type, row) => { if (type === 'display' && data) { let text = data; if (typeof data === 'object') { text = JSON.stringify(data, null, 4); } return `<div style="width: 200px; white-space: pre; overflow-x: auto;">${text}</div>`; } return data; }, orderable: false, visible: false }, { data: 'swh_id', name: 'swh_id', render: (data, type, row) => { return genSwhLink(data, type); }, orderable: false, visible: false }, { data: 'swh_id_context', name: 'swh_id_context', render: (data, type, row) => { return genSwhLink(data, type); }, orderable: false, visible: false } ], scrollX: true, scrollY: '50vh', scrollCollapse: true, order: [[0, 'desc']] }); // Some more customization is needed on the table $('div#list-exclude').html(`<div id="swh-admin-deposit-list-exclude-wrapper"> <div id="swh-admin-deposit-list-exclude-div-wrapper" class="dataTables_filter"> <label> Exclude:<input id="swh-admin-deposit-list-exclude-filter" type="search" value="check-deposit" class="form-control form-control-sm" placeholder="exclude-pattern" aria-controls="swh-admin-deposit-list"> </input> </label> </div> </div> `); // Adding exclusion pattern update behavior $('#swh-admin-deposit-list-exclude-filter').keyup(function() { depositsTable.draw(); }); // search with current default search so that it uses the excluding pattern // and then draw depositsTable.search(".*", true); depositsTable.draw(); }); $('a.toggle-col').on('click', function(e) { e.preventDefault(); var column = depositsTable.column($(this).attr('data-column')); column.visible(!column.visible()); if (column.visible()) { $(this).removeClass('col-hidden'); } else { $(this).addClass('col-hidden'); } }); }