MCPcopy Create free account
hub / github.com/ChinaGodMan/UserScripts / createCopyButton

Function createCopyButton

github-gist-copier/github-gist-copier.user.js:138–264  ·  view source on GitHub ↗
(fileElement)

Source from the content-addressed store, hash-verified

136 }
137
138 function createCopyButton(fileElement) {
139 const fileActionElement = fileElement.querySelector('.file-actions')
140 if (!fileActionElement) {
141 return noop
142 }
143
144 const rawButton = fileActionElement.querySelector('a[href*="/raw/"]')
145 if (!rawButton) {
146 return noop
147 }
148
149 const buttonToDown = document.createElement('button')
150 buttonToDown.className = 'btn-octicon gist-down-button'
151 buttonToDown.style.marginRight = '5px'
152 const button = document.createElement('button')
153 button.className = 'btn-octicon gist-copy-button'
154 button.style.marginRight = '5px'
155 buttonToDown.innerHTML = `
156 <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-down">
157 <path d="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"></path>
158 <path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path>
159 </svg>
160
161 <svg style="display: none;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
162 <path d="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"></path>
163 </svg>
164 `
165
166 button.innerHTML = `
167 <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy">
168 <path d="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"></path><path d="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"></path>
169 </svg>
170
171 <svg style="display: none;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success">
172 <path d="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"></path>
173 </svg>
174 `
175
176 const copyIcon = button.querySelector('.octicon-copy')
177 const checkIcon = button.querySelector('.octicon-check')
178 const downIcon = buttonToDown.querySelector('.octicon-down')
179 const downcheckIcon = buttonToDown.querySelector('.octicon-check')
180 let timeoutId = null
181 const copyHandler = (e) => {
182 if (timeoutId) {
183 return
184 }
185 e.preventDefault()
186 const rawUrl = rawButton.href
187 GM_xmlhttpRequest({
188 method: 'GET',
189 url: rawUrl,
190 onload: function (response) {
191 if (response.status === 200) {
192 navigator.clipboard.writeText(response.responseText).then(() => {
193 copyIcon.style.display = 'none'
194 checkIcon.style.display = 'inline-block'
195 timeoutId = setTimeout(() => {

Callers

nothing calls this directly

Calls 1

downHandlerFunction · 0.85

Tested by

no test coverage detected