에디터 만들기! 1부

요즘 대부분의 게시판이나 블로그툴에는 HTML에디터라고 불리우는 Online Rich Text Editor(이하 RTE) 가 사용되고 있지요.
우연히 허접한 실력으로 만들 기회가 생겨 회사 게시판에 사용되는 에디터를 만들게 되었고 만들면서 느낀점들을 한 두개 정도 공유하려 합니다. 에디터를 만들어 보신분이라면 볼필요도 없는 내용이 될것이고, 저처럼 온갖 삽질을 하던사람에게는 조금 도움이 되지 않을까 생각해 봅니다.

일단 작업을 시작했을때 생각보다 자료가 별로가 없었고, 그 마저도 크로스 브라우징 논의 자체가 없었습니다. 그와중에도 이미 XquaredSmart Editor 같은 훌륭한 에디터가 나와 있었으나, 소스가 너무 어려웠어요 =_=;;;;

  • openmaru의 Xquared 는 깔끔한 코드를 산출해준다는 장점이 있었습니다. 기존의 에디터는 대부분 HTML4.01를 기준으로 태그를 생성해 주거든요. 그런데 Xquared의 경우는 상당히 깔끔한 XHTML 1.0 베이스의 코드를 만들어주는데 그 장점이 있었습니다. 별것 아닌것처럼 보일지 모르겠지만 저는 아직 그 방법을 완벽히 찾지는 못했거든요. 그외에도 여러 좋은 기술들이 있지만 일단 그 당시 생각한건 저정도…;
  • NHN의 Smart Editor는 지도나 책 같은 다양한 부가 기능 지원과 레이아웃 지원등 최고의 서비스 회사답게 에디터에 많은 서비스를 담아내었습니다.
  • 외산 에디터도 많습니다만 뭐 FCK Editor가 제일 좋다는 얘기만 들었는데 저는 정이 안가더라구요..(English………….)

첫번째 제 목표는 크로스 브라우징이 었습니다. 마침 4대 브라우저에서(IE5.5, Opera 9.5, Firefox 2+ and Safari 3) 모두 에디터를 만들 수 있다는 소식을 들었거든요.
firefox 에서는 midas라는 코드네임을 가진 프로젝트의 형태로서 지원을 했습니다. 저는 데모화면을 보면서 희망을 가지기 시작했어요.

이제 에디터가 무엇이라는것은 알았으니 맨땅에 헤딩만 하면되겠죠? 자 이제 삽질 시작됩니다.
제가 좀 찾아보니 에디터는 자바스크립트를 이용하여 페이지의 designmode 라는 속성으로 출발을 하게 됩니다.
쉽게 말해서  문서를 직접 디자인 할수있게 만들어 주는 속성이 랄까요? designmode는 HTML의 속성은 아닙니다. 표준속성도 아닐거구요. 그래서 스크립트로 접근을 해주어야 합니다.
iframe을 designmode 로 변경을 해줌으로써 iframe내의 문서를 편집 할 수 있게 되는거죠. 자바스크립트를 잘 모르시는분들도 차근차근 따라하면 쉬울것이라 생각되는데요?
만약에 iframe의 id속성 값이 “editWindow” 라고 한다면, 일단 iframe에 접근을 해야하니 제일많이 보는 getElementById()를 이용하는게 속편하겠죠?

document.getElementById(“editWindow”) //iframe으로 접근!

iframe 안에 우리는 글을 쓸것이니 프레임내의 document 부분으로 접근을해야겠죠? iframe내의 document는 접근하는방법이 약간다릅니다. 아래의 코드가 정답이라고 보시면됩니다.

document.getElementById(“editWindow”).contentWindow.document.designMode = “on”;

로 지정을 해주면 해당 iframe은 수정 할 수 있는 iframe, 즉 에디터가 됩니다. 쉽죠? 에디터가 이렇게 완성되었습니다. =_=/
참고로 풀소스를 한번볼까요?

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”    “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html>
<head>
<title>에디터 만들기</title>
<style type=”text/css”>
iframe { width:500px;height:400px; }
</style>
</head>
<body>
<iframe id=”editWindow”></iframe>
<script type=”text/javascript”>
document.getElementById(“editWindow”).contentWindow.document.designMode = “on”;
</script>
</body>
</html>

아 진짜 간단합니다.

참고로 contentWindow는 frame이나 iframe의 window를 나타나는 개체입니다. IE의 경우에는 생략이 되어도 상관없지만 기타 브라우저에서는 꼭 필요한 속성 입니다. 이걸 몰라서 에디터는 IE만 된다고 하는사람도 있었을 정도니까요:)

이제 에디터 영역은 만들었으니 각종 스타일이나 이런것을 넣을수 있어야 겠죠?
그건 다음시간으로 넘어갑시다~ 캬캬캬캬캬캬캬캬

참고로 이글은 에디터를 만드는데만 포커스가 맞춰져있습니다. 에디터에 대한 즐거운 생각, 더나은 에디터의 컨셉 등은 다음글을 보시는게 도움이 될듯합니다.

  1. [2008년 3월 13일] 웹 에디터, 어떻게 만들어야 할까 III
  2. [2007년 9월 20일] 웹 에디터, 어떻게 만들어야 할까 II
  3. [2007년 8월 22일] 웹 에디터, 어떻게 만들어야 할까 I

’09 CSS naked day

CSS Naked Day '09
CSS Naked Day '09

벌써 세번째 참여하는 CSS naked day 입니다.

매년 4월9일에 자신의 웹사이트의 CSS를 꺼놓는 이 행사는 CSS가 없더라도 HTML 만으로  콘텐츠를 인식하는데 아무 문제 없음을 알리기 위해서 기획된 행사 입니다.
일몰님은 작년에 트래픽 감소로 인해 탄소 발생량이 줄고 지구의 환경이 좋아진다는 설도 얘기 하셨었네요:)

뭐 이제 웹 페이지도 구조와표현이 분리가 잘 되고 있다라는 얘기를 많이 들어서 이캠페인이 필요할까라는 생각도 들긴합니다. 하지만 아직은 CSS의 위대함과 html 마크업의 구조적 작성이 얼마나 중요한지 좀더 알리고 싶습니다.

참여방법

그냥 단지 자신의 웹 사이트(블로그, 홈 페이지등등)의 CSS 를꺼두면됩니다. 그리고

CSS naked day페이지의 하단의 폼에 자신도 이 캠페인에 참여한다는 폼을 전송하면 됩니다.

올해 우리나라에서는 얼마나 많은사람들이 참여할까요? 다 같이 벗어보아요:)

Flash의 ExternalInterface 와 Form태그가 만나서 짜증이납니다.

맘에 들지 않지만 회사에서는 asp.net 을 사용 하고 있습니다. asp.net이 무슨 죄겠습니까만 제가 싫어 하는 것중의 하나가
모든 컨텐츠를 form 태그 하나로 감싸고 그안에서  모든 액션을 취한다는것이죠…
그래서 소스는 지저분해지고 script의 양만 늘어납니다. 적절한곳에 적절한 태그를 사용했으면 좋겠는데 말이에요.

엄청난 글자의 빨간부분이 데이터를 담는 부분이래요=_=;;;
엄청난 글자의 빨간부분이 데이터를 담는 부분이래요=_=;;;

암튼 그런데 띵가띵가 회사에서 미투하는 도중에 메일 한통이 날아 왔는데,
운영쪽에서 웹에서 하는 게임실행이 안된다는 리포트가 왔다는거에요…
그래서 메일을 잽싸게 봤더니 스크립트 오류가 나는거네요?

오류화면
오류화면

여러가지 test를 해본 결과 flash에서 사용되는 자바스크립트 호출하는 함수인 “ExternalInterface” 가 문제 인것을 찾았습니다.
Form 태그내에서 Flash를 사용하며 그 Flash에서 ExternalInterface를 호출하면 DOM 에서 플래시를 찾지못해 스크립트가 에러가 나더라구요.
form 태그안에 왜 플래시가 들어가는지는 아까도 설명드렸죠;;

물론 Flash Player의 모든 버전에서 나는 문제는 아니고 특정 버전인 8~9초반 사이에서 나는 문제였습니다. 또한  IE에서만 발생하는 문제구요.(IE 버전과는 상관없습니다.)

해결방법은 두가지가 있습니다.

한가지는 Flash Player의 버전업을 유도합니다
보통 IE에서의 플래시 사용방법을 보면 object태그에 codebase로 Flash Player의 버전을 명시하게 되어있습니다.

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="980" height="216" id="MainNavFla">

저 부분을 변경해 주는거죠. 지금은 8.0이니 뭐 9.0이나 10.0으로 변경하면되겠죠?

또 한가지 방법은 플래시 오브젝트를 window의 객체에 바로 연결해주면 된다 하는군요.. (코멘트에 있습니다. jwatkins님의 코멘트)
요즘 대부분 플래시를 자바 스크립트로 활성화하니 활성화 코드뒤에

window.플래시오브젝트ID = document.getElementById("플래시오브젝트ID ");

같은 방법으로 해결을 할 수 있다고 합니다. (저는 이방법으로 해결을 했습니다.)
위의 코드로 보면 이렇게 되겠지요…

window.MainNavFla = document.getElementById("MainNavFla");

또한 ExternalInterfaceOpera 브라우저에서는 아직도 사용 할 수 없더라구요. 아예 플래시가 보이질 않아요..

저번에도 말했었지만 플래시가 가지는 웹상에서의 영향력 만큼이나, 신중하게 그리고 에러가 없게 플래시 플레이어를 배포했으면 하는 바램이 있어요..

하쿠나마타타!

하쿠나마타타 스와힐리어의 구문으로 말 그대로 옮기면 “걱정 거리가 없다”라는 뜻이라는데…
뭐 저는 잘 모르겠고 갑자기 왜 이런 얘기를 꺼내는가하니~
바로 이것 때문이에요…

Hakuna Matata
Hakuna Matata

PlayStation3 게임 인데요..

소니네쇼날지오그래픽이 공동 개발한 간접 체험 게임입니다.
아프리카에 가서 다양한 동물 사진을 찍는 게임인데요.

어렸을때 동물의왕국이라는 TV프로 기억하세요? 아프리카에 사는 동물들이 막나오는…
플레이어는 사진 작가가 되어서 다양한 클라이언트의 요청에 따라 사진을 찍으며 사파리를 즐기는 게임입니다.
PS3의 진가가 나타나는 게임이 랄까요? 저희 집에 있는 42인치 TV 와 완벽한 콤보로 우리집을 아프리카로 옮겨놓습니다.

그런데 이게 물건이에요. 컨트롤러가 카메라가 되어 사진을 찍는데 컨트롤러를 돌려서 세로로도 찍고, 진짜로 카메라를 이용해서 찍는 느낌이랄까요?

촬영모드 뷰 파인더로 표현
촬영모드 뷰 파인더로 표현

급하게 카메라를(컨트롤러)들고 찍으면 사진이 흔들리기도 합니다. 조심조심 다가가서 몰래 찍고 나와야해요.

카메라는 역시 소니 계열의 DSLR 과 렌즈군을 지원합니다.

네 종류의 sony 카메라를 지원합니다.
네 종류의 sony 카메라를 지원합니다. 저는 현재 알파100을사용중이죠

저는 아직 게임을 진행중 이라서 네 종류 모두 사용 할 수 없구요.  현재 알파100까지만 사용하고 있습니다.

촬영하는장면은 다양합니다. 치타가 사냥하는 사진도 찍고 단란한 코끼리 가족의 사진도 찍습니다.
그 동안 많이는 아니어도 제가 직접 찍은 사진들을 공개해 봅니다.

마사이 기린
마사이 기린
두목코끼리!
두목코끼리!
코끼리 무리!
코끼리 무리!
석양의 마사이기린
석양의 마사이기린
폭포의코끼리
폭포의코끼리
타조님
타조님
치타
치타
사냥하는치타
사냥하는치타
거의다 쫓아갔다
거의다 쫓아갔다
잡았다!
잡았다!

Footer를 브라우저 하단에 꼭 붙여야 하나요?

일을 하다보면 푸터 부분을 항상 브라우저의 최 하단에 고정 시켜 달라는 디자이너의 요청이 있을때가 있죠?
예전에는 그냥그러려니 하면서 작업을 하고는 했는데 다시 생각해보니 이게 왜 꼭 붙어 있어야 하나 라는 생각이 들더라구요..

“네놈이 디자인에 대해서 뭘 아냐; 다 디자인적인 이유가 있는거다!” 라고 말하면 뭐 사실 할만은 없지만 말이죠..

이런 생각이 들더라구요.. 푸터를 항상 하단에 붙이는 건 화면의 크기가 그렇게 크지 않아서 컨텐츠의 크기가 작을때도 실제 표현되는 푸터의 위치가 크게 다르지 않았기 때문에,
통일성을 주려다보니 일부러 푸터를 하단에 붙인게 아니었을까? 하는 생각이 드는데요..어짜피 몇 픽셀 차이 나지 않을꺼 하단에 붙여 통일성을 주자라는 느낌을 가질 수 있도록 말이죠.

요즘은 모니터가 사이즈가 많이 높아져서 전체 height가 많이 길어졌기 때문에 푸터를 하단에 붙인다면 컨텐츠와의 간격이 너무벌어져서 오히려 디자인의 동질성도 떨어지고 알아보기도 힘들것 같아요.

푸터가 이렇게 하단에 붙는게 좋은건 아니겠죠?
푸터가 이렇게 하단에 붙는게 좋은건 아니겠죠?(LG를 욕하는건 절대아닙니다)

다시 잘 살펴보니 요즘은 푸터를 하단에 붙이는 사이트가 그렇게 많지는 않군요 =_=; 사이트 예를 들려다보니  잘 안보입니다.
제가 모르는 “푸터를 브라우저 하단에 붙이는 이유” 어떤것들이 있을까요?

닥치고 웹 표준