diff --git a/extensions/wikibase/module/scripts/schema-alignment.js b/extensions/wikibase/module/scripts/schema-alignment.js index a39ec5da2b6c..7fd62144d8bf 100644 --- a/extensions/wikibase/module/scripts/schema-alignment.js +++ b/extensions/wikibase/module/scripts/schema-alignment.js @@ -30,7 +30,27 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +function serviceLogoFromReconConfig(reconConfig){ + var serviceUrl = null; + var service = null; + var serviceLogo=null; + if (reconConfig) { + serviceUrl =reconConfig.service; + } + if (serviceUrl) { + service = ReconciliationManager.getServiceFromUrl(serviceUrl); + } + if (service) { + serviceLogo=service.logo; + } + try { + return new URL(serviceLogo); + } + catch { + console.warn("Invalid logo URL supplied by service "+serviceUrl) + } + +}; var SchemaAlignment = { _isSetUp: false }; @@ -246,7 +266,7 @@ SchemaAlignment.updateColumns = function() { // TODO we could potentially ignore any reconciliation to a siteIRI not // mentioned in the manifest… var cell = SchemaAlignment._createDraggableColumn(column.name, - reconConfig && column.reconStats ? reconConfig.identifierSpace : null); + reconConfig && column.reconStats ? reconConfig.identifierSpace : null, reconConfig); this._columnArea.append(cell); } @@ -433,8 +453,19 @@ SchemaAlignment._changesCleared = function() { .addClass('disabled'); }; -SchemaAlignment._createDraggableColumn = function(name, reconciledSiteIRI) { +SchemaAlignment._createDraggableColumn = function(name, reconciledSiteIRI, reconConfig) { + var logo=serviceLogoFromReconConfig(reconConfig); var cell = $("
").addClass('wbs-draggable-column').text(name); + if(logo) { + var img =$(""); + if(serviceLogo) { + var imageUrl = serviceLogo; + img.attr("src", imageUrl); + img.attr("title", service.name); + img.addClass("serviceLogo-for-schema") + } + cell.append(img); + } cell.data({ 'columnName': name, 'reconciledSiteIRI': reconciledSiteIRI @@ -1467,13 +1498,26 @@ SchemaAlignment._initField = function(inputContainer, mode, initialValue, change } var acceptDraggableColumn = function(column) { + var Logo=serviceLogoFromReconConfig(reconConfig); + var img =$(""); + if(Logo ){ + var imageUrl = serviceLogo; + img.attr("src", imageUrl); + img.attr("title", service.name); + img.addClass("serviceLogo-for-schema") + + }; + input.hide(); input.val(""); var columnDiv = $('
').appendTo(inputContainer); column.appendTo(columnDiv); + //columnDiv.append(img); + var origText = column.text(); column.text(""); - column.append($('
').addClass('wbs-restricted-column-name').text(origText)); + column.append($('
').addClass('wbs-restricted-column-name').text(origText).append(img)); + var deleteButton = SchemaAlignment._makeDeleteButton(true).appendTo(column); deleteButton.attr('alt', $.i18n('wikibase-schema/remove-column')); deleteButton.on('click',function (e) { @@ -1538,13 +1582,20 @@ SchemaAlignment._initField = function(inputContainer, mode, initialValue, change // Init with the provided initial value. if (initialValue) { + var columns = theProject.columnModel.columns; + var reconConfig=null; + for (var i = 0; i < columns.length; i++) { + if(columns[i].name===initialValue.columnName){ + reconConfig = columns[i].reconConfig; + } + } if (initialValue.type === "wbentityidvalueconstant" || /* item for backwards-compatibility purposes */ initialValue.type === "wbitemconstant" || initialValue.type === "wbpropconstant") { input.val(initialValue.label); input.addClass("wbs-validated-input"); } else if (initialValue.type == "wbentityvariable") { - var cell = SchemaAlignment._createDraggableColumn(initialValue.columnName, true); + var cell = SchemaAlignment._createDraggableColumn(initialValue.columnName, true, reconConfig); acceptDraggableColumn(cell); } else if (initialValue.type === "wbstringconstant" || initialValue.type === "wbdateconstant" || @@ -1557,7 +1608,7 @@ SchemaAlignment._initField = function(inputContainer, mode, initialValue, change initialValue.type === "wbdatevariable" || initialValue.type === "wblocationvariable" || initialValue.type === "wblanguagevariable") { - var cell = SchemaAlignment._createDraggableColumn(initialValue.columnName, false); + var cell = SchemaAlignment._createDraggableColumn(initialValue.columnName, false, reconConfig ); acceptDraggableColumn(cell); } inputContainer.data("jsonValue", initialValue); diff --git a/extensions/wikibase/module/styles/schema-alignment.css b/extensions/wikibase/module/styles/schema-alignment.css index 6b8a410c9eaa..c86155567646 100644 --- a/extensions/wikibase/module/styles/schema-alignment.css +++ b/extensions/wikibase/module/styles/schema-alignment.css @@ -21,6 +21,12 @@ max-width: 70em; } +.serviceLogo-for-schema{ + float: left !important; + width:19px; + height:20px; + } + .main-view-panel-tab-header { margin-top: 9px; margin-left: 7px; diff --git a/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js b/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js index 2356e90719d9..dac699767498 100644 --- a/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js +++ b/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js @@ -69,7 +69,35 @@ DataTableColumnHeaderUI.prototype._render = function() { elmts.dropdownMenu.on('click',function() { self._createMenuForColumnHeader(this); }); - + + var serviceUrl = null; + var service = null; + var serviceLogo=null; + if (this._column.reconConfig) { + serviceUrl =this._column.reconConfig.service; + } + try { + + if (new URL(serviceUrl)) { + service = ReconciliationManager.getServiceFromUrl(serviceUrl); + } + if(service) { + serviceLogo=service.logo; + } + + var img =$(""); + if(serviceLogo) { + var imageUrl = serviceLogo; + img.attr("src", imageUrl); + img.attr("title", service.name); + img.addClass("serviceLogo") + img.appendTo(elmts.serviceLogoContainer.show()); + } + } + catch { + console.log("The URL is not valid"); + } + if ("reconStats" in this._column) { var stats = this._column.reconStats; if (stats.nonBlanks > 0) { diff --git a/main/webapp/modules/core/scripts/views/data-table/column-header.html b/main/webapp/modules/core/scripts/views/data-table/column-header.html index 2c93453f30dc..f8d89cfe1470 100644 --- a/main/webapp/modules/core/scripts/views/data-table/column-header.html +++ b/main/webapp/modules/core/scripts/views/data-table/column-header.html @@ -1,2 +1,5 @@
-
\ No newline at end of file +
+
+
+
\ No newline at end of file diff --git a/main/webapp/modules/core/styles/views/data-table-view.css b/main/webapp/modules/core/styles/views/data-table-view.css index 0c7d5c978a32..ab4e8e302460 100644 --- a/main/webapp/modules/core/styles/views/data-table-view.css +++ b/main/webapp/modules/core/styles/views/data-table-view.css @@ -192,14 +192,25 @@ table.data-table td.column-header, table.data-table th.column-header { background-position: -17px 0px; } +.container-of-logo-and-statsbar { + display: grid; + grid-template-columns: max-content auto; + width:100%; + } + .column-header-recon-stats-bar { - margin-top: 10px; - height: 4px; + margin-top:4px; + height: 6px; background: #ddd; border: 1px solid #ccc; position: relative; width: 100%; } + +.serviceLogo { + width: 19px; + height: 21px; +} .column-header-recon-stats-matched { position: absolute;