티스토리 hello스킨 코드블럭 라인넘버 + 복사버튼 적용법

hello스킨 코드블럭 스타일 적용

 

hello티스토리 편집 code highlight 적용안될때 해결법 | 코드블럭 스타일 적용하기

HELLO스킨 코드블럭 스타일적용 2023.01.08일 자로 hello스킨을 무료로 배포해주셔서 수정하여 잘 사용하고 있습니다 다만 코드블럭(codeblock)을 사용할 때 하얀색으로 나오거나 배경색이 맘에 들지 않

newstroyblog.tistory.com

티스토리에서 개발관련 게시물을 작성하다 보면 코드블럭의 스타일을 사용하면 사용자에게 조금 더 시각적으로 보기 좋은 코드를 제공합니다.

 

코드블럭의 다양한 스타일을 적용하기 위해서는 code highlight를 사용하면 되지만 hello스킨의 일부 버전에서는 적용되지 않을 수 있습니다. 이럴 때는 제가 작성한 게시물 내용을 확인하여 적용해 주시면 됩니다.

 

티스토리 플러그인의 '코드 문법 강조'플러그인은 테마 적용 시에 충돌이 일어나 제대로 적용이 안 되는 경우도 있으니 사용을 안 하시는 걸 권해드립니다.

 

 

hello스킨 코드블럭 라인넘버 추가하기

코드블럭 좌측에 코드에 대응하는 라인넘버를 붙여주면 글을 작성할 때 몇 번째 라인의 어떤 내용인지 조금 더 직관적으로 설명할 수 있습니다.

가독성 측면에서도 코드블럭의 라인넘버가 적용되어 있는 게 훨씬 읽기가 좋습니다.

 

 

hello스킨에서 코드블럭 라인넘버를 적용해 보려고 인터넷의 다양한 방법을 찾아봤는데 heglightjs-line-numbers.js 플러그인을 사용하는 방법이 간단했습니다.(깃허브링크)

 

 

hello스킨의 본문 기능 추가 문제

깃허브에 나와있는 CDN의 두 번째 코드를 티스토리 스킨편집의 </head> 바로 위에 넣으면 됩니다.

하지만 이렇게 적용하고 새로고침을 해봐도 코드블럭의 라인이 생기지 않습니다. 이 문제 때문에 삽질을 많이 해봤는데 원인은 개발자 스킨 소개페이지에서 확인할 수 있었습니다.

 

hello스킨 개발자 소개 페이지(링크)에서 확인해보면 v4.1 이후부터는 본문에 기능을 추가하는 코드가 작동하지 않을 수도 있다고 안내합니다. 단순히 <script> 태그로 불러오는 게 아니라 <script defer>태그로 스크립트를 불러온 뒤 load 이벤트에 등록하면 해결할 수 있다고 안내하고 있습니다.

 

 

<HTML 코드라인 스크립트 추가 코드>

<!--코드블럭 line-->
<script defer src='//cdn.jsdelivr.net/npm/highlightjs-line-numbers.js@2.8.0/dist/highlightjs-line-numbers.min.js'></script>
<script>
    window.addEventListener('load', () => {
        hljs.initLineNumbersOnLoad()
    })
</script>

...
</head>

그래서 결론적으로 html의 </head>태그 위에 스크립트를 작성해 주면 됩니다. <script defer ...>부터 </script>까지 붙여 넣으시면 됩니다.

 

이제 게시물을 새로고침해보면 코드블럭 좌측에 코드라인번호가 표시됩니다.

라인열과 코드 열의 구분을 위해서 코드블럭 라인의 추가적인 스타일을 CSS에서 부여해 보겠습니다.

 

 

코드블럭 라인 css스타일 적용하기

<CSS 코드블럭 라인 스타일 코드>

/* for block of numbers 코드블럭 라인넘버 설정 */
	.hljs-ln-numbers {
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	text-align: center;
	color: #ccc;
	border-right: 1px solid #CCC;
	vertical-align: top;
	padding-right: 10px !important;
	word-break: keep-all !important;
}
/* for block of code */
.hljs-ln-code {
	padding-left: 10px !important;
}

코드 편집의 CSS편집에 들어가셔서 코드블럭 스타일을 원하는 대로 수정하여 적용해 주시면 됩니다.(style참고

 

 

코드라인과 코드 부분의 경계가 생겨서 아무런 스타일을 적용하지 않을 때와 비교했을 때 코드를 깔끔하게 읽기가 편해졌습니다.

 

 

코드블럭 복사버튼 추가하기

코드의 길이가 길어지면 직접 타이핑이 어려운데 복사 버튼을 통하여 사용자에게 편의성을 제공할 수 있습니다.

사진에 보이시는 우측 상단에 Copy버튼을 추가해 보겠습니다.

 

 

코드블럭의 코드를 복사하기 위해서 clipboard.js (깃허브 링크)를 많이 사용하는데 hello스킨에서의 적용 방법은 조금 다릅니다.

 

 

 

[티스토리] 코드블럭 클립보드로 복사버튼 추가

적용된 후 코드블록에 마우스를 올리면 우측살단에 버튼이 생성된다. 적용 후 모습은 아래와 같다. 적용방법은 아래와 같다. 순차적으로 따라하면 어렵지 않게 적용이 가능하다. 1. 아래 파일을

kangyb.tistory.com

제가 처음에는 내용이 잘 정리된 위 블로그를 참고하여 적용하려고 하였지만 hello스킨에서는 본문의 스타일 변경이 바로 적용되지 않고 <script defer> 태그로 스크립트를 불러온 뒤 load 이벤트에 등록해야 작동 가능합니다.(위의 코드블럭 라인넘버도 마찬가지)

 

 

 

티스토리 코드 블럭에 복사 버튼 추가하기

개요 참고사항 hELLO v.4.2.0을 기준으로 작성되었습니다. 코드 블럭 오른쪽 상단에 블럭 내 전체 내용을 복사할 수 있는 버튼을 생성합니다. 티스토리에 코드를 일종의 아카이브 하듯이 저장하는

mushclam.tistory.com

마침 DO IT ALL님 블로그에서 저와 같이 hello스킨에서 코드 블럭 복사버튼을 추가하려고 하시는 분을 찾아볼 수 있었습니다.

그래서 스크립트를 불러오는 부분은 위의 블로그를 참고하였습니다.

 

DO IT ALL님 블로그도 clipboard.js를 사용하여  hello스킨을 사용하여 적용하였으며 CDN방식으로 자바스크립트 코드를 가져와서 사용하였습니다.

 

<HTML 복사버튼 스크립트 추가 코드>

$(document).ready(function () {
    $('pre[id^="code"],[class="bash"]').each(function (index, e) {
        var link =  document.location.href;
        
        let button = document.createElement('button');
        button.innerText = "Copy";
        button.className = 'copy-button';
        button.style.cursor = 'pointer';
        button.setAttribute('data-clipboard-text', e.innerText + "\n출처 :"+link);
        button.addEventListener('mouseleave', function(event) {
            event.currentTarget.setAttribute('class', 'copy-button');
            event.currentTarget.removeAttribute('copy-message');
        });
        e.appendChild(button);
    });
 
    var clipboard = new ClipboardJS('.copy-button');
    clipboard.on('success', function (e) {
        e.clearSelection();
        e.trigger.setAttribute('class', 'copy-button copy-message');
        e.trigger.setAttribute('copy-message', 'Copied!');
 
        setTimeout(() => {
			$('.copy-button').removeClass('copy-message');
        }, 500);
    });
});

DO IT ALL님 블로그 코드에서 클립보드 복사시 블로그 페이지의 출처 정보도 함께 복사되도록 추가하였습니다.

위 코드는 </body>태그 위에 넣으시면됩니다.

 

 

출처까지 복사되는게 싫다면 아래 코드를 사용하면 됩니다.

더보기
$(document).ready(function () {
    $('pre[id^="code"],[class="bash"]').each(function (index, e) {
        var link =  document.location.href;
        
        let button = document.createElement('button');
        button.innerText = "Copy";
        button.className = 'copy-button';
        button.style.cursor = 'pointer';
        button.setAttribute('data-clipboard-text', e.innerText);
        button.addEventListener('mouseleave', function(event) {
            event.currentTarget.setAttribute('class', 'copy-button');
            event.currentTarget.removeAttribute('copy-message');
        });
        e.appendChild(button);
    });
 
    var clipboard = new ClipboardJS('.copy-button');
    clipboard.on('success', function (e) {
        e.clearSelection();
        e.trigger.setAttribute('class', 'copy-button copy-message');
        e.trigger.setAttribute('copy-message', 'Copied!');
 
        setTimeout(() => {
			$('.copy-button').removeClass('copy-message');
        }, 500);
    });
});

 

CSS 복사 버튼 스타일 코드

/*코드블럭 복사버튼 스킨*/
pre {
  position: relative;
  overflow: visible;
}

pre .copy-button {
  font-family: SUIT, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  opacity: 0;
  position: absolute;
  right: 8px;
  top: 8px;
  padding: 6px 16px;
  color: #fff;
  background-color:#686868 ;
  border-radius: 16px;
  transition: opacity .3s ease-in-out;
  line-height: 100%;
}

pre:hover .copy-button {
  opacity: 1; 
}

pre .copy-button:hover {
  color: #eee;
}

pre .copy-button:active {
  color: rgb(51, 255, 119);
  transition: all ease-in-out 0.1s;
}

.copy-message:before {
  font-family: SUIT, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
  content: attr(copy-message);
  position: absolute;
  left: -100px;
  top: 0px;
  padding: 6px 10px;
  color: #fff;
  background: rgba(224, 224, 224, 0.6); 
  border-radius: 16px;
  line-height: 100%;
}

 

 

코드 복사버튼 주의사항

티스토리 스킨편집 플러그인에서 '저작권자 표시'를 사용하고 있을경우 코드 블럭의 복사버튼을 누르면 코드의 전체 내용이 아닌 출처만 복사됩니다.

 

저작권자 표시 기능을 해제하여 비활성후 사용하셔야 합니다.

Top