HTML CodeVox.com의 소스를 보면 재미있는 부분이 많습니다. 먼저, 소스읽기를 해서 head 코드를 읽어보면 head 안에 script와 link 태그를 살펴보면 각각의 src와 href속성이 특이한 부분을 볼 수 있습니다.
보통 src나 href에 하나의 파일을 설정합니다만, Vox.com에 나와있는 소스에는 여러 파일들을 하나의 태그안에 링크한 거처럼 보입니다. 처음에는 새로운 문법이라도 나왔을까 생각하면서(-_-;; 그럴 리는 없죠?) 표준을 뒤져보기도 했습니다.
두번째는 소스에 나와있는 href나 src의 위치에 여러 파일들을 하나의 파일로 만들어서 배치하는 빌드를 가지고 있다는 가정에 몇 가지 실험을 해봤습니다.
link태그를 기준으로 다음의 파일들은 실제 위치에 존재합니다.
http://aka-static.vox.com/.shared:v19.6:vox:ko_kr/css/base.css
http://aka-static.vox.com/.shared:v19.6:vox:ko_kr/css/dialog.css
http://aka-static.vox.com/.shared:v19.6:vox:ko_kr/css/control-strip.css
http://aka-static.vox.com/.shared:v19.6:vox:ko_kr/css/flyout-vew.css
http://aka-static.vox.com/.shared:v19.6:vox:ko_kr/css/base.css?dialog.css,control-strip.css,flyout-view.css
그 와중에
나미님이 link에 사용된 href뒤의 파일들의 순서 및 개수를 바꿀때도 각각의 새로운 css 파일들이 생성된다고 알려주셨습니다.
Dynamic Css, JavaScript file Creation즉, link나 script태그의 src, href 속성의 파일들의 요청을 해석해서 필요한 파일들의 집합을 하나의 파일로 동적으로 생성해냅니다. (*.* 호~ 참 편리하게도 만들었다는 생각이 들더군요. 저만 그런가요? ) script에 사용된 jsc의 경우에는 javascript파일을 minifying처리한 후에 필요한 여러파일들을 하나의 파일로 생성합니다.
Toolbar CSSVox.com 의 Toolbar에도 CSS를 깔끔하게 사용하고 있습니다. Toolbar가 위치한 editor의 html을 살펴보면 id가 compose-toolbar인 div가 있습니다. 그리고 그 안에 a 태그가 여럿들어 있습니다. 각각의 a 태그는 toolbar의 메뉴들입니다.
각각의 메뉴들을 DOM으로 만든다면, onMouseOver인 경우 css등을 이용하여 선택된 화면을 보여주고 onClick시 어떠한 동작을 수행하는 것을 나타내기 위해서 sytle을 변경하기 위한 여러 코드가 들어가게 됩니다.
그러나, Vox.com의 Toolbar는 Toolbar의 이미지를 하나로 통짜로 만든 후 css를 통해서 이미지의 위치를 이동시켜 보여줌으로서 Toolbar의 이미지 관리를 쉽게하였습니다. 또한 css의 hover기능을 이용함으로서 onMouseOver에 대한 기능을 추가할 필요가 없어졌죠.
따라서, click에 대해서만 따로 처리하고 있습니다. click의 경우에도 일괄적으로 click event를 듣는 클래스에 등록시킨 후 event를 발생시킨 target이 class의 이름을 통해서 어떠한 동작이 발생했는 지를 처리하고 있습니다.

Toolbar의 부모클래스인 Component에서는 모든 이벤트에 대해서 들을수 있도록 이벤트를 등록하고 있습니다.

Toolbar에서는 이벤트 중 click이벤트만 처리를 합니다.
ConclusionVox.com의 코드를 보면 상당히 단순하면서도 확장이 쉽게 될 수 있는 구조를 가지고 있습니다. DOM에서 html을 생성해내는 구조는 html 페이지와 css를 이용하여 밖으로 뺐구요. 동작에 관련된 구조도 Observer 클래스와 Componenet 클래스를 계층화 시켜서 쉽게 동작하도록 처리되어 있습니다.
이 때까지 봐온 코드중에서 가장 깔끔한 구조를 가진 것 같네요. ^^
Copyright코드의 모든 권한은 Six Apart에 있습니다. Six Apart의 JavaScript 코드는 Copyright과 Disclaimer를 포함하는 조건하에서 재배포가 가능합니다.
Copyright (c) 2005, Six Apart, Ltd.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of "Six Apart" nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.