레이블이 업데이트인 게시물을 표시합니다. 모든 게시물 표시
레이블이 업데이트인 게시물을 표시합니다. 모든 게시물 표시

2009년 6월 11일 목요일

BBCode for TiStory 3.1 업데이트: 이모티콘 기능 추가

들어가기에 앞서...

여러분은 티스토리의 이모티콘을 어떻게 생각하시는가?
난 개인적으로 굉장히 불만이다.

이모티콘이 예쁘지 않은 것은 기본인데다, 버그까지 있다.

그냥 서버 쪽에서 이미지만 좀 업데이트해줘도 좋을 것 같지만, 티스토리는 그런 신경 따윈 쓰지 않는다.
그냥 배째라고 앉아있어도 사용자들은 떠나지 않을 것이라 믿는 것 같다.


BBCode는 3.x대에 와서 충분히 안정화되었다고 생각한다.
그래서 가급적이면 업데이트를 자제하려고 했는데, 이놈의 이모티콘은 도저히 용서가 안 된다.
못생기려면 안정적이기라도 해야할 텐데, 이건 그런 개념이 없다.

우선, 아래의 화면을 보자. 이건 이모티콘이 설정된 상태에서 javascript 코드 일부를 답글로 단 화면이다.

사용자 삽입 이미지

); 가 8개나 들어있는 듯한 javascript 코드


이모티콘과 충돌이 난 것 같은가? 아니다.
원래의 내용을 보자.

사용자 삽입 이미지

짜잔~ ); 는 단 하나도 없다!


그냥 "100"); 이라고 썼을 뿐인데, 이걸 "100"[이모티콘];라고 변형을 한 것이다.
위 내용은 정상적으로 변환되면 이모티콘으로 해석될 부분이 단 하나도 없다.

이따위 버그가 없는 이모티콘 기능을 BBCode에 포함했다.
더불어, 이모티콘을 좀 더 예쁜 놈으로 교체했다. 그리고, 3개를 더 추가했다.

사용자 삽입 이미지
:D

사용자 삽입 이미지
:O

사용자 삽입 이미지
:x


따라서 이 BBCode를 사용하시면 2가지를 염두에 두어야 한다.

1. 기본 플러그인 중에서 이모티콘 플러그인은 사용하지 않아야 함
2. 이모티콘은 자동적으로 적용됨


원래 이모티콘은 잘 사용되지 않는 문자 조합으로 만들어진 것이라 고의로 집어넣지 않으면 만날 일은 별로 없다.
(그런 의미에서 --;는 이모티콘으로는 넌센스다. a--;와 같은 형태로 C/C++ 등의 언어에서 쉽게 볼 수 있으니까.)
그래서, 자동으로 적용되는 것이 그렇게 큰 제약은 되지 않을 것이라 생각한다.

아래 파일을 다운받아 설치하면 되며, 설치법은 역시 BBCode for Tistory 2.1을 참고하기 바란다.


덧. 첨부파일엔 bbemo?.gif의 파일 9개가 있다. 이 파일들이 이모티콘이다.


2009년 6월 7일 일요일

BBCode for TiStory 3.0a 마이너 업데이트

사용자 삽입 이미지

도우미는 전혀 바뀌지 않았다


BBCode for TiStory 3.0 업데이트의 마이너 업데이트이다.
BBCode를 3.0으로 업데이트하면서 많은 변화가 생겼다.
그 중 하나가 타이머 방식에서 load, scroll 이벤트에서 동작하는 방식으로 변경되었다는 점이다.

이 변경을 통해 전체적으로 더 가벼워지기를 바랬는데, 그닥 가벼워지지도 않으면서 오히려 가끔 BBCode 변환을 수행하지 않는 경우가 발생하더라.

그래서 다시 타이머를 사용하는 방식으로 회귀했다.
(기존 2.x대의 방식과는 다르게 매 3초마다 댓글을 확인한다)

아래 파일을 다운받아 설치하면 되며, 설치법은 역시 BBCode for Tistory 2.1을 참고하시기 바란다.




2009년 6월 4일 목요일

BBCode 삽입 도우미 만들기 (수정 공개)

Forevler님의 패치를 적용해서 다시 올린다. Forevler님께 다시 한번 감사드린다.

기존 포스팅에서 수정된 내용은 아래와 같다.


1. insertAtCursor() 함수 수정 (버그 패치 및 약간의 속도 증가)
2. 아이콘 링크 인자 수정 (버그 패치)

티스토리에서 BBCode for TiStory 3.0를 통해 BBCode를 사용할 수 있게 만들었다.
하지만, 막상 이걸 입력하려니 의외로 손이 많이 가더라.
(기술이 발달하면 편리성을 가져다준다지만, 더 불편해지는 경우가 훨씬 많다는 거~)

하지만, 스킨을 조금만, 아주 조금만 수정하면 아래와 같은 BBCode 입력 도우미 버튼(이하 도우미)을 달 수 있다.

사용자 삽입 이미지

Forevler님의 버튼 배치를 업어왔습니다. 이게 구성하기도 깔끔하고 예쁘더군요.


1. 추가 파일 설치


일단 아래의 파일을 다운받아 압축을 풉니다. 압축을 풀면 gif 파일 12개가 나온다.
그 파일 12개를 모두 스킨→직접올리기에서 업로드한다.

쉽죠잉?



2. 추가 스타일 지정

다음 먼저 할 일은 버튼 등에 사용될 스타일을 추가하는 것이다.
HTML/CSS 편집 메뉴에서 style.css맨 끝에 아래 내용을 추가한다.

/* BBCode 도우미 버튼들 */
.emoticonborder { border-style: solid; border-width: 1px; border-color: #cbcbcb; padding: 5px; margin: 0 0 7px 0; height: 22px;}
.emoticons { cursor:pointer; float: left; margin:2px 2px 1px 0; }
.emoticonspace { float: left; margin-right:0px; }
.emoticonusage { cursor:pointer; float: right; }
a.rollover img { border-width:0px; display:block; }
a.rollover img.rollover { display:none; }
a.rollover:hover { position:relative; background-color:transparent !important;}
a.rollover:hover img { display:none; }
a.rollover:hover img.rollover { display:block; }



3. skin.html 수정 #1 : javascript 코드 삽입

여기부터는 HTML/CSS 편집 메뉴에서 skin.html 파일을 수정한다.
내용이 길고 약간 (아주 약간) 복잡하므로 셋으로 나누어 올린다.

아래의 javascript 코드를 삽입한다.
삽입 위치는 헤더의 <title> ~ </title> 바로 다음이다.

<script type="text/javascript">
//<![CDATA[
//이모티콘 추가
function insertAtCursor(myField, openTag, closeTag)
{
var box = document.getElementById(myField);
//IE support
if (/msie/i.test (navigator.userAgent))
{
box.focus();
var sel = document.selection.createRange();
sel.text = openTag + sel.text + closeTag;
}
//Mozilla/Firefox/Netscape 7+ support
else
{
var startPos = box.selectionStart;
var endPos = box.selectionEnd;
box.value = box.value.substring(0, startPos) + openTag + box.value.substring(startPos, endPos) + closeTag + box.value.substring(endPos, box.value.length);
box.selectionStart = box.selectionEnd = endPos + openTag.length + closeTag.length;
}
box.focus();
}

function bbcodeintro(){
alert('1. 일반 BBCode \n\n[i]이탤릭[/i] : 이탤릭\n[b]볼드[/b] : 볼드\n[u]밑줄[/u] : 밑줄\n[quote]인용문[/quote] : 인용문\n[img]이미지 URL[/img] 또는 [img=이미지 URL] : 이미지\n[url=http://qaos.com]QAOS[/url] : QAOS (링크)\n[color=red]색깔[/color] : 색깔\n[email=주소]이름[/email] 또는 [email]주소[/email] : 전자우편 주소\n[list][*][/list] : 불릿이 달린 리스트\n\n2. 추가 BBCode\n\n[size=폰트크기]내용[/size] : 글자 크기 지정\n[ru]빨간 밑줄[/ru] : 빨간 밑줄\n[bu]파란 밑줄[/bu] : 파란 밑줄\n[rb]빨간 볼드[/rb] : 빨간 볼드\n[bb]파란 볼드[/bb] : 파란 볼드\n[red]빨간색[/red] : 빨간색\n[blue]파란색[/blue] : 파란색\n[ur=http://qaos.com]QAOS[/ur] : QAOS (링크) \n[link=http://qaos.com]QAOS[/link] : QAOS (링크) \n[c=red]색깔[/c] : 색깔\n[q]인용문[/q] : 인용문\n[embed=주소 (폭) (높이)] 또는 [embed]주소 (폭) (높이)[/embed]: 동영상 embed \n[embed=http://kr.youtube.com/watch?v=sxA2FZANE2o]\n[embed=http://kr.youtube.com/v/sxA2FZANE2o 500 300]\n※ embed에서 폭과 높이는 생략 가능하며, 생략시 425x355로 자동 설정한다.');
}
//]]>
</script>



4. skin.html 수정 #2 : 방명록 수정

티스토리 스킨에는 <textarea> 태그가 2번 사용된다.
하나는 방명록, 다른 하나는 댓글 입력창으로 둘 다 수정해야 한다.

우선은 방명록을 수정하겠다.
아래와 비슷하게 생긴 부분을 찾는다.
<textarea name="[#\#_guest_textarea_body_#\#]" cols="50" rows="6"> </textarea>
여기서 굳이 "비슷하게"란 표현을 쓴 이유는 뒤의 인자가 조금씩 다르기 때문이다.
cols, rows는 대부분 다르고, 가끔은 id가 적혀있는 경우마저 있다.

이곳에 id를 아래와 같이 추가한다.
<textarea name="[#\#_guest_textarea_body_#\#]" id="[#\#_guest_input_comment_#\#]" cols="50" rows="6"> </textarea>
id만 추가한 것인데, 혹시나 다른 id 값이 적혀있었으면 그 내용을 지우고 이것으로 대체하면 된다.



다음으로 할 일은 이 부분 즉, <textarea> 태그 바로 앞에 다음의 내용을 추가하는 것이다.
이 부분이 바로 방명록의 도우미 부분이다.
<div class="emoticonborder" style="/*width:604px;*/">
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[b]','[/b]');return false;" title="진하게" class="rollover">
<strong>가</strong></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[i]','[/i]');return false;" title="기울임" class="rollover">
<em>가</em></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[u]','[/u]');return false;" title="밑줄" class="rollover">
<u>가</u></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[color=red]','[/color]');return false;" title="글자색" class="rollover">
<font color="red">가</font></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[quote]','[/quote]');return false;" title="인용" class="rollover">
"인용"</a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[img]','[/img]');return false;" title="그림 넣기" class="rollover">
<img class="rollover" src="./images/bb_img.gif" align="texttop" class="rollover">
<img src="./images/bb_imgb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','[ur=http://]','[/ur]');return false;" title="하이퍼링크" class="rollover">
<img class="rollover" src="./images/bb_url.gif" align="texttop" class="rollover">
<img src="./images/bb_urlb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('[#\#_guest_input_comment_#\#]','','[embed=주소 폭 넓이]');return false;" title="영상 넣기" class="rollover">
<img class="rollover" src="./images/bb_emb.gif" align="texttop" class="rollover">
<img src="./images/bb_embb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', ':)');return false;" title=":)" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon06.gif">
<img src="./images/bb_emo6.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', ';)');return false;" title=";)" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon01.gif">
<img src="./images/bb_emo1.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', ':P');return false;" title=":P" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon02.gif">
<img src="./images/bb_emo2.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', '8D');return false;" title="8D" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon03.gif">
<img src="./images/bb_emo3.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', ':(');return false;" title=":(" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon04.gif">
<img src="./images/bb_emo4.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('[#\#_guest_input_comment_#\#]', '', '--;');return false;" title="--;" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon05.gif">
<img src="./images/bb_emo5.gif"></a></div>
<div class="emoticonusage">
<a href="#" onClick="bbcodeintro();return false;" title="BBCode 사용법" class="rollover">
<strong>BBCode 사용법</strong></a></span></div>
</div>

맨 앞부분에 주석처리되어 있는 /*width:604px*/ 부분은 스킨에서 폭을 별도로 지정하는 경우엔 적절한 값을 스킨에다 적기 위해 빼놓은 부분이다.
필요시 주석을 제거하고 원하는 값을 지정하면 더 깔끔한 화면을 볼 수 있다.



5. skin.html 수정 #3 : 댓글창 수정

아래와 비슷하게 생긴 부분을 찾는다.
<textarea name="[#\#_rp_input_comment_#\#]" rows="10" cols="50"></textarea>
여기도 앞과 같은 이유로 "비슷하게"란 표현을 썼다.
이곳에 id를 아래와 같이 추가한다.
<textarea name="[#\#_rp_input_comment_#\#]" id="comment_[#\#_article_rep_id_#\#]" rows="10" cols="50"></textarea>
역시 id만 추가한 것인데, 혹시나 다른 id 값이 적혀있었으면 역시 그 내용을 지우고 이것으로 대체하면 된다.

마지막으로 할 일은 이 부분 즉, <textarea> 태그 바로 앞에 다음의 내용을 추가하는 것이다.
이 부분은 댓글창의 도우미 부분이다.
<div class="emoticonborder" style="/*width:604px;*/">
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[b]','[/b]');return false;" title="진하게" class="rollover">
<strong>가</strong></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[i]','[/i]');return false;" title="기울임" class="rollover">
<em>가</em></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[u]','[/u]');return false;" title="밑줄" class="rollover">
<u>가</u></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[color=red]','[/color]');return false;" title="글자색" class="rollover">
<font color="red">가</font></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[quote]','[/quote]');return false;" title="인용" class="rollover">
"인용"</a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[img]','[/img]');return false;" title="그림 넣기" class="rollover">
<img class="rollover" src="./images/bb_img.gif" align="texttop" class="rollover">
<img src="./images/bb_imgb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[ur=http://]','[/ur]');return false;" title="하이퍼링크" class="rollover">
<img class="rollover" src="./images/bb_url.gif" align="texttop" class="rollover">
<img src="./images/bb_urlb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onclick="insertAtCursor('comment_[#\#_article_rep_id_#\#]','[embed=주소 폭 넓이]','[/img]');return false;" title="영상 넣기" class="rollover">
<img class="rollover" src="./images/bb_emb.gif" align="texttop" class="rollover">
<img src="./images/bb_embb.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', ':)');return false;" title=":)" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon06.gif">
<img src="./images/bb_emo6.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', ';)');return false;" title=";)" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon01.gif">
<img src="./images/bb_emo1.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', ':P');return false;" title=":P" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon02.gif">
<img src="./images/bb_emo2.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', '8D');return false;" title="8D" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon03.gif">
<img src="./images/bb_emo3.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', ':(');return false;" title=":(" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon04.gif">
<img src="./images/bb_emo4.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticons">
<a href="#" onClick="insertAtCursor('comment_[#\#_article_rep_id_#\#]', '', '--;');return false;" title="--;" class="rollover">
<img class="rollover" src="http://cfs.tistory.com/blog/plugins/EmoticonOnComment/emoticon05.gif">
<img src="./images/bb_emo5.gif"></a></div>
<div class="emoticonspace">&nbsp;</div>
<div class="emoticonusage">
<a href="#" onClick="bbcodeintro();return false;" title="BBCode 사용법" class="rollover">
<strong>BBCode 사용법</strong></a></div>
</div>


이렇게 수정하면 앞에서 본 것과 같은 도우미를 장착할 수 있다.
그리고, 여기서는 이모티콘 플러그인을 설치한 것으로 가정하고, 이모티콘을 삽입해주는 부분도 함께 구현했다.
만약, 이모티콘을 사용하지 않는 경우에는 적절히 수정해서 사용하시기 바란다.
(게으르니즘이 결코 아니다. 쿨럭)

2009년 5월 19일 화요일

BBCode for TiStory 3.0 업데이트

드디어 BBCode가 v3.0으로 업데이트 되었다!

사용자 삽입 이미지

아이콘이 바뀌고, 댓글 펼침 여부에 대한 옵션이 제거되었다


프로그램의 구조를 대폭 수정한 업데이트이다.

기존 v2.x 버전에서는 BBCode를 변환하는 코드가 스킨 제일 마지막에 들어있었다.
하지만, 원래 javascript의 권장 위치는 헤더 내부이다.
이 문제도 수정할 겸, 다소 복잡하게 되어있던 전체적으로 구성을 정리할 겸 해서 전체적으로 구조를 변경했다.

수정된 내용은 아래와 같다.

1. 속도 향상(아싸!)
2. BBCode 코드 관련 js는 HTML의 헤더에만 위치하도록 수정
3. 코드 구조를 안정적으로 수정
4. 댓글 펼침 여부에 상관없이 같은 방식으로 안정적으로 처리되도록 수정
5. 타이머 방식에서 load, scroll 이벤트에서 동작하는 방식으로 변경[footnote]KUNA님이 수정하신 BBCode+ v2.2의 아이디어를 빌려왔습니다. KUNA님께 감사드립니다.[/footnote]

아래 파일을 다운받아 설치하면 되며, 설치법은 역시 BBCode for Tistory 2.1을 참고하시기 바란다.


이번 버전에서는 스킨 수정방법에도 대대적인 수정이 있었다. 꼭 도우미를 활용해서 스킨을 다시 설정하기 바란다.
BBCode를 해제했다가 다시 적용하셔야 된다.


2009년 5월 15일 금요일

Syntax Highlighter 2.0.320 업데이트

사용자 삽입 이미지


며칠 전(정확히는 5월 3일)에 Syntax Highlighter가 2.0.320으로 업데이트 되었다.
2.0.320을 티스토리에서 사용할 수 있도록 수정한 버전을 공개한다.

아래 파일을 다운받아 설치하면 된다. (상세한 설치방법은 티스토리에 SH 2.0 적용하는 방법을 참고하기 바란다)



덧1. 이번 업데이트에서 수정된 내용은 아래와 같다. (원문: Syntax Highlighter Changes 3.0.20)

1. 속도 향상
2. stripBrs 옵션 추가 (행의 끝에 있는 <br/> 무시)
3. wrap-lines 옵션 추가
4. font-size 인자 제거
5. 마우스 커서가 올라갈 때만 도구 표시
6. 언어팩 추가: ActionScript3, JavaFX, PowerShell
7. 라이센스 정정: LPGL 3.0


덧2. 이 배포판에는 티스토리에 SH 2.0 적용하는 방법 (재게시)에서 수정된 내용이 모두 포함되어 있다.

1. 치환자 입력 가능
2. 언어팩 추가: MSX, AviSynth
3. Copy to Clipboard 버그 수정

2009년 4월 8일 수요일

티스토리에 Syntax Highlighter 2.0 적용하는 방법 (재게시)

사용자 삽입 이미지

티스토리에 Syntax Highlighter 2.0 적용하는 방법에서도 적었듯이, Syntax Highlighter 2.0은 많은 개선이 있었지만, 아이러니하게도, 티스토리에서 널리 사용되는 hi8ar.net님의 화이트보드 스킨에서는 정상동작을 하지 않았습니다.
(그래서 그 포스팅은 2.0을 적용하는 방법을 적은 글이지만, 1.5.1 환경에서 작성되었습니다)

원인은 스킨의 article.css.article code 속성이 shCore.css.syntaxhighlighter code 속성과 충돌하는 것입니다.
이 오류를 해결하려면 shCore.css에 다음 내용을 추가하면 됩니다.
.syntaxhighlighter code
{
    display: inline;
    overflow: visible;
}
직접 패치가 귀찮으면 아래 링크에서 다운받으시면 됩니다.


이 버전은 화이트보드 스킨과의 충돌을 해결한 것 외에도 아래의 기능들을 수정 보완했습니다.

1. 치환자 입력 가능

1.5.1에서도 추가했던 기능입니다. 아래와 같이 입력하면
[#\\#_title_#\\#]
이렇게 치환자를 입력할 수 있습니다.
[#\#_title_#\#]


2. 추가 언어파일 지원

1.5.1에서 추가했던 파일들을 2.0 환경에서 사용할 수 있도록 변환했습니다.
아래와 같이 지정하면 MSXAviSynth의 언어파일을 사용할 수 있습니다.
<script type="text/javascript" src="./images/shBrushMsx.js"></script>
<script type="text/javascript" src="./images/shBrushAvs.js"></script>


3. Copy to Clipboard 버그 수정

Syntax Highlighter 2.0.296은 Copy To Clipboard에서 &nbsp;가 그대로 복사되는 버그가 있습니다.
이 버그를 수정했습니다.

사용자 삽입 이미지

이 문제가 해결되었습니다. ㅡㅡ;



2009년 4월 6일 월요일

티스토리에 Syntax Highlighter 2.0 적용하는 방법

사용자 삽입 이미지

블로그 관련 to-do 리스트에서 공지한 사항 중 하나인 Syntax Highlighter 2.0을 티스토리에서 적용하는 방법입니다.
많은 분들이 관련 글을 올려주셨는데, 이상하게 한 가지는 모두들 빠뜨리시더군요. 그 부분을 포함해서 설명하겠습니다.

우선 2.0이 기존의 1.5.1에 비해 바뀐 부분은 아래와 같습니다.

1. CSS 형식테마 기능
2. 지정된 행의 강조
3. 자동 줄넘김 기능
4. XHTML 표준 준수


이 과정에서 형식이 약간 변경되었습니다.

1. 인자 형식의 변경
   <pre name="code" class="html">의 형식에서 <pre class="brush:html;">의 형식으로 변경되었습니다.

2. 실행 함수 이름과 위치의 변경
   dp.SyntaxHighlighter.HighlightAll('code'); 가 html의 마지막에 위치하는 것에서
   SyntaxHighlighter.all(); 가 html의 헤더에 위치하는 것으로 변경되었습니다.
   (1.5 시절에 입력된 내용을 위해 호환 모드도 지원합니다)

3. <pre>, <textarea> 에서 동작되던 것이 <pre>에서만 동작하도록 변경
   <pre>에서만 동작되며, <textarea> 등의 다른 태그에서 동작시키려면 별도로 지정해야 합니다.


설치 및 사용법은 아래와 같습니다.


1. 관련 파일의 설치

아래 링크에서 다운받은 파일의 압축을 푼 뒤 스킨 올리기 기능을 이용해서 올립니다.


이 파일에는 SH 2.0의 기본 언어 외에 AviSynth 스크립트MSX 베이식 언어 파일이 포함되어 있습니다.


2. 스킨의 수정

스킨 앞부분, 정확히는 </head> 앞부분에 아래의 내용을 추가합니다.
    <script type="text/javascript" src="./images/shCore.js"></script>
    <script type="text/javascript" src="./images/shBrushCpp.js"></script>
    <script type="text/javascript" src="./images/shBrushCSharp.js"></script>
    <script type="text/javascript" src="./images/shBrushCss.js"></script>
    <script type="text/javascript" src="./images/shBrushDelphi.js"></script>
    <script type="text/javascript" src="./images/shBrushDiff.js"></script>
    <script type="text/javascript" src="./images/shBrushJScript.js"></script>
    <script type="text/javascript" src="./images/shBrushPlain.js"></script>
    <script type="text/javascript" src="./images/shBrushXml.js"></script>
    <script type="text/javascript" src="./images/shBrushMsx.js"></script>
    <script type="text/javascript" src="./images/shBrushAvs.js"></script>
    <script type="text/javascript" src="./images/shLegacy.js"></script>
    <link type="text/css" rel="stylesheet" href="./images/shCore.css"/>
    <link type="text/css" rel="stylesheet" href="./images/shThemeViolet.css"/>
    <script type="text/javascript">
        SyntaxHighlighter.config.bloggerMode = true;
        SyntaxHighlighter.config.clipboardSwf = './images/clipboard.swf';
        SyntaxHighlighter.all();
    </script>
</head>
주목해야 할 부분은 16행의 ~bloggerMode = true;입니다.
티스토리의 위지윅 화면에서 코드를 입력하면 각 행의 끝에 <br> 태그가 삽입되는데, 대부분의 포스트에서 이 <br> 태그를 지우라고 적었더군요.
그런데, 이와 같이 설정하면 각 행의 <br>을 자동으로 엔터로 변환합니다.
즉, 위지윅 화면에서 코드만 입력하는 것으로 충분하단 얘기입니다.
(이 내용이 앞에 적은 다들 빠뜨린다는 바로 그 부분입니다)

만약 새롭게 2.0을 사용하는 것이 아니라 1.5를 사용하시던 분이라면 스킨 맨 마지막 부분에 아래 내용을 추가해야 합니다.
    <script type="text/javascript">
        dp.SyntaxHighlighter.HighlightAll('code');
    </script>
</body>
이 코드는 기존 방식으로 입력된 내용을 2.0의 방식으로 내부적으로 호출해주는 코드입니다.


3. 코드에 태그 추가

위지윅에서 코드를 입력한 뒤에 HTML 편집화면으로 이동해서 코드의 앞뒤에 <pre> 태그를 씌웁니다.
뒷부분에는 그냥 </pre>만 씌우면 되지만, 앞부분은 조금 신경써야 합니다.
<pre class="brush:c-sharp; highlight:[3,5];">
속성값 중 highlight는 강조할 행을 표시할 떄 사용합니다.


4. 문제점

SH2.0은 웹 표준 준수를 비록하면 많은 부분에서 안정성을 꽤했습니다.
하지만, 아이러니하게도 제가 지금 사용하는 hi8ar.net님의 화이트보드 스킨에서는 정상동작을 하지 않습니다.


2009년 4월 5일 일요일

BBCode for Tistory 2.5 재업

BBCode for Tistory 2.5 대망의 업데이트를 포스팅하고서 느꼈던 뿌듯함도 잠시...
개뿔님께서 [code] 태그가 이상하게 동작한다는 지적을 날려주셨습니다.

단순하게 [code] 태그를 <pre>로 변환했는데, 그게 문제였던 것입니다.
티스토리는 댓글의 각 행에 자동적으로 <br> 태그를 붙여주는데, 이게 <pre>와 만나면 두 줄씩 떨어지는 겁니다. 젠장찌개.

이 문제를 해결한 버전을 다시 올립니다.


설치방법 등은 지난 포스팅을 참조하시기 바랍니다. ㅠ.ㅠ

사용자 삽입 이미지

이런 모양을 보기가 쉽지는 않았습니다.




2009년 4월 2일 목요일

BBCode for Tistory 2.5 대망의 업데이트

블로그 관련 to-do 리스트에서 공지한 대로 BBCode를 업데이트 했습니다.
이번 업데이트에서는 IE8과의 호환성은 물론이고, 기존 코드들의 기능 보강, 추가 코드의 지원 등을 지원합니다.

구체적으로 바뀐 부분은 아래와 같습니다.

1. IE8에서 정상동작

IE8에서야 정상이 되어가는 자바스크립트 엔진에서 얘기한 대로 IE6/7IE8은 javascript의 처리방법이 상이합니다.
정상적인 js 해석기또라이 해석기(IE6, IE7) 모두에서 모두 정상적으로 동작하도록 수정했습니다.



2. 기존 코드의 보강

a. 형식의 통일

[img]의 형식으로 [img]이미지 주소[/img] 외에 [img=이미지 주소] 형식도 지원합니다.
또한, [embed]의 형식으로 [embed=주소 크기] 외에 [embed]주소 크기[/embed] 형식도 지원합니다.

즉, [img], [embed]의 형식으로 두 가지를 모두 지원함으로써 혼란을 제거했습니다.

b. 주소 적합성 확인

[img], [url] 코드에서 주소의 적합성 확인하도록 수정했습니다.
이것은 [url]이 차단되는 문제를 해결하기 위해 만든 [ur], [link](뒤에서 설명) 모두에 해당합니다.



3. 추가 코드의 지원

BBCode for TiStory 2.4에서 지원하던 BBCode는 100% 지원하며 아래의 코드들을 추가적으로 지원합니다.

[size=폰트크기]내용[/size] : 글자의 크기를 지정
[link=주소]이름[/link] : [url]이 태터툴즈 계열에서 자동차단되기 때문에 만든 [ur]과 동일
[email]메일주소[/email] : email 주소 (화면에 주소 자체가 출력됨)
[email=메일주소]이름[/email] : email 주소 (화면에 이름이 출력됨)
[list][*][/list] : 불릿이 달려있는 리스트
사용자 삽입 이미지

[list][*]one[*]two[*]삼[/list]

코드
: 태그 내부에 HTML 코드를 적으면 고정폭 글꼴을 사용해 출력

덧. 다운은 아래 링크에서 할 수 있으며, 설치방법은 BBCode for Tistory 2.1 수정 공개를 참고하시면 됩니다.
도우미는 버전번호 관련된 부분만 수정되었습니다.


사용자 삽입 이미지

달라진 것은 버전번호뿐...



2009년 1월 11일 일요일

블로그 스킨 마이너 업데이트

사용자 삽입 이미지

주말에 블로그 스킨을 마이너 업데이트 했습니다.

1. 수정한 줄 알고 있었지만 안 했던 ㅡㅡ+ 제목 표시줄

스킨을 제작하신 hi8ar~님께도 리포팅해놓고는 정작 제 블로그엔 수정을 제대로 안 했더군요.
제목 표시줄이 정상적으로 나오도록 수정했습니다.


2. 글보관함, 링크 드롭다운으로 변경

LieBe's Graffiti 보면서 언젠간 먹고말거라 생각했던 드롭다운을 업어왔습니다.
그냥 소스 다운받아 스타일이고 뭐고 죄다 베껴왔습니다. ㅋㅋ


3. Syntax Highlighter 주석 색상 변경

문자열과 주석의 색이 똑같아 혼동스러웠는데, 스리슬쩍 수정했습니다.


2009년 1월 10일 토요일

BBCode for TiStory 2.4 (마이너 업데이트) 버그패치 재업

사용자 삽입 이미지

사실 js는 업뎃되지 않고, helper만 업뎃되었습니다


티스토리 설정에서 댓글을 펼침으로 설정한 경우에는 기존 BBCode for Tistory를 사용하는데 문제가 없었습니다.

하지만, 접어놓음(펼침 미지정)으로 설정한 경우에는 BBCode가 동작하지 않는 경우가 있었습니다.
(좀 더 정확히는 사이드바의 최근 댓글(recent comments)을 클릭한 경우에 BBCode를 제대로 표시하지 못했습니다)

이러한 문제를 수정한 2.4를 공개합니다.

js 파일은 아무런 수정 없이 버전번호만 바꿨고, helper에서 약간 수정했습니다.
댓글을 펼침으로 설정한 분들은 업데이트가 전혀 필요 없으니 참고하시기바랍니다.

역시, 설치 및 사용법은 BBCode for Tistory 2.1 수정 공개를 참고하시기 바랍니다.

티스토리는 BBCode를 지원하라! 지원하라!

[red], [blue] 태그에 strong을 집어넣는 멍청한 실수를 해서 수정했습니다. (2008.1.10)
     SAGA님께 다시 한 번 감사드립니다.


2008년 7월 1일 화요일

BBCode for TiStory 2.3 버그패치

사용자 삽입 이미지

역시 버전번호는 숫자일 뿐…


BBCode for TiStory 2.2는 IE6에서 가끔씩 오동작을 할 때가 있습니다.
특히, [rb]이러쿵[/rb] - [rb]저러쿵[/rb] 처럼 같은 태그를 반복해서 사용하는 경우 적절하게 변환하지 못하는 문제를 일으킬 때가 있습니다.

이러한 문제를 수정한 2.3을 공개합니다.
설치 및 사용법은 BBCode for Tistory 2.1 수정 공개를 참고하시기 바랍니다.


티스토리는 BBCode를 지원하라! 지원하라!



  

2008년 6월 24일 화요일

BBCode for TiStory 2.2 업데이트 공개

사용자 삽입 이미지

버전이 2.2로 뛰었다고 기능이 대폭 증가한 것은 전혀 아닙니다. 버전번호를 맞췄을 뿐입니다. ^^;;;


BBCode for Tistory 2.1 수정 공개를 통해 배포한 BBCode는 티스토리의 제한된 환경에서 BBCode를 쓸 수 있는 환경을 제공합니다.
하지만, 몇몇분들께서 W3C 표준에 어긋난다는 지적을 하셨습니다.

이에 따라 W3C 표준에 적합하도록 수정된 BBCode for Tistory 2.2를 공개합니다.
(상세한 설치방법은 위의 링크를 클릭하면 보실 수 있습니다)

W3C 표준에 적합하도록 수정하는 것은 엔즐님께서 엔즐군의 다이어리에 올려주신 내용을 기반으로 작업하였습니다.
대략의 수정사항은 아래와 같습니다. (더 상세한 내용은 엔즐군의 다이어리를 참고하시기 바랍니다)

1. <script language="javacript">를 <script type="text/javascript">로 바꿈

많이들 사용하는대로 따라 썼는데, 웹 표준에 적합한 코드가 아니었습니다. (주먹구구의 한계…)
엔즐님 수정사항을 그대로 반영했을 뿐더러, 제 스킨에 같은 방식으로 적힌 코드를 모두 똑같이 수정했습니다.
특히 이 부분은 엔즐님께 다시 한 번 감사드립니다.


2. <p> 태그 내에 <div>를 집어넣은 것을 밖으로 뺌

그냥 단순히 <div>를 추가하기 때문에 <p>가 있는 경우 <p> 태그의 내부에 <div>가 존재하게 됩니다.
<p>가 있는 경우 별도로 처리하도록 수정했습니다.
(이런 제약이 있는지도 몰랐습니다 ㅠ.ㅠ)
역시 엔즐님의 수정사항을 그대로 반영했습니다.


3. <div> 내에서 name 속성 대신에 class 속성을 사용함

name을 사용하지 않는 것이 원칙이고, 사용하더라도 name의 값이 달라야 합니다.
(이런 것 역시 처음 들은 얘기입니다. 웹 개발자 여러분, 존경합니다)

그래서 class 속성을 사용했는데, IE에서 getAttribute 함수에 버그가 있어 약간 복잡한 코딩을 했습니다.

※ 참고로, 3번은 엔즐님께서 제시한 방법보다 약간 간단하고 명확한 방법으로 구현했습니다. v^.^
관심 있으신 분은 아래의 코드를 참고하시기 바랍니다.
if (/msie/i.test (navigator.userAgent)) {
    for (var i = 0; i < tags.length; i++)
        if (tags[i].getAttributeNode('class').value == 'bbcode' && tags[i].style.display != 'none')
            elements.push(tags[i]);
}
else
{
    for (var i = 0; i < tags.length; i++)
        if (tags[i].getAttribute('class') == 'bbcode' && tags[i].style.display != 'none')
            elements.push(tags[i]);
}

직접 수정해서 관련글을 포스팅해주신 엔즐님 및 BBCode에 관심을 가져주신 모든 분들께 감사드립니다.

[i], [u], [quote] 등에서 태그 속의 내용이 비었을 경우에도 변환하도록 아주 약간 수정했습니다. (.+? → .*) / 6월 24일