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 »