Confluence:复制到剪贴板按钮
Confluence: copy to clipboard button
我正在使用 Confluence 5.10.8。在某些页面上,我有几个文本片段要通过 reader 复制到剪贴板。对于这些文本片段中的每一个,我都希望能够添加一个不可编辑的文本字段和一个按钮,以便在单击它时将文本复制到剪贴板,可能是这样的:
我还需要一些视觉反馈来表明文本已被复制。
我认为 user macro 是正确的做法,对吧?像(还没有复制):
## @param Text:title=Text|type=string|required=true|desc=The text to be displayed and copied
<!-- font-awesome contains the clipboard icon -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<span style="white-space: nowrap">
<input type="text" value="$paramText" size="$paramText.length()" readonly>
<button class="fa fa-clipboard" title="click to copy">
</span>
我使用 clipboard.js 解决了这个问题。我不确定为什么,但是将 <script>
标记直接添加到宏时它不起作用。所以我将它添加到:
Confluence 管理 → 自定义 HTML → 编辑 ( /admin/editcustomhtml.action ) → 在 BODY 的末尾
<!-- used by copy-text user macro to copy stuff to the clipboard -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.1/clipboard.min.js"></script>
Confluence 管理→用户宏(/admin/usermacros.action)→创建用户宏
## Macro title: text to copy
## Macro has a body: Y
## Body processing: Rendered
##
## Developed by: https://whosebug.com/users/1948252/
## Date created: 2018-06-28
## @param AllowLineWrap:type=boolean|default=false
## strip tags (in case they were pasted) to remove any formatting
#set ($body = $body.replaceAll("<.*?>",""))
#if ($paramAllowLineWrap == true)
#set ($whitespace = "normal")
#else
#set ($whitespace = "nowrap")
#end
<!-- for the clipboard icon etc. -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script>
window.onload=function()
{
var clipboard = new ClipboardJS('.copy-text-button');
clipboard.on("success", function(e)
{
console.log(e);
var button = $(e.trigger);
var title = button.prop("title");
button.addClass("fa-check-square");
button.html(" copied to clipboard");
function reset()
{
button.removeClass("fa-check-square")
button.html("");
}
window.setTimeout(reset, 5000);
});
clipboard.on('error', function(e) { console.log(e); });
}
</script>
<span class="panel" style="white-space: $whitespace;font-family:monospace;font-size:1em">
<span class="panelContent">$body</span>
<button class="copy-text-button fa fa-clipboard" data-clipboard-text="$body" title="click to copy">
</span>
备注:
在我的第一次尝试中,我使用了一个参数但没有正文。但随着它的转动
out,模板变量不能用在宏参数中。所以
宏的使用非常有限。因此我删除了
参数并启用主体。
Body Processing 必须设置为 Rendered。我还尝试了其他选项(Escaped 和 Unrendered),但它们不能与模板变量一起使用。
我用一个简单的跨度替换了初始文本字段,以便能够启用换行。这也解决了正文中 "
个字符的问题。
我用那个很棒的字体 <link>
有一些图标(剪贴板和
检查广场)。在第一次尝试时,我添加了 <link>
自定义 HTML 页面上的字段(因为还有剪贴板
<script>
),但是宏预览没有图标,因此看起来
破碎的。所以我决定直接把它添加到宏中。
在编辑合流页面时,您可以将其与
Ctrl+Shift+A然后输入
宏名称。似乎适用于同一页面上的多次使用。
也适用于模板参数。
我正在使用 Confluence 5.10.8。在某些页面上,我有几个文本片段要通过 reader 复制到剪贴板。对于这些文本片段中的每一个,我都希望能够添加一个不可编辑的文本字段和一个按钮,以便在单击它时将文本复制到剪贴板,可能是这样的:
我还需要一些视觉反馈来表明文本已被复制。
我认为 user macro 是正确的做法,对吧?像(还没有复制):
## @param Text:title=Text|type=string|required=true|desc=The text to be displayed and copied
<!-- font-awesome contains the clipboard icon -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<span style="white-space: nowrap">
<input type="text" value="$paramText" size="$paramText.length()" readonly>
<button class="fa fa-clipboard" title="click to copy">
</span>
我使用 clipboard.js 解决了这个问题。我不确定为什么,但是将 <script>
标记直接添加到宏时它不起作用。所以我将它添加到:
Confluence 管理 → 自定义 HTML → 编辑 ( /admin/editcustomhtml.action ) → 在 BODY 的末尾
<!-- used by copy-text user macro to copy stuff to the clipboard -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.1/clipboard.min.js"></script>
Confluence 管理→用户宏(/admin/usermacros.action)→创建用户宏
## Macro title: text to copy
## Macro has a body: Y
## Body processing: Rendered
##
## Developed by: https://whosebug.com/users/1948252/
## Date created: 2018-06-28
## @param AllowLineWrap:type=boolean|default=false
## strip tags (in case they were pasted) to remove any formatting
#set ($body = $body.replaceAll("<.*?>",""))
#if ($paramAllowLineWrap == true)
#set ($whitespace = "normal")
#else
#set ($whitespace = "nowrap")
#end
<!-- for the clipboard icon etc. -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script>
window.onload=function()
{
var clipboard = new ClipboardJS('.copy-text-button');
clipboard.on("success", function(e)
{
console.log(e);
var button = $(e.trigger);
var title = button.prop("title");
button.addClass("fa-check-square");
button.html(" copied to clipboard");
function reset()
{
button.removeClass("fa-check-square")
button.html("");
}
window.setTimeout(reset, 5000);
});
clipboard.on('error', function(e) { console.log(e); });
}
</script>
<span class="panel" style="white-space: $whitespace;font-family:monospace;font-size:1em">
<span class="panelContent">$body</span>
<button class="copy-text-button fa fa-clipboard" data-clipboard-text="$body" title="click to copy">
</span>
备注:
在我的第一次尝试中,我使用了一个参数但没有正文。但随着它的转动 out,模板变量不能用在宏参数中。所以 宏的使用非常有限。因此我删除了 参数并启用主体。
Body Processing 必须设置为 Rendered。我还尝试了其他选项(Escaped 和 Unrendered),但它们不能与模板变量一起使用。
我用一个简单的跨度替换了初始文本字段,以便能够启用换行。这也解决了正文中
"
个字符的问题。我用那个很棒的字体
<link>
有一些图标(剪贴板和 检查广场)。在第一次尝试时,我添加了<link>
自定义 HTML 页面上的字段(因为还有剪贴板<script>
),但是宏预览没有图标,因此看起来 破碎的。所以我决定直接把它添加到宏中。在编辑合流页面时,您可以将其与 Ctrl+Shift+A然后输入 宏名称。似乎适用于同一页面上的多次使用。 也适用于模板参数。