feat(js): 复制链接按钮提供短暂已复制反馈(自动恢复)
This commit is contained in:
@@ -615,6 +615,27 @@
|
||||
var btns = document.querySelectorAll('[data-action="copy-link"][data-href]');
|
||||
if(!btns || btns.length === 0){return;}
|
||||
|
||||
function markCopied(btn, ok) {
|
||||
try {
|
||||
var orig = btn.getAttribute('data-orig-text');
|
||||
if (!orig) {
|
||||
orig = String(btn.textContent || '');
|
||||
btn.setAttribute('data-orig-text', orig);
|
||||
}
|
||||
|
||||
var nextText = ok ? '已复制' : '复制失败';
|
||||
btn.textContent = nextText;
|
||||
btn.disabled = true;
|
||||
|
||||
setTimeout(function(){
|
||||
try {
|
||||
btn.textContent = orig;
|
||||
btn.disabled = false;
|
||||
} catch (e) {}
|
||||
}, 1200);
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
btns.forEach(function(btn){
|
||||
btn.addEventListener('click', function(){
|
||||
var href = btn.getAttribute('data-href') || '';
|
||||
@@ -622,11 +643,14 @@
|
||||
|
||||
var abs = absoluteUrl(href);
|
||||
copyToClipboard(abs).then(function(){
|
||||
markCopied(btn, true);
|
||||
|
||||
if (toastSuccess('已复制' + label + '链接')) {
|
||||
return;
|
||||
}
|
||||
try { window.alert('已复制' + label + '链接'); } catch (e) {}
|
||||
}).catch(function(){
|
||||
markCopied(btn, false);
|
||||
try { window.alert('复制失败,请手动复制' + label + '链接'); } catch (e) {}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AdminJsCopyLinkButtonsShouldHaveTemporaryFeedbackLogicTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_admin_js_should_include_temporary_feedback_for_copy_link_buttons(): void
|
||||
{
|
||||
$js = file_get_contents(public_path('js/admin.js'));
|
||||
|
||||
$this->assertIsString($js);
|
||||
|
||||
// 关键口径:复制后按钮短暂变为“已复制/复制失败”,并 disable
|
||||
$this->assertStringContainsString('markCopied', $js);
|
||||
$this->assertStringContainsString("'已复制'", $js);
|
||||
$this->assertStringContainsString("'复制失败'", $js);
|
||||
$this->assertStringContainsString('btn.disabled = true', $js);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user