Project

General

Profile

Feature #33425 » 33425_v3.patch

Mizuki ISHIKAWA, 2020-08-05 06:38

View differences:

public/javascripts/application.js
1040 1040
    // do not attach if Tribute is already initialized
1041 1041
    if (element.dataset.tribute === 'true') {return;}
1042 1042

  
1043
    const issuesUrl = element.dataset.issuesUrl;
1044
    const usersUrl = element.dataset.usersUrl;
1045

  
1046 1043
    const remoteSearch = function(url, cb) {
1047 1044
      const xhr = new XMLHttpRequest();
1048 1045
      xhr.onreadystatechange = function ()
......
1060 1057
      xhr.send();
1061 1058
    };
1062 1059

  
1063
    const tribute = new Tribute({
1064
      trigger: '#',
1065
      values: function (text, cb) {
1066
        if (event.target.type === 'text' && $(element).attr('autocomplete') != 'off') {
1067
          $(element).attr('autocomplete', 'off');
1060
    const AutoCompleteIssueId =
1061
      {
1062
        trigger: '#',
1063
        values: function (text, cb) {
1064
          if (event.target.type === 'text' && $(element).attr('autocomplete') != 'off') {
1065
            $(element).attr('autocomplete', 'off');
1066
          }
1067
          remoteSearch(element.dataset.issuesUrl + text, function (issues) {
1068
            return cb(issues);
1069
          });
1070
        },
1071
        lookup: 'label',
1072
        fillAttr: 'label',
1073
        requireLeadingSpace: true,
1074
        selectTemplate: function (issue) {
1075
          return '#' + issue.original.id;
1076
        },
1077
        noMatchTemplate: function () {
1078
          return '<span style:"visibility: hidden;"></span>';
1068 1079
        }
1069
        remoteSearch(issuesUrl + text, function (issues) {
1070
          return cb(issues);
1071
        });
1072
      },
1073
      lookup: 'label',
1074
      fillAttr: 'label',
1075
      requireLeadingSpace: true,
1076
      selectTemplate: function (issue) {
1077
        return '#' + issue.original.id;
1078
      },
1079
      noMatchTemplate: function () {
1080
        return '<span style:"visibility: hidden;"></span>';
1081 1080
      }
1082
    });
1081
    const AutoCompleteWikiSyntax =
1082
      {
1083
        trigger: '{{',
1084
        values: [
1085
          {name: 'collapse', value: '{{collapse\nThis is a block of text that is collapsed by default.\n}}'},
1086
          {name: 'child_pages', value: '{{child_pages}}'},
1087
          {name: 'include', value: '{{include(WikiPageName)}}'},
1088
          {name: 'thumbnail', value: '{{thumbnail(image.png, size=300, title=Thumbnail)}}'},
1089
          {name: 'issue', value: '{{issue(123, subject=true, project=true)}}'}
1090
        ],
1091
        lookup: 'name',
1092
        fillAttr: 'value',
1093
        requireLeadingSpace: true,
1094
        selectTemplate: function(item) {
1095
          return item.original.value;
1096
        },
1097
        noMatchTemplate: function () {
1098
          return '<span style:"visibility: hidden;"></span>';
1099
        }
1100
      }
1101

  
1102
    const tribute = new Tribute({
1103
      collection: [
1104
        AutoCompleteIssueId,
1105
        ($(element).closest('.jstEditor').length ? AutoCompleteWikiSyntax : {})
1106
      ]});
1083 1107

  
1084 1108
    tribute.attach(element);
1085 1109
}
1086 1110

  
1087

  
1088 1111
$(document).ready(setupAjaxIndicator);
1089 1112
$(document).ready(hideOnLoad);
1090 1113
$(document).ready(addFormObserversForDoubleSubmit);
(4-4/5)