]> source.dussan.org Git - redmine.git/commitdiff
Store inline autocomplete data sources in a JS variable (#34122).
authorGo MAEDA <maeda@farend.jp>
Sun, 25 Oct 2020 00:01:14 +0000 (00:01 +0000)
committerGo MAEDA <maeda@farend.jp>
Sun, 25 Oct 2020 00:01:14 +0000 (00:01 +0000)
Patch by Marius BALTEANU.

git-svn-id: http://svn.redmine.org/redmine/trunk@20191 e93f8b46-1217-0410-a6f0-8f06a7374b81

14 files changed:
app/helpers/application_helper.rb
app/helpers/custom_fields_helper.rb
app/views/documents/_form.html.erb
app/views/issues/_edit.html.erb
app/views/issues/_form.html.erb
app/views/issues/bulk_edit.html.erb
app/views/journals/_notes_form.html.erb
app/views/layouts/base.html.erb
app/views/messages/_form.html.erb
app/views/news/_form.html.erb
app/views/news/show.html.erb
app/views/search/index.html.erb
app/views/wiki/edit.html.erb
public/javascripts/application.js

index 5a0868c2ef3f8df4ede383d5efacc8a7e1986132..dd4a4f195ec2066209c5d9721c46fe8f7a5c2949 100644 (file)
@@ -1741,6 +1741,22 @@ module ApplicationHelper
     end
   end
 
+  def autocomplete_data_sources(project)
+    {
+      issues: auto_complete_issues_path(:project_id => project, :q => '')
+    }
+  end
+
+  def heads_for_auto_complete(project)
+    data_sources = autocomplete_data_sources(project)
+
+    javascript_tag(
+      "rm = window.rm || {};" +
+      "rm.AutoComplete = rm.AutoComplete || {};" +
+      "rm.AutoComplete.dataSources = '#{data_sources.to_json}';"
+    )
+  end
+
   private
 
   def wiki_helper
index 1e0c1b07ed77263b8e178025f3737f50a9e73dad..41b20c46a58ba56a948fe11590444e39f98b9bdf 100644 (file)
@@ -84,9 +84,8 @@ module CustomFieldsHelper
     if custom_value.custom_field.full_text_formatting?
       css += ' wiki-edit'
       data = {
-        :auto_complete => true,
-        :issues_url => auto_complete_issues_path(:project_id => custom_value.customized.project, :q => '')
-      } if custom_value.customized&.try(:project)
+        :auto_complete => true
+      }
     end
     custom_value.custom_field.format.edit_tag(
       self,
@@ -133,8 +132,7 @@ module CustomFieldsHelper
     if custom_field.full_text_formatting?
       css += ' wiki-edit'
       data = {
-        :auto_complete => true,
-        :issues_url => auto_complete_issues_path(:q => '')
+        :auto_complete => true
       }
     end
     custom_field.format.bulk_edit_tag(
index b8b8c8404a0f6f3d9a781d60a23c9c4d82413e6c..45b63611f7c12199a1053bbe9739d88d2e18a439 100644 (file)
@@ -5,8 +5,7 @@
 <p><%= f.text_field :title, :required => true, :size => 60 %></p>
 <p><%= f.text_area :description, :cols => 60, :rows => 15, :class => 'wiki-edit',
                   :data => {
-                      :auto_complete => true,
-                      :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                      :auto_complete => true
                   }
 %></p>
 
index cc2f110b7cccf481636013f70642838c5535a47f..33f8352f574d8634ceb1fd077a9226eea21b5370 100644 (file)
@@ -31,8 +31,7 @@
       <fieldset><legend><%= l(:field_notes) %></legend>
       <%= f.text_area :notes, :cols => 60, :rows => 10, :class => 'wiki-edit',
             :data => {
-                :auto_complete => true,
-                :issues_url => auto_complete_issues_path(:project_id => @issue.project, :q => '')
+                :auto_complete => true
             },
             :no_label => true %>
       <%= wikitoolbar_for 'issue_notes', preview_issue_path(:project_id => @project, :issue_id => @issue) %>
index 214502b0a9e8b70cd5939d78de073b1b45f21930..0d3ca5e2218b0f8cf96107bd48a00cbedbb71d08 100644 (file)
@@ -38,7 +38,6 @@
                    :rows => [[10, @issue.description.to_s.length / 50].max, 20].min,
                    :data => {
                        :auto_complete => true,
-                       :issues_url => auto_complete_issues_path(:project_id => @issue.project, :q => '')
                    },
                    :no_label => true %>
   <% end %>
@@ -54,6 +53,7 @@
 <% end %>
 
 <% heads_for_wiki_formatter %>
+<%= heads_for_auto_complete(@issue.project) %>
 
 <%= javascript_tag do %>
 $(document).ready(function(){
index 224ace22ade6b732b9bd579e70463708174c4993..a49617aab82be314eadd0f8c72123e616a56bcb6 100644 (file)
 <legend><%= l(:field_notes) %></legend>
 <%= text_area_tag 'notes', @notes, :cols => 60, :rows => 10, :class => 'wiki-edit',
                   :data => {
-                      :auto_complete => true,
-                      :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                      :auto_complete => true
                   }
 %>
 <%= wikitoolbar_for 'notes' %>
index aeb4b6a938701a35c65ac76d36b944ad3d25bbf2..13a6c7fdc87b4426e385ec688ad6b1d4f06baf1d 100644 (file)
@@ -6,8 +6,7 @@
     <%= text_area_tag 'journal[notes]', @journal.notes, :id => "journal_#{@journal.id}_notes", :class => 'wiki-edit',
           :rows => (@journal.notes.blank? ? 10 : [[10, @journal.notes.length / 50].max, 100].min),
           :data => {
-              :auto_complete => true,
-              :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+              :auto_complete => true
           }
     %>
     <% if @journal.safe_attribute? 'private_notes' %>
index d6c76c41c428e6a97d7a0d27259e11913ea36805..50fe17b3850f086cde6f848b0c10af0769e13706 100644 (file)
@@ -13,6 +13,7 @@
 <%= stylesheet_link_tag 'rtl', :media => 'all' if l(:direction) == 'rtl' %>
 <%= javascript_heads %>
 <%= heads_for_theme %>
+<%= heads_for_auto_complete(@project) %>
 <%= call_hook :view_layouts_base_html_head %>
 <!-- page specific tags -->
 <%= yield :header_tags -%>
@@ -23,7 +24,6 @@
 
 <div class="flyout-menu js-flyout-menu">
 
-
     <% if User.current.logged? || !Setting.login_required? %>
         <div class="flyout-menu__search">
             <%= form_tag({:controller => 'search', :action => 'index', :id => @project}, :method => :get ) do %>
@@ -82,8 +82,7 @@
         </label>
         <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search),
                             :data => {
-                                :auto_complete => true,
-                                :issues_url => auto_complete_issues_path(:q => '')
+                                :auto_complete => true
                             } %>
         <% end %>
         <%= render_project_jump_box %>
index 7d3a9c59f7b4756f271c5e98b196572671c44cc0..e030627a2e3d569972b577408d2d15134ef99813 100644 (file)
@@ -26,8 +26,7 @@
 <%= f.text_area :content, :cols => 80, :rows => 15, :class => 'wiki-edit', :id => 'message_content',
                 :accesskey => accesskey(:edit),
                 :data => {
-                    :auto_complete => true,
-                    :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                    :auto_complete => true
                 }
 %></p>
 <%= wikitoolbar_for 'message_content', preview_board_message_path(:board_id => @board, :id => @message) %>
index 58f68e1b2ef0dbd226dd4b7b3f64fea80de87b12..a441b671dc074cad77202ca5e8f428fbacbe4dbc 100644 (file)
@@ -5,8 +5,7 @@
 <p><%= f.text_area :summary, :cols => 60, :rows => 2 %></p>
 <p><%= f.text_area :description, :required => true, :cols => 60, :rows => 15, :class => 'wiki-edit',
                    :data => {
-                       :auto_complete => true,
-                       :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                       :auto_complete => true
                    }
 %></p>
 <p id="attachments_form"><label><%= l(:label_attachment_plural) %></label><%= render :partial => 'attachments/form', :locals => {:container => @news} %></p>
index 04ea54a0a60c95f2a6135105a3ecc9ece64cd4e5..95d6fe2653d288ae398297b4b4f4a1ab5a6cffac 100644 (file)
@@ -55,8 +55,7 @@
 <div class="box">
     <%= text_area 'comment', 'comments', :cols => 80, :rows => 15, :class => 'wiki-edit',
                   :data => {
-                    :auto_complete => true,
-                    :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                    :auto_complete => true
                   }
     %>
     <%= wikitoolbar_for 'comment_comments', preview_news_path(:project_id => @project, :id => @news) %>
index 5160f04feacdc10c07598a06b2a86822173cc040..caaa3f35ca43635bf65ae4697b419205ecf70403 100644 (file)
@@ -5,8 +5,7 @@
 <%= label_tag "search-input", l(:description_search), :class => "hidden-for-sighted" %>
 <p><%= text_field_tag 'q', @question, :size => 60, :id => 'search-input',
                       :data => {
-                          :auto_complete => true,
-                          :issues_url => auto_complete_issues_path(:q => '')
+                          :auto_complete => true
                       } %>
 <%= project_select_tag %>
 <%= hidden_field_tag 'all_words', '', :id => nil %>
index 0e1c23cc4614aaa0d70421b365b2857076cc8798..c501d6e284d50c29a11af0d0d957646ae792d04d 100644 (file)
@@ -16,8 +16,7 @@
 <%= text_area_tag 'content[text]', @text, :cols => 100, :rows => 25, :accesskey => accesskey(:edit),
                   :class => 'wiki-edit',
                   :data => {
-                      :auto_complete => true,
-                      :issues_url => auto_complete_issues_path(:project_id => @project, :q => '')
+                      :auto_complete => true
                   }
 %>
 
index 825d96c88004de154eb75d9016e5d0a0b9a3cb3f..90a5189fea595da6a5481772dc8fe5a0b826276b 100644 (file)
@@ -1045,11 +1045,15 @@ $(function () {
 
 function inlineAutoComplete(element) {
     'use strict';
+
     // do not attach if Tribute is already initialized
-    if (element.dataset.tribute === 'true') {return;}
+    if (element.dataset.tribute === 'true') {return};
+
+    const getDataSource = function(entity) {
+      const dataSources = JSON.parse(rm.AutoComplete.dataSources);
 
-    const issuesUrl = element.dataset.issuesUrl;
-    const usersUrl = element.dataset.usersUrl;
+      return dataSources[entity];
+    }
 
     const remoteSearch = function(url, cb) {
       const xhr = new XMLHttpRequest();
@@ -1074,7 +1078,7 @@ function inlineAutoComplete(element) {
         if (event.target.type === 'text' && $(element).attr('autocomplete') != 'off') {
           $(element).attr('autocomplete', 'off');
         }
-        remoteSearch(issuesUrl + text, function (issues) {
+        remoteSearch(getDataSource('issues') + text, function (issues) {
           return cb(issues);
         });
       },