Project

General

Profile

Patch #42521 » 0001v2-Add-daialog-controller-and-dialog-dispatcher-control.patch

Takashi Kato, 2025-05-11 14:24

View differences:

app/assets/images/icons.svg
122 122
      <path d="M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z"/>
123 123
      <path d="M9 9l6 6m0 -6l-6 6"/>
124 124
    </symbol>
125
    <symbol viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" id="icon--close-dialog">
126
      <path d="M18 6l-12 12" />
127
      <path d="M6 6l12 12" />
128
    </symbol>
125 129
    <symbol viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" id="icon--comment">
126 130
      <path d="M8 9h8"/>
127 131
      <path d="M8 13h6"/>
app/assets/stylesheets/application.css
207 207
#login-form a.lost_password {float:right; font-weight:normal;}
208 208
#login-form h3 {text-align: center;}
209 209

  
210
div.modal { border-radius:5px; background:#fff; z-index:50; padding:4px;}
211
div.modal h3.title {display:none;}
210
div.modal { position:absolute; border-radius:5px; background:#fff; padding:7px 14px; border: 1px solid #c5c5c5; color: #333; font-family: Arial,Helvetica,sans-serif; font-size: 1em; outline: 0; z-index: 100}
212 211
div.modal p.buttons {margin-bottom:0;}
213 212
div.modal .box p {margin: 0.3em 0;}
213
div.modal .handle {display:flex; align-items: center;height:1.5em; cursor: move; padding: .5em; border-radius: 3px; border: 1px solid #ddd; background: #e9e9e9; color: #333; font-weight: bold; touch-action: none}
214
div.modal .handle .title {margin: .1em 0; white-space: nowrap; width: 90%; overflow: hidden; text-overflow: ellipsis}
215
div.modal .handle button {margin: 0 0 0 auto;padding:0;width: 20px; height: 20px;fill: #454545; text-decoration: none; border: 1px solid #c5c5c5; background: #f6f6f6; font-weight: normal;box-sizing: border-box; white-space: nowrap; line-height: normal; cursor: pointer; text-align: center; user-select: none; overflow: visible;}
216
div.modal .handle button svg { stroke-width: 4; stroke: #999 }
217
div.modal .handle button .icon {position: absolute; top: 50%; left: 50%; margin-top:-8px; margin-left: -8px; width: 16px; height: 16px; display: inline-block; vertical-align: middle; overflow: hidden; background-repeat: no-repeat}
218
.modal-backdrop-open { position: fixed; inset: 0; background: rgba(0,0,0,0.7); display: flex; align-items: center; justify-content: center; }
214 219

  
215 220
.clear:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
216 221

  
......
729 734
#issue_tree .issue > td.assigned_to, #relations .issue > td.assigned_to {
730 735
  white-space: nowrap;
731 736
}
732
#trackers_description, #issue_statuses_description {display:none;}
733 737
#trackers_description dt, #issue_statuses_description dt {font-weight: bold; text-decoration: underline;}
734 738
#trackers_description dd, #issue_statuses_description dd {margin: 0; padding: 0 0 1em 0;}
735 739

  
app/helpers/application_helper.rb
1948 1948
    )
1949 1949
  end
1950 1950

  
1951
  def remote_dialog(width: nil, modal: true, title: nil, partial: nil, locals: {}, &block)
1952
    data = {
1953
      controller: 'dialog',
1954
      width: width,
1955
      dialog_modal_value: modal,
1956
      dialog_dispatcher_target: 'show'
1957
    }
1958
    block = -> { render partial: partial, locals: locals } if partial
1959
    render layout: 'common/dialog', locals: { id: nil, title: title, data: data }, formats: [:html], &block
1960
  end
1961

  
1951 1962
  private
1952 1963

  
1953 1964
  def wiki_helper
......
1968 1979
      wiki_pages: auto_complete_wiki_pages_path(project_id: project, q: ''),
1969 1980
    }
1970 1981
  end
1982

  
1983
  def modal_dialog(id, title, data: nil, &block)
1984
    content_for(:modal) { render 'common/dialog', { id: id, title: title, data: data }, &block }
1985
  end
1986

  
1987
  def dialog_dispatcher(element_id, width)
1988
    {
1989
      controller: 'dialog-dispatcher',
1990
      action: 'dialog-dispatcher#show',
1991
      dialog_dispatcher_dialog_outlet: "##{element_id}",
1992
      dialog_dispatcher_width_param: width
1993
    }
1994
  end
1971 1995
end
app/javascript/controllers/dialog_controller.js
1
/**
2
 * Redmine - project management software
3
 * Copyright (C) 2006-  Jean-Philippe Lang
4
 * This code is released under the GNU General Public License.
5
 */
6

  
7
import { Controller } from "@hotwired/stimulus"
8

  
9
// Connects to data-controller="dialog"
10
export default class extends Controller {
11

  
12
  static targets = [ 'handler', 'cancel' ]
13
  static values = {
14
    modal: { type: Boolean, default: true },
15
    wrapperId: { type: String, default: 'wrapper' }
16
  }
17

  
18
  connect() {
19
    this.dragging = null;
20
    this.backdrop = null;
21
    const rect = this.element.getBoundingClientRect();
22
    this._pos = {x: rect.left, y: rect.top}
23
    this.element[`${this.identifier}_controller`] = this;
24
    this.wrapper = document.getElementById(this.wrapperIdValue)
25
  }
26

  
27
  start(e) {
28
    if (this.cancelTarget.contains(e.target)) return;
29
    if (e.button !== 0) return; // left button only
30

  
31
    const client = this.eventToCoordinates(e);
32
    this.dragging = {dx: this.pos.x - client.x, dy: this.pos.y - client.y};
33
    this.handlerTarget.classList.add('dragging');
34
    this.handlerTarget.setPointerCapture(e.pointerId);
35
    this.handlerTarget.style.userSelect = 'none'; // if there's text
36
    this.handlerTarget.style.webkitUserSelect = 'none'; // safari
37
  }
38

  
39
  end(e) {
40
    this.dragging = null;
41
    this.handlerTarget.classList.remove('dragging');
42
    this.handlerTarget.style.userSelect = ''; // if there's text
43
    this.handlerTarget.style.webkitUserSelect = ''; // safari
44
  }
45

  
46
  move(e) {
47
    if (!this.dragging) return;
48

  
49
    const client = this.eventToCoordinates(e);
50
    this.pos = {x: client.x + this.dragging.dx, y: client.y + this.dragging.dy};
51
  }
52

  
53
  eventToCoordinates(e) {
54
    return {x: e.clientX, y: e.clientY}
55
  }
56

  
57
  get pos() { return this._pos }
58

  
59
  set pos(p) {
60
    this._pos = p;
61
    this.element.style.transform = `translate(${this._pos.x}px,${this._pos.y}px)`;
62
  }
63

  
64
  show({width = undefined, backdrop = 'modal-backdrop'}) {
65
    this.element.style.display = '';
66
    if (width) {
67
      this.element.style.width = width;
68
    }
69

  
70
    if (this.modalValue) {
71
      this.backdrop = document.getElementById(backdrop)
72
      this.backdrop.classList.add('modal-backdrop-open')
73
      this.wrapper.inert = true
74
    }
75
  }
76

  
77
  hide(e) {
78
    this.hideDialog()
79
  }
80

  
81
  cancel(e) {
82
    e.preventDefault();
83
    this.hideDialog()
84
  }
85

  
86
  hideDialog() {
87
    this.element.style.display = 'none'
88
    if (this.backdrop !== null) {
89
      this.backdrop.classList.remove('modal-backdrop-open')
90
    }
91
    if (this.wrapper !== null) {
92
      this.wrapper.inert = false
93
    }
94
  }
95
}
app/javascript/controllers/dialog_dispatcher_controller.js
1
/**
2
 * Redmine - project management software
3
 * Copyright (C) 2006-  Jean-Philippe Lang
4
 * This code is released under the GNU General Public License.
5
 */
6

  
7
import { Controller } from "@hotwired/stimulus"
8

  
9
// Connects to data-controller="dialog-dispatcher"
10
export default class extends Controller {
11
  static targets = [ 'show', 'hide' ];
12
  static outlets = [ 'dialog' ];
13

  
14
  show(e) {
15
    e.preventDefault();
16
    this.dialog = this.dialogOutlet
17
    this.dialog.show({width: e.params.width})
18
  }
19

  
20
  showTargetConnected(dialog) {
21
    this.dialog = dialog.dialog_controller
22
    this.dialog.show({width: dialog.dataset.width, backdrop: this.element.id})
23
  }
24

  
25
  hideTargetConnected(element) {
26
    this.dialog.hide()
27
    element.remove()
28
  }
29
}
app/views/common/_dialog.html.erb
1
<%= tag.div style: 'display:none', class: 'modal', id: id, data: (data || { controller: 'dialog' })  do %>
2
  <div class="handle" data-action="pointerdown->dialog#start pointerup->dialog#end pointercancel->dialog#end pointermove->dialog#move touchstart->dialog#noop dragstart->dialog#noop" data-dialog-target="handler">
3
    <span class="title"><%= title %></span>
4
    <%= tag.button type: "button", title: l(:button_close_dialog), data: {action: "dialog#cancel", dialog_target: 'cancel'} do %>
5
      <%= sprite_icon 'close-dialog'%>
6
    <% end %>
7
  </div>
8

  
9
  <div>
10
    <%= yield %>
11
  </div>
12
<% end %>
app/views/email_addresses/index.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'email_addresses/index') %>');
2
showModal('ajax-modal', '600px', '<%= escape_javascript l(:label_email_address_plural) %>');
1
<% html = remote_dialog(width: '600px', title: l(:label_email_address_plural), partial: 'email_addresses/index') %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
3 3
$('#email_address_address').focus();
app/views/groups/_new_users_modal.html.erb
1
<h3 class="title"><%= l(:label_user_new) %></h3>
2

  
3 1
<%= form_for(@group, :url => group_users_path(@group), :remote => true, :method => :post) do |f| %>
4 2
  <%= render :partial => 'new_users_form' %>
5 3
  <p class="buttons">
6 4
    <%= submit_tag l(:button_add) %>
7
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
5
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
8 6
  </p>
9 7
<% end %>
app/views/groups/add_users.js.erb
1
hideModal();
1
$('#ajax-modal').append('<template data-dialog-dispatcher-target="hide"></template>')
2 2
$('#tab-content-users').html('<%= escape_javascript(render :partial => 'groups/users') %>');
3 3
<% @users.each do |user| %>
4 4
  $('#user-<%= user.id %>').effect("highlight");
app/views/groups/new_users.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'groups/new_users_modal') %>');
2
showModal('ajax-modal', '700px');
1
<% html = remote_dialog(width: '700px', title: l(:label_user_new), partial: 'groups/new_users_modal') %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
app/views/issue_categories/_new_modal.html.erb
1
<h3 class="title"><%=l(:label_issue_category_new)%></h3>
2

  
3 1
<%= labelled_form_for @category, :as => 'issue_category', :url => project_issue_categories_path(@project), :remote => true do |f| %>
4 2
<%= render :partial => 'issue_categories/form', :locals => { :f => f } %>
5 3
  <p class="buttons">
6
    <%= submit_tag l(:button_create), :name => nil %>
7
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
4
    <%= submit_tag l(:button_create), name: nil %>
5
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
8 6
  </p>
9 7
<% end %>
app/views/issue_categories/create.js.erb
1
hideModal();
1
$('#ajax-modal').append('<template data-dialog-dispatcher-target="hide"></template>')
2 2
<% select = content_tag('select', content_tag('option') + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]') %>
3 3
$('#issue_category_id').replaceWith('<%= escape_javascript(select) %>');
app/views/issue_categories/new.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'issue_categories/new_modal') %>');
2
showModal('ajax-modal', '600px');
1
<% html = remote_dialog(width: '600px', title: l(:label_issue_category_new), partial: 'issue_categories/new_modal', locals: {watchables: @watchables, users: @users}) %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
app/views/issues/_attributes.html.erb
7 7
  <%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), {:required => true},
8 8
    :onchange => "updateIssueFrom('#{escape_javascript(update_issue_form_path(@project, @issue))}', this)",
9 9
    :title => @issue.status.description %>
10
  <%= content_tag 'a', sprite_icon('help', l(:label_open_issue_statuses_description)), :class => 'icon-only icon-help', :title => l(:label_open_issue_statuses_description), :onclick => "showModal('issue_statuses_description', '500px'); return false;", :href => '#' if @allowed_statuses.any? {|s| s.description.present? } %>
10
  <%= link_to sprite_icon('help', l(:label_open_issue_statuses_description)), '#', class: 'icon-only icon-help', title: l(:label_open_issue_statuses_description), data: dialog_dispatcher('issue_statuses_description', '500px') if @allowed_statuses.any? {|s| s.description.present? } %>
11 11
  <% if @issue.transition_warning %>
12 12
    <span class="icon-only icon-warning" title="<%= @issue.transition_warning %>"><%= sprite_icon('warning', l(:notice_issue_not_closable_by_open_tasks)) %></span>
13 13
  <% end %>
14
  <%= render partial: 'issues/issue_status_description', locals: { issue_statuses: @allowed_statuses } %>
14 15
</p>
15
<%= render partial: 'issues/issue_status_description', locals: { issue_statuses: @allowed_statuses } %>
16 16
<%= hidden_field_tag 'was_default_status', @issue.status_id, :id => nil if @issue.status == @issue.default_status %>
17 17
<% else %>
18 18
<p><label><%= l(:field_status) %></label> <%= @issue.status %></p>
app/views/issues/_form.html.erb
20 20
  <%= f.select :tracker_id, trackers_options_for_select(@issue), {:required => true},
21 21
               :onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)",
22 22
               :title => @issue.tracker.description %>
23
  <%= content_tag 'a', sprite_icon('help', l(:label_open_trackers_description)), :class => 'icon-only icon-help', :title => l(:label_open_trackers_description), :onclick => "showModal('trackers_description', '500px'); return false;", :href => '#' if trackers_for_select(@issue).any? {|t| t.description.present? } %>
24
</p>
23
  <%= link_to sprite_icon('help', l(:label_open_trackers_description)),
24
               '#', class: 'icon-only icon-help', title: l(:label_open_trackers_description), data: dialog_dispatcher('trackers_description', '500px') if trackers_for_select(@issue).any? {|t| t.description.present? } %>
25 25
  <%= render partial: 'issues/trackers_description', locals: {trackers: trackers_for_select(@issue)} %>
26
</p>
26 27
<% end %>
27 28

  
28 29
<% if @issue.safe_attribute? 'subject' %>
app/views/issues/_issue_status_description.html.erb
1 1
<% if issue_statuses.any? {|s| s.description.present? } %>
2
  <div class="modal" id="issue_statuses_description">
3
    <h3 class="title"><%= l(:label_issue_statuses_description) %></h3>
4
      <dl>
2
  <%= modal_dialog "issue_statuses_description", l(:label_issue_statuses_description) do %>
3
    <dl>
5 4
      <% issue_statuses.each do |issue_status| %>
6 5
        <% if issue_status.description.present? %>
7
          <dt><%= content_tag 'a', issue_status.name, :onclick => "selectIssueStatus('#{issue_status.id}'); return false;", :href => '#', :title => l(:text_select_apply_issue_status) %></dt>
6
          <dt><%= link_to issue_status.name, '#', onclick: "selectIssueStatus('#{issue_status.id}'); return false;", title: l(:text_select_apply_issue_status) %></dt>
8 7
          <dd><%= issue_status.description %></dd>
9 8
        <% end %>
10 9
      <% end %>
11
      </dl>
12
  </div>
10
    </dl>
11
  <% end %>
13 12
<% end %>
14 13
<%= javascript_tag do %>
15 14
  function selectIssueStatus(id) {
......
17 16
    target.attr("selected", false);
18 17
    target.find('option[value="' + id + '"]').prop('selected', true);
19 18
    target.trigger('change');
20
    hideModal('#issue_statuses_description h3');
19
    $('#issue_statuses_description').get(0).dialog_controller.hide();
21 20
  }
22 21
<% end %>
app/views/issues/_trackers_description.html.erb
1 1
<% if trackers.any? {|t| t.description.present? } %>
2
  <div class="modal" id="trackers_description">
3
    <h3 class="title"><%= l(:label_trackers_description) %></h3>
4
      <dl>
2
  <%= modal_dialog "trackers_description", l(:label_trackers_description), data: { controller: 'dialog' } do %>
3
    <dl>
5 4
      <% trackers.each do |tracker| %>
6 5
        <% if tracker.description.present? %>
7
          <dt><%= content_tag 'a', tracker.name, :onclick => "selectTracker('#{tracker.id}'); return false;", :href => '#', :title => l(:text_select_apply_tracker) %></dt>
6
          <dt><%= link_to tracker.name, '#', onclick: "selectTracker('#{tracker.id}'); return false;", title: l(:text_select_apply_tracker) %></dt>
8 7
          <dd><%= tracker.description %></dd>
9 8
        <% end %>
10 9
      <% end %>
11
      </dl>
12
  </div>
10
    </dl>
11
  <% end %>
13 12
<% end %>
14 13
<%= javascript_tag do %>
15 14
  function selectTracker(id) {
......
17 16
    target.attr("selected", false);
18 17
    target.find('option[value="' + id + '"]').prop('selected', true);
19 18
    target.trigger('change');
20
    hideModal('#trackers_description h3');
19
    $('#trackers_description').get(0).dialog_controller.hide();
21 20
  }
22 21
<% end %>
app/views/issues/index.html.erb
35 35
<% end %>
36 36

  
37 37
<% other_formats_links do |f| %>
38
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '350px'); return false;" %>
38
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '350px') %>
39 39
  <%= f.link_to_with_query_parameters 'PDF' %>
40 40
  <%= f.link_to_with_query_parameters 'Atom', :key => User.current.atom_key %>
41 41
<% end %>
42 42

  
43
<div id="csv-export-options" style="display:none;">
44
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
43
<% modal_dialog 'csv-export-options', l(:label_export_options, :export_format => 'CSV') do %>
45 44
  <%= form_tag(_project_issues_path(@project, :format => 'csv'), :method => :get, :id => 'csv-export-form') do %>
46 45
  <%= query_as_hidden_field_tags(@query) %>
47 46
  <%= hidden_field_tag('query_name', @query.name) %>
......
67 66
  </p>
68 67
  <% end %>
69 68
  <p class="buttons">
70
    <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);", :data => { :disable_with => false } %>
71
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
69
    <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
70
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
72 71
  </p>
73 72
  <% end %>
74
</div>
75

  
73
<% end %>
76 74
<% end %>
77 75
<%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %>
78 76

  
app/views/layouts/base.html.erb
130 130
</div>
131 131

  
132 132
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
133
<div id="ajax-modal" style="display:none;"></div>
134 133
<div id="icon-copy-source" style="display: none;"><%= sprite_icon('') %></div>
135 134

  
136 135
</div>
137 136
<%= call_hook :view_layouts_base_body_bottom %>
137
<div id="modal-backdrop">
138
  <%= yield :modal %>
139
</div>
140
<div id="ajax-modal" data-controller="dialog-dispatcher"></div>
141
<div id="sudo-modal" data-controller="dialog-dispatcher"></div>
138 142
</body>
139 143
</html>
app/views/members/_new_modal.html.erb
1
<h3 class="title"><%= l(:label_member_new) %></h3>
2

  
3 1
<%= form_for @member, :as => :membership, :url => project_memberships_path(@project), :remote => true, :method => :post do |f| %>
4 2
  <%= render :partial => 'new_form' %>
5 3
  <p class="buttons">
6 4
    <%= submit_tag l(:button_add), :id => 'member-add-submit' %>
7
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
5
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
8 6
  </p>
9 7
<% end %>
app/views/members/create.js.erb
2 2
hideOnLoad();
3 3

  
4 4
<% if @members.present? && @members.all? {|m| m.valid? } %>
5
  hideModal();
5
  $('#ajax-modal').append('<template data-dialog-dispatcher-target="hide"></template>')
6 6
  <% @members.each do |member| %>
7 7
    $("#member-<%= member.id %>").effect("highlight");
8 8
  <% end %>
app/views/members/new.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'members/new_modal') %>');
2
showModal('ajax-modal', '90%');
1
<% html = remote_dialog(width: '90%', title: l(:label_member_new), partial: 'members/new_modal') %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
app/views/principal_memberships/_new_modal.html.erb
1
<h3 class="title"><%= l(:label_add_projects) %></h3>
2

  
3 1
<%= form_for :membership, :remote => true, :url => user_memberships_path(@principal), :method => :post do |f| %>
4 2
  <%= render :partial => 'new_form' %>
5 3
  <p class="buttons">
6
    <%= submit_tag l(:button_add), :name => nil %>
7
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
4
    <%= submit_tag l(:button_add), name: nil %>
5
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
8 6
  </p>
9 7
<% end %>
app/views/principal_memberships/create.js.erb
2 2
hideOnLoad();
3 3

  
4 4
<% if @members.present? && @members.all? {|m| m.persisted? } %>
5
  hideModal();
5
  $('#ajax-modal').append('<template data-dialog-dispatcher-target="hide"></template>')
6 6
  <% @members.each do |member| %>
7 7
    $("#member-<%= member.id %>").effect("highlight");
8 8
  <% end %>
app/views/principal_memberships/new.js.erb
1
<% html = remote_dialog(width: '700px', title: l(:label_add_projects), partial: 'principal_memberships/new_modal') %>
1 2
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'principal_memberships/new_modal') %>');
2
showModal('ajax-modal', '700px');
3 3

  
4 4
$('.projects-selection').on('click', 'input[type=checkbox]', function(e){
5 5
  if (!$(this).is(':checked')) {
app/views/projects/_list.html.erb
66 66
<% end -%>
67 67
<span class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></span>
68 68

  
69
<div id="csv-export-options" style="display:none;">
69
<div id="csv-export-options" style="display:none;" data-controller="dialog">
70 70
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
71 71
  <%= form_tag(projects_path(:format => 'csv'), :method => :get, :id => 'csv-export-form') do %>
72 72
  <%= query_as_hidden_field_tags(@query) %>
......
77 77
  <%= export_csv_encoding_select_tag %>
78 78
  <%= export_csv_separator_select_tag %>
79 79
  <p class="buttons">
80
    <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);", :data => { :disable_with => false } %>
81
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
80
    <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
81
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
82 82
  </p>
83 83
  <% end %>
84 84
</div>
app/views/projects/index.html.erb
32 32

  
33 33
<% other_formats_links do |f| %>
34 34
  <% if @query.display_type == 'list' %>
35
    <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '350px'); return false;" %>
35
    <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '350px') %>
36 36
  <% end %>
37 37
  <%= f.link_to 'Atom', :url => {:key => User.current.atom_key} %>
38 38
<% end %>
app/views/reports/_details.html.erb
37 37
</tfoot>
38 38
</table>
39 39
<% other_formats_links do |f| %>
40
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
40
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '330px') %>
41 41
<% end %>
42
<div id="csv-export-options" style="display: none;">
43
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
42

  
43
<% modal_dialog "csv-export-options", l(:label_export_options, export_format: 'CSV') do %>
44 44
  <%= form_tag(project_issues_report_details_path(@project, :detail => params[:detail], :format => 'csv'), :method => :get, :id => 'csv-export-form') do %>
45 45
  <%= export_csv_encoding_select_tag %>
46 46
  <%= export_csv_separator_select_tag %>
47 47
  <p class="buttons">
48
    <%= submit_tag l(:button_export), :name => nil, :onclick => 'hideModal(this);', :data => {:disable_with => false} %>
49
    <%= link_to_function l(:button_cancel), 'hideModal(this);' %>
48
    <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
49
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
50 50
  </p>
51 51
  <% end %>
52
</div>
52
<% end %>
53 53

  
54 54
<div class="issue-report-graph hide-when-print">
55 55
  <canvas id="issues_by_<%= params[:detail] %>"></canvas>
app/views/roles/permissions.html.erb
83 83
<p><%= submit_tag l(:button_save) %></p>
84 84
<% end %>
85 85
<% other_formats_links do |f| %>
86
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
86
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '330px') %>
87 87
<% end %>
88
<div id="csv-export-options" style="display: none;">
89
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
88

  
89
<% modal_dialog 'csv-export-options', l(:label_export_options, export_format: 'CSV') do %>
90 90
  <%= form_tag(permissions_roles_path(:format => 'csv'), :method => :get, :id => 'csv-export-form') do %>
91 91
  <%= export_csv_encoding_select_tag %>
92 92
  <%= export_csv_separator_select_tag %>
93 93
  <p class="buttons">
94
    <%= submit_tag l(:button_export), :name => nil, :onclick => 'hideModal(this);', :data => {:disable_with => false} %>
95
    <%= link_to_function l(:button_cancel), 'hideModal(this);' %>
94
    <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
95
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
96 96
  </p>
97 97
  <% end %>
98
</div>
98
<% end %>
app/views/sudo_mode/_new_modal.html.erb
1
<h3 class="title"><%= l(:label_password_required) %></h3>
2 1
<p class="nodata" style="font-size: 1em;"><%= t 'sudo_mode_new_info_html' %></p>
3 2
<%= form_tag({}, remote: true) do %>
4 3

  
......
14 13
  </div>
15 14

  
16 15
  <p class="buttons">
17
    <%= submit_tag l(:button_submit), onclick: "hideModal(this);"  %>
18
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
16
    <%= submit_tag l(:button_submit), data: { action: 'dialog#hide' } %>
17
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
19 18
  </p>
20 19
<% end %>
app/views/sudo_mode/new.js.erb
1
var sudo_modal = $('#sudo-modal').length ? $('#sudo-modal') : $("<div>", {id: "sudo-modal"}).appendTo($("body"));
2
sudo_modal.hide().html('<%= escape_javascript render partial: 'sudo_mode/new_modal' %>');
3
showModal('sudo-modal', '400px');
1
<% html = remote_dialog(width: '400px', title: l(:label_password_required), partial: 'sudo_mode/new_modal') %>
2
const sudo_modal = $('#sudo-modal').length ? $('#sudo-modal') : $("<div>", {id: "sudo-modal"}).appendTo($("body"));
3
sudo_modal.hide().html('<%= escape_javascript html %>');
4 4
$('#sudo_password').focus();
app/views/timelog/index.html.erb
29 29
<span class="pagination"><%= pagination_links_full @entry_pages, @entry_count %></span>
30 30

  
31 31
<% other_formats_links do |f| %>
32
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
33
  <%= f.link_to_with_query_parameters 'Atom', :key => User.current.atom_key %>
32
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '330px') %>
33
  <%= f.link_to_with_query_parameters 'Atom', key: User.current.atom_key %>
34 34
<% end %>
35 35

  
36
<div id="csv-export-options" style="display:none;">
37
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
36
<% modal_dialog "csv-export-options", l(:label_export_options, export_format: 'CSV') do %>
38 37
  <%= form_tag(_time_entries_path(@project, nil, :format => 'csv'), :method => :get, :id => 'csv-export-form') do %>
39 38
  <%= query_as_hidden_field_tags @query %>
40 39
  <%= hidden_field_tag('query_name', @query.name) %>
......
55 54
  <%= export_csv_encoding_select_tag %>
56 55
  <%= export_csv_separator_select_tag %>
57 56
  <p class="buttons">
58
    <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);", :data => { :disable_with => false } %>
59
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
57
    <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
58
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
60 59
  </p>
61 60
  <% end %>
62
</div>
61
<% end %>
63 62
<% end %>
64 63
<% end %>
65 64

  
app/views/timelog/report.html.erb
66 66
</div>
67 67

  
68 68
<% other_formats_links do |f| %>
69
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
69
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '330px') %>
70 70
<% end %>
71 71
<% end %>
72
<div id="csv-export-options" style="display: none;">
73
  <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
72
<% modal_dialog "csv-export-options", l(:label_export_options, export_format: 'CSV') do %>
74 73
  <%= export_csv_encoding_select_tag %>
75 74
  <%= export_csv_separator_select_tag %>
76 75
  <p class="buttons">
77
    <%= submit_tag l(:button_export), :name => nil, :id => 'csv-export-button' %>
78
    <%= submit_tag l(:button_cancel), :name => nil, :onclick => 'hideModal(this);', :type => 'button' %>
76
    <%= submit_tag l(:button_export), name: nil, id: 'csv-export-button', data: { action: 'dialog#hide' } %>
77
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
79 78
  </p>
80
</div>
79
<% end %>
81 80
<% end %>
82 81
<% end %>
83 82

  
......
87 86

  
88 87
<% html_title(@query.new_record? ? l(:label_spent_time) : @query.name, l(:label_report)) %>
89 88

  
90

  
91 89
<%= javascript_tag do %>
92 90
$(document).ready(function(){
93 91
  $('input#csv-export-button').click(function(){
94 92
    $('form input#encoding').val($('select#encoding option:selected').val());
95 93
    $('form#query_form').attr('action', '<%= _report_time_entries_path(@project, nil, :format => 'csv') %>').submit();
96 94
    $('form#query_form').attr('action', '<%= _report_time_entries_path(@project, nil) %>');
97
    hideModal(this);
98 95
  });
99 96
});
100 97
<% end %>
app/views/users/index.html.erb
23 23
    <span class="pagination"><%= pagination_links_full @user_pages, @user_count %></span>
24 24
  <% end %>
25 25
  <% other_formats_links do |f| %>
26
    <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '350px'); return false;" %>
26
    <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '350px') %>
27 27
  <% end %>
28 28

  
29
  <div id="csv-export-options" style="display:none;">
30
    <h3 class="title"><%= l(:label_export_options, :export_format => 'CSV') %></h3>
29
  <% modal_dialog "csv-export-options", l(:label_export_options, export_format: 'CSV') do %>
31 30
    <%= form_tag(users_path(format: 'csv'), method: :get, id: 'csv-export-form') do %>
32 31
    <%= query_as_hidden_field_tags(@query) %>
33 32
    <%= hidden_field_tag('query_name', @query.name) %>
......
48 47
    <%= export_csv_encoding_select_tag %>
49 48
    <%= export_csv_separator_select_tag %>
50 49
    <p class="buttons">
51
      <%= submit_tag l(:button_export), :name => nil, :onclick => "hideModal(this);", :data => { :disable_with => false } %>
52
      <%= link_to_function l(:button_cancel), "hideModal(this);" %>
50
      <%= submit_tag l(:button_export), name: nil, data: { disable_with: false, action: 'dialog#hide' } %>
51
      <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
53 52
    </p>
54 53
    <% end %>
55
  </div>
54
  <% end %>
56 55
<% end %>
57 56

  
58 57
<% content_for :sidebar do %>
app/views/versions/_new_modal.html.erb
1
<h3 class="title"><%=l(:label_version_new)%></h3>
2

  
3 1
<%= labelled_form_for @version, :url => project_versions_path(@project), :html => {:multipart => true}, :remote => true do |f| %>
4 2
<%= render :partial => 'versions/form', :locals => { :f => f } %>
5 3
  <p class="buttons">
6
    <%= submit_tag l(:button_create), :name => nil %>
7
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
4
    <%= submit_tag l(:button_create), name: nil %>
5
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
8 6
  </p>
9 7
<% end %>
app/views/versions/create.js.erb
1
hideModal();
1
$('#ajax-modal').append('<template data-dialog-dispatcher-target="hide"></template>')
2 2
<% select = content_tag('select', content_tag('option') + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]') %>
3 3
$('#issue_fixed_version_id').replaceWith('<%= escape_javascript(select) %>');
app/views/versions/new.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'versions/new_modal') %>');
2
showModal('ajax-modal', '600px');
1
<% html = remote_dialog(width: '600px', title: l(:label_version_new), partial: 'versions/new_modal') %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
app/views/watchers/_new.html.erb
1
<%
2
title =
3
  if watchables.present?
4
    l(:"permission_add_#{watchables.first.class.name.underscore}_watchers")
5
  else
6
    l(:permission_add_issue_watchers)
7
  end
8
-%>
9
<h3 class="title"><%= title %></h3>
10

  
11 1
<%= form_tag(watchables.present? ? watchers_path : watchers_append_path,
12 2
             :remote => true,
13 3
             :method => :post,
......
42 32
  </div>
43 33

  
44 34
  <p class="buttons">
45
    <%= submit_tag l(:button_add), :name => nil, :onclick => "hideModal(this);" %>
46
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
35
    <%= submit_tag l(:button_add), name: nil, data: { action: 'dialog#hide' } %>
36
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
47 37
  </p>
48 38
<% end %>
app/views/watchers/new.js.erb
1
$('#ajax-modal').html(
2
  '<%= escape_javascript(
3
         render(:partial => 'watchers/new',
4
                :locals => {:watchables => @watchables, :users => @users})
5
       ) %>');
6
showModal('ajax-modal', '400px');
7
$('#ajax-modal').addClass('new-watcher');
1
<% title = if @watchables.present?
2
             l(:"permission_add_#{@watchables.first.class.name.underscore}_watchers")
3
           else
4
             l(:permission_add_issue_watchers)
5
           end -%>
6
<% html = remote_dialog(width: '400px', title: title, partial: 'watchers/new', locals: {watchables: @watchables, users: @users}) %>
7
$('#ajax-modal').html('<%= escape_javascript html %>');
8
$('#ajax-modal').addClass('new-watcherwatcher');
app/views/wiki/_new_modal.html.erb
1
<h3 class="title"><%=l(:label_wiki_page_new)%></h3>
2

  
3 1
<%= labelled_form_for :page, @page,
4 2
            :url => new_project_wiki_page_path(@project),
5 3
            :method => 'post',
......
24 22

  
25 23
  <p class="buttons">
26 24
    <%= submit_tag l(:label_next), :name => nil %>
27
    <%= link_to_function l(:button_cancel), "hideModal(this);" %>
25
    <%= link_to l(:button_cancel), '#', data: { action: 'dialog#cancel' } %>
28 26
  </p>
29 27
<% end %>
app/views/wiki/new.js.erb
1
$('#ajax-modal').html('<%= escape_javascript(render :partial => 'wiki/new_modal') %>');
2
showModal('ajax-modal', '600px');
1
<% html = remote_dialog(width: '600px', title: l(:label_wiki_page_new), partial: 'wiki/new_modal') %>
2
$('#ajax-modal').html('<%= escape_javascript(html) %>');
config/icon_source.yml
221 221
- name: unwatch
222 222
  svg: eye-off
223 223
- name: copy-pre-content
224
  svg: clipboard
224
  svg: clipboard
225
- name: close-dialog
226
  svg: x
config/locales/ar.yml
851 851
  button_show: إظهار
852 852
  button_edit_section: تعديل هذا الجزء
853 853
  button_export: تصدير لملف
854
  button_close_dialog: Close
854 855

  
855 856
  status_active: نشيط
856 857
  status_registered: مسجل
config/locales/az.yml
259 259
  button_update: Yeniləmək
260 260
  button_view: Baxmaq
261 261
  button_watch: İzləmək
262
  button_close_dialog: Close
262 263

  
263 264
  default_activity_design: Layihənin hazırlanması
264 265
  default_activity_development: Hazırlanma prosesi
config/locales/bg.yml
1220 1220
  button_delete_object: Изтриване %{object_name}
1221 1221
  button_create_and_follow: Създаване и продължаване
1222 1222
  button_apply_issues_filter: Прилагане на филтъра
1223
  button_close_dialog: Close
1223 1224

  
1224 1225
  status_active: активен
1225 1226
  status_registered: регистриран
config/locales/bs.yml
719 719
  button_watch: Posmatraj
720 720
  button_configure: Konfiguracija
721 721
  button_quote: Citat
722
  button_close_dialog: Close
722 723

  
723 724
  status_active: aktivan
724 725
  status_registered: registrovan
config/locales/ca.yml
799 799
  button_configure: "Configurar"
800 800
  button_quote: "Citar"
801 801
  button_show: "Mostrar"
802
  button_close_dialog: Close
802 803

  
803 804
  status_active: "actiu"
804 805
  status_registered: "registrat"
config/locales/cs.yml
814 814
  button_configure: Konfigurovat
815 815
  button_quote: Citovat
816 816
  button_show: Zobrazit
817
  button_close_dialog: Close
817 818

  
818 819
  status_active: aktivní
819 820
  status_registered: registrovaný
config/locales/da.yml
636 636
  button_annotate: Annotér
637 637
  button_update: Opdatér
638 638
  button_configure: Konfigurér
639
  button_close_dialog: Close
639 640

  
640 641
  status_active: aktiv
641 642
  status_registered: registreret
config/locales/de.yml
211 211
  button_view: Anzeigen
212 212
  button_watch: Beobachten
213 213
  button_actions: Aktionen
214
  button_close_dialog: Close
214 215

  
215 216
  default_activity_design: Design
216 217
  default_activity_development: Entwicklung
config/locales/el.yml
731 731
  button_update: Ενημέρωση
732 732
  button_configure: Ρύθμιση
733 733
  button_quote: Παράθεση
734
  button_close_dialog: Close
734 735

  
735 736
  status_active: ενεργό(ς)/ή
736 737
  status_registered: εγεγγραμμένο(ς)/η
config/locales/en-GB.yml
827 827
  button_configure: Configure
828 828
  button_quote: Quote
829 829
  button_show: Show
830
  button_close_dialog: Close
830 831

  
831 832
  status_active: active
832 833
  status_registered: registered
config/locales/en.yml
1223 1223
  button_delete_object: "Delete %{object_name}"
1224 1224
  button_create_and_follow: Create and follow
1225 1225
  button_apply_issues_filter: Apply issues filter
1226
  button_close_dialog: Close
1226 1227

  
1227 1228
  status_active: active
1228 1229
  status_registered: registered
config/locales/es-PA.yml
208 208
  button_change_password: Cambiar contraseña
209 209
  button_check_all: Seleccionar todo
210 210
  button_clear: Anular
211
  button_close_dialog: Close
211 212
  button_configure: Configurar
212 213
  button_copy: Copiar
213 214
  button_create: Crear
......
235 236
  button_update: Actualizar
236 237
  button_view: Ver
237 238
  button_watch: Monitorizar
239

  
238 240
  default_activity_design: Diseño
239 241
  default_activity_development: Desarrollo
240 242
  default_doc_category_tech: Documentación técnica
config/locales/es.yml
206 206
  button_change_password: Cambiar contraseña
207 207
  button_check_all: Seleccionar todo
208 208
  button_clear: Anular
209
  button_close_dialog: Close
209 210
  button_configure: Configurar
210 211
  button_copy: Copiar
211 212
  button_create: Crear
config/locales/et.yml
887 887
  button_edit_section: "Muuda seda sektsiooni"
888 888
  button_export: "Ekspordi"
889 889
  button_delete_my_account: "Kustuta oma konto"
890
  button_close_dialog: Close
890 891

  
891 892
  status_active: "aktiivne"
892 893
  status_registered: "registreeritud"
config/locales/eu.yml
777 777
  button_configure: Konfiguratu
778 778
  button_quote: Aipatu
779 779
  button_show: Ikusi
780
  button_close_dialog: Close
780 781

  
781 782
  status_active: gaituta
782 783
  status_registered: izena emanda
config/locales/fa.yml
1198 1198
  button_edit_object: ویرایش %{object_name}
1199 1199
  button_delete_object: حذف %{object_name}
1200 1200
  button_create_and_follow: ساخت و برگشت
1201
  button_close_dialog: Close
1201 1202

  
1202 1203
  status_active: فعال
1203 1204
  status_registered: ثبت‌نام‌شده
config/locales/fi.yml
610 610
  button_copy: Kopioi
611 611
  button_annotate: Lisää selitys
612 612
  button_update: Päivitä
613
  button_close_dialog: Close
613 614

  
614 615
  status_active: aktiivinen
615 616
  status_registered: rekisteröity
config/locales/fr.yml
1078 1078
  button_reopen: Réouvrir
1079 1079
  button_import: Importer
1080 1080
  button_filter: Filtrer
1081
  button_close_dialog: Close
1081 1082

  
1082 1083
  status_active: actif
1083 1084
  status_registered: enregistré
config/locales/gl.yml
183 183
  button_change_password: "Cambiar o contrasinal"
184 184
  button_check_all: "Seleccionalo todo"
185 185
  button_clear: Anular
186
  button_close_dialog: Close
186 187
  button_configure: Configurar
187 188
  button_copy: Copiar
188 189
  button_create: Crear
config/locales/he.yml
805 805
  button_configure: אפשרויות
806 806
  button_quote: צטט
807 807
  button_show: הצג
808
  button_close_dialog: Close
808 809

  
809 810
  status_active: פעיל
810 811
  status_registered: רשום
config/locales/hr.yml
767 767
  button_configure: Konfiguracija
768 768
  button_quote: Navod
769 769
  button_show: Show
770
  button_close_dialog: Close
770 771

  
771 772
  status_active: aktivan
772 773
  status_registered: Registriran
config/locales/hu.yml
651 651
  button_annotate: Jegyzetel
652 652
  button_update: Módosít
653 653
  button_configure: Konfigurál
654
  button_close_dialog: Close
654 655

  
655 656
  status_active: aktív
656 657
  status_registered: regisztrált
config/locales/id.yml
749 749
  button_update: Perbarui
750 750
  button_configure: Konfigur
751 751
  button_quote: Kutip
752
  button_close_dialog: Close
752 753

  
753 754
  status_active: aktif
754 755
  status_registered: terdaftar
config/locales/it.yml
1226 1226
  button_delete_object: "Elimina %{object_name}"
1227 1227
  button_create_and_follow: Crea e segui
1228 1228
  button_apply_issues_filter: Applica filtro segnalazioni
1229
  button_close_dialog: Close
1229 1230

  
1230 1231
  status_active: attivo
1231 1232
  status_registered: registrato
config/locales/ja.yml
864 864
  button_save_object: "%{object_name}を保存"
865 865
  button_edit_object: "%{object_name}を編集"
866 866
  button_delete_object: "%{object_name}を削除"
867
  button_close_dialog: 閉じる
867 868

  
868 869
  status_active: 有効
869 870
  status_registered: 登録
config/locales/ko.yml
765 765
  button_update: 업데이트
766 766
  button_configure: 설정
767 767
  button_quote: 댓글달기
768
  button_close_dialog: Close
768 769

  
769 770
  status_active: 사용중
770 771
  status_registered: 등록대기
config/locales/lt.yml
1029 1029
  button_close: Uždaryti
1030 1030
  button_reopen: Atidaryti iš naujo
1031 1031
  button_import: Importuoti
1032
  button_close_dialog: Close
1032 1033

  
1033 1034
  status_active: aktyvus
1034 1035
  status_registered: užregistruotas
config/locales/lv.yml
774 774
  button_configure: Konfigurēt
775 775
  button_quote: Citāts
776 776
  button_show: Rādīt
777
  button_close_dialog: Close
777 778

  
778 779
  status_active: aktīvs
779 780
  status_registered: reģistrēts
config/locales/mk.yml
795 795
  button_configure: Конфигурирај
796 796
  button_quote: Цитирај
797 797
  button_show: Show
798
  button_close_dialog: Close
798 799

  
799 800
  status_active: активни
800 801
  status_registered: регистрирани
config/locales/mn.yml
780 780
  button_configure: Тохируулах
781 781
  button_quote: Ишлэл
782 782
  button_show: Үзэх
783
  button_close_dialog: Close
783 784

  
784 785
  status_active: идэвхтэй
785 786
  status_registered: бүртгүүлсэн
config/locales/nl.yml
151 151
  button_change_password: Wachtwoord wijzigen
152 152
  button_check_all: Alles selecteren
153 153
  button_clear: Leegmaken
154
  button_close_dialog: Close
154 155
  button_configure: Configureren
155 156
  button_copy: Kopiëren
156 157
  button_create: Aanmaken
config/locales/no.yml
627 627
  button_annotate: Notér
628 628
  button_update: Oppdater
629 629
  button_configure: Konfigurer
630
  button_close_dialog: Close
630 631

  
631 632
  status_active: aktiv
632 633
  status_registered: registrert
config/locales/pl.yml
1217 1217
  button_delete_object: "Usuń %{object_name}"
1218 1218
  button_create_and_follow: Utwórz i przejdź
1219 1219
  button_apply_issues_filter: Zastosuj filtr na liście zagadnień
1220
  button_close_dialog: Close
1220 1221

  
1221 1222
  status_active: aktywny
1222 1223
  status_registered: zarejestrowany
config/locales/pt-BR.yml
671 671
  button_update: Atualizar
672 672
  button_configure: Configurar
673 673
  button_quote: Responder
674
  button_close_dialog: Close
674 675

  
675 676
  status_active: ativo
676 677
  status_registered: registrado
config/locales/pt.yml
655 655
  button_update: Atualizar
656 656
  button_configure: Configurar
657 657
  button_quote: Citar
658
  button_close_dialog: Close
658 659

  
659 660
  status_active: ativo
660 661
  status_registered: registado
config/locales/ro.yml
709 709
  button_update: Actualizează
710 710
  button_configure: Configurează
711 711
  button_quote: Citează
712
  button_close_dialog: Close
712 713

  
713 714
  status_active: activ
714 715
  status_registered: înregistrat
config/locales/ru.yml
269 269
  button_update: Обновить
270 270
  button_view: Просмотреть
271 271
  button_watch: Следить
272
  button_close_dialog: Close
272 273

  
273 274
  default_activity_design: Проектирование
274 275
  default_activity_development: Разработка
config/locales/sk.yml
629 629
  button_annotate: Komentovať
630 630
  button_update: Aktualizovať
631 631
  button_configure: Konfigurovať
632
  button_close_dialog: Close
632 633

  
633 634
  status_active: aktívny
634 635
  status_registered: zaregistrovaný
config/locales/sl.yml
699 699
  button_update: Posodobi
700 700
  button_configure: Konfiguriraj
701 701
  button_quote: Citiraj
702
  button_close_dialog: Close
702 703

  
703 704
  status_active: aktivni
704 705
  status_registered: registriran
config/locales/sq.yml
1152 1152
  button_project_bookmark_delete: Hiqe faqerojtësin
1153 1153
  button_filter: Filtër
1154 1154
  button_actions: Veprime
1155
  button_close_dialog: Close
1155 1156

  
... This diff was truncated because it exceeds the maximum size that can be displayed.
(3-3/3)