Project

General

Profile

Feature #29214 » feature-29214-1.patch

Mizuki ISHIKAWA, 2020-03-24 08:10

View differences:

app/views/journals/new.js.erb
11 11
$('#issue_private_notes').prop('checked', true);
12 12
<% end %>
13 13

  
14
addCopyButtonToPreTag();
app/views/journals/update.js.erb
7 7
  $("#journal-<%= @journal.id %>-notes").replaceWith('<%= escape_javascript(render_notes(@journal.issue, @journal, :reply_links => authorize_for('issues', 'edit'))) %>');
8 8
  $("#journal-<%= @journal.id %>-notes").show();
9 9
  $("#journal-<%= @journal.id %>-form").remove();
10
  addCopyButtonToPreTag();
10 11
<% end %>
11 12

  
12 13
<%= call_hook(:view_journals_update_js_bottom, { :journal => @journal }) %>
public/javascripts/application.js
1023 1023
    });
1024 1024
});
1025 1025

  
1026
function addCopyButtonToPreTag() {
1027
  $('.wiki .copy-contents').remove();
1028
  var copyContents =
1029
    $("<div class='copy-contents'>").append(
1030
      $("<button class='code-copy-button' title='Copy' onclick='copyText($(this).parent().next(\"pre\"), $(this).parent());'>")
1031
      .append("<span class='icon-only icon-copy'>")
1032
    );
1033
  $('.wiki pre').before(copyContents);
1034
  $('.code-copy-button[title]').tooltip({
1035
      show: {
1036
        delay: 400
1037
      },
1038
      position: {
1039
        my: "center bottom-5",
1040
        at: "center top"
1041
      }
1042
  });
1043
}
1044

  
1045
function copyText(target, copyEl) {
1046
  // Selecting strings in 2 ways for cross-browser support
1047
  // 1. Use select();
1048
  copyEl.append("<textarea class='tmp'>");
1049
  var tmp = copyEl.find('.tmp');
1050
  tmp.val(target.text());
1051
  tmp.select();
1052

  
1053
  // 2. Use createRange();
1054
  var range = document.createRange();
1055
  range.selectNode(target[0]);
1056
  window.getSelection().removeAllRanges();
1057
  window.getSelection().addRange(range);
1058

  
1059
  // Copy and Cleanup
1060
  var copied = document.execCommand('copy');
1061
  window.getSelection().removeAllRanges();
1062
  tmp.remove();
1063

  
1064
  // Show copied messages
1065
  if (copied){
1066
    copyEl.append("<div class='copied-message'>Copied.</div>");
1067
    var copiedMessage = copyEl.find('.copied-message');
1068
    copiedMessage.show();
1069
    copiedMessage.fadeOut('slow', function() { $(this).remove(); });
1070
  }
1071
}
1072

  
1026 1073
function inlineAutoComplete(element) {
1027 1074
    'use strict';
1028 1075
    // do not attach if Tribute is already initialized
......
1077 1124
$(document).ready(setupAttachmentDetail);
1078 1125
$(document).ready(setupTabs);
1079 1126
$(document).ready(setupFilePreviewNavigation);
1127
$(document).ready(addCopyButtonToPreTag);
1080 1128
$(document).on('focus', '[data-auto-complete=true]', function(event) {
1081 1129
  inlineAutoComplete(event.target);
1082 1130
});
public/stylesheets/application.css
1271 1271

  
1272 1272
div.wiki img {vertical-align:middle; max-width:100%;}
1273 1273

  
1274
.copy-contents {
1275
  position: relative;
1276
}
1277

  
1278
.copy-contents .code-copy-button {
1279
  position: absolute;
1280
  display: flex;
1281
  right: -13px;
1282
  top: 0px;
1283
  border: none;
1284
  background-color: transparent;
1285
}
1286

  
1287
.copy-contents .copied-message {
1288
  position: absolute;
1289
  display: flex;
1290
  right: -13px;
1291
  top: 20px;
1292
  display: none;
1293
  color:#505050;
1294
}
1295

  
1296
.copy-contents .tmp {
1297
  position: fixed;
1298
  left: 200%;
1299
}
1300

  
1274 1301
/***** My page layout *****/
1275 1302
.block-receiver {
1276 1303
  border:1px dashed #fff;
(1-1/2)