Feature #5953 » 0001-WIP.patch
| app/assets/stylesheets/application.css | ||
|---|---|---|
| 1975 | 1975 |
box-shadow: none; |
| 1976 | 1976 |
white-space: pre-wrap; |
| 1977 | 1977 |
pointer-events: none; |
| 1978 |
opacity: 1; |
|
| 1978 | 1979 |
} |
| 1979 | 1980 | |
| 1980 | 1981 |
/***** SVG Icons *****/ |
| ... | ... | |
| 2548 | 2549 |
padding: 0.5rem; |
| 2549 | 2550 |
width: calc(200px - 0.5rem * 2); |
| 2550 | 2551 |
} |
| 2552 | ||
| 2553 |
.input-group {
|
|
| 2554 |
display: flex; |
|
| 2555 |
align-items: stretch; |
|
| 2556 |
column-gap: 0.5rem; |
|
| 2557 |
row-gap: 1rem; |
|
| 2558 |
margin-right: 10px; |
|
| 2559 |
} |
|
| 2560 | ||
| 2561 |
.input-group input {
|
|
| 2562 |
width: 100%; |
|
| 2563 |
} |
|
| 2564 | ||
| 2565 |
.copy-button-wrapper {
|
|
| 2566 |
position: relative; |
|
| 2567 |
display: flex; |
|
| 2568 |
gap: 5px; |
|
| 2569 |
} |
|
| 2570 | ||
| 2571 |
.copy-tooltip {
|
|
| 2572 |
position: absolute; |
|
| 2573 |
bottom: 110%; /* Position it above the button */ |
|
| 2574 |
left: 50%; |
|
| 2575 |
transform: translateX(-50%); |
|
| 2576 |
padding: 0.4rem 0.6rem; |
|
| 2577 |
white-space: nowrap; |
|
| 2578 |
transition: opacity 0.2s ease-in-out; |
|
| 2579 |
} |
|
| app/views/my/_sidebar.html.erb | ||
|---|---|---|
| 20 | 20 | |
| 21 | 21 |
<% if Setting.rest_api_enabled? %> |
| 22 | 22 |
<h4><%= l(:label_api_access_key) %></h4> |
| 23 |
<div> |
|
| 24 |
<%= link_to l(:button_show), my_api_key_path, :remote => true %> |
|
| 25 |
<pre id='api-access-key' class='autoscroll'></pre> |
|
| 23 | ||
| 24 |
<div class="input-group" data-controller="input-copyable"> |
|
| 25 |
<%= password_field_tag "input_copyable", @user.api_key, readonly: true, data: { input_copyable_target: "input" } %>
|
|
| 26 |
<div class="copy-button-wrapper"> |
|
| 27 |
<a href="" class="icon" data-action="input-copyable#toggleVisibility" data-api-key-target="toggleButton"> |
|
| 28 |
<%= sprite_icon('watch', l(:button_copy), icon_only: true) %>
|
|
| 29 |
</a> |
|
| 30 |
<a href="" class="icon" data-action="input-copyable#copy"> |
|
| 31 |
<%= sprite_icon('copy', l(:button_copy), icon_only: true) %>
|
|
| 32 |
</a> |
|
| 33 |
<span class="ui-tooltip copy-tooltip hidden" data-input-copyable-target="tooltip"> |
|
| 34 |
<%= l(:label_copied).capitalize %> |
|
| 35 |
</span> |
|
| 36 |
</div> |
|
| 26 | 37 |
</div> |
| 27 |
<%= javascript_tag("$('#api-access-key').hide();") %>
|
|
| 38 | ||
| 28 | 39 |
<p> |
| 29 | 40 |
<% if @user.api_token %> |
| 30 |
<%= l(:label_api_access_key_created_on, distance_of_time_in_words(Time.now, @user.api_token.created_on)) %> |
|
| 41 |
<%= l(:label_api_access_key_created_on, distance_of_time_in_words(Time.now, @user.api_token.created_on)) %>
|
|
| 31 | 42 |
<% else %> |
| 32 |
<%= l(:label_missing_api_access_key) %> |
|
| 43 |
<%= l(:label_missing_api_access_key) %>
|
|
| 33 | 44 |
<% end %> |
| 34 |
(<%= link_to l(:button_reset), my_api_key_path, :method => :post %>) |
|
| 45 |
(<%= link_to l(:button_reset), my_api_key_path, :method => :post %>)
|
|
| 35 | 46 |
</p> |
| 36 | 47 |
<% end %> |
| app/views/my/show_api_key.js.erb | ||
|---|---|---|
| 1 |
$('#api-access-key').html('<%= escape_javascript @user.api_key %>').toggle();
|
|
| config/routes.rb | ||
|---|---|---|
| 94 | 94 |
match 'my/page', :controller => 'my', :action => 'page', :via => :get |
| 95 | 95 |
post 'my/page', :to => 'my#update_page' |
| 96 | 96 |
match 'my', :controller => 'my', :action => 'index', :via => :get # Redirects to my/page |
| 97 |
get 'my/api_key', :to => 'my#show_api_key', :as => 'my_api_key' |
|
| 98 | 97 |
post 'my/api_key', :to => 'my#reset_api_key' |
| 99 | 98 |
post 'my/atom_key', :to => 'my#reset_atom_key', :as => 'my_atom_key' |
| 100 | 99 |
match 'my/password', :controller => 'my', :action => 'password', :via => [:get, :post] |