添加代码复制按钮
This commit is contained in:
parent
1ff10bc070
commit
f2916398ce
21
Gmeek.py
21
Gmeek.py
@ -30,7 +30,9 @@ IconBase={
|
||||
"upload":"M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z M11.78 4.72a.749.749 0 1 1-1.06 1.06L8.75 3.811V9.5a.75.75 0 0 1-1.5 0V3.811L5.28 5.78a.749.749 0 1 1-1.06-1.06l3.25-3.25a.749.749 0 0 1 1.06 0l3.25 3.25Z",
|
||||
"github":"M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z",
|
||||
"home":"M6.906.664a1.749 1.749 0 0 1 2.187 0l5.25 4.2c.415.332.657.835.657 1.367v7.019A1.75 1.75 0 0 1 13.25 15h-3.5a.75.75 0 0 1-.75-.75V9H7v5.25a.75.75 0 0 1-.75.75h-3.5A1.75 1.75 0 0 1 1 13.25V6.23c0-.531.242-1.034.657-1.366l5.25-4.2Zm1.25 1.171a.25.25 0 0 0-.312 0l-5.25 4.2a.25.25 0 0 0-.094.196v7.019c0 .138.112.25.25.25H5.5V8.25a.75.75 0 0 1 .75-.75h3.5a.75.75 0 0 1 .75.75v5.25h2.75a.25.25 0 0 0 .25-.25V6.23a.25.25 0 0 0-.094-.195Z",
|
||||
"sync":"M1.705 8.005a.75.75 0 0 1 .834.656 5.5 5.5 0 0 0 9.592 2.97l-1.204-1.204a.25.25 0 0 1 .177-.427h3.646a.25.25 0 0 1 .25.25v3.646a.25.25 0 0 1-.427.177l-1.38-1.38A7.002 7.002 0 0 1 1.05 8.84a.75.75 0 0 1 .656-.834ZM8 2.5a5.487 5.487 0 0 0-4.131 1.869l1.204 1.204A.25.25 0 0 1 4.896 6H1.25A.25.25 0 0 1 1 5.75V2.104a.25.25 0 0 1 .427-.177l1.38 1.38A7.002 7.002 0 0 1 14.95 7.16a.75.75 0 0 1-1.49.178A5.5 5.5 0 0 0 8 2.5Z"
|
||||
"sync":"M1.705 8.005a.75.75 0 0 1 .834.656 5.5 5.5 0 0 0 9.592 2.97l-1.204-1.204a.25.25 0 0 1 .177-.427h3.646a.25.25 0 0 1 .25.25v3.646a.25.25 0 0 1-.427.177l-1.38-1.38A7.002 7.002 0 0 1 1.05 8.84a.75.75 0 0 1 .656-.834ZM8 2.5a5.487 5.487 0 0 0-4.131 1.869l1.204 1.204A.25.25 0 0 1 4.896 6H1.25A.25.25 0 0 1 1 5.75V2.104a.25.25 0 0 1 .427-.177l1.38 1.38A7.002 7.002 0 0 1 14.95 7.16a.75.75 0 0 1-1.49.178A5.5 5.5 0 0 0 8 2.5Z",
|
||||
"copy":"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z",
|
||||
"check":"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"
|
||||
}
|
||||
######################################################################################
|
||||
class GMEEK():
|
||||
@ -191,15 +193,19 @@ class GMEEK():
|
||||
postBase["postSourceUrl"]=issue["postSourceUrl"]
|
||||
postBase["repoName"]=options.repo_name
|
||||
|
||||
if "highlight" in post_body:
|
||||
postBase["highlight"]=1
|
||||
else:
|
||||
postBase["highlight"]=0
|
||||
|
||||
if issue["labels"][0] in self.blogBase["singlePage"]:
|
||||
postBase["bottomText"]=''
|
||||
|
||||
keys=['sun','moon','sync','home','github']
|
||||
if '<pre class="notranslate">' in post_body:
|
||||
keys=['sun','moon','sync','home','github','copy','check']
|
||||
if '<div class="highlight' in post_body:
|
||||
postBase["highlight"]=1
|
||||
else:
|
||||
postBase["highlight"]=2
|
||||
else:
|
||||
keys=['sun','moon','sync','home','github']
|
||||
postBase["highlight"]=0
|
||||
|
||||
postIcon=dict(zip(keys, map(IconBase.get, keys)))
|
||||
self.renderHtml('post.html',postBase,{},issue["htmlDir"],postIcon)
|
||||
print("create postPage title=%s file=%s " % (issue["postTitle"],issue["htmlDir"]))
|
||||
@ -320,7 +326,6 @@ class GMEEK():
|
||||
self.blogBase[listJsonName][postNum]=json.loads('{}')
|
||||
self.blogBase[listJsonName][postNum]["htmlDir"]=gen_Html
|
||||
self.blogBase[listJsonName][postNum]["labels"]=[label.name for label in issue.labels]
|
||||
# self.blogBase[listJsonName][postNum]["labelColor"]=self.labelColorDict[issue.labels[0].name]
|
||||
self.blogBase[listJsonName][postNum]["postTitle"]=issue.title
|
||||
self.blogBase[listJsonName][postNum]["postUrl"]=urllib.parse.quote(gen_Html[len(self.root_dir):])
|
||||
|
||||
|
||||
@ -26,6 +26,18 @@
|
||||
body {padding: 8px;}
|
||||
.postTitle{font-size:24px;}
|
||||
}
|
||||
{% if blogBase['highlight']!=0 -%}
|
||||
.copy-feedback {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 50px;
|
||||
color: var(--color-fg-on-emphasis);
|
||||
background-color: var(--color-fg-muted);
|
||||
border-radius: 3px;
|
||||
padding: 5px 8px;
|
||||
font-size: 12px;
|
||||
}{% endif %}
|
||||
</style>
|
||||
{{ blogBase['style'] }}
|
||||
|
||||
@ -115,6 +127,74 @@ function iFrameLoading(){
|
||||
}
|
||||
}
|
||||
{%- endif %}
|
||||
|
||||
{% if blogBase['highlight']!=0 -%}
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const createClipboardHTML = (codeContent, additionalClasses = '') => `
|
||||
<pre class="notranslate"><code class="notranslate">${codeContent}</code></pre>
|
||||
<div class="clipboard-container position-absolute right-0 top-0 ${additionalClasses}">
|
||||
<clipboard-copy class="ClipboardButton btn m-2 p-0" role="button" style="display: inherit;">
|
||||
<svg height="16" width="16" class="octicon octicon-copy m-2"><path d="${IconList["copy"]}"></path></svg>
|
||||
<svg height="16" width="16" class="octicon octicon-check color-fg-success m-2 d-none"><path d="${IconList["check"]}"></path></svg>
|
||||
</clipboard-copy>
|
||||
<div class="copy-feedback">Copied!</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
const handleCodeElements = (selector = '') => {
|
||||
document.querySelectorAll(selector).forEach(codeElement => {
|
||||
const codeContent = codeElement.innerHTML;
|
||||
const newStructure = document.createElement('div');
|
||||
newStructure.className = 'snippet-clipboard-content position-relative overflow-auto';
|
||||
newStructure.innerHTML = createClipboardHTML(codeContent);
|
||||
|
||||
const parentElement = codeElement.parentElement;
|
||||
if (selector.includes('highlight')) {
|
||||
parentElement.insertBefore(newStructure, codeElement.nextSibling);
|
||||
parentElement.removeChild(codeElement);
|
||||
} else {
|
||||
parentElement.parentElement.replaceChild(newStructure, parentElement);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
handleCodeElements('pre.notranslate > code.notranslate');
|
||||
handleCodeElements('div.highlight > pre.notranslate');
|
||||
|
||||
let currentFeedback = null;
|
||||
document.querySelectorAll('clipboard-copy').forEach(copyButton => {
|
||||
copyButton.addEventListener('click', () => {
|
||||
const codeContent = copyButton.closest('.snippet-clipboard-content').innerText;
|
||||
const tempTextArea = document.createElement('textarea');
|
||||
tempTextArea.value = codeContent;
|
||||
document.body.appendChild(tempTextArea);
|
||||
tempTextArea.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(tempTextArea);
|
||||
|
||||
const copyIcon = copyButton.querySelector('.octicon-copy');
|
||||
const checkIcon = copyButton.querySelector('.octicon-check');
|
||||
const copyFeedback = copyButton.nextElementSibling;
|
||||
|
||||
if (currentFeedback && currentFeedback !== copyFeedback) {currentFeedback.style.display = 'none';}
|
||||
currentFeedback = copyFeedback;
|
||||
|
||||
copyIcon.classList.add('d-none');
|
||||
checkIcon.classList.remove('d-none');
|
||||
copyFeedback.style.display = 'block';
|
||||
copyButton.style.borderColor = 'var(--color-success-fg)';
|
||||
|
||||
setTimeout(() => {
|
||||
copyIcon.classList.remove('d-none');
|
||||
checkIcon.classList.add('d-none');
|
||||
copyFeedback.style.display = 'none';
|
||||
copyButton.style.borderColor = '';
|
||||
}, 2000);
|
||||
});
|
||||
});
|
||||
});
|
||||
{%- endif %}
|
||||
|
||||
</script>
|
||||
{{ blogBase['script'] }}
|
||||
{% endblock %}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user