首页 > 其他分享 >RedMine自定义--新增复制问题标题和链接按钮

RedMine自定义--新增复制问题标题和链接按钮

时间:2024-11-19 10:21:29浏览次数:1  
标签:自定义 -- tempTextArea RedMine 复制 按钮 issue issues icon

前言:Redmine本身的复制链接按钮只能复制问题的链接详情,复制出来的格式是:ip.xxxx/issues/200   这次自定义出来一个按钮,希望可以复制问题的标题和链接,这样发送问题给别人时能先知道这个问题大概是什么

 

一:首先找到redmine菜单栏的代码路径,在:redmine/app/views/issues的_action_menu.html.erb文件

源代码是这样的:

<div class="contextual">
<%= link_to l(:button_edit), edit_issue_path(@issue),
            :onclick => 'showAndScrollTo("update", "issue_notes"); return false;',
            :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
<%= link_to l(:button_log_time), new_issue_time_entry_path(@issue),
            :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %>
<%= watcher_link(@issue, User.current) %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue),
            :class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %>
<%= actions_dropdown do %>
  <%= copy_object_url_link(issue_url(@issue, only_path: false)) %>
  <%= link_to l(:button_delete), issue_path(@issue),
              :data => {:confirm => issues_destroy_confirmation_message(@issue)},
              :method => :delete, :class => 'icon icon-del' if @issue.deletable? %>
<% end %>
</div>

 

可以看到里面有一个复制链接的操作,我们在里面插入一个按钮即可,优化完的代码如下:

<div class="contextual">

<!-- 添加复制按钮,改成按钮元素 -->
  <%= button_to '复制链接和标题', '#', method: :get, id: 'copy-issue-link', class: 'btn btn-primary icon icon-copy', type: 'button' %>

<%= link_to l(:button_edit), edit_issue_path(@issue),
            :onclick => 'showAndScrollTo("update", "issue_notes"); return false;',
            :class => 'icon icon-edit', :accesskey => accesskey(:edit) if @issue.editable? %>
<%= link_to l(:button_log_time), new_issue_time_entry_path(@issue),
            :class => 'icon icon-time-add' if User.current.allowed_to?(:log_time, @project) %>
<%= watcher_link(@issue, User.current) %>
<%= link_to l(:button_copy), project_copy_issue_path(@project, @issue),
            :class => 'icon icon-copy' if User.current.allowed_to?(:copy_issues, @project) && Issue.allowed_target_projects.any? %>
<%= actions_dropdown do %>
  <%= copy_object_url_link(issue_url(@issue, only_path: false)) %>
  <%= link_to l(:button_delete), issue_path(@issue),
              :data => {:confirm => issues_destroy_confirmation_message(@issue)},
              :method => :delete, :class => 'icon icon-del' if @issue.deletable? %>
<% end %>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
  // 获取复制按钮
  const copyButton = document.getElementById('copy-issue-link');

  if (copyButton) {
    copyButton.addEventListener('click', function(event) {
      event.preventDefault(); // 防止默认行为

      // 获取问题的标题和 URL
      const issueTitle = "<%= @issue.subject %>";
      const issueUrl = "<%= issue_url(@issue, only_path: false) %>";

      // 使用换行符将标题和 URL 分开
      const textToCopy = `${issueTitle}\n${issueUrl}`;

      // 创建一个临时的文本区域
      const tempTextArea = document.createElement('textarea');
      tempTextArea.value = textToCopy;

      // 将文本区域添加到文档中
      document.body.appendChild(tempTextArea);

      // 选中文本区域中的文本
      tempTextArea.select();
      tempTextArea.setSelectionRange(0, 99999); // 对于移动设备

      // 执行复制命令
      document.execCommand('copy');

      // 移除临时文本区域
      document.body.removeChild(tempTextArea);

  
    });
  }

});

</script>

使用JS添加一个按钮,前面html直接给按钮文本写死,不需要考虑多语言的问题,用关键字issue.subject获取问题的标题,修改完代码以后,redmine服务重启一次即可生效

复制出来的效果是:

【问题】xxxx问题标题
http://xxx.xxx.xx.xxx:3000/issues/200

 

 

标签:自定义,--,tempTextArea,RedMine,复制,按钮,issue,issues,icon
From: https://www.cnblogs.com/a565810497/p/18554344

相关文章

  • 单变量微积分学习笔记:四则运算求导法则(7)【6】
    公式\((u\pmv)'=u'\pmv'\)\((uv)'=u'v+uv'\)\((\frac{u}{v})'=\frac{u'v-v'u}{v^2}\)证明(导数的定义)\((u\pmv)'=\lim_{\Deltax\to0}\frac{(u(x+\Deltax)\pmv(x+\Deltax))-(u......
  • [ctf]bugku逆向笔记
    学如逆水行舟逆向1、idapro要会使用。2、exeinfo Easy_Re使用IdaPro动态调试,观察esp可以在旁边的IDA-viewESP中看到 选中后,可以快速的导出为list然后使用cyberchef或者python都可以快速处理。 ......
  • 存储快照原理
    快照有COW(CopyOnWrite,写时复制)和ROW(RedirectOnWrite,写重定向)两种实现方式。1.COWCOW(Copy-On-Write),写时拷贝,也称为写前拷贝。创建快照,如果源卷的数据发生了变化,快照系统会将原始数据拷贝到快照卷上的数据块中,然后再对源卷进行改写;OW快照在初始化的过程中仅创建用来描述......
  • SpringBoot心理树洞在线公益网站hu239 本系统(程序+源码+数据库+调试部署+开发环境)带论
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:学生,心理老师,咨询预约开题报告内容一、研究背景与意义随着现代生活节奏的加快,越来越多的人面临着心理压力和困扰。然而,由于种种原因,很多人并不愿意......
  • python爬虫-使用requests库和BeautifuSoup库爬取静态网页
    目前在自学python中,作此记录,欢迎交流。此次练手对象为爬取中国大学排名内容并进行输出;总的思路如下:1、选取一个网站,观察所需要的信息位置网站链接:中国大学排名_高校排名_中国大学排行榜-中国教育在线当前页面右键鼠标,选择查看源代码,观察所需内容位置:可以看到内容保存在d......
  • 树分治全家桶
    树分治全家桶树,(是一种益于保护环境植物)是图论当中的一种特殊图,由于(绿化环境的作用非常优秀)特殊性质丰富,经常出现在我们身边。本文将主要介绍(如何植树)一种树上优美的暴力——树分治。树分治树分治可以将部分暴力降至\(O(\logn)\)至\(O(\log^2n)\)级别,适用于树上路径的相......
  • JAVA WEB 实现文件夹上传(保留目录结构)分享
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • 微信小程序开发环境准备
    导入项目运行小程序准备 Windows环境安装配置nodejs详细教程 原文地址https://www.cnblogs.com/xianz666/p/18433144下载地址:https://www.nodejs.com.cn/download.html 微信开发者工具官网 https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html......
  • 王爽汇编笔记
    1.测试环境1.1DosBox简介:模拟dos环境的一个软件下载地址:https://www.dosbox.com/download.php?main=1安装步骤:下一步......问题1:'debug'不是内部或外部命令,也不是可运行的程序或批处理文件。debug:无法将“debug”项识别为cmdlet、函数、脚本文件或可运行程序的名......
  • SPRINGBOOT项目实现断点续传功能
    前端:vue2,vue3,vue-cli,webuploader,html5后端:SpringBoot数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产化数据库协议:HTTPWebServer:Tomcat,Resin服务器:Linux,国产化系统功能:大文件上传,断点续传,秒传,加密传输,加密存储,文件夹上传,文件夹层级结构技术:支持第三方软件集......