1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
var WarningsRenderer = {};
// renders a Wikibase entity into a link
WarningsRenderer._renderEntity = function (entity, plainText) {
if (!entity.id && entity.value) {
entity.id = entity.value.id;
}
var id = entity.id;
var is_new = entity.siteIri === "http://localhost/entity/";
if (is_new) {
id = $.i18n('wikibase-preview/new-id');
}
var fullLabel = id;
if (entity.label) {
fullLabel = entity.label + ' (' + id + ')';
}
if (plainText) {
return fullLabel;
}
var url = entity.iri;
if (!url && entity.value) {
url = WikibaseManager.getSelectedWikibaseSiteIri() + entity.value.id;
}
if (is_new) {
return '<span class="wb-preview-new-entity">' + fullLabel + '</span>';
} else {
return '<a href="' + url + '" class="wb-preview-entity" target="_blank">' + fullLabel + '</a>';
}
};
// replaces the issue properties in localization template
WarningsRenderer._replaceIssueProperties = function (template, properties, plainText) {
template = template.replace(new RegExp('{wikibase_name}', 'g'), WikibaseManager.getSelectedWikibaseName);
if (!properties) {
return template;
}
var expanded = template;
for (var key in properties) {
if (properties.hasOwnProperty(key)) {
var rendered = properties[key];
if (key.endsWith('_entity')) {
rendered = WarningsRenderer._renderEntity(properties[key], plainText);
}
expanded = expanded.replace(new RegExp('{' + key + '}', 'g'), rendered);
}
}
return expanded;
};
WarningsRenderer._createFacetForWarning = function (warning) {
var warningRaised = $.i18n('wikibase-issues/warning-raised');
var noWarning = $.i18n('wikibase-issues/no-warning');
var title = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/' + warning.type + '/title'), warning.properties, true);
ui.browsingEngine.addFacet(
'list',
{
columnName: '',
name: title,
expression: 'grel:if(wikibaseIssues().inArray('+JSON.stringify(warning.aggregationId)+'), '+JSON.stringify(warningRaised)+', '+JSON.stringify(noWarning)+')',
selection: [
{
v: {
v: warningRaised,
l: warningRaised
}
}
],
selectBlank: false,
selectError: false,
omitBlank: false,
omitError: false,
invert: false
},
{scroll: false}
);
// switch to the grid
SchemaAlignment.switchTab('#view-panel');
};
WarningsRenderer._renderWarning = function (warning, onLocateRows) {
var title = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/' + warning.type + '/title'), warning.properties);
var body = WarningsRenderer._replaceIssueProperties($.i18n('warnings-messages/' + warning.type + '/body'), warning.properties);
var tr = $('<tr></tr>').addClass('wb-warning');
var severityTd = $('<td></td>')
.addClass('wb-warning-severity')
.addClass('wb-warning-severity-' + warning.severity)
.appendTo(tr);
var bodyTd = $('<td></td>')
.addClass('wb-warning-body')
.appendTo(tr);
if (warning.facetable) {
var div = $('<div></div>');
var h1 = $('<h1></h1>')
.addClass('wb-warning-body-h1')
.html(title);
div.append(h1);
var facetingButton = $('<button></button>')
.addClass('button')
.text($.i18n('wikibase-issues/locate-offending-rows'))
facetingButton.on('click', function(evt) {
if (onLocateRows) {
onLocateRows();
}
// the faceting relies on having an up to date schema
var onSaved = function() {
WarningsRenderer._createFacetForWarning(warning);
};
if (SchemaAlignment._hasUnsavedChanges) {
SchemaAlignment._save(onSaved);
} else {
onSaved();
}
evt.preventDefault();
});
div.append(facetingButton);
div.appendTo(bodyTd);
} else {
var h1 = $('<h1></h1>')
.html(title)
.appendTo(bodyTd);
}
var p = $('<p></p>')
.html(body)
.addClass('wb-warning-body-subtext')
.appendTo(bodyTd);
var countTd = $('<td></td>')
.addClass('wb-warning-count')
.appendTo(tr);
var countSpan = $('<span></span>')
.text(warning.count)
.appendTo(countTd);
return tr;
};
|