Project

General

Profile

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

Takashi Kato, 2025-04-06 10:30

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

  
......
698 703
#issue_tree .issue > td.assigned_to, #relations .issue > td.assigned_to {
699 704
  white-space: nowrap;
700 705
}
701
#trackers_description, #issue_statuses_description {display:none;}
702 706
#trackers_description dt, #issue_statuses_description dt {font-weight: bold; text-decoration: underline;}
703 707
#trackers_description dd, #issue_statuses_description dd {margin: 0; padding: 0 0 1em 0;}
704 708

  
app/helpers/application_helper.rb
1940 1940
    )
1941 1941
  end
1942 1942

  
1943
  def remote_dialog(width: nil, modal: true, title: nil, partial: nil, locals: {}, &block)
1944
    data = {
1945
      controller: 'dialog',
1946
      width: width,
1947
      dialog_modal_value: modal,
1948
      dialog_dispatcher_target: 'show'
1949
    }
1950
    block = -> { render partial: partial, locals: locals } if partial
1951
    render layout: 'common/dialog', locals: { id: nil, title: title, data: data }, formats: [:html], &block
1952
  end
1953

  
1943 1954
  private
1944 1955

  
1945 1956
  def wiki_helper
......
1960 1971
      wiki_pages: auto_complete_wiki_pages_path(project_id: project, q: ''),
1961 1972
    }
1962 1973
  end
1974

  
1975
  def modal_dialog(id, title, data: nil, &block)
1976
    content_for(:modal) { render 'common/dialog', { id: id, title: title, data: data }, &block }
1977
  end
1978

  
1979
  def dialog_dispatcher(element_id, width)
1980
    {
1981
      controller: 'dialog-dispatcher',
1982
      action: 'dialog-dispatcher#show',
1983
      dialog_dispatcher_dialog_outlet: "##{element_id}",
1984
      dialog_dispatcher_width_param: width
1985
    }
1986
  end
1963 1987
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
  static targets = [ 'handler' ]
12
  static values = {
13
    modal: { type: Boolean, default: true },
14
    wrapperId: { type: String, default: 'wrapper' }
15
  }
16

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

  
26
  noop(e) {
27
    e.preventDefault()
28
  }
29

  
30
  start(e) {
31
    if (e.button !== 0) return; // left button only
32

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

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

  
48
  move(e) {
49
    if (!this.dragging) return;
50

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

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

  
59
  get pos() { return this._pos }
60

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

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

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

  
79
  hide(e) {
80
    this.hideDialog()
81
  }
82

  
83
  cancel(e) {
84
    e.preventDefault();
85
    this.hideDialog()
86
  }
87

  
88
  hideDialog() {
89
    this.element.style.display = 'none'
90
    if (this.backdrop !== null) {
91
      this.backdrop.classList.remove('modal-backdrop-open')
92
    }
93
    if (this.wrapper !== null) {
94
      this.wrapper.inert = false
95
    }
96
  }
97
}
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"} 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 'Atom', :key => User.current.atom_key %>
39
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '350px'); return false;" %>
38
  <%= f.link_to_with_query_parameters 'Atom', key: User.current.atom_key %>
39
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '350px') %>
40 40
  <%= f.link_to_with_query_parameters 'PDF' %>
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
129 129
</div>
130 130

  
131 131
<div id="ajax-indicator" style="display:none;"><span><%= l(:label_loading) %></span></div>
132
<div id="ajax-modal" style="display:none;"></div>
133 132

  
134 133
</div>
135 134
<%= call_hook :view_layouts_base_body_bottom %>
135
<div id="modal-backdrop">
136
  <%= yield :modal %>
137
</div>
138
<div id="ajax-modal" data-controller="dialog-dispatcher"></div>
139
<div id="sudo-modal" data-controller="dialog-dispatcher"></div>
136 140
</body>
137 141
</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
33 33
<% other_formats_links do |f| %>
34 34
  <%= f.link_to 'Atom', :url => {:key => User.current.atom_key} %>
35 35
  <% if @query.display_type == 'list' %>
36
    <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '350px'); return false;" %>
36
    <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '350px') %>
37 37
  <% end %>
38 38
<% end %>
39 39

  
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 'Atom', :key => User.current.atom_key %>
33
  <%= f.link_to_with_query_parameters 'CSV', {}, :onclick => "showModal('csv-export-options', '330px'); return false;" %>
32
  <%= f.link_to_with_query_parameters 'Atom', key: User.current.atom_key %>
33
  <%= f.link_to_with_query_parameters 'CSV', {}, data: dialog_dispatcher('csv-export-options', '330px') %>
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/locales/ar.yml
850 850
  button_show: إظهار
851 851
  button_edit_section: تعديل هذا الجزء
852 852
  button_export: تصدير لملف
853
  button_close_dialog: Close
853 854

  
854 855
  status_active: نشيط
855 856
  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
1219 1219
  button_delete_object: Изтриване %{object_name}
1220 1220
  button_create_and_follow: Създаване и продължаване
1221 1221
  button_apply_issues_filter: Прилагане на филтъра
1222
  button_close_dialog: Close
1222 1223

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

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

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

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

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

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

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

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

  
1225 1226
  status_active: active
1226 1227
  status_registered: registered
config/locales/es-PA.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
......
233 234
  button_update: Actualizar
234 235
  button_view: Ver
235 236
  button_watch: Monitorizar
237

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

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

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

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

  
616 617
  status_active: aktiivinen
617 618
  status_registered: rekisteröity
config/locales/fr.yml
1080 1080
  button_reopen: Réouvrir
1081 1081
  button_import: Importer
1082 1082
  button_filter: Filtrer
1083
  button_close_dialog: Close
1083 1084

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  
712 713
  status_active: activ
713 714
  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
628 628
  button_annotate: Komentovať
629 629
  button_update: Aktualizovať
630 630
  button_configure: Konfigurovať
631
  button_close_dialog: Close
631 632

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

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

  
1155 1156
  status_active: aktive
1156 1157
  status_registered: e regjistruar
config/locales/sr-YU.yml
794 794
  button_configure: Podesi
795 795
  button_quote: Pod navodnicima
796 796
  button_show: Prikaži
797
  button_close_dialog: Close
797 798

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