git-svn-id: http://xe-core.googlecode.com/svn/trunk@618 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-03-23 05:12:29 +00:00
parent 052f5bd2b3
commit b25924ebc4
4 changed files with 151 additions and 216 deletions

View file

@ -43,7 +43,11 @@
function transHTML($xml_obj) { function transHTML($xml_obj) {
$width = $xml_obj->attrs->width; $width = $xml_obj->attrs->width;
$height = $xml_obj->attrs->height; $height = $xml_obj->attrs->height;
$make_thumbnail = $xml_obj->attrs->make_thumbnail; $make_thumbnail = $xml_obj->attrs->make_thumbnail;
if(!$make_thumbnail) $make_thumbnail = "N";
else $make_thumbnail = "Y";
$body = $xml_obj->body; $body = $xml_obj->body;
$image_list = explode("\n",$body); $image_list = explode("\n",$body);
@ -63,3 +67,23 @@
} }
?> ?>

View file

@ -66,12 +66,13 @@ function insertSlideShow() {
var height = xGetElementById("height").value; var height = xGetElementById("height").value;
var make_thumbnail = "N"; var make_thumbnail = "N";
if(xGetElementById("make_thumbnail").checked) make_thumbnail = "Y"; if(xGetElementById("make_thumbnail").checked) make_thumbnail = "Y";
else make_thumbnail = "N";
var images_list = ""; var images_list = "";
for(var i=0; i<list.length;i++) { for(var i=0; i<list.length;i++) {
images_list += list[i]+"\n"; images_list += list[i]+"\n";
} }
if(selected_node) { if(selected_node) {
selected_node.setAttribute("width", width); selected_node.setAttribute("width", width);
selected_node.setAttribute("height", height); selected_node.setAttribute("height", height);

View file

@ -1,26 +1,18 @@
<!--%import("slide_show.js")--> <!--%import("slide_show.js")-->
<!--%import("slide_show.css")--> <!--%import("slide_show.css")-->
<script type='text/javascript'> <script type='text/javascript'>
var _tmp_srl = {$slide_show_srl}; // 슬라이드쇼에 보여줄 이미지 등록
z_gallery_opacity[_tmp_srl] = 0.3;
z_gallery_highlight_speed[_tmp_srl] = 50; // ms
z_gallery_highlight_opacity[_tmp_srl] = 0.1;
<!--@foreach($slide_show_images as $image)--> <!--@foreach($slide_show_images as $image)-->
z_add_gallery(_tmp_srl,'{$image}','{$image}'); slide_show_add_image({$slide_show_srl},'{$image}','{$image}');
<!--@end--> <!--@end-->
// window.onLoad 이벤트 후에 슬라이드 쇼 시작
xAddEventListener(window,'load',start_slide_show);
</script> </script>
<div style="border:1px solid #DDDDDD;width:{$slide_show_width}px;"> <div id='zone_slide_show_{$slide_show_srl}' style="width:{$slide_show_width}px;height:{$slide_show_height}px;" class="slide_main_image_box">
<div id='zone_gallery_{$slide_show_srl}' style='width:{$slide_show_width}px;background-Color:#FFFFFF;padding:10px 10px 10px 10px;text-align:center;'> <div id="slide_loading_text" class="slide_loading_text">loading images...</div>
<span style="color:#000000;font-size:8pt;">loading...</span> <img id="slide_main_image_{$slide_show_srl}" border="0" style="display:none" alt="slide" />
</div> </div>
<div id='zone_thumbnail_{$slide_show_srl}' class="slide_thumbnail_image_box" style="width:{$slide_show_width}px;"></div>
<div id='zone_thumbnail_{$slide_show_srl}' style='width:{$slide_show_width}px;background-Color:#FFFFFF;padding:10px 10px 10px 10px;text-align:center;'></div>
</div>
<script type='text/javascript'>
_gallery_srl_list[_gallery_srl_list.length] = _tmp_srl;
xAddEventListener(window,'load',z_start_gallery);
</script>

View file

@ -1,234 +1,152 @@
/********************************************************** /**
* image gallery in zeroboard5 * @file slide_show.js
* created by zero (zero@nzeo.com, http://www.nzeo.com) * @brief 이미지 슬라이드 스크립트
*********************************************************/ * @author zero (zero@nzeo.com)
**/
var z_gallery_opacity = new Array(); // 슬라이드쇼를 하기 위한 변수
var z_gallery_highlight_speed = new Array(); var slide_show_images = new Array();
var z_gallery_highlight_opacity = new Array();
var _gallery_srl_list = new Array(); // 슬라이드쇼 이미지 목록에 추가
var _gallery_images = new Array(); function slide_show_add_image(srl, thumbnail_url, image_url) {
var _gallery_idx = new Array(); if(!thumbnail_url || !image_url) return;
var _obj_thumbnail = new Array();
function z_add_gallery(srl, thumbnail_url, source_file_url) { // 객체 생성
var obj = new Array(); var obj = {"srl":0, "thumbnail_url":null, "thumbnail":null, "image_url":null, "image":null}
var image = new Image(); // slide_show_images에 슬라이드 쇼 고유번호에 해당하는 공간을 초기화
image.src = source_file_url; if(typeof(slide_show_images[srl])=="undefined") slide_show_images[srl] = new Array();
var t_image = new Image(); // 슬라이드쇼 고유번호를 세팅
t_image.src = thumbnail_url.replace("&amp;","&"); obj.srl = srl;
obj.idx = slide_show_images[srl].length;
obj['thumbnail_url'] = thumbnail_url; // 썸네일 이미지를 미리 로딩
obj['source_url'] = source_file_url; obj.thumbnail = new Image();
obj['thumbnail'] = t_image; obj.thumbnail.src = thumbnail_url;
obj['gallery'] = image; obj.thumbnail.style.cursor = "pointer";
obj.thumbnail.style.width = "60px";
obj.thumbnail.style.height = "60px";
obj.thumbnail.style.margin = "5px";
obj.thumbnail.style.opacity = 0.5;
obj.thumbnail.style.filter = "alpha(opacity=50)";
if(typeof(_gallery_images[srl])=='undefined') { // 원본 이미지를 미리 로딩
_gallery_images[srl] = new Array(); obj.image = new Image();
_gallery_idx[srl] = 0; obj.image.src = image_url;
_obj_thumbnail[srl] = new Array();
}
_gallery_images[srl][_gallery_images[srl].length] = obj; // 썸네일 클릭시 메인 이미지로 바꾸어줌
xAddEventListener(obj.thumbnail, "mousedown", function() { display_slide_image(obj) });
// 생성된 객체를 slide_show_images[슬라이드쇼 고유번호]에 추가
slide_show_images[srl][slide_show_images[srl].length] = obj;
} }
function z_start_gallery() { // 슬라이드쇼 시작
function start_slide_show() {
for(var i = 0; i < _gallery_srl_list.length; i++) { // 등록된 모든 이미지 목록을 돌면서 thumbnail 목록을 만들어줌
var srl = _gallery_srl_list[i]; for(var srl in slide_show_images) {
if(!_gallery_images[srl].length) continue; // 첫번째 이미지의 경우 큰 이미지 출력 시작 이미지 출력
display_slide_image(slide_show_images[srl][0]);
var zone_gallery = xGetElementById('zone_gallery_'+srl); // 등록된 이미지가 없으면 pass~
var zone_thumbnail = xGetElementById('zone_thumbnail_'+srl); if(!slide_show_images[srl].length) continue;
xInnerHtml(zone_gallery,''); // 메인이미지가 나올 곳과 썸네일이 노출될 곳의 객체를 구함
var zone_thumbnail = xGetElementById('zone_thumbnail_'+srl);
var obj = _gallery_images[srl][0]; // 썸네일 출력
for(var i=0; i<slide_show_images[srl].length;i++) {
var obj_gallery = new Image(); zone_thumbnail.appendChild(slide_show_images[srl][i].thumbnail);
obj_gallery.src = obj['gallery'].src;
obj_gallery.id = 'main_gallery_'+srl;
obj_gallery.srl = srl;
obj_gallery.style.cursor = 'pointer';
obj_gallery.style.opacity = 1;
obj_gallery.style.filter = "alpha(opacity=100)";
obj_gallery.start_opacity = 0;
zone_gallery.appendChild(obj_gallery);
for(var idx = 0; idx < _gallery_images[srl].length; idx++) {
var s_obj = _gallery_images[srl][idx];
if(s_obj) {
_obj_thumbnail[srl][idx] = new Image();
_obj_thumbnail[srl][idx].src = s_obj['thumbnail'].src;
_obj_thumbnail[srl][idx].start_opacity = 0;
_obj_thumbnail[srl][idx].id = 'thumbnail_'+srl+'_'+idx;
_obj_thumbnail[srl][idx].srl = srl;
_obj_thumbnail[srl][idx].idx = idx;
_obj_thumbnail[srl][idx].style.cursor = 'pointer';
_obj_thumbnail[srl][idx].style.width = '60px';
_obj_thumbnail[srl][idx].style.height= '60px';
if(idx == _gallery_idx[srl]) {
_obj_thumbnail[srl][idx].style.opacity = 1;
_obj_thumbnail[srl][idx].style.filter = "alpha(opacity=100)";
} else {
_obj_thumbnail[srl][idx].style.opacity = 0.3;
_obj_thumbnail[srl][idx].style.filter = "alpha(opacity=30)";
}
_obj_thumbnail[srl][idx].style.margin = '0px 5px 5px 5px';
zone_thumbnail.appendChild(_obj_thumbnail[srl][idx]);
}
}
} }
if(xIE4Up) { }
xAddEventListener(document,'mousewheel',z_gallery_check_wheel);
}
xAddEventListener(document,'mouseup',z_change_gallery);
xAddEventListener(document,'mouseover',z_gallery_do_focus);
xAddEventListener(document,'mouseout',z_gallery_do_focusout);
_gallery_srl_list = new Array();
} }
function z_show_gallery(srl, idx) { // 메인 이미지 표시
if(!_gallery_images[srl].length) return; function display_slide_image(obj) {
if(_gallery_idx[srl] == idx) return; var zone = xGetElementById('zone_slide_show_' + obj.srl );
_gallery_idx[srl] = idx; // 갤러리 외부 박스보다 이미지가 클 경우 resizing시킴
var zone_width = xWidth(zone);
var zone_height = xHeight(zone);
var obj = _gallery_images[srl][_gallery_idx[srl]]; var image_width = obj.image.width;
var obj_gallery = xGetElementById('main_gallery_'+srl); var image_height = obj.image.height;
if(obj['gallery'].src == obj_gallery.src) return;
obj_gallery.parentNode.removeChild(obj_gallery); var resize_scale = 1;
obj_gallery = new Image(); // 슬라이드 쇼 박스보다 큰 이미지는 크기를 줄여서 출력
obj_gallery.src = obj['gallery'].src; if(image_width>(zone_width-30)) {
obj_gallery.id = 'main_gallery_'+srl; resize_scale = (zone_width-30)/image_width;
obj_gallery.srl = srl; image_width = parseInt(image_width*resize_scale,10);
obj_gallery.style.cursor = 'pointer'; image_height = parseInt(image_height*resize_scale,10);
}
obj_gallery.start_opacity = 0; if(image_height>(zone_height-30)) {
obj_gallery.style.width = obj['gallery'].width+"px"; resize_scale = (zone_height-30)/image_height;
obj_gallery.style.height = obj['gallery'].height+"px"; image_width = parseInt(image_width*resize_scale,10);
obj_gallery.style.opacity = 0; image_height = parseInt(image_height*resize_scale,10);
obj_gallery.style.filter = "alpha(opacity=0)"; }
obj_gallery.start_opacity = 1;
var zone_gallery = xGetElementById('zone_gallery_'+srl); var x = parseInt((zone_width - image_width)/2,10)-3;
zone_gallery.appendChild(obj_gallery); var y = parseInt((zone_height - image_height)/2,10)-3;
setTimeout(function _start() {z_gallery_opacity_up(obj_gallery,z_gallery_opacity[srl],z_gallery_highlight_opacity[srl]);}, z_gallery_highlight_speed[srl]); // 로딩 텍스트 없앰
xGetElementById("slide_loading_text").style.display = "none";
for(var idx = 0; idx < _gallery_images[srl].length; idx ++) { // 이미지 표시
var s_obj = xGetElementById('thumbnail_'+srl+'_'+idx); var target_image = xGetElementById("slide_main_image_"+obj.srl);
if(!s_obj) continue; target_image.style.display = "none";
if(idx == _gallery_idx[srl]) { target_image.src = obj.image.src;
s_obj.style.opacity = 1; target_image.srl = obj.srl;
s_obj.style.filter = "alpha(opacity=100)"; target_image.idx = obj.idx;
} else { target_image.style.opacity = 1;
s_obj.style.opacity = z_gallery_opacity[srl]; target_image.style.filter = "alpha(opacity=100)";
s_obj.style.filter = "alpha(opacity="+(z_gallery_opacity[srl]*100)+")"; target_image.start_opacity = 0;
} xWidth(target_image, image_width);
} xHeight(target_image, image_height);
}
function z_gallery_opacity_up(obj,opacity,up) { target_image.style.margin = "0px;";
var srl = obj.srl; target_image.style.marginTop = y+"px";
if(obj.start_opacity!=1) { target_image.style.marginLeft = x+"px";
if(obj.id == 'main_gallery_'+srl || obj.idx == _gallery_idx[srl]) {
obj.style.opacity = 1; target_image.style.display = "block";
obj.style.filter = "alpha(opacity=100)";
} else { // resize_scale이 1이 아니면, 즉 리사이즈 되었다면 해당 이미지 클릭시 원본을 새창으로 띄워줌
obj.style.opacity = z_gallery_opacity[srl]; if(resize_scale!=1) {
obj.style.filter = "alpha(opacity="+(z_gallery_opacity[srl]*100)+")"; target_image.style.cursor = 'pointer';
} xAddEventListener(target_image, 'mousedown', slide_show_winopen);
return; } else {
} target_image.style.cursor = 'default';
if(opacity<1) { xRemoveEventListener(target_image, 'mousedown', slide_show_winopen);
up = z_gallery_highlight_opacity[srl]; }
opacity += up;
if(opacity>=1) opacity = 1.0; // srl의 모든 썸네일의 투명도 조절
if(opacity>=0.5) opacity = 1.0; for(var i=0; i<slide_show_images[obj.srl].length;i++) {
obj.style.opacity = opacity; if(i==obj.idx) {
obj.style.filter = "alpha(opacity="+(opacity*100)+")"; slide_show_images[obj.srl][i].thumbnail.style.opacity = 1;
if(opacity<1) setTimeout(function _opacity_up() {z_gallery_opacity_up(obj, opacity,up);},z_gallery_highlight_speed[srl]); slide_show_images[obj.srl][i].thumbnail.style.filter = "alpha(opacity=100)";
} else { } else {
obj.start_opacity = 0; slide_show_images[obj.srl][i].thumbnail.style.opacity = 0.5;
slide_show_images[obj.srl][i].thumbnail.style.filter = "alpha(opacity=50)";
} }
}
} }
function z_change_next_gallery(srl) { // 큰 이미지의 경우 새창으로 띄워줌
var idx = _gallery_idx[srl] +1; function slide_show_winopen(evt) {
if(idx>=_gallery_images[srl].length) idx = 0; var e = new xEvent(evt);
setTimeout(function show_gallery() { z_show_gallery(srl, idx); }, 50); var obj = e.target;
} var srl = obj.srl;
var idx = obj.idx;
function z_change_prev_gallery(srl) { var image_width = slide_show_images[srl][idx].image.width + 20;
var idx = _gallery_idx[srl] -1; var image_height = slide_show_images[srl][idx].image.height + 20;
if(idx<0) idx = _gallery_images[srl].length-1;
setTimeout(function show_gallery() { z_show_gallery(srl, idx); }, 50);
}
function z_change_gallery(evt) { winopen(slide_show_images[srl][idx].image.src, "SlideShow", "left=10,top=10,scrollbars=auto,resizable=yes,toolbars=no,width="+image_width+",height="+image_height);
var e = new xEvent(evt);
var obj = e.target;
var srl = obj.srl;
var idx = obj.idx;
if(typeof(srl)=='undefined') return;
if(typeof(idx)=='undefined') z_change_next_gallery(srl);
else {
setTimeout(function show_gallery() { z_show_gallery(srl, idx); }, 50);
}
}
function z_gallery_do_focus(evt) {
var e = new xEvent(evt);
var obj = e.target;
var srl = obj.srl;
if(typeof(srl)=='undefined') return;
if(obj.idx == _gallery_idx[srl]) return;
if(obj.id == 'main_gallery_'+srl) return;
obj.start_opacity = 1;
z_gallery_opacity_up(obj,z_gallery_opacity[srl],z_gallery_highlight_opacity[srl]);
xPreventDefault(evt);
xStopPropagation(evt);
}
function z_gallery_do_focusout(evt) {
var e = new xEvent(evt);
var obj = e.target;
var srl = obj.srl;
if(typeof(srl)=='undefined') return;
if(obj.idx == _gallery_idx[srl]) return;
if(obj.id == 'main_gallery_'+srl) return;
obj.start_opacity = 0;
obj.style.opacity = z_gallery_opacity[srl];
obj.style.filter = "alpha(opacity="+(z_gallery_opacity[srl]*100)+")";
}
function z_gallery_check_wheel(evt) {
var e = new xEvent(evt);
var obj = e.target;
var srl = obj.srl;
if(typeof(srl)=='undefined') return;
if(e.target.id != 'main_gallery_'+srl) return;
if(evt.wheelDelta<0) z_change_next_gallery(srl);
else z_change_prev_gallery(srl);
xPreventDefault(evt);
xStopPropagation(evt);
}
function zb5_board_cancel(url) {
if(!confirm(alert_msg['msg_cancel'])) return false;
location.href=url;
return false;
} }