Kopyala butonlu Kod Vurgulayıcı

kopyala düğmeli vurgulayıcı jquery olmadan saf js

Kopyalama düğmesi de dahil olmak üzere highlight.js kullanılarak optimize edilmiş kod vurgulayıcı

jquery olmadan kopyala düğmesi ile kod vurgulayıcıyı vurgulayın

Geliştirme ile ilgilenen bir blogunuz varsa, muhtemelen kullanıcılarınıza kod göstermek zorunda kalmışsınızdır. Bu nedenle bugün size, yalnızca gerektiğinde kodu yükleyecek şekilde optimize edilmiş kopyalama düğmeli bir kod vurgulayıcıyı nasıl ekleyeceğinizi göstereceğim.

Kurulum

Öncelikle aşağıdaki stilleri projenize dahil etmeniz gerekecektir. Örneğin, WordPress kullanıyorsanız bunları style.css dosyasına dahil edebilirsiniz. Blogger'da şablondaki CSS Ekle seçeneğini kullanmalısınız. Diğer herkes için sitenizin <head> bölümüne ekleyebilirsiniz.


pre {
  --copy-text: "Copy";
  --copied-text: "Copied!";
  --code-bg: #2a2833;
  --code-color: #9a92be;
  --code-color-comment: #787878;
  --code-color-string: #ffcd81;
  --code-color-selector: #a38eff;
  --code-color-property: #a38eff;
  --code-color-tag: #6a6684;
  --code-color-tag-name: #eeebfe;
  --code-color-attr: #c3b6ff;
  --code-color-class: #eeebff;
  --code-color-number: #ffcd95;
  position: relative;
  font-family: SFMono-Regular, monospace;
}

pre > code {
  background-color: var(--code-bg);
  color: var(--code-color);
  display: block;
  overflow-x: auto;
  white-space: pre;
  padding: 1.5rem;
  border-radius: 0.5rem;
}

.hljs-copy {
  position: absolute;
  border: 0 none;
  inset: 0.5rem 0.5rem auto auto;
  padding: 0.5rem 0.75rem;
  background-color: rgba(0, 0, 0, 0.5);
  color: #fff;
  cursor: pointer;
  border-radius: 0.5rem;
  transition: 0.3s background-color;
  font-size: 14px;
}

.hljs-copy:hover { background-color: rgba(0, 0, 0, 0.75) }
.hljs-copy::before { content: var(--copy-text) }
.hljs-copy.is-copied::before { content: var(--copied-text) }

.hljs-name,
.hljs-section { color: var(--code-color-tag-name) }
.hljs-tag { color: var(--code-color-tag) }
.hljs-selector-class { color: var(--code-color-class) }
.hljs-number { color: var(--code-color-number) }

.hljs-comment,
.hljs-meta { color: var(--code-color-comment) }

.hljs-emphasis,
.hljs-quote,
.hljs-string,
.hljs-strong,
.hljs-template-variable,
.hljs-variable { color: var(--code-color-string) }

.hljs-keyword,
.hljs-selector-tag,
.hljs-type { color: var(--code-color-selector) }

.hljs-attribute,
.hljs-bullet,
.hljs-literal,
.hljs-symbol { color: var(--code-color-property) }

.hljs-attr,
.hljs-selector-attr,
.hljs-selector-id,
.hljs-selector-pseudo,
.hljs-title { color: var(--code-color-attr) }

Şimdi de kopyala düğmesinin eklenmesi ve kod vurgulayıcının yüklenmesiyle ilgilenecek olan betik. Bunu </body> etiketinin üzerine eklemelisiniz ya da main.js dosyanız varsa oraya ekleyebilirsiniz.


<script>/*<![CDATA[*/
async function initHighlight() {
  const loadScript = () => new Promise((resolve, reject) => {
    const script = document.createElement('script')
    script.src = 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js'
    script.onload = resolve
    script.onerror = reject
    document.body.appendChild(script)
  })

  try {
    await loadScript()
    hljs.highlightAll()
  } catch (error) {
    console.error(error)
  }
}

function addCopyButtons (codeBlock) {
  if (!navigator || !navigator.clipboard) return

  const clipboard = navigator.clipboard
  const $button = document.createElement('button')
  $button.className = 'hljs-copy'

  $button.addEventListener('click', function () {
    clipboard.writeText(codeBlock.textContent).then(function () {
      $button.blur()
      $button.classList.add('is-copied')
      $button.disabled = true

      setTimeout(function () {
        $button.disabled = false
        $button.classList.remove('is-copied')
      }, 2000)
    })
  })

  const pre = codeBlock.parentNode
  pre.insertBefore($button, pre.firstChild)
}

function initCodeBlocks () {
  const codeBlocks = document.querySelectorAll('pre > code')
  if (codeBlocks.length === 0) return

  initHighlight()
  
  codeBlocks.forEach(function (codeBlock) {
    addCopyButtons(codeBlock)
  })
}

initCodeBlocks()/*]]>*/
</script>

Bu kodun yaptığı şey, tıklandığında kod içeriğini kopyalayan bir düğme eklemektir. Ayrıca kod vurgulayıcıyı da yükler, ancak her iki eylemi de yalnızca sayfada en az bir kod bloğu olduğunda gerçekleştirir.

Nasıl kullanılır

Bunu kullanmak için sayfanıza bir kod bloğu eklemeniz yeterlidir. Kodun aşağıda gösterildiği gibi bir <pre> ve <code> etiketi içinde olması gerektiğini unutmayın:


<pre><code>
  // Kodunuzu buraya yazın
</code></pre>

Genel olarak highlightJs kullandığınız dili algılar, ancak bunun yeterli olmadığı veya başarısız olduğu durumlarda, bir sınıf kullanarak dili belirtebilirsiniz:


<pre><code class="language-html">
  // Kodunuzu buraya yazın
</code></pre>

Ayrıca, tüm HTML kodlarının dönüştürülmesinin çok önemli olduğunu unutmayın. Bu görevde size yardımcı olmak için kullanabileceğiniz bir html kodu dönüştürücü aracı geliştirdim.

Özelleştir

Kod vurgulayıcıyı özelleştirmek istiyorsanız, bunu CSS kodunun başındaki değişkenleri değiştirerek yapabilirsiniz. Bu değişkenler kod vurgulayıcının renklerini ve diğer önemli stilleri değiştirmekten sorumludur.

Değişken isimleriyle açıklayıcı olmaya çalıştım, ancak herhangi bir sorunuz varsa bana yorumlarda sorabilirsiniz. Merak ediyorsanız, stiller geliştirici Simurai'nin Duotone Dark temasından esinlenmiştir.

Açıklamalar

Makale boyunca <pre> ve <code> bloklarını yalnızca kod görüntülemek için kullandığınız varsayılmıştır. Bu etiketleri başka içerikleri görüntülemek için kullanıyorsanız, bazı değişiklikler yapmanız gerekebilir.

Sonuç

Buraya kopyalama düğmeli bir kod vurgulayıcı eklemek için bir çözüm aramaya geldiyseniz, umarım bu makale size bir şekilde yardımcı olmuştur. Herhangi bir sorunuz veya öneriniz varsa yorumlara bırakabilirsiniz.

Yorum yok