File: warnings-renderer.js

package info (click to toggle)
openrefine 3.9.5-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 44,436 kB
  • sloc: javascript: 106,758; java: 91,946; xml: 6,634; sh: 614; makefile: 78; python: 71; sql: 59
file content (139 lines) | stat: -rw-r--r-- 4,355 bytes parent folder | download
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;
};