Patch #42521 » 0001v2-Add-daialog-controller-and-dialog-dispatcher-control.patch
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 |
- « Previous
- 1
- 2
- 3
- Next »