diff --git a/addons/autolink/autolink.js b/addons/autolink/autolink.js index b26c33ba3..62cc2c3e5 100644 --- a/addons/autolink/autolink.js +++ b/addons/autolink/autolink.js @@ -1,47 +1,32 @@ -var url_regx = /((http|https|ftp|news|telnet|irc):\/\/(([0-9a-z\-._~!$&'\(\)*+,;=:]|(%[0-9a-f]{2}))*\@)?((\[(((([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|(::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|(([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4})|((([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::))|(v[0-9a-f]+.[0-9a-z\-._~!$&'\(\)*+,;=:]+))\])|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))|(([0-9a-z\-._~!$&'\(\)*+,;=]|(%[0-9a-f]{2}))+))(:[0-9]*)?(\/([0-9a-z\-._~!$&'\(\)*+,;=:@]|(%[0-9a-f]{2}))*)*(\?([0-9a-z\-._~!$&'\(\)*+,;=:@\/\?]|(%[0-9a-f]{2}))*)?(#([0-9a-z\-._~!$&'\(\)*+,;=:@\/\?]|(%[0-9a-f]{2}))*)?)/i; -function replaceHrefLink(target_obj) -{ - var obj_list = new Array(); - var obj = target_obj; - while(obj) { - obj_list[obj_list.length] = obj; - obj = obj.nextSibling; - } - - for(var i=0;i'); - for(var j=0;j$1<\/a>"); - html[i] = html2.join('>'); +jQuery(function($) { + var url_regx = /((http|https|ftp|news|telnet|irc):\/\/(([0-9a-z\-._~!$&'\(\)*+,;=:]|(%[0-9a-f]{2}))*\@)?((\[(((([0-9a-f]{1,4}:){6}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|(::([0-9a-f]{1,4}:){5}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|(([0-9a-f]{1,4})?::([0-9a-f]{1,4}:){4}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){3}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:){2}([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::([0-9a-f]{1,4}:[0-9a-f]{1,4})|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])))|((([0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4})|((([0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::))|(v[0-9a-f]+.[0-9a-z\-._~!$&'\(\)*+,;=:]+))\])|(([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])){3}[0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))|(([0-9a-z\-._~!$&'\(\)*+,;=]|(%[0-9a-f]{2}))+))(:[0-9]*)?(\/([0-9a-z\-._~!$&'\(\)*+,;=:@]|(%[0-9a-f]{2}))*)*(\?([0-9a-z\-._~!$&'\(\)*+,;=:@\/\?]|(%[0-9a-f]{2}))*)?(#([0-9a-z\-._~!$&'\(\)*+,;=:@\/\?]|(%[0-9a-f]{2}))*)?)/i; + + function replaceHrefLink(target_obj) { + var obj = target_obj; + var obj_list = obj.childNodes; + + for(var i=0; i < obj_list.length; ++i) { + var obj = obj_list[i]; + var pObj = obj.parentNode; + if(!pObj) continue; + + var pN = pObj.nodeName.toLowerCase(); + if($.inArray(pN, ['a', 'pre', 'xml', 'textarea', 'input']) != -1) continue; + + if(obj.nodeType == 3 && obj.length >= 10) { + var html = obj.nodeValue.replace(url_regx, '$1'); + $(obj).replaceWith(html); + delete(html); + + } else if(obj.nodeType == 1 && obj.childNodes.length) { + if($.inArray(obj.nodeName.toLowerCase(), ['a', 'pre', 'xml', 'textarea', 'input']) != -1) continue; + replaceHrefLink(obj); } - var output = html.join('<'); - var dummy = xCreateElement('span'); - xInnerHtml(dummy, output); - pObj.insertBefore(dummy, obj); - pObj.removeChild(obj); } - else if(obj.nodeType == 1 && obj.firstChild) - replaceHrefLink(obj.firstChild); } -} -function addUrlLink() { - var objs = xGetElementsByClassName('xe_content'); - if(objs.length<1) return; - for(var i=0;iAuto-Link Addon 自動連結 - 게시글과 댓글의 내용중 http로 시작되는 일반 문자열에 자동으로 링크를 걸고 각 링크에 마우스 오버시 새창과 현재창 메뉴가 나타나도록 꾸미는 애드온입니다. + 글과 댓글의 내용 중 URL 문자열에 링크를 걸어주는 애드온입니다. 書き込み本文とコメントの内容にhttpで始まる一般文字列にリンクを貼り付け、そのリンクにマウスオーバする際、別ウィンドウと同一ウィンドウに表示させるメニュが現れるアドオンです。 @@ -30,7 +30,7 @@ Kommentare beginnen mit http naeyongjung Thema der gemeinsamen String automatisch Link zu hängen Sie mit der Maus über die einzelnen Links und saechang Stadt und auf dem Menü des Add-On Dekoration. - 主題及評論中以http開頭的字串,自動轉換成連結。當滑鼠移到連結上方時,會顯示(新視窗/本頁面)選擇框。 + 是種可將主題和評論內容中的URL網址字串自動轉換成連結的附加元件。 0.1 2008-04-22 @@ -45,4 +45,4 @@ zero zero - + \ No newline at end of file diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index 7ed7d9c0f..d99f585f5 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -51,10 +51,10 @@ Только выбор опции использовать включает поведение RSD тега и api. - 支援 metaWeblog的部落格 API插件。 - 設置成"啟用"時,會使每個模組都顯示 RSD圖示。 - API地址是http://安裝位置/模組名稱/api。 - 將狀態設置成"啟用"時,才可使用 RSD標籤及 API。 + 支援MetaWeblog的部落格API附加元件。 + 設置成"啟用"時,會使每個模組都顯示RSD圖示。 + API網址是 http://安裝位置/模組名稱/api。 + 將狀態設置成"啟用"時,才可使用RSD和API 0.1 2007-02-28 diff --git a/addons/counter/conf/info.xml b/addons/counter/conf/info.xml index 5bf6c39df..da3a0ef56 100644 --- a/addons/counter/conf/info.xml +++ b/addons/counter/conf/info.xml @@ -37,7 +37,7 @@ Для сбора информации необходимо включить этот аддон. - 使用 XE的網站訪問統計模組記錄網站訪問資料。 + 使用XE的網站訪問統計模組記錄網站訪問資料。 將狀態設置成"使用"時,才會紀錄網站訪問資料。 0.1 diff --git a/addons/lemonpen/conf/info.xml b/addons/lemonpen/conf/info.xml index ece3b73d8..8cbb6cc2f 100644 --- a/addons/lemonpen/conf/info.xml +++ b/addons/lemonpen/conf/info.xml @@ -46,8 +46,8 @@ Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen. Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen. Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen. - レモンペンのサイトで発行されたsidを入力してください。 (LemonPen:Openmaru社提供) - 請輸入註冊LemonPen網站時,所給予的sid值。 + レモンペンのサイトから発行されたsidを入力して下さい。 (LemonPen:Openmaru社提供) + 請輸入在LemonPen網站註冊時,所給予的sid值。 diff --git a/addons/member_communication/conf/info.xml b/addons/member_communication/conf/info.xml index 8c4b145e8..ee6ea0d5a 100644 --- a/addons/member_communication/conf/info.xml +++ b/addons/member_communication/conf/info.xml @@ -36,7 +36,7 @@ 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. - 此插件可啟用短訊和新增好友功能。 + 讓會員擁有短訊和新增好友功能。 0.1 2008-05-28 diff --git a/addons/member_communication/lang/ko.lang.php b/addons/member_communication/lang/ko.lang.php index 5dc594d0d..697ef6d93 100644 --- a/addons/member_communication/lang/ko.lang.php +++ b/addons/member_communication/lang/ko.lang.php @@ -1,3 +1,3 @@ alert_new_message_arrived = '새로운 메세지가 도착하였습니다. 확인하시겠습니까?'; + $lang->alert_new_message_arrived = '%d개의 새로운 메시지가 도착하였습니다. 확인하시겠습니까?'; ?> diff --git a/addons/member_communication/lang/zh-TW.lang.php b/addons/member_communication/lang/zh-TW.lang.php index 1428882df..f2ffd16e8 100644 --- a/addons/member_communication/lang/zh-TW.lang.php +++ b/addons/member_communication/lang/zh-TW.lang.php @@ -1,3 +1,3 @@ alert_new_message_arrived = '您有新訊息。要確認嗎?'; + $lang->alert_new_message_arrived = '您收到%d個新訊息。您想要檢視嗎?'; ?> diff --git a/addons/member_communication/member_communication.addon.php b/addons/member_communication/member_communication.addon.php index 26563ce0a..7f9213fa1 100644 --- a/addons/member_communication/member_communication.addon.php +++ b/addons/member_communication/member_communication.addon.php @@ -11,14 +11,14 @@ * - MemberModel::getMemberMenu 호출시 친구 등록 메뉴를 추가합니다. **/ + // 비로그인 사용자면 중지 + $logged_info = Context::get('logged_info'); + if(!$logged_info) return; + /** * 기능 수행 : 팝업 및 회원정보 보기에서 쪽지/친구 메뉴 추가. 시작할때 새쪽지가 왔는지 검사 - * 조건 : called_position = 'before_module_init', module = 'member' **/ - if($called_position == 'before_module_init' && $this->module != 'member' && Context::get('is_logged') ) { - - // 로그인된 사용자 정보를 구함 - $logged_info = Context::get('logged_info'); + if($called_position == 'before_module_init' && $this->module != 'member') { // 커뮤니케이션 모듈의 언어파일을 읽음 Context::loadLang('./modules/communication/lang'); @@ -28,31 +28,26 @@ $oMemberController->addMemberMenu('dispCommunicationFriend', 'cmd_view_friend'); $oMemberController->addMemberMenu('dispCommunicationMessages', 'cmd_view_message_box'); - // 새로운 쪽지에 대한 플래그가 있으면 쪽지 보기 팝업 띄움 + // 새로운 쪽지에 대한 플래그가 있으면 쪽지 보기 팝업 띄움 $flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl); $flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl); if(file_exists($flag_file)) { + $new_message_count = FileHandler::readFile($flag_file); FileHandler::removeFile($flag_file); Context::loadLang('./addons/member_communication/lang'); - $script = sprintf('', Context::getLang('alert_new_message_arrived'), Context::getRequestUri().'?module=communication&act=dispCommunicationNewMessage'); - + $script = sprintf('', sprintf(Context::getLang('alert_new_message_arrived'), $new_message_count), Context::getRequestUri().'?module=communication&act=dispCommunicationNewMessage'); + Context::addHtmlHeader( $script ); } /** * 기능 수행 : 사용자 이름을 클릭시 요청되는 팝업메뉴의 메뉴에 쪽지 발송, 친구추가등의 링크 추가 - * 조건 : called_position == 'after_module_proc', module = 'member', act = 'getMemberMenu' **/ } elseif($called_position == 'before_module_proc' && $this->module == 'member' && $this->act == 'getMemberMenu') { - // 비로그인 사용자라면 패스 - if(!Context::get('is_logged')) return; $oMemberController = &getController('member'); - - // 로그인된 사용자 정보를 구함 - $logged_info = Context::get('logged_info'); $member_srl = Context::get('target_srl'); $mid = Context::get('cur_mid'); @@ -71,19 +66,19 @@ // 아니라면 쪽지 발송, 친구 등록 추가 } else { // 대상 회원의 정보를 가져옴 - $target_member_info = $this->getMemberInfoByMemberSrl($member_srl); + $target_member_info = $this->getMemberInfoByMemberSrl($member_srl); if(!$target_member_info->member_srl) return; // 로그인된 사용자 정보를 구함 $logged_info = Context::get('logged_info'); - + // 쪽지 발송 메뉴를 만듬 - if( $logged_info->is_admin == 'Y' || $target_member_info->allow_message =='Y' || ($target_member_info->allow_message == 'F' && $oCommunicationModel->isFriend($member_srl))) + if( $logged_info->is_admin == 'Y' || $target_member_info->allow_message =='Y' || ($target_member_info->allow_message == 'F' && $oCommunicationModel->isFriend($member_srl))) $oMemberController->addMemberPopupMenu(getUrl('','module','communication','act','dispCommunicationSendMessage','receiver_srl',$member_srl), 'cmd_send_message', './modules/communication/tpl/images/icon_write_message.gif', 'popup'); - // 친구 등록 메뉴를 만듬 (이미 등록된 친구가 아닐 경우) - if(!$oCommunicationModel->isAddedFriend($member_srl)) + // 친구 등록 메뉴를 만듬 (이미 등록된 친구가 아닐 경우) + if(!$oCommunicationModel->isAddedFriend($member_srl)) $oMemberController->addMemberPopupMenu(getUrl('','module','communication','act','dispCommunicationAddFriend','target_srl',$member_srl), 'cmd_add_friend', './modules/communication/tpl/images/icon_add_friend.gif', 'popup'); } } -?> +?> \ No newline at end of file diff --git a/addons/member_extra_info/conf/info.xml b/addons/member_extra_info/conf/info.xml index 26acc9caa..63af756ba 100644 --- a/addons/member_extra_info/conf/info.xml +++ b/addons/member_extra_info/conf/info.xml @@ -30,7 +30,7 @@ 회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요. - 此插件將把用戶資料中的暱稱圖片、用戶圖示、簽名檔等資料顯示到頁面當中。 + 可將用戶資料中的暱稱圖片、用戶圖示、簽名檔等資料顯示到頁面當中。 0.2 2007-02-28 diff --git a/addons/mobile/conf/info.xml b/addons/mobile/conf/info.xml index f57879efe..471979468 100644 --- a/addons/mobile/conf/info.xml +++ b/addons/mobile/conf/info.xml @@ -4,7 +4,7 @@ モバイルXEアドオン 手机XE插件 Mobile XE - 行動版 XE + 行動 XE 모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다. wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다. @@ -22,7 +22,7 @@ Only wml, hdml, mhtml formats are provided. - 透過行動工具連結時,會將網頁轉換為WAP標籤顯示。 + 透過行動工具上網時,會將網頁轉換為WAP標籤顯示。 只限於 wml, hdml, mhtml格式。 0.1 diff --git a/addons/openid_delegation_id/conf/info.xml b/addons/openid_delegation_id/conf/info.xml index ed2133227..a3b3349f2 100644 --- a/addons/openid_delegation_id/conf/info.xml +++ b/addons/openid_delegation_id/conf/info.xml @@ -38,7 +38,7 @@ 可將原本的域名當做OpenID來使用。 - 必須在設置中輸入openid provider相關值後再使用。 + 必須在設置中輸入openid provider相關資料後再使用。 0.1 2007-02-28 diff --git a/addons/planet_bookmark/conf/info.xml b/addons/planet_bookmark/conf/info.xml index 7ef26d7b3..98e3d22d2 100644 --- a/addons/planet_bookmark/conf/info.xml +++ b/addons/planet_bookmark/conf/info.xml @@ -2,7 +2,8 @@ 플래닛 Bookmark 애드온 微博收藏插件 - Planet 書籤 + 微型部落格書籤 + Planet Bookmark アドオン 플래닛 Bookmark 애드온 @@ -10,13 +11,17 @@ XE微博收藏插件。 - Planet 書籤插件 + 微型部落格書籤功能 + + + Planet Bookmark アドオン 0.1 2008-10-31 zero + zero zero zero diff --git a/addons/planet_bookmark/planet_bookmark.js b/addons/planet_bookmark/planet_bookmark.js index 74f53c360..b754ac18f 100644 --- a/addons/planet_bookmark/planet_bookmark.js +++ b/addons/planet_bookmark/planet_bookmark.js @@ -11,7 +11,7 @@ function planetShowBookmarkList(o){ } function planetBookmarkReload(){ - $('commentList').innerHTML = '

Bookmark

\n
\n\n\n\n'; + $('commentList').innerHTML = '

Bookmark

\n
\n\n\n\n'; planetGetBookmark(0); } diff --git a/addons/planet_todo/conf/info.xml b/addons/planet_todo/conf/info.xml index a1a3296ba..003c765dc 100644 --- a/addons/planet_todo/conf/info.xml +++ b/addons/planet_todo/conf/info.xml @@ -3,7 +3,8 @@ 플래닛 TODO 애드온 Planet TODO 微博TODO插件 - Planet TODO 插件 + 微型部落格 TODO 功能 + Planet TODO アドオン 플래닛 TODO 애드온 @@ -14,7 +15,10 @@ XE微博TODO插件。 - Planet TODO 插件 + 微型部落格 TODO 功能 + + + Planet TODO アドオン 0.1 2008-10-31 diff --git a/addons/rainbow_link/conf/info.xml b/addons/rainbow_link/conf/info.xml index 2298004b2..acf4ecdf5 100644 --- a/addons/rainbow_link/conf/info.xml +++ b/addons/rainbow_link/conf/info.xml @@ -37,7 +37,7 @@ 將rainbow.js新增到header,讓連結顯示成彩虹色。 - 此插件的rainbow.js檔案版權屬於 <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a> + rainbow.js檔案版權屬於 <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a> 0.1 2007-02-28 diff --git a/addons/resize_image/conf/info.xml b/addons/resize_image/conf/info.xml index 7ef80d25a..2b66623f1 100644 --- a/addons/resize_image/conf/info.xml +++ b/addons/resize_image/conf/info.xml @@ -30,7 +30,7 @@ Body Bild eingefügt im Inneren des Körpers zu passen die Größe des Originals zeigen, wenn ich darauf klicke auf das Add-ons. - 自動調整文章内的圖片大小,點擊會顯示原始大小的插件。 + 自動調整文章内的圖片大小,點擊圖片後會顯示原始大小。 0.1 2008-04-22 @@ -43,7 +43,6 @@ zero zero zero - zero zero
diff --git a/addons/tccommentnotify/conf/info.xml b/addons/tccommentnotify/conf/info.xml index 0c8a405bd..b8fbb6065 100644 --- a/addons/tccommentnotify/conf/info.xml +++ b/addons/tccommentnotify/conf/info.xml @@ -9,7 +9,7 @@ コメントお知らせアラートのアドオンです。 联动评论通告模块的插件。 This addon enables Comment Notifier module. - 此插件為評論通知模組。 + 是種評論通知模組。 0.2 2008-06-02 diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 831617894..401f09575 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -134,6 +134,7 @@ else $this->allow_rewrite = false; // 기본 JS/CSS 등록 + $this->addJsFile("./common/js/jquery.js"); $this->addJsFile("./common/js/x.js"); $this->addJsFile("./common/js/common.js"); $this->addJsFile("./common/js/xml_handler.js"); @@ -202,11 +203,21 @@ else $db_info->use_optimizer = 'N'; if(!$db_info->qmail_compatibility || $db_info->qmail_compatibility != 'Y') $db_info->qmail_compatibility = 'N'; else $db_info->qmail_compatibility = 'Y'; + if(!$db_info->use_ssl) $db_info->use_ssl = 'none'; $this->_setDBInfo($db_info); $GLOBALS['_time_zone'] = $db_info->time_zone; $GLOBALS['_qmail_compatibility'] = $db_info->qmail_compatibility; + $this->set('_use_ssl', $db_info->use_ssl); + if($db_info->http_port) + { + $this->set('_http_port', $db_info->http_port); + } + if($db_info->https_port) + { + $this->set('_https_port', $db_info->https_port); + } } /** @@ -571,7 +582,7 @@ parse_str($GLOBALS['HTTP_RAW_POST_DATA'],$params); foreach($params as $key => $val) { - $val = $this->_filterRequestVar($key, $val); + $val = $this->_filterRequestVar($key, $val,0); $this->_set($key, $val, true); } } @@ -590,7 +601,7 @@ unset($params->attrs); if(!count($params)) return; foreach($params as $key => $obj) { - $val = $this->_filterRequestVar($key, $obj->body); + $val = $this->_filterRequestVar($key, $obj->body,0); $this->_set($key, $val, true); } } @@ -599,16 +610,16 @@ * @brief 변수명에 따라서 필터링 처리 * _srl, page, cpage등의 변수는 integer로 형변환 **/ - function _filterRequestVar($key, $val) { + function _filterRequestVar($key, $val, $do_stripslashes = 1) { if( ($key == "page" || $key == "cpage" || substr($key,-3)=="srl")) return !preg_match('/^[0-9,]+$/',$val)?(int)$val:$val; if(is_array($val) && count($val) ) { foreach($val as $k => $v) { - if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $v = stripslashes($v); + if($do_stripslashes && version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $v = stripslashes($v); $v = trim($v); $val[$k] = $v; } } else { - if(version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $val = stripslashes($val); + if($do_stripslashes && version_compare(PHP_VERSION, "5.9.0", "<") && get_magic_quotes_gpc()) $val = stripslashes($val); $val = trim($val); } return $val; @@ -772,6 +783,7 @@ **/ function getRequestUri($ssl_mode = FOLLOW_REQUEST_SSL, $domain = null) { static $url = array(); + if(Context::get('_use_ssl') == "always") $ssl_mode = ENFORCE_SSL; if($domain) $domain_key = md5($domain); else $domain_key = 'default'; @@ -799,6 +811,19 @@ } $url_info = parse_url('http://'.$target_url); + if($use_ssl) + { + if(Context::get("_https_port") && Context::get("_https_port") != 443) { + $url_info['port'] = Context::get("_https_port"); + } + } + else + { + if(Context::get("_http_port") && Context::get("_http_port") != 80) { + $url_info['port'] = Context::get("_http_port"); + } + } + $url[$ssl_mode][$domain_key] = sprintf("%s://%s%s%s",$use_ssl?'https':$url_info['scheme'], $url_info['host'], $url_info['port']&&$url_info['port']!=80?':'.$url_info['port']:'',$url_info['path']); return $url[$ssl_mode][$domain_key]; @@ -1047,6 +1072,33 @@ return $oOptimizer->getOptimizedFiles($this->_getUniqueFileList($this->css_files), "css"); } + /** + * @brief javascript plugin load + **/ + function loadJavascriptPlugin($plugin_name) { + $oContext = &Context::getInstance(); + return $oContext->_loadJavascriptPlugin($plugin_name); + } + + function _loadJavascriptPlugin($plugin_name) { + $plugin_path = './common/js/plugins/'.$plugin_name.'/'; + if(!is_dir($plugin_path)) return; + + $info_file = $plugin_path.'plugin.load'; + if(!file_exists($info_file)) return; + + $list = file($info_file); + for($i=0,$cnt=count($list);$i<$cnt;$i++) { + $filename = trim($list[$i]); + if(!$filename) continue; + if(substr($filename,0,2)=='./') $filename = substr($filename,2); + if(preg_match('/\.js$/i',$filename)) $this->_addJsFile($plugin_path.$filename, false, ''); + elseif(preg_match('/\.css$/i',$filename)) $this->_addCSSFile($plugin_path.$filename, false, 'all',''); + } + + if(is_dir($plugin_path.'lang')) $this->_loadLang($plugin_path.'lang'); + } + /** * @brief HtmlHeader 추가 **/ diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index ebe899788..acabc3dac 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -586,7 +586,7 @@ if ($output->order) { foreach($output->order as $key => $val) { - $index_list[] = sprintf('%s %s', $val[0], $val[1]); + $index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]); } if(count($index_list)) $query .= ' order by '.implode(',',$index_list); $query = sprintf('%s for orderby_num() between %d and %d', $query, $start_count + 1, $list_count + $start_count); @@ -606,7 +606,7 @@ if($output->order) { foreach($output->order as $key => $val) { - $index_list[] = sprintf('%s %s', $val[0], $val[1]); + $index_list[] = sprintf('%s %s', $val[0]=='count'?'count(*)':$val[0], $val[1]); } if(count($index_list)) $query .= ' order by '.implode(',',$index_list); } diff --git a/classes/db/DBFirebird.class.php b/classes/db/DBFirebird.class.php index bee644159..d3facb5be 100644 --- a/classes/db/DBFirebird.class.php +++ b/classes/db/DBFirebird.class.php @@ -450,7 +450,8 @@ $output = $this->_fetch($result); //commit(); @ibase_commit($this->fd); - + if(!$output) return; + if(!is_array($output)) $output = array($output); for($i=0;$iKEY_NAME) == $index_name) return true; } diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index 74a2a9881..dee547f95 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -278,6 +278,8 @@ $result = $this->_query($query); if($this->isError()) return; $output = $this->_fetch($result); + if(!$output) return; + if(!is_array($output)) $output = array($output); for($i=0;$iKey_name == $index_name) return true; diff --git a/classes/db/DBMysql_innodb.class.php b/classes/db/DBMysql_innodb.class.php index 6af639392..f9cfa704e 100644 --- a/classes/db/DBMysql_innodb.class.php +++ b/classes/db/DBMysql_innodb.class.php @@ -287,6 +287,8 @@ $result = $this->_query($query); if($this->isError()) return; $output = $this->_fetch($result); + if(!$output) return; + if(!is_array($output)) $output = array($output); for($i=0;$iKey_name == $index_name) return true; diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index 5f4c6270c..34345fcc2 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -98,6 +98,8 @@ **/ function _toJSON(&$oModule) { $variables = $oModule->getVariables(); + $variables['error'] = $oModule->getError(); + $variables['message'] = $oModule->getMessage(); //if(function_exists('json_encode')) return json_encode($variables); //else return json_encode2($variables); $json = str_replace("\r\n",'\n',json_encode2($variables)); diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index 5d301356f..9d579c68a 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -358,11 +358,18 @@ } // view action이고 결과 출력이 XMLRPC일 경우 해당 모듈의 api method를 실행 - if((Context::getResponseMethod() == 'XMLRPC' || Context::getResponseMethod() == 'JSON') && $this->module_info->module_type == 'view') { - $oAPI = getAPI($this->module_info->module, 'api'); - if(method_exists($oAPI, $this->act)) { - $oAPI->{$this->act}($this); + if($this->module_info->module_type == 'view'){ + if(Context::getResponseMethod() == 'XMLRPC' || Context::getResponseMethod() == 'JSON') { + $oAPI = getAPI($this->module_info->module, 'api'); + if(method_exists($oAPI, $this->act)) { + $oAPI->{$this->act}($this); + } } + }else if($this->module_info->module_type == 'controller'){ + if(Context::getResponseMethod() == 'JSON'){ + + } + } return true; diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 452946a33..dd7f2e1a5 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -104,7 +104,7 @@ //$buff = preg_replace_callback('!<\!--#include\(([^\)]*?)\)-->!is', array($this, '_compileIncludeToCode'), $buff); // 이미지 태그 img의 src의 값이 http:// 나 / 로 시작하지 않으면 root경로부터 시작하도록 변경 - $buff = preg_replace_callback('/(img|input)([^>]*)src=[\'"]{1}(?!http)(.*?)[\'"]{1}/is', array($this, '_compileImgPath'), $buff); + $buff = preg_replace_callback('/<(img|input)([^>]*)src=[\'"]{1}(?!http)(.*?)[\'"]{1}/is', array($this, '_compileImgPath'), $buff); // 변수를 변경 $buff = preg_replace_callback('/\{[^@^ ]([^\{\}\n]+)\}/i', array($this, '_compileVarToContext'), $buff); @@ -124,6 +124,10 @@ // unload css/ js (media는 css에만 적용) $buff = preg_replace_callback('!<\!--%unload\(\"([^\"]*?)\"(,optimized\=(true|false))?(,media\=\"([^\"]*)\")?(,targetie=\"([^\"]*)\")?\)-->!is', array($this, '_compileUnloadCode'), $buff); + // javascript plugin import + $buff = preg_replace_callback('!<\!--%load_js_plugin\(\"([^\"]*?)\"\)-->!is', array($this, '_compileLoadJavascriptPlugin'), $buff); + + // 파일에 쓰기 전에 직접 호출되는 것을 방지 $buff = sprintf('%s%s%s','',"\n",$buff); @@ -357,6 +361,16 @@ return $output; } + /** + * @brief javascript 플러그인 import + * javascript 플러그인의 경우 optimized = false로 동작하도록 고정시킴 + **/ + function _compileLoadJavascriptPlugin($matches) { + $base_path = $this->tpl_path; + $plugin = trim($matches[1]); + return sprintf('', $plugin); + } + /** * @brief 의 확장자를 봐서 css/ js 파일을 제거하도록 수정 **/ diff --git a/classes/widget/WidgetHandler.class.php b/classes/widget/WidgetHandler.class.php index d1c2c0161..4bd1aa7df 100644 --- a/classes/widget/WidgetHandler.class.php +++ b/classes/widget/WidgetHandler.class.php @@ -121,6 +121,7 @@ $widget_padding_bottom = $args->widget_padding_bottom; $inner_style = sprintf("padding:%dpx %dpx %dpx %dpx !important; padding:none !important;", $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left); + $oDocumentModel = &getModel('document'); /** * 위젯 출력물을 구함 **/ @@ -129,7 +130,12 @@ switch($widget) { // 내용 직접 추가일 경우 case 'widgetContent' : - $body = base64_decode($args->body); + if($args->document_srl) { + $oDocument = $oDocumentModel->getDocument($args->document_srl); + $body = $oDocument->getContent(false,false,false); + } else { + $body = base64_decode($args->body); + } $output = sprintf('
%s
', $style, $inner_style, $body); break; @@ -149,15 +155,16 @@ switch($widget) { // 내용 직접 추가일 경우 case 'widgetContent' : - $body = base64_decode($args->body); + if($args->document_srl) { + $oDocument = $oDocumentModel->getDocument($args->document_srl); + $body = $oDocument->getContent(false,false,false); + } else { + $body = base64_decode($args->body); + } $oWidgetController = &getController('widget'); $output = sprintf( - '
'. - '
'. - '
'. - '
'. - '
'. + '
'. '
'. '
'. '
'. @@ -169,6 +176,7 @@ '
', $style, $args->widget_padding_left, $args->widget_padding_right, $args->widget_padding_top, $args->widget_padding_bottom, + $args->document_srl, $inner_style, $body, base64_encode($body) @@ -179,9 +187,6 @@ case 'widgetBox' : $output = sprintf( '
'. - '
'. - '
'. - '
'. '
'. '
'. '
'. @@ -203,10 +208,6 @@ $output = sprintf( '
'. - '
'. - '
'. - '
'. - '
'. '
'. '
'. '
'. diff --git a/common/css/calendar-system.css b/common/css/calendar-system.css deleted file mode 100644 index b22488572..000000000 --- a/common/css/calendar-system.css +++ /dev/null @@ -1,251 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border: 1px solid; - border-color: #fff #000 #000 #fff; - font-size: 11px; - cursor: default; - background: Window; - color: WindowText; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border: 1px solid; - border-color: #fff #000 #000 #fff; - font-size: 11px; - cursor: default; - background: Window; - color: WindowText; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border: 1px solid; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; - background: ButtonFace; -} - -.calendar .nav { - background: ButtonFace url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: ActiveCaption; - color: CaptionText; - text-align: center; -} - -.calendar thead .headrow { /* Row containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells containing the day names */ - border-bottom: 1px solid ButtonShadow; - padding: 2px; - text-align: center; - background: ButtonFace; - color: ButtonText; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border: 2px solid; - padding: 0px; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - border-width: 1px; - padding: 2px 0px 0px 2px; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid ButtonShadow; - background: ButtonFace; - color: ButtonText; -} - -.calendar tbody .rowhilite td { - background: Highlight; - color: HighlightText; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; - padding: 2px 2px 0px 2px; - background: ButtonFace; - color: ButtonText; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody td.disabled { color: GrayText; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell */ - background: ButtonFace; - padding: 1px; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; - color: ButtonText; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #e4e0d8; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border: 1px solid; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; - background: Menu; - color: MenuText; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - padding: 0px; - border: 1px solid #000; -} - -.calendar .combo .hilite { - background: Highlight; - color: HighlightText; -} - -.calendar td.time { - border-top: 1px solid ButtonShadow; - padding: 1px 0px; - text-align: center; - background-color: ButtonFace; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: Menu; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: Highlight; - color: HighlightText; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/common/js/calendar-en.js b/common/js/calendar-en.js deleted file mode 100644 index 6de06b2a8..000000000 --- a/common/js/calendar-en.js +++ /dev/null @@ -1,127 +0,0 @@ -// ** I18N - -// DyCalendar EN language -// Author: Mihai Bazon, -// Encoding: any -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names -DyCalendar._DN = new Array -("Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - "Sunday"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("Sun", - "Mon", - "Tue", - "Wed", - "Thu", - "Fri", - "Sat", - "Sun"); - -// First day of the week. "0" means display Sunday first, "1" means display -// Monday first, etc. -DyCalendar._FD = 0; - -// full month names -DyCalendar._MN = new Array -("January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December"); - -// short month names -DyCalendar._SMN = new Array -("Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "About the calendar"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + -"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + -"\n\n" + -"Date selection:\n" + -"- Use the \xab, \xbb buttons to select year\n" + -"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + -"- Hold mouse button on any of the above buttons for faster selection."; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"Time selection:\n" + -"- Click on any of the time parts to increase it\n" + -"- or Shift-click to decrease it\n" + -"- or click and drag for faster selection."; - -DyCalendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)"; -DyCalendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)"; -DyCalendar._TT["GO_TODAY"] = "Go Today"; -DyCalendar._TT["NEXT_MONTH"] = "Next month (hold for menu)"; -DyCalendar._TT["NEXT_YEAR"] = "Next year (hold for menu)"; -DyCalendar._TT["SEL_DATE"] = "Select date"; -DyCalendar._TT["DRAG_TO_MOVE"] = "Drag to move"; -DyCalendar._TT["PART_TODAY"] = " (today)"; - -// the following is to inform that "%s" is to be the first day of week -// %s will be replaced with the day name. -DyCalendar._TT["DAY_FIRST"] = "Display %s first"; - -// This may be locale-dependent. It specifies the week-end days, as an array -// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 -// means Monday, etc. -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "Close"; -DyCalendar._TT["TODAY"] = "Today"; -DyCalendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; - -DyCalendar._TT["WK"] = "wk"; -DyCalendar._TT["TIME"] = "Time:"; diff --git a/common/js/calendar-es.js b/common/js/calendar-es.js deleted file mode 100644 index f02916a3d..000000000 --- a/common/js/calendar-es.js +++ /dev/null @@ -1,130 +0,0 @@ -// ** I18N - -// DyCalendar ES language -// Author: Mihai Bazon, -// Translation: Bradly1, -// Encoding: UTF-8 -// lang : es -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names - -DyCalendar._DN = new Array -("Domingo", - "Lunes", - "Martes", - "Miércoles", - "Jueves", - "Viernes", - "Sábado", - "Domingo"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("Domingo", - "Lunes", - "Martes", - "Miércoles", - "Jueves", - "Viernes", - "Sábado", - "Domingo"); - -// First day of the week. "0" means display Sunday first, "1" means display -// Monday first, etc. -DyCalendar._FD = 0; - -// full month names -DyCalendar._MN = new Array -("Enero", - "Febrero", - "Marzo", - "Abril", - "Mayo", - "Junio", - "Julio", - "Agosto", - "Septiembre", - "Octubre", - "Noviembre", - "Diciembre"); - -// short month names -DyCalendar._SMN = new Array -("Enero", - "Febrero", - "Marzo", - "Abril", - "Mayo", - "Junio", - "Julio", - "Agosto", - "Septiembre", - "Octubre", - "Noviembre", - "Diciembre"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "Sobre el calendario"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + -"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + -"\n\n" + -"Date selection:\n" + -"- Use the \xab, \xbb buttons to select year\n" + -"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + -"- Hold mouse button on any of the above buttons for faster selection."; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"Time selection:\n" + -"- Click on any of the time parts to increase it\n" + -"- or Shift-click to decrease it\n" + -"- or click and drag for faster selection."; - -DyCalendar._TT["PREV_YEAR"] = "Prev. año (mantener para menu)"; -DyCalendar._TT["PREV_MONTH"] = "Prev. mes (mantener para menu)"; -DyCalendar._TT["GO_TODAY"] = "Ir Hoy"; -DyCalendar._TT["NEXT_MONTH"] = "El mes próximo (mantener para menu)"; -DyCalendar._TT["NEXT_YEAR"] = "El año que viene (mantener para menu)"; -DyCalendar._TT["SEL_DATE"] = "Seleccionar fecha"; -DyCalendar._TT["DRAG_TO_MOVE"] = "Arrastra para mover"; -DyCalendar._TT["PART_TODAY"] = " (hoy)"; - -// the following is to inform that "%s" is to be the first day of week -// %s will be replaced with the day name. -DyCalendar._TT["DAY_FIRST"] = "Mostrar% s primero"; - -// This may be locale-dependent. It specifies the week-end days, as an array -// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 -// means Monday, etc. -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "Cerrar"; -DyCalendar._TT["TODAY"] = "Hoy"; -DyCalendar._TT["TIME_PART"] = "(Shift-) Haga clic o arrastre para cambiar el valor"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; - -DyCalendar._TT["WK"] = "wk"; -DyCalendar._TT["TIME"] = "Tiempo:"; diff --git a/common/js/calendar-ge.js b/common/js/calendar-ge.js deleted file mode 100644 index aa59d2dd9..000000000 --- a/common/js/calendar-ge.js +++ /dev/null @@ -1,129 +0,0 @@ -// ** I18N - -// DyCalendar GE language -// Author: Mihai Bazon, -// Translation: bradly1, -// Encoding: UTF-8 -// lang : ge -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names -DyCalendar._DN = new Array -("Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag", - "Sonntag"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("Sonntag", - "Montag", - "Dienstag", - "Mittwoch", - "Donnerstag", - "Freitag", - "Samstag", - "Sonntag"); - -// First day of the week. "0" means display Sunday first, "1" means display -// Monday first, etc. -DyCalendar._FD = 0; - -// full month names -DyCalendar._MN = new Array -("Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember"); - -// short month names -DyCalendar._SMN = new Array -("Januar", - "Februar", - "März", - "April", - "Mai", - "Juni", - "Juli", - "August", - "September", - "Oktober", - "November", - "Dezember"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "Über den Kalender"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + -"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + -"\n\n" + -"Date selection:\n" + -"- Use the \xab, \xbb buttons to select year\n" + -"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + -"- Hold mouse button on any of the above buttons for faster selection."; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"Time selection:\n" + -"- Click on any of the time parts to increase it\n" + -"- or Shift-click to decrease it\n" + -"- or click and drag for faster selection."; - -DyCalendar._TT["PREV_YEAR"] = "Prev. Jahr (halten für Menü)"; -DyCalendar._TT["PREV_MONTH"] = "Prev. Monat (halten für Menü)"; -DyCalendar._TT["GO_TODAY"] = "Gehe Heute"; -DyCalendar._TT["NEXT_MONTH"] = "Nächsten Monat (halten für Menü)"; -DyCalendar._TT["NEXT_YEAR"] = "Nächstes Jahr (halten für Menü)"; -DyCalendar._TT["SEL_DATE"] = "Wählen Sie das Datum"; -DyCalendar._TT["DRAG_TO_MOVE"] = "Per Drag & Drop verschieben"; -DyCalendar._TT["PART_TODAY"] = " (heute)"; - -// the following is to inform that "%s" is to be the first day of week -// %s will be replaced with the day name. -DyCalendar._TT["DAY_FIRST"] = "Anzeige% s erste"; - -// This may be locale-dependent. It specifies the week-end days, as an array -// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 -// means Monday, etc. -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "Schließen"; -DyCalendar._TT["TODAY"] = "Heute"; -DyCalendar._TT["TIME_PART"] = "(Shift-)Klicken Sie oder ziehen Sie ändern Wert"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; - -DyCalendar._TT["WK"] = "wk"; -DyCalendar._TT["TIME"] = "Zeit:"; diff --git a/common/js/calendar-jp.js b/common/js/calendar-jp.js deleted file mode 100644 index 692ba1db8..000000000 --- a/common/js/calendar-jp.js +++ /dev/null @@ -1,124 +0,0 @@ -// ** I18N - -// DyCalendar JA language -// Author: Mihai Bazon, -// Translation: ミニミ -// Encoding: UTF-8 -// lang : jp -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names - -DyCalendar._DN = new Array -("日曜日", - "月曜日", - "火曜日", - "水曜日", - "木曜日", - "金曜日", - "土曜日", - "日曜日"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("日", - "月", - "火", - "水", - "木", - "金", - "土", - "日"); - -// full month names -DyCalendar._MN = new Array -("1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月"); - -// short month names -DyCalendar._SMN = new Array -("1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "カレンダーの紹介"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"\n"+ -"最新バージョンは http://www.dynarch.com/projects/calendar/ にご訪問して下さい。\n" + -"\n"+ -"GNU LGPL ライセンスで配布されます。 \n"+ -"より詳しいライセンスの内容は http://gnu.org/licenses/lgpl.html をお読みください。" + -"\n\n" + -"日付選択:\n" + -"- 年度の選択には \xab, \xbb ボタンを使います。\n" + -"- 月の選択には " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " ボタンを使って下さい。\n" + -"- ずっと押していると上の値をよら楽に選択できます。"; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"時間の選択:\n" + -"- マウスをクリックすると時間が増加します。\n" + -"- Shiftキーと同時にクリックすると減ります。\n" + -"- 押している状態で、マウスを動かすとより早く値が変化します。\n"; - -DyCalendar._TT["PREV_YEAR"] = "前年 (長く押すとリスト)"; -DyCalendar._TT["PREV_MONTH"] = "前月 (長く押すとリスト)"; -DyCalendar._TT["GO_TODAY"] = "今日"; -DyCalendar._TT["NEXT_MONTH"] = "翌月 (長く押すとリスト)"; -DyCalendar._TT["NEXT_YEAR"] = "翌年 (長く押すとリスト)"; -DyCalendar._TT["SEL_DATE"] = "日付選択"; -DyCalendar._TT["DRAG_TO_MOVE"] = "ウィンドウの移動"; -DyCalendar._TT["PART_TODAY"] = " (今日)"; - -DyCalendar._TT["DAY_FIRST"] = "%s を先頭に"; - -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "閉じる"; -DyCalendar._TT["TODAY"] = "今日"; -DyCalendar._TT["TIME_PART"] = "(Shift-)クリック、もしくはドラッグして下さい。"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; - -DyCalendar._TT["WK"] = "週"; -DyCalendar._TT["TIME"] = "時:"; diff --git a/common/js/calendar-ko.js b/common/js/calendar-ko.js deleted file mode 100644 index e020593b5..000000000 --- a/common/js/calendar-ko.js +++ /dev/null @@ -1,124 +0,0 @@ -// ** I18N - -// DyCalendar KO language -// Author: Mihai Bazon, -// Translation: Yourim Yi -// Encoding: UTF-8 -// lang : ko -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names - -DyCalendar._DN = new Array -("일요일", - "월요일", - "화요일", - "수요일", - "목요일", - "금요일", - "토요일", - "일요일"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("일", - "월", - "화", - "수", - "목", - "금", - "토", - "일"); - -// full month names -DyCalendar._MN = new Array -("1월", - "2월", - "3월", - "4월", - "5월", - "6월", - "7월", - "8월", - "9월", - "10월", - "11월", - "12월"); - -// short month names -DyCalendar._SMN = new Array -("1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "calendar 소개"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"\n"+ -"최신 버전을 받으시려면 http://www.dynarch.com/projects/calendar/ 에 방문하세요\n" + -"\n"+ -"GNU LGPL 라이선스로 배포됩니다. \n"+ -"라이선스에 대한 자세한 내용은 http://gnu.org/licenses/lgpl.html 을 읽으세요." + -"\n\n" + -"날짜 선택:\n" + -"- 연도를 선택하려면 \xab, \xbb 버튼을 사용합니다\n" + -"- 달을 선택하려면 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 버튼을 누르세요\n" + -"- 계속 누르고 있으면 위 값들을 빠르게 선택하실 수 있습니다."; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"시간 선택:\n" + -"- 마우스로 누르면 시간이 증가합니다\n" + -"- Shift 키와 함께 누르면 감소합니다\n" + -"- 누른 상태에서 마우스를 움직이면 좀 더 빠르게 값이 변합니다.\n"; - -DyCalendar._TT["PREV_YEAR"] = "지난 해 (길게 누르면 목록)"; -DyCalendar._TT["PREV_MONTH"] = "지난 달 (길게 누르면 목록)"; -DyCalendar._TT["GO_TODAY"] = "오늘 날짜로"; -DyCalendar._TT["NEXT_MONTH"] = "다음 달 (길게 누르면 목록)"; -DyCalendar._TT["NEXT_YEAR"] = "다음 해 (길게 누르면 목록)"; -DyCalendar._TT["SEL_DATE"] = "날짜를 선택하세요"; -DyCalendar._TT["DRAG_TO_MOVE"] = "마우스 드래그로 이동 하세요"; -DyCalendar._TT["PART_TODAY"] = " (오늘)"; - -DyCalendar._TT["DAY_FIRST"] = "%s 먼저 표시"; - -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "닫기"; -DyCalendar._TT["TODAY"] = "오늘"; -DyCalendar._TT["TIME_PART"] = "(Shift-)클릭 또는 드래그 하세요"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; - -DyCalendar._TT["WK"] = "주"; -DyCalendar._TT["TIME"] = "시:"; diff --git a/common/js/calendar-ru.js b/common/js/calendar-ru.js deleted file mode 100644 index d9937313b..000000000 --- a/common/js/calendar-ru.js +++ /dev/null @@ -1,129 +0,0 @@ -// ** I18N - -// DyCalendar RU language -// Author: Mihai Bazon, -// Translation: bradly1, -// Encoding: UTF-8 -// lang : RU -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names -DyCalendar._DN = new Array -("Воскресенье", - "Понедельник", - "Вторник", - "Среда", - "Четверг", - "Пятница", - "Суббота", - "Воскресенье"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("Sun", - "ПН", - "ВТ", - "Wed", - "Thu", - "Пят", - "СБ", - "Солнце"); - -// First day of the week. "0" means display Sunday first, "1" means display -// Monday first, etc. -DyCalendar._FD = 0; - -// full month names -DyCalendar._MN = new Array -("Январь", - "Февраль", - "Марта", - "Апрель", - "Мая", - "Июнь", - "Июль", - "Август", - "Сентябрь", - "Октябрь", - "Ноябрь", - "Декабрь"); - -// short month names -DyCalendar._SMN = new Array -("Январь", - "Февраль", - "Марта", - "Апрель", - "Мая", - "Июнь", - "Июль", - "Август", - "Сентябрь", - "Октябрь", - "Ноябрь", - "Декабрь"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "О календаре"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"For latest version visit: http://www.dynarch.com/projects/calendar/\n" + -"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + -"\n\n" + -"Date selection:\n" + -"- Use the \xab, \xbb buttons to select year\n" + -"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + -"- Hold mouse button on any of the above buttons for faster selection."; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"Time selection:\n" + -"- Click on any of the time parts to increase it\n" + -"- or Shift-click to decrease it\n" + -"- or click and drag for faster selection."; - -DyCalendar._TT [ "PREV_YEAR"] = "Пред. Год (удерживать для меню)"; -DyCalendar._TT [ "PREV_MONTH"] = "Пред. Месяце (удерживать для меню)"; -DyCalendar._TT [ "GO_TODAY"] = "Перейти Сегодня"; -DyCalendar._TT [ "NEXT_MONTH"] = "В следующем месяце (удерживать для меню)"; -DyCalendar._TT [ "NEXT_YEAR"] = "В следующем году (удерживать для меню)"; -DyCalendar._TT [ "SEL_DATE"] = "Выберите дату"; -DyCalendar._TT [ "DRAG_TO_MOVE"] = "Перетаскивайте двигаться"; -DyCalendar._TT [ "PART_TODAY"] = "(сегодня)"; - -// the following is to inform that "%s" is to be the first day of week -// %s will be replaced with the day name. -DyCalendar._TT [ "DAY_FIRST"] = "display% с первой"; - -// This may be locale-dependent. It specifies the week-end days, as an array -// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 -// means Monday, etc. -DyCalendar._TT [ "WEEKEND"] = "0,6"; - -DyCalendar._TT [ "CLOSE"] = "Закрыть"; -DyCalendar._TT [ "Today"] = "Сегодня"; -DyCalendar._TT [ "TIME_PART"] = "(Shift-) клик или перетащите для изменения стоимости"; - -// date formats -DyCalendar._TT [ "DEF_DATE_FORMAT"] = "% Y-% м-% г"; -DyCalendar._TT [ "TT_DATE_FORMAT"] = "%,%% е б"; - -DyCalendar._TT [ "WK"] = "Нед"; -DyCalendar._TT [ "TIME"] = "Время:"; diff --git a/common/js/calendar-setup.js b/common/js/calendar-setup.js deleted file mode 100644 index 620b9ebde..000000000 --- a/common/js/calendar-setup.js +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ - * --------------------------------------------------------------------------- - * - * The DHTML Calendar - * - * Details and latest version at: - * http://dynarch.com/mishoo/calendar.epl - * - * This script is distributed under the GNU Lesser General Public License. - * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html - * - * This file defines helper functions for setting up the calendar. They are - * intended to help non-programmers get a working calendar on their site - * quickly. This script should not be seen as part of the calendar. It just - * shows you what one can do with the calendar, while in the same time - * providing a quick and simple method for setting it up. If you need - * exhaustive customization of the calendar creation process feel free to - * modify this code to suit your needs (this is recommended and much better - * than modifying calendar.js itself). - */ - -// $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $ - -/** - * This function "patches" an input field (or other element) to use a calendar - * widget for date selection. - * - * The "params" is a single object that can have the following properties: - * - * prop. name | description - * ------------------------------------------------------------------------------------------------- - * inputField | the ID of an input field to store the date - * displayArea | the ID of a DIV or other element to show the date - * button | ID of a button or other element that will trigger the calendar - * eventName | event that will trigger the calendar, without the "on" prefix (default: "click") - * ifFormat | date format that will be stored in the input field - * daFormat | the date format that will be used to display the date in displayArea - * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) - * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc. - * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation - * range | array with 2 elements. Default: [1900, 2999] -- the range of years available - * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers - * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID - * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar) - * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar - * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay) - * onClose | function that gets called when the calendar is closed. [default] - * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar. - * date | the date that the calendar will be initially displayed to - * showsTime | default: false; if true the calendar will include a time selector - * timeFormat | the time format; can be "12" or "24", default is "12" - * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close - * step | configures the step of the years in drop-down boxes; default: 2 - * position | configures the calendar absolute position; default: null - * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible - * showOthers | if "true" (but default: "false") it will show days from other months too - * - * None of them is required, they all have default values. However, if you - * pass none of "inputField", "displayArea" or "button" you'll get a warning - * saying "nothing to setup". - */ -DyCalendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]])}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("DyCalendar.setup:\n Nothing to setup (no fields found). Please check your code");return false}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange()}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal)}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler()};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("DyCalendar.setup:\n Flat specified but can't find parent.");return false}var cal=new DyCalendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat)}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value)}cal.create(params.flat);cal.show();return false}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=null;if(params.displayArea)dateEl=params.displayArea;else dateEl=params.inputField;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&¶ms.cache)){window.calendar=cal=new DyCalendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide()});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true}else{if(params.date)cal.setDate(params.date);cal.hide()}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false};return cal}; \ No newline at end of file diff --git a/common/js/calendar-zh-CN.js b/common/js/calendar-zh-CN.js deleted file mode 100644 index c6896043f..000000000 --- a/common/js/calendar-zh-CN.js +++ /dev/null @@ -1,124 +0,0 @@ -// ** I18N - -// DyCalendar zh-CN language -// Author: Mihai Bazon, -// Translation: Yourim Yi -// Encoding: UTF-8 -// lang : ko -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names - -DyCalendar._DN = new Array -("星期日", - "星期一", - "星期二", - "星期三", - "星期四", - "星期五", - "星期六", - "星期日"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("日", - "一", - "二", - "三", - "四", - "五", - "六", - "日"); - -// full month names -DyCalendar._MN = new Array -("1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月"); - -// short month names -DyCalendar._SMN = new Array -("1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "calendar 简介"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"\n"+ -"下载最新版本请访问 http://www.dynarch.com/projects/calendar/ \n" + -"\n"+ -"遵循GNU LGPL许可协议。 \n"+ -"具体许可内容请参考 http://gnu.org/licenses/lgpl.html " + -"\n\n" + -"日期选择:\n" + -"- 选择年份请使用 \xab, \xbb 按钮\n" + -"- 选择月份请使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按钮\n" + -"- 按住按钮可快速的选择所需的年份或月份"; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"时间选择:\n" + -"- 鼠标点击可增加时间\n" + -"- 配合Shift键,时间减少 \n" + -"- 鼠标按住状态下向右为增加向左为减少,这样时间调整会快一些。\n"; - -DyCalendar._TT["PREV_YEAR"] = "去年 (按住显示目录)"; -DyCalendar._TT["PREV_MONTH"] = "上月 (按住显示目录)"; -DyCalendar._TT["GO_TODAY"] = "设为今日"; -DyCalendar._TT["NEXT_MONTH"] = "下月 (按住显示目录)"; -DyCalendar._TT["NEXT_YEAR"] = "来年 (按住显示目录)"; -DyCalendar._TT["SEL_DATE"] = "请选择日期"; -DyCalendar._TT["DRAG_TO_MOVE"] = "可以用鼠标拖动"; -DyCalendar._TT["PART_TODAY"] = " (今日)"; - -DyCalendar._TT["DAY_FIRST"] = "%s排到第一列"; - -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "关闭"; -DyCalendar._TT["TODAY"] = "今日"; -DyCalendar._TT["TIME_PART"] = "(Shift-)点击或拖动"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; - -DyCalendar._TT["WK"] = "周"; -DyCalendar._TT["TIME"] = "时:"; diff --git a/common/js/calendar-zh-TW.js b/common/js/calendar-zh-TW.js deleted file mode 100644 index 8815ca979..000000000 --- a/common/js/calendar-zh-TW.js +++ /dev/null @@ -1,122 +0,0 @@ -// ** I18N - -// DyCalendar zh-TW language -// Author: Mihai Bazon, -// Encoding: UTF-8 -// Distributed under the same terms as the calendar itself. - -// For translators: please use UTF-8 if possible. We strongly believe that -// Unicode is the answer to a real internationalized world. Also please -// include your contact information in the header, as can be seen above. - -// full day names - -DyCalendar._DN = new Array -("星期日", - "星期一", - "星期二", - "星期三", - "星期四", - "星期五", - "星期六", - "星期日"); - -// Please note that the following array of short day names (and the same goes -// for short month names, _SMN) isn't absolutely necessary. We give it here -// for exemplification on how one can customize the short day names, but if -// they are simply the first N letters of the full name you can simply say: -// -// DyCalendar._SDN_len = N; // short day name length -// DyCalendar._SMN_len = N; // short month name length -// -// If N = 3 then this is not needed either since we assume a value of 3 if not -// present, to be compatible with translation files that were written before -// this feature. - -// short day names -DyCalendar._SDN = new Array -("日", - "一", - "二", - "三", - "四", - "五", - "六", - "日"); - -// full month names -DyCalendar._MN = new Array -("1月", - "2月", - "3月", - "4月", - "5月", - "6月", - "7月", - "8月", - "9月", - "10月", - "11月", - "12月"); - -// short month names -DyCalendar._SMN = new Array -("1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12"); - -// tooltips -DyCalendar._TT = {}; -DyCalendar._TT["INFO"] = "日曆簡介"; - -DyCalendar._TT["ABOUT"] = -"DHTML Date/Time Selector\n" + -"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) -"\n"+ -"請到 http://www.dynarch.com/projects/calendar/ 下載最新版本\n" + -"\n"+ -"遵照 GNU LGPL版權。 \n"+ -"實際的版權内容請參考考 http://gnu.org/licenses/lgpl.html " + -"\n\n" + -"選擇日期:\n" + -"- 選擇年份請使用 \xab, \xbb 按鈕\n" + -"- 選擇月份請使用 " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " 按鈕\n" + -"- 按住按鈕可快速的選擇所要的年份或月份"; -DyCalendar._TT["ABOUT_TIME"] = "\n\n" + -"選擇時間:\n" + -"- 以滑鼠點擊可增加時間\n" + -"- 配合Shift按鍵,可減少時間 \n" + -"- 在按住滑鼠的狀態下,往右是增加、往左是減少,可快速調整時間。\n"; - -DyCalendar._TT["PREV_YEAR"] = "去年 (按住顯示目錄)"; -DyCalendar._TT["PREV_MONTH"] = "上個月 (按住顯示目錄)"; -DyCalendar._TT["GO_TODAY"] = "設為今天"; -DyCalendar._TT["NEXT_MONTH"] = "下個月 (按住顯示目錄)"; -DyCalendar._TT["NEXT_YEAR"] = "明年 (按住顯示目錄)"; -DyCalendar._TT["SEL_DATE"] = "請選擇日期"; -DyCalendar._TT["DRAG_TO_MOVE"] = "可用滑鼠拖曳"; -DyCalendar._TT["PART_TODAY"] = " (今日)"; - -DyCalendar._TT["DAY_FIRST"] = "%s排到第一列"; - -DyCalendar._TT["WEEKEND"] = "0,6"; - -DyCalendar._TT["CLOSE"] = "關閉"; -DyCalendar._TT["TODAY"] = "今日"; -DyCalendar._TT["TIME_PART"] = "(Shift-)點擊或拖曳"; - -// date formats -DyCalendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; -DyCalendar._TT["TT_DATE_FORMAT"] = "%b/%e [%a]"; - -DyCalendar._TT["WK"] = "周"; -DyCalendar._TT["TIME"] = "時:"; diff --git a/common/js/calendar.js b/common/js/calendar.js deleted file mode 100644 index edd246a5c..000000000 --- a/common/js/calendar.js +++ /dev/null @@ -1,1803 +0,0 @@ -/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo - * ----------------------------------------------------------- - * - * The DHTML Calendar, version 1.0 "It is happening again" - * - * Details and latest version at: - * www.dynarch.com/projects/calendar - * - * This script is developed by Dynarch.com. Visit us at www.dynarch.com. - * - * This script is distributed under the GNU Lesser General Public License. - * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html - */ - -// $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $ - -/** The Calendar object constructor. */ -DyCalendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { - // member variables - this.activeDiv = null; - this.currentDateEl = null; - this.getDateStatus = null; - this.getDateToolTip = null; - this.getDateText = null; - this.timeout = null; - this.onSelected = onSelected || null; - this.onClose = onClose || null; - this.dragging = false; - this.hidden = false; - this.minYear = 1970; - this.maxYear = 2050; - this.dateFormat = DyCalendar._TT["DEF_DATE_FORMAT"]; - this.ttDateFormat = DyCalendar._TT["TT_DATE_FORMAT"]; - this.isPopup = true; - this.weekNumbers = true; - this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : DyCalendar._FD; // 0 for Sunday, 1 for Monday, etc. - this.showsOtherMonths = false; - this.dateStr = dateStr; - this.ar_days = null; - this.showsTime = false; - this.time24 = true; - this.yearStep = 2; - this.hiliteToday = true; - this.multiple = null; - // HTML elements - this.table = null; - this.element = null; - this.tbody = null; - this.firstdayname = null; - // Combo boxes - this.monthsCombo = null; - this.yearsCombo = null; - this.hilitedMonth = null; - this.activeMonth = null; - this.hilitedYear = null; - this.activeYear = null; - // Information - this.dateClicked = false; - - // one-time initializations - if (typeof DyCalendar._SDN == "undefined") { - // table of short day names - if (typeof DyCalendar._SDN_len == "undefined") - DyCalendar._SDN_len = 3; - var ar = new Array(); - for (var i = 8; i > 0;) { - ar[--i] = DyCalendar._DN[i].substr(0, DyCalendar._SDN_len); - } - DyCalendar._SDN = ar; - // table of short month names - if (typeof DyCalendar._SMN_len == "undefined") - DyCalendar._SMN_len = 3; - ar = new Array(); - for (var i = 12; i > 0;) { - ar[--i] = DyCalendar._MN[i].substr(0, DyCalendar._SMN_len); - } - DyCalendar._SMN = ar; - } -}; - -// ** constants - -/// "static", needed for event handlers. -DyCalendar._C = null; - -/// detect a special case of "web browser" -DyCalendar.is_ie = ( /msie/i.test(navigator.userAgent) && - !/opera/i.test(navigator.userAgent) ); - -DyCalendar.is_ie5 = ( DyCalendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); - -/// detect Opera browser -DyCalendar.is_opera = /opera/i.test(navigator.userAgent); - -/// detect KHTML-based browsers -DyCalendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent); - -// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate -// library, at some point. - -DyCalendar.getAbsolutePos = function(el) { - var SL = 0, ST = 0; - var is_div = /^div$/i.test(el.tagName); - if (is_div && el.scrollLeft) - SL = el.scrollLeft; - if (is_div && el.scrollTop) - ST = el.scrollTop; - var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; - if (el.offsetParent) { - var tmp = this.getAbsolutePos(el.offsetParent); - r.x += tmp.x; - r.y += tmp.y; - } - return r; -}; - -DyCalendar.isRelated = function (el, evt) { - var related = evt.relatedTarget; - if (!related) { - var type = evt.type; - if (type == "mouseover") { - related = evt.fromElement; - } else if (type == "mouseout") { - related = evt.toElement; - } - } - while (related) { - if (related == el) { - return true; - } - related = related.parentNode; - } - return false; -}; - -DyCalendar.removeClass = function(el, className) { - if (!(el && el.className)) { - return; - } - var cls = el.className.split(" "); - var ar = new Array(); - for (var i = cls.length; i > 0;) { - if (cls[--i] != className) { - ar[ar.length] = cls[i]; - } - } - el.className = ar.join(" "); -}; - -DyCalendar.addClass = function(el, className) { - DyCalendar.removeClass(el, className); - el.className += " " + className; -}; - -// FIXME: the following 2 functions totally suck, are useless and should be replaced immediately. -DyCalendar.getElement = function(ev) { - var f = DyCalendar.is_ie ? window.event.srcElement : ev.currentTarget; - while (f.nodeType != 1 || /^div$/i.test(f.tagName)) - f = f.parentNode; - return f; -}; - -DyCalendar.getTargetElement = function(ev) { - var f = DyCalendar.is_ie ? window.event.srcElement : ev.target; - while (f.nodeType != 1) - f = f.parentNode; - return f; -}; - -DyCalendar.stopEvent = function(ev) { - ev || (ev = window.event); - if (DyCalendar.is_ie) { - ev.cancelBubble = true; - ev.returnValue = false; - } else { - ev.preventDefault(); - ev.stopPropagation(); - } - return false; -}; - -DyCalendar.addEvent = function(el, evname, func) { - if (el.attachEvent) { // IE - el.attachEvent("on" + evname, func); - } else if (el.addEventListener) { // Gecko / W3C - el.addEventListener(evname, func, true); - } else { - el["on" + evname] = func; - } -}; - -DyCalendar.removeEvent = function(el, evname, func) { - if (el.detachEvent) { // IE - el.detachEvent("on" + evname, func); - } else if (el.removeEventListener) { // Gecko / W3C - el.removeEventListener(evname, func, true); - } else { - el["on" + evname] = null; - } -}; - -DyCalendar.createElement = function(type, parent) { - var el = null; - if (document.createElementNS) { - // use the XHTML namespace; IE won't normally get here unless - // _they_ "fix" the DOM2 implementation. - el = document.createElementNS("http://www.w3.org/1999/xhtml", type); - } else { - el = document.createElement(type); - } - if (typeof parent != "undefined") { - parent.appendChild(el); - } - return el; -}; - -// END: UTILITY FUNCTIONS - -// BEGIN: CALENDAR STATIC FUNCTIONS - -/** Internal -- adds a set of events to make some element behave like a button. */ -DyCalendar._add_evs = function(el) { - with (DyCalendar) { - addEvent(el, "mouseover", dayMouseOver); - addEvent(el, "mousedown", dayMouseDown); - addEvent(el, "mouseout", dayMouseOut); - if (is_ie) { - addEvent(el, "dblclick", dayMouseDblClick); - el.setAttribute("unselectable", true); - } - } -}; - -DyCalendar.findMonth = function(el) { - if (typeof el.month != "undefined") { - return el; - } else if (typeof el.parentNode.month != "undefined") { - return el.parentNode; - } - return null; -}; - -DyCalendar.findYear = function(el) { - if (typeof el.year != "undefined") { - return el; - } else if (typeof el.parentNode.year != "undefined") { - return el.parentNode; - } - return null; -}; - -DyCalendar.showMonthsCombo = function () { - var cal = DyCalendar._C; - if (!cal) { - return false; - } - var cal = cal; - var cd = cal.activeDiv; - var mc = cal.monthsCombo; - if (cal.hilitedMonth) { - DyCalendar.removeClass(cal.hilitedMonth, "hilite"); - } - if (cal.activeMonth) { - DyCalendar.removeClass(cal.activeMonth, "active"); - } - var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()]; - DyCalendar.addClass(mon, "active"); - cal.activeMonth = mon; - var s = mc.style; - s.display = "block"; - if (cd.navtype < 0) - s.left = cd.offsetLeft + "px"; - else { - var mcw = mc.offsetWidth; - if (typeof mcw == "undefined") - // Konqueror brain-dead techniques - mcw = 50; - s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; - } - s.top = (cd.offsetTop + cd.offsetHeight) + "px"; -}; - -DyCalendar.showYearsCombo = function (fwd) { - var cal = DyCalendar._C; - if (!cal) { - return false; - } - var cal = cal; - var cd = cal.activeDiv; - var yc = cal.yearsCombo; - if (cal.hilitedYear) { - DyCalendar.removeClass(cal.hilitedYear, "hilite"); - } - if (cal.activeYear) { - DyCalendar.removeClass(cal.activeYear, "active"); - } - cal.activeYear = null; - var Y = cal.date.getFullYear() + (fwd ? 1 : -1); - var yr = yc.firstChild; - var show = false; - for (var i = 12; i > 0; --i) { - if (Y >= cal.minYear && Y <= cal.maxYear) { - yr.innerHTML = Y; - yr.year = Y; - yr.style.display = "block"; - show = true; - } else { - yr.style.display = "none"; - } - yr = yr.nextSibling; - Y += fwd ? cal.yearStep : -cal.yearStep; - } - if (show) { - var s = yc.style; - s.display = "block"; - if (cd.navtype < 0) - s.left = cd.offsetLeft + "px"; - else { - var ycw = yc.offsetWidth; - if (typeof ycw == "undefined") - // Konqueror brain-dead techniques - ycw = 50; - s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; - } - s.top = (cd.offsetTop + cd.offsetHeight) + "px"; - } -}; - -// event handlers - -DyCalendar.tableMouseUp = function(ev) { - var cal = DyCalendar._C; - if (!cal) { - return false; - } - if (cal.timeout) { - clearTimeout(cal.timeout); - } - var el = cal.activeDiv; - if (!el) { - return false; - } - var target = DyCalendar.getTargetElement(ev); - ev || (ev = window.event); - DyCalendar.removeClass(el, "active"); - if (target == el || target.parentNode == el) { - DyCalendar.cellClick(el, ev); - } - var mon = DyCalendar.findMonth(target); - var date = null; - if (mon) { - date = new Date(cal.date); - if (mon.month != date.getMonth()) { - date.setMonth(mon.month); - cal.setDate(date); - cal.dateClicked = false; - cal.callHandler(); - } - } else { - var year = DyCalendar.findYear(target); - if (year) { - date = new Date(cal.date); - if (year.year != date.getFullYear()) { - date.setFullYear(year.year); - cal.setDate(date); - cal.dateClicked = false; - cal.callHandler(); - } - } - } - with (DyCalendar) { - removeEvent(document, "mouseup", tableMouseUp); - removeEvent(document, "mouseover", tableMouseOver); - removeEvent(document, "mousemove", tableMouseOver); - cal._hideCombos(); - _C = null; - return stopEvent(ev); - } -}; - -DyCalendar.tableMouseOver = function (ev) { - var cal = DyCalendar._C; - if (!cal) { - return; - } - var el = cal.activeDiv; - var target = DyCalendar.getTargetElement(ev); - if (target == el || target.parentNode == el) { - DyCalendar.addClass(el, "hilite active"); - DyCalendar.addClass(el.parentNode, "rowhilite"); - } else { - if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2))) - DyCalendar.removeClass(el, "active"); - DyCalendar.removeClass(el, "hilite"); - DyCalendar.removeClass(el.parentNode, "rowhilite"); - } - ev || (ev = window.event); - if (el.navtype == 50 && target != el) { - var pos = DyCalendar.getAbsolutePos(el); - var w = el.offsetWidth; - var x = ev.clientX; - var dx; - var decrease = true; - if (x > pos.x + w) { - dx = x - pos.x - w; - decrease = false; - } else - dx = pos.x - x; - - if (dx < 0) dx = 0; - var range = el._range; - var current = el._current; - var count = Math.floor(dx / 10) % range.length; - for (var i = range.length; --i >= 0;) - if (range[i] == current) - break; - while (count-- > 0) - if (decrease) { - if (--i < 0) - i = range.length - 1; - } else if ( ++i >= range.length ) - i = 0; - var newval = range[i]; - el.innerHTML = newval; - - cal.onUpdateTime(); - } - var mon = DyCalendar.findMonth(target); - if (mon) { - if (mon.month != cal.date.getMonth()) { - if (cal.hilitedMonth) { - DyCalendar.removeClass(cal.hilitedMonth, "hilite"); - } - DyCalendar.addClass(mon, "hilite"); - cal.hilitedMonth = mon; - } else if (cal.hilitedMonth) { - DyCalendar.removeClass(cal.hilitedMonth, "hilite"); - } - } else { - if (cal.hilitedMonth) { - DyCalendar.removeClass(cal.hilitedMonth, "hilite"); - } - var year = DyCalendar.findYear(target); - if (year) { - if (year.year != cal.date.getFullYear()) { - if (cal.hilitedYear) { - DyCalendar.removeClass(cal.hilitedYear, "hilite"); - } - DyCalendar.addClass(year, "hilite"); - cal.hilitedYear = year; - } else if (cal.hilitedYear) { - DyCalendar.removeClass(cal.hilitedYear, "hilite"); - } - } else if (cal.hilitedYear) { - DyCalendar.removeClass(cal.hilitedYear, "hilite"); - } - } - return DyCalendar.stopEvent(ev); -}; - -DyCalendar.tableMouseDown = function (ev) { - if (DyCalendar.getTargetElement(ev) == DyCalendar.getElement(ev)) { - return DyCalendar.stopEvent(ev); - } -}; - -DyCalendar.calDragIt = function (ev) { - var cal = DyCalendar._C; - if (!(cal && cal.dragging)) { - return false; - } - var posX; - var posY; - if (DyCalendar.is_ie) { - posY = window.event.clientY + document.body.scrollTop; - posX = window.event.clientX + document.body.scrollLeft; - } else { - posX = ev.pageX; - posY = ev.pageY; - } - cal.hideShowCovered(); - var st = cal.element.style; - st.left = (posX - cal.xOffs) + "px"; - st.top = (posY - cal.yOffs) + "px"; - return DyCalendar.stopEvent(ev); -}; - -DyCalendar.calDragEnd = function (ev) { - var cal = DyCalendar._C; - if (!cal) { - return false; - } - cal.dragging = false; - with (DyCalendar) { - removeEvent(document, "mousemove", calDragIt); - removeEvent(document, "mouseup", calDragEnd); - tableMouseUp(ev); - } - cal.hideShowCovered(); -}; - -DyCalendar.dayMouseDown = function(ev) { - var el = DyCalendar.getElement(ev); - if (el.disabled) { - return false; - } - var cal = el.calendar; - cal.activeDiv = el; - DyCalendar._C = cal; - if (el.navtype != 300) with (DyCalendar) { - if (el.navtype == 50) { - el._current = el.innerHTML; - addEvent(document, "mousemove", tableMouseOver); - } else - addEvent(document, DyCalendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); - addClass(el, "hilite active"); - addEvent(document, "mouseup", tableMouseUp); - } else if (cal.isPopup) { - cal._dragStart(ev); - } - if (el.navtype == -1 || el.navtype == 1) { - if (cal.timeout) clearTimeout(cal.timeout); - cal.timeout = setTimeout("DyCalendar.showMonthsCombo()", 250); - } else if (el.navtype == -2 || el.navtype == 2) { - if (cal.timeout) clearTimeout(cal.timeout); - cal.timeout = setTimeout((el.navtype > 0) ? "DyCalendar.showYearsCombo(true)" : "DyCalendar.showYearsCombo(false)", 250); - } else { - cal.timeout = null; - } - return DyCalendar.stopEvent(ev); -}; - -DyCalendar.dayMouseDblClick = function(ev) { - DyCalendar.cellClick(DyCalendar.getElement(ev), ev || window.event); - if (DyCalendar.is_ie) { - document.selection.empty(); - } -}; - -DyCalendar.dayMouseOver = function(ev) { - var el = DyCalendar.getElement(ev); - if (DyCalendar.isRelated(el, ev) || DyCalendar._C || el.disabled) { - return false; - } - if (el.ttip) { - if (el.ttip.substr(0, 1) == "_") { - el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); - } - el.calendar.tooltips.innerHTML = el.ttip; - } - if (el.navtype != 300) { - DyCalendar.addClass(el, "hilite"); - if (el.caldate) { - DyCalendar.addClass(el.parentNode, "rowhilite"); - } - } - return DyCalendar.stopEvent(ev); -}; - -DyCalendar.dayMouseOut = function(ev) { - with (DyCalendar) { - var el = getElement(ev); - if (isRelated(el, ev) || _C || el.disabled) - return false; - removeClass(el, "hilite"); - if (el.caldate) - removeClass(el.parentNode, "rowhilite"); - if (el.calendar) - el.calendar.tooltips.innerHTML = _TT["SEL_DATE"]; - return stopEvent(ev); - } -}; - -/** - * A generic "click" handler :) handles all types of buttons defined in this - * calendar. - */ -DyCalendar.cellClick = function(el, ev) { - var cal = el.calendar; - var closing = false; - var newdate = false; - var date = null; - if (typeof el.navtype == "undefined") { - if (cal.currentDateEl) { - DyCalendar.removeClass(cal.currentDateEl, "selected"); - DyCalendar.addClass(el, "selected"); - closing = (cal.currentDateEl == el); - if (!closing) { - cal.currentDateEl = el; - } - } - cal.date.setDateOnly(el.caldate); - date = cal.date; - var other_month = !(cal.dateClicked = !el.otherMonth); - if (!other_month && !cal.currentDateEl) - cal._toggleMultipleDate(new Date(date)); - else - newdate = !el.disabled; - // a date was clicked - if (other_month) - cal._init(cal.firstDayOfWeek, date); - } else { - if (el.navtype == 200) { - DyCalendar.removeClass(el, "hilite"); - cal.callCloseHandler(); - return; - } - date = new Date(cal.date); - if (el.navtype == 0) - date.setDateOnly(new Date()); // TODAY - // unless "today" was clicked, we assume no date was clicked so - // the selected handler will know not to close the calenar when - // in single-click mode. - // cal.dateClicked = (el.navtype == 0); - cal.dateClicked = false; - var year = date.getFullYear(); - var mon = date.getMonth(); - function setMonth(m) { - var day = date.getDate(); - var max = date.getMonthDays(m); - if (day > max) { - date.setDate(max); - } - date.setMonth(m); - }; - switch (el.navtype) { - case 400: - DyCalendar.removeClass(el, "hilite"); - var text = DyCalendar._TT["ABOUT"]; - if (typeof text != "undefined") { - text += cal.showsTime ? DyCalendar._TT["ABOUT_TIME"] : ""; - } else { - // FIXME: this should be removed as soon as lang files get updated! - text = "Help and about box text is not translated into this language.\n" + - "If you know this language and you feel generous please update\n" + - "the corresponding file in \"lang\" subdir to match calendar-en.js\n" + - "and send it back to to get it into the distribution ;-)\n\n" + - "Thank you!\n" + - "http://dynarch.com/mishoo/calendar.epl\n"; - } - alert(text); - return; - case -2: - if (year > cal.minYear) { - date.setFullYear(year - 1); - } - break; - case -1: - if (mon > 0) { - setMonth(mon - 1); - } else if (year-- > cal.minYear) { - date.setFullYear(year); - setMonth(11); - } - break; - case 1: - if (mon < 11) { - setMonth(mon + 1); - } else if (year < cal.maxYear) { - date.setFullYear(year + 1); - setMonth(0); - } - break; - case 2: - if (year < cal.maxYear) { - date.setFullYear(year + 1); - } - break; - case 100: - cal.setFirstDayOfWeek(el.fdow); - return; - case 50: - var range = el._range; - var current = el.innerHTML; - for (var i = range.length; --i >= 0;) - if (range[i] == current) - break; - if (ev && ev.shiftKey) { - if (--i < 0) - i = range.length - 1; - } else if ( ++i >= range.length ) - i = 0; - var newval = range[i]; - el.innerHTML = newval; - cal.onUpdateTime(); - return; - case 0: - // TODAY will bring us here - if ((typeof cal.getDateStatus == "function") && - cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) { - return false; - } - break; - } - if (!date.equalsTo(cal.date)) { - cal.setDate(date); - newdate = true; - } else if (el.navtype == 0) - newdate = closing = true; - } - if (newdate) { - ev && cal.callHandler(); - } - if (closing) { - DyCalendar.removeClass(el, "hilite"); - ev && cal.callCloseHandler(); - } -}; - -// END: CALENDAR STATIC FUNCTIONS - -// BEGIN: CALENDAR OBJECT FUNCTIONS - -/** - * This function creates the calendar inside the given parent. If _par is - * null than it creates a popup calendar inside the BODY element. If _par is - * an element, be it BODY, then it creates a non-popup calendar (still - * hidden). Some properties need to be set before calling this function. - */ -DyCalendar.prototype.create = function (_par) { - var parent = null; - if (! _par) { - // default parent is the document body, in which case we create - // a popup calendar. - parent = document.getElementsByTagName("body")[0]; - this.isPopup = true; - } else { - parent = _par; - this.isPopup = false; - } - this.date = this.dateStr ? new Date(this.dateStr) : new Date(); - - var table = DyCalendar.createElement("table"); - this.table = table; - table.cellSpacing = 0; - table.cellPadding = 0; - table.calendar = this; - DyCalendar.addEvent(table, "mousedown", DyCalendar.tableMouseDown); - - var div = DyCalendar.createElement("div"); - this.element = div; - div.className = "calendar"; - if (this.isPopup) { - div.style.position = "absolute"; - div.style.display = "none"; - } - div.appendChild(table); - - var thead = DyCalendar.createElement("thead", table); - var cell = null; - var row = null; - - var cal = this; - var hh = function (text, cs, navtype) { - cell = DyCalendar.createElement("td", row); - cell.colSpan = cs; - cell.className = "button"; - if (navtype != 0 && Math.abs(navtype) <= 2) - cell.className += " nav"; - DyCalendar._add_evs(cell); - cell.calendar = cal; - cell.navtype = navtype; - cell.innerHTML = "
" + text + "
"; - return cell; - }; - - row = DyCalendar.createElement("tr", thead); - var title_length = 6; - (this.isPopup) && --title_length; - (this.weekNumbers) && ++title_length; - - hh("?", 1, 400).ttip = DyCalendar._TT["INFO"]; - this.title = hh("", title_length, 300); - this.title.className = "title"; - if (this.isPopup) { - this.title.ttip = DyCalendar._TT["DRAG_TO_MOVE"]; - this.title.style.cursor = "move"; - hh("×", 1, 200).ttip = DyCalendar._TT["CLOSE"]; - } - - row = DyCalendar.createElement("tr", thead); - row.className = "headrow"; - - this._nav_py = hh("«", 1, -2); - this._nav_py.ttip = DyCalendar._TT["PREV_YEAR"]; - - this._nav_pm = hh("‹", 1, -1); - this._nav_pm.ttip = DyCalendar._TT["PREV_MONTH"]; - - this._nav_now = hh(DyCalendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0); - this._nav_now.ttip = DyCalendar._TT["GO_TODAY"]; - - this._nav_nm = hh("›", 1, 1); - this._nav_nm.ttip = DyCalendar._TT["NEXT_MONTH"]; - - this._nav_ny = hh("»", 1, 2); - this._nav_ny.ttip = DyCalendar._TT["NEXT_YEAR"]; - - // day names - row = DyCalendar.createElement("tr", thead); - row.className = "daynames"; - if (this.weekNumbers) { - cell = DyCalendar.createElement("td", row); - cell.className = "name wn"; - cell.innerHTML = DyCalendar._TT["WK"]; - } - for (var i = 7; i > 0; --i) { - cell = DyCalendar.createElement("td", row); - if (!i) { - cell.navtype = 100; - cell.calendar = this; - DyCalendar._add_evs(cell); - } - } - this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild; - this._displayWeekdays(); - - var tbody = DyCalendar.createElement("tbody", table); - this.tbody = tbody; - - for (i = 6; i > 0; --i) { - row = DyCalendar.createElement("tr", tbody); - if (this.weekNumbers) { - cell = DyCalendar.createElement("td", row); - } - for (var j = 7; j > 0; --j) { - cell = DyCalendar.createElement("td", row); - cell.calendar = this; - DyCalendar._add_evs(cell); - } - } - - if (this.showsTime) { - row = DyCalendar.createElement("tr", tbody); - row.className = "time"; - - cell = DyCalendar.createElement("td", row); - cell.className = "time"; - cell.colSpan = 2; - cell.innerHTML = DyCalendar._TT["TIME"] || " "; - - cell = DyCalendar.createElement("td", row); - cell.className = "time"; - cell.colSpan = this.weekNumbers ? 4 : 3; - - (function(){ - function makeTimePart(className, init, range_start, range_end) { - var part = DyCalendar.createElement("span", cell); - part.className = className; - part.innerHTML = init; - part.calendar = cal; - part.ttip = DyCalendar._TT["TIME_PART"]; - part.navtype = 50; - part._range = []; - if (typeof range_start != "number") - part._range = range_start; - else { - for (var i = range_start; i <= range_end; ++i) { - var txt; - if (i < 10 && range_end >= 10) txt = '0' + i; - else txt = '' + i; - part._range[part._range.length] = txt; - } - } - DyCalendar._add_evs(part); - return part; - }; - var hrs = cal.date.getHours(); - var mins = cal.date.getMinutes(); - var t12 = !cal.time24; - var pm = (hrs > 12); - if (t12 && pm) hrs -= 12; - var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23); - var span = DyCalendar.createElement("span", cell); - span.innerHTML = ":"; - span.className = "colon"; - var M = makeTimePart("minute", mins, 0, 59); - var AP = null; - cell = DyCalendar.createElement("td", row); - cell.className = "time"; - cell.colSpan = 2; - if (t12) - AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]); - else - cell.innerHTML = " "; - - cal.onSetTime = function() { - var pm, hrs = this.date.getHours(), - mins = this.date.getMinutes(); - if (t12) { - pm = (hrs >= 12); - if (pm) hrs -= 12; - if (hrs == 0) hrs = 12; - AP.innerHTML = pm ? "pm" : "am"; - } - H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs; - M.innerHTML = (mins < 10) ? ("0" + mins) : mins; - }; - - cal.onUpdateTime = function() { - var date = this.date; - var h = parseInt(H.innerHTML, 10); - if (t12) { - if (/pm/i.test(AP.innerHTML) && h < 12) - h += 12; - else if (/am/i.test(AP.innerHTML) && h == 12) - h = 0; - } - var d = date.getDate(); - var m = date.getMonth(); - var y = date.getFullYear(); - date.setHours(h); - date.setMinutes(parseInt(M.innerHTML, 10)); - date.setFullYear(y); - date.setMonth(m); - date.setDate(d); - this.dateClicked = false; - this.callHandler(); - }; - })(); - } else { - this.onSetTime = this.onUpdateTime = function() {}; - } - - var tfoot = DyCalendar.createElement("tfoot", table); - - row = DyCalendar.createElement("tr", tfoot); - row.className = "footrow"; - - cell = hh(DyCalendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300); - cell.className = "ttip"; - if (this.isPopup) { - cell.ttip = DyCalendar._TT["DRAG_TO_MOVE"]; - cell.style.cursor = "move"; - } - this.tooltips = cell; - - div = DyCalendar.createElement("div", this.element); - this.monthsCombo = div; - div.className = "combo"; - for (i = 0; i < DyCalendar._MN.length; ++i) { - var mn = DyCalendar.createElement("div"); - mn.className = DyCalendar.is_ie ? "label-IEfix" : "label"; - mn.month = i; - mn.innerHTML = DyCalendar._SMN[i]; - div.appendChild(mn); - } - - div = DyCalendar.createElement("div", this.element); - this.yearsCombo = div; - div.className = "combo"; - for (i = 12; i > 0; --i) { - var yr = DyCalendar.createElement("div"); - yr.className = DyCalendar.is_ie ? "label-IEfix" : "label"; - div.appendChild(yr); - } - - this._init(this.firstDayOfWeek, this.date); - parent.appendChild(this.element); -}; - -/** keyboard navigation, only for popup calendars */ -DyCalendar._keyEvent = function(ev) { - var cal = window._dynarch_popupDyCalendar; - if (!cal || cal.multiple) - return false; - (DyCalendar.is_ie) && (ev = window.event); - var act = (DyCalendar.is_ie || ev.type == "keypress"), - K = ev.keyCode; - if (ev.ctrlKey) { - switch (K) { - case 37: // KEY left - act && DyCalendar.cellClick(cal._nav_pm); - break; - case 38: // KEY up - act && DyCalendar.cellClick(cal._nav_py); - break; - case 39: // KEY right - act && DyCalendar.cellClick(cal._nav_nm); - break; - case 40: // KEY down - act && DyCalendar.cellClick(cal._nav_ny); - break; - default: - return false; - } - } else switch (K) { - case 32: // KEY space (now) - DyCalendar.cellClick(cal._nav_now); - break; - case 27: // KEY esc - act && cal.callCloseHandler(); - break; - case 37: // KEY left - case 38: // KEY up - case 39: // KEY right - case 40: // KEY down - if (act) { - var prev, x, y, ne, el, step; - prev = K == 37 || K == 38; - step = (K == 37 || K == 39) ? 1 : 7; - function setVars() { - el = cal.currentDateEl; - var p = el.pos; - x = p & 15; - y = p >> 4; - ne = cal.ar_days[y][x]; - };setVars(); - function prevMonth() { - var date = new Date(cal.date); - date.setDate(date.getDate() - step); - cal.setDate(date); - }; - function nextMonth() { - var date = new Date(cal.date); - date.setDate(date.getDate() + step); - cal.setDate(date); - }; - while (1) { - switch (K) { - case 37: // KEY left - if (--x >= 0) - ne = cal.ar_days[y][x]; - else { - x = 6; - K = 38; - continue; - } - break; - case 38: // KEY up - if (--y >= 0) - ne = cal.ar_days[y][x]; - else { - prevMonth(); - setVars(); - } - break; - case 39: // KEY right - if (++x < 7) - ne = cal.ar_days[y][x]; - else { - x = 0; - K = 40; - continue; - } - break; - case 40: // KEY down - if (++y < cal.ar_days.length) - ne = cal.ar_days[y][x]; - else { - nextMonth(); - setVars(); - } - break; - } - break; - } - if (ne) { - if (!ne.disabled) - DyCalendar.cellClick(ne); - else if (prev) - prevMonth(); - else - nextMonth(); - } - } - break; - case 13: // KEY enter - if (act) - DyCalendar.cellClick(cal.currentDateEl, ev); - break; - default: - return false; - } - return DyCalendar.stopEvent(ev); -}; - -/** - * (RE)Initializes the calendar to the given date and firstDayOfWeek - */ -DyCalendar.prototype._init = function (firstDayOfWeek, date) { - var today = new Date(), - TY = today.getFullYear(), - TM = today.getMonth(), - TD = today.getDate(); - this.table.style.visibility = "hidden"; - var year = date.getFullYear(); - if (year < this.minYear) { - year = this.minYear; - date.setFullYear(year); - } else if (year > this.maxYear) { - year = this.maxYear; - date.setFullYear(year); - } - this.firstDayOfWeek = firstDayOfWeek; - this.date = new Date(date); - var month = date.getMonth(); - var mday = date.getDate(); - var no_days = date.getMonthDays(); - - // calendar voodoo for computing the first day that would actually be - // displayed in the calendar, even if it's from the previous month. - // WARNING: this is magic. ;-) - date.setDate(1); - var day1 = (date.getDay() - this.firstDayOfWeek) % 7; - if (day1 < 0) - day1 += 7; - date.setDate(-day1); - date.setDate(date.getDate() + 1); - - var row = this.tbody.firstChild; - var MN = DyCalendar._SMN[month]; - var ar_days = this.ar_days = new Array(); - var weekend = DyCalendar._TT["WEEKEND"]; - var dates = this.multiple ? (this.datesCells = {}) : null; - for (var i = 0; i < 6; ++i, row = row.nextSibling) { - var cell = row.firstChild; - if (this.weekNumbers) { - cell.className = "day wn"; - cell.innerHTML = date.getWeekNumber(); - cell = cell.nextSibling; - } - row.className = "daysrow"; - var hasdays = false, iday, dpos = ar_days[i] = []; - for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) { - iday = date.getDate(); - var wday = date.getDay(); - cell.className = "day"; - cell.pos = i << 4 | j; - dpos[j] = cell; - var current_month = (date.getMonth() == month); - if (!current_month) { - if (this.showsOtherMonths) { - cell.className += " othermonth"; - cell.otherMonth = true; - } else { - cell.className = "emptycell"; - cell.innerHTML = " "; - cell.disabled = true; - continue; - } - } else { - cell.otherMonth = false; - hasdays = true; - } - cell.disabled = false; - cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday; - if (dates) - dates[date.print("%Y%m%d")] = cell; - if (this.getDateStatus) { - var status = this.getDateStatus(date, year, month, iday); - if (this.getDateToolTip) { - var toolTip = this.getDateToolTip(date, year, month, iday); - if (toolTip) - cell.title = toolTip; - } - if (status === true) { - cell.className += " disabled"; - cell.disabled = true; - } else { - if (/disabled/i.test(status)) - cell.disabled = true; - cell.className += " " + status; - } - } - if (!cell.disabled) { - cell.caldate = new Date(date); - cell.ttip = "_"; - if (!this.multiple && current_month - && iday == mday && this.hiliteToday) { - cell.className += " selected"; - this.currentDateEl = cell; - } - if (date.getFullYear() == TY && - date.getMonth() == TM && - iday == TD) { - cell.className += " today"; - cell.ttip += DyCalendar._TT["PART_TODAY"]; - } - if (weekend.indexOf(wday.toString()) != -1) - cell.className += cell.otherMonth ? " oweekend" : " weekend"; - } - } - if (!(hasdays || this.showsOtherMonths)) - row.className = "emptyrow"; - } - this.title.innerHTML = DyCalendar._MN[month] + ", " + year; - this.onSetTime(); - this.table.style.visibility = "visible"; - this._initMultipleDates(); - // PROFILE - // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms"; -}; - -DyCalendar.prototype._initMultipleDates = function() { - if (this.multiple) { - for (var i in this.multiple) { - var cell = this.datesCells[i]; - var d = this.multiple[i]; - if (!d) - continue; - if (cell) - cell.className += " selected"; - } - } -}; - -DyCalendar.prototype._toggleMultipleDate = function(date) { - if (this.multiple) { - var ds = date.print("%Y%m%d"); - var cell = this.datesCells[ds]; - if (cell) { - var d = this.multiple[ds]; - if (!d) { - DyCalendar.addClass(cell, "selected"); - this.multiple[ds] = date; - } else { - DyCalendar.removeClass(cell, "selected"); - delete this.multiple[ds]; - } - } - } -}; - -DyCalendar.prototype.setDateToolTipHandler = function (unaryFunction) { - this.getDateToolTip = unaryFunction; -}; - -/** - * Calls _init function above for going to a certain date (but only if the - * date is different than the currently selected one). - */ -DyCalendar.prototype.setDate = function (date) { - if (!date.equalsTo(this.date)) { - this._init(this.firstDayOfWeek, date); - } -}; - -/** - * Refreshes the calendar. Useful if the "disabledHandler" function is - * dynamic, meaning that the list of disabled date can change at runtime. - * Just * call this function if you think that the list of disabled dates - * should * change. - */ -DyCalendar.prototype.refresh = function () { - this._init(this.firstDayOfWeek, this.date); -}; - -/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ -DyCalendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { - this._init(firstDayOfWeek, this.date); - this._displayWeekdays(); -}; - -/** - * Allows customization of what dates are enabled. The "unaryFunction" - * parameter must be a function object that receives the date (as a JS Date - * object) and returns a boolean value. If the returned value is true then - * the passed date will be marked as disabled. - */ -DyCalendar.prototype.setDateStatusHandler = DyCalendar.prototype.setDisabledHandler = function (unaryFunction) { - this.getDateStatus = unaryFunction; -}; - -/** Customization of allowed year range for the calendar. */ -DyCalendar.prototype.setRange = function (a, z) { - this.minYear = a; - this.maxYear = z; -}; - -/** Calls the first user handler (selectedHandler). */ -DyCalendar.prototype.callHandler = function () { - if (this.onSelected) { - this.onSelected(this, this.date.print(this.dateFormat)); - } -}; - -/** Calls the second user handler (closeHandler). */ -DyCalendar.prototype.callCloseHandler = function () { - if (this.onClose) { - this.onClose(this); - } - this.hideShowCovered(); -}; - -/** Removes the calendar object from the DOM tree and destroys it. */ -DyCalendar.prototype.destroy = function () { - var el = this.element.parentNode; - el.removeChild(this.element); - DyCalendar._C = null; - window._dynarch_popupDyCalendar = null; -}; - -/** - * Moves the calendar element to a different section in the DOM tree (changes - * its parent). - */ -DyCalendar.prototype.reparent = function (new_parent) { - var el = this.element; - el.parentNode.removeChild(el); - new_parent.appendChild(el); -}; - -// This gets called when the user presses a mouse button anywhere in the -// document, if the calendar is shown. If the click was outside the open -// calendar this function closes it. -DyCalendar._checkDyCalendar = function(ev) { - var calendar = window._dynarch_popupDyCalendar; - if (!calendar) { - return false; - } - var el = DyCalendar.is_ie ? DyCalendar.getElement(ev) : DyCalendar.getTargetElement(ev); - for (; el != null && el != calendar.element; el = el.parentNode); - if (el == null) { - // calls closeHandler which should hide the calendar. - window._dynarch_popupDyCalendar.callCloseHandler(); - return DyCalendar.stopEvent(ev); - } -}; - -/** Shows the calendar. */ -DyCalendar.prototype.show = function () { - var rows = this.table.getElementsByTagName("tr"); - for (var i = rows.length; i > 0;) { - var row = rows[--i]; - DyCalendar.removeClass(row, "rowhilite"); - var cells = row.getElementsByTagName("td"); - for (var j = cells.length; j > 0;) { - var cell = cells[--j]; - DyCalendar.removeClass(cell, "hilite"); - DyCalendar.removeClass(cell, "active"); - } - } - this.element.style.display = "block"; - this.hidden = false; - if (this.isPopup) { - window._dynarch_popupDyCalendar = this; - DyCalendar.addEvent(document, "keydown", DyCalendar._keyEvent); - DyCalendar.addEvent(document, "keypress", DyCalendar._keyEvent); - DyCalendar.addEvent(document, "mousedown", DyCalendar._checkDyCalendar); - } - this.hideShowCovered(); -}; - -/** - * Hides the calendar. Also removes any "hilite" from the class of any TD - * element. - */ -DyCalendar.prototype.hide = function () { - if (this.isPopup) { - DyCalendar.removeEvent(document, "keydown", DyCalendar._keyEvent); - DyCalendar.removeEvent(document, "keypress", DyCalendar._keyEvent); - DyCalendar.removeEvent(document, "mousedown", DyCalendar._checkDyCalendar); - } - this.element.style.display = "none"; - this.hidden = true; - this.hideShowCovered(); -}; - -/** - * Shows the calendar at a given absolute position (beware that, depending on - * the calendar element style -- position property -- this might be relative - * to the parent's containing rectangle). - */ -DyCalendar.prototype.showAt = function (x, y) { - var s = this.element.style; - s.left = x + "px"; - s.top = y + "px"; - this.show(); -}; - -/** Shows the calendar near a given element. */ -DyCalendar.prototype.showAtElement = function (el, opts) { - var self = this; - var p = DyCalendar.getAbsolutePos(el); - if (!opts || typeof opts != "string") { - this.showAt(p.x, p.y + el.offsetHeight); - return true; - } - function fixPosition(box) { - if (box.x < 0) - box.x = 0; - if (box.y < 0) - box.y = 0; - var cp = document.createElement("div"); - var s = cp.style; - s.position = "absolute"; - s.right = s.bottom = s.width = s.height = "0px"; - document.body.appendChild(cp); - var br = DyCalendar.getAbsolutePos(cp); - document.body.removeChild(cp); - if (document.body.scrollLeft){br.x += document.body.scrollLeft;} - br.x += window.scrollX; - if (document.body.scrollTop){br.y += document.body.scrollTop;} - br.y += window.scrollY; - var tmp = box.x + box.width - br.x; - if (tmp > 0) box.x -= tmp; - tmp = box.y + box.height - br.y; - if (tmp > 0) box.y -= tmp; - }; - this.element.style.display = "block"; - DyCalendar.continuation_for_the_fucking_khtml_browser = function() { - var w = self.element.offsetWidth; - var h = self.element.offsetHeight; - self.element.style.display = "none"; - var valign = opts.substr(0, 1); - var halign = "l"; - if (opts.length > 1) { - halign = opts.substr(1, 1); - } - // vertical alignment - switch (valign) { - case "T": p.y -= h; break; - case "B": p.y += el.offsetHeight; break; - case "C": p.y += (el.offsetHeight - h) / 2; break; - case "t": p.y += el.offsetHeight - h; break; - case "b": break; // already there - } - // horizontal alignment - switch (halign) { - case "L": p.x -= w; break; - case "R": p.x += el.offsetWidth; break; - case "C": p.x += (el.offsetWidth - w) / 2; break; - case "l": p.x += el.offsetWidth - w; break; - case "r": break; // already there - } - p.width = w; - p.height = h + 40; - self.monthsCombo.style.display = "none"; - fixPosition(p); - self.showAt(p.x, p.y); - }; - if (DyCalendar.is_khtml) - setTimeout("DyCalendar.continuation_for_the_fucking_khtml_browser()", 10); - else - DyCalendar.continuation_for_the_fucking_khtml_browser(); -}; - -/** Customizes the date format. */ -DyCalendar.prototype.setDateFormat = function (str) { - this.dateFormat = str; -}; - -/** Customizes the tooltip date format. */ -DyCalendar.prototype.setTtDateFormat = function (str) { - this.ttDateFormat = str; -}; - -/** - * Tries to identify the date represented in a string. If successful it also - * calls this.setDate which moves the calendar to the given date. - */ -DyCalendar.prototype.parseDate = function(str, fmt) { - if (!fmt) - fmt = this.dateFormat; - this.setDate(Date.parseDate(str, fmt)); -}; - -DyCalendar.prototype.hideShowCovered = function () { - if (!DyCalendar.is_ie && !DyCalendar.is_opera) - return; - function getVisib(obj){ - var value = obj.style.visibility; - if (!value) { - if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C - if (!DyCalendar.is_khtml) - value = document.defaultView. - getComputedStyle(obj, "").getPropertyValue("visibility"); - else - value = ''; - } else if (obj.currentStyle) { // IE - value = obj.currentStyle.visibility; - } else - value = ''; - } - return value; - }; - - var tags = new Array("applet", "iframe", "select"); - var el = this.element; - - var p = DyCalendar.getAbsolutePos(el); - var EX1 = p.x; - var EX2 = el.offsetWidth + EX1; - var EY1 = p.y; - var EY2 = el.offsetHeight + EY1; - - for (var k = tags.length; k > 0; ) { - var ar = document.getElementsByTagName(tags[--k]); - var cc = null; - - for (var i = ar.length; i > 0;) { - cc = ar[--i]; - - p = DyCalendar.getAbsolutePos(cc); - var CX1 = p.x; - var CX2 = cc.offsetWidth + CX1; - var CY1 = p.y; - var CY2 = cc.offsetHeight + CY1; - - if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { - if (!cc.__msh_save_visibility) { - cc.__msh_save_visibility = getVisib(cc); - } - cc.style.visibility = cc.__msh_save_visibility; - } else { - if (!cc.__msh_save_visibility) { - cc.__msh_save_visibility = getVisib(cc); - } - cc.style.visibility = "hidden"; - } - } - } -}; - -/** Internal function; it displays the bar with the names of the weekday. */ -DyCalendar.prototype._displayWeekdays = function () { - var fdow = this.firstDayOfWeek; - var cell = this.firstdayname; - var weekend = DyCalendar._TT["WEEKEND"]; - for (var i = 0; i < 7; ++i) { - cell.className = "day name"; - var realday = (i + fdow) % 7; - if (i) { - cell.ttip = DyCalendar._TT["DAY_FIRST"].replace("%s", DyCalendar._DN[realday]); - cell.navtype = 100; - cell.calendar = this; - cell.fdow = realday; - DyCalendar._add_evs(cell); - } - if (weekend.indexOf(realday.toString()) != -1) { - DyCalendar.addClass(cell, "weekend"); - } - cell.innerHTML = DyCalendar._SDN[(i + fdow) % 7]; - cell = cell.nextSibling; - } -}; - -/** Internal function. Hides all combo boxes that might be displayed. */ -DyCalendar.prototype._hideCombos = function () { - this.monthsCombo.style.display = "none"; - this.yearsCombo.style.display = "none"; -}; - -/** Internal function. Starts dragging the element. */ -DyCalendar.prototype._dragStart = function (ev) { - if (this.dragging) { - return; - } - this.dragging = true; - var posX; - var posY; - if (DyCalendar.is_ie) { - posY = window.event.clientY + document.body.scrollTop; - posX = window.event.clientX + document.body.scrollLeft; - } else { - posY = ev.clientY + window.scrollY; - posX = ev.clientX + window.scrollX; - } - var st = this.element.style; - this.xOffs = posX - parseInt(st.left); - this.yOffs = posY - parseInt(st.top); - with (DyCalendar) { - addEvent(document, "mousemove", calDragIt); - addEvent(document, "mouseup", calDragEnd); - } -}; - -// BEGIN: DATE OBJECT PATCHES - -/** Adds the number of days array to the Date object. */ -Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); - -/** Constants used for time computations */ -Date.SECOND = 1000 /* milliseconds */; -Date.MINUTE = 60 * Date.SECOND; -Date.HOUR = 60 * Date.MINUTE; -Date.DAY = 24 * Date.HOUR; -Date.WEEK = 7 * Date.DAY; - -Date.parseDate = function(str, fmt) { - var today = new Date(); - var y = 0; - var m = -1; - var d = 0; - var a = str.split(/\W+/); - var b = fmt.match(/%./g); - var i = 0, j = 0; - var hr = 0; - var min = 0; - for (i = 0; i < a.length; ++i) { - if (!a[i]) - continue; - switch (b[i]) { - case "%d": - case "%e": - d = parseInt(a[i], 10); - break; - - case "%m": - m = parseInt(a[i], 10) - 1; - break; - - case "%Y": - case "%y": - y = parseInt(a[i], 10); - (y < 100) && (y += (y > 29) ? 1900 : 2000); - break; - - case "%b": - case "%B": - for (j = 0; j < 12; ++j) { - if (DyCalendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } - } - break; - - case "%H": - case "%I": - case "%k": - case "%l": - hr = parseInt(a[i], 10); - break; - - case "%P": - case "%p": - if (/pm/i.test(a[i]) && hr < 12) - hr += 12; - else if (/am/i.test(a[i]) && hr >= 12) - hr -= 12; - break; - - case "%M": - min = parseInt(a[i], 10); - break; - } - } - if (isNaN(y)) y = today.getFullYear(); - if (isNaN(m)) m = today.getMonth(); - if (isNaN(d)) d = today.getDate(); - if (isNaN(hr)) hr = today.getHours(); - if (isNaN(min)) min = today.getMinutes(); - if (y != 0 && m != -1 && d != 0) - return new Date(y, m, d, hr, min, 0); - y = 0; m = -1; d = 0; - for (i = 0; i < a.length; ++i) { - if (a[i].search(/[a-zA-Z]+/) != -1) { - var t = -1; - for (j = 0; j < 12; ++j) { - if (DyCalendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; } - } - if (t != -1) { - if (m != -1) { - d = m+1; - } - m = t; - } - } else if (parseInt(a[i], 10) <= 12 && m == -1) { - m = a[i]-1; - } else if (parseInt(a[i], 10) > 31 && y == 0) { - y = parseInt(a[i], 10); - (y < 100) && (y += (y > 29) ? 1900 : 2000); - } else if (d == 0) { - d = a[i]; - } - } - if (y == 0) - y = today.getFullYear(); - if (m != -1 && d != 0) - return new Date(y, m, d, hr, min, 0); - return today; -}; - -/** Returns the number of days in the current month */ -Date.prototype.getMonthDays = function(month) { - var year = this.getFullYear(); - if (typeof month == "undefined") { - month = this.getMonth(); - } - if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { - return 29; - } else { - return Date._MD[month]; - } -}; - -/** Returns the number of day in the year. */ -Date.prototype.getDayOfYear = function() { - var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); - var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); - var time = now - then; - return Math.floor(time / Date.DAY); -}; - -/** Returns the number of the week in year, as defined in ISO 8601. */ -Date.prototype.getWeekNumber = function() { - var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); - var DoW = d.getDay(); - d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu - var ms = d.valueOf(); // GMT - d.setMonth(0); - d.setDate(4); // Thu in Week 1 - return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; -}; - -/** Checks date and time equality */ -Date.prototype.equalsTo = function(date) { - return ((this.getFullYear() == date.getFullYear()) && - (this.getMonth() == date.getMonth()) && - (this.getDate() == date.getDate()) && - (this.getHours() == date.getHours()) && - (this.getMinutes() == date.getMinutes())); -}; - -/** Set only the year, month, date parts (keep existing time) */ -Date.prototype.setDateOnly = function(date) { - var tmp = new Date(date); - this.setDate(1); - this.setFullYear(tmp.getFullYear()); - this.setMonth(tmp.getMonth()); - this.setDate(tmp.getDate()); -}; - -/** Prints the date in a string according to the given format. */ -Date.prototype.print = function (str) { - var m = this.getMonth(); - var d = this.getDate(); - var y = this.getFullYear(); - var wn = this.getWeekNumber(); - var w = this.getDay(); - var s = {}; - var hr = this.getHours(); - var pm = (hr >= 12); - var ir = (pm) ? (hr - 12) : hr; - var dy = this.getDayOfYear(); - if (ir == 0) - ir = 12; - var min = this.getMinutes(); - var sec = this.getSeconds(); - s["%a"] = DyCalendar._SDN[w]; // abbreviated weekday name [FIXME: I18N] - s["%A"] = DyCalendar._DN[w]; // full weekday name - s["%b"] = DyCalendar._SMN[m]; // abbreviated month name [FIXME: I18N] - s["%B"] = DyCalendar._MN[m]; // full month name - // FIXME: %c : preferred date and time representation for the current locale - s["%C"] = 1 + Math.floor(y / 100); // the century number - s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) - s["%e"] = d; // the day of the month (range 1 to 31) - // FIXME: %D : american date style: %m/%d/%y - // FIXME: %E, %F, %G, %g, %h (man strftime) - s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format) - s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format) - s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366) - s["%k"] = hr; // hour, range 0 to 23 (24h format) - s["%l"] = ir; // hour, range 1 to 12 (12h format) - s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12 - s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59 - s["%n"] = "\n"; // a newline character - s["%p"] = pm ? "PM" : "AM"; - s["%P"] = pm ? "pm" : "am"; - // FIXME: %r : the time in am/pm notation %I:%M:%S %p - // FIXME: %R : the time in 24-hour notation %H:%M - s["%s"] = Math.floor(this.getTime() / 1000); - s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59 - s["%t"] = "\t"; // a tab character - // FIXME: %T : the time in 24-hour notation (%H:%M:%S) - s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; - s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON) - s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN) - // FIXME: %x : preferred date representation for the current locale without the time - // FIXME: %X : preferred time representation for the current locale without the date - s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) - s["%Y"] = y; // year with the century - s["%%"] = "%"; // a literal '%' character - - var re = /%./g; - if (!DyCalendar.is_ie5 && !DyCalendar.is_khtml) - return str.replace(re, function (par) { return s[par] || par; }); - - var a = str.match(re); - for (var i = 0; i < a.length; i++) { - var tmp = s[a[i]]; - if (tmp) { - re = new RegExp(a[i], 'g'); - str = str.replace(re, tmp); - } - } - - return str; -}; - -Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; -Date.prototype.setFullYear = function(y) { - var d = new Date(this); - d.__msh_oldSetFullYear(y); - if (d.getMonth() != this.getMonth()) - this.setDate(28); - this.__msh_oldSetFullYear(y); -}; - -// END: DATE OBJECT PATCHES - - -// global object that remembers the calendar -window._dynarch_popupDyCalendar = null; diff --git a/common/js/calendar.min.js b/common/js/calendar.min.js deleted file mode 100644 index d8468ed05..000000000 --- a/common/js/calendar.min.js +++ /dev/null @@ -1,204 +0,0 @@ -/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo - * ----------------------------------------------------------- - * - * The DHTML Calendar, version 1.0 "It is happening again" - * - * Details and latest version at: - * www.dynarch.com/projects/calendar - * - * This script is developed by Dynarch.com. Visit us at www.dynarch.com. - * - * This script is distributed under the GNU Lesser General Public License. - * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html - */ - -// $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $ - -/** The Calendar object constructor. */ - -DyCalendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=DyCalendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=DyCalendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:DyCalendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof DyCalendar._SDN=="undefined"){if(typeof DyCalendar._SDN_len=="undefined") -DyCalendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=DyCalendar._DN[i].substr(0,DyCalendar._SDN_len);} -DyCalendar._SDN=ar;if(typeof DyCalendar._SMN_len=="undefined") -DyCalendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=DyCalendar._MN[i].substr(0,DyCalendar._SMN_len);} -DyCalendar._SMN=ar;}};DyCalendar._C=null;DyCalendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));DyCalendar.is_ie5=(DyCalendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));DyCalendar.is_opera=/opera/i.test(navigator.userAgent);DyCalendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);DyCalendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft) -SL=el.scrollLeft;if(is_div&&el.scrollTop) -ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;} -return r;};DyCalendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}} -while(related){if(related==el){return true;} -related=related.parentNode;} -return false;};DyCalendar.removeClass=function(el,className){if(!(el&&el.className)){return;} -var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}} -el.className=ar.join(" ");};DyCalendar.addClass=function(el,className){DyCalendar.removeClass(el,className);el.className+=" "+className;};DyCalendar.getElement=function(ev){var f=DyCalendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName)) -f=f.parentNode;return f;};DyCalendar.getTargetElement=function(ev){var f=DyCalendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1) -f=f.parentNode;return f;};DyCalendar.stopEvent=function(ev){ev||(ev=window.event);if(DyCalendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();} -return false;};DyCalendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};DyCalendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};DyCalendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);} -if(typeof parent!="undefined"){parent.appendChild(el);} -return el;};DyCalendar._add_evs=function(el){with(DyCalendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};DyCalendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;} -return null;};DyCalendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;} -return null;};DyCalendar.showMonthsCombo=function(){var cal=DyCalendar._C;if(!cal){return false;} -var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){DyCalendar.removeClass(cal.hilitedMonth,"hilite");} -if(cal.activeMonth){DyCalendar.removeClass(cal.activeMonth,"active");} -var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];DyCalendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0) -s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined") -mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";} -s.top=(cd.offsetTop+cd.offsetHeight)+"px";};DyCalendar.showYearsCombo=function(fwd){var cal=DyCalendar._C;if(!cal){return false;} -var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){DyCalendar.removeClass(cal.hilitedYear,"hilite");} -if(cal.activeYear){DyCalendar.removeClass(cal.activeYear,"active");} -cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";} -yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;} -if(show){var s=yc.style;s.display="block";if(cd.navtype<0) -s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined") -ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";} -s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};DyCalendar.tableMouseUp=function(ev){var cal=DyCalendar._C;if(!cal){return false;} -if(cal.timeout){clearTimeout(cal.timeout);} -var el=cal.activeDiv;if(!el){return false;} -var target=DyCalendar.getTargetElement(ev);ev||(ev=window.event);DyCalendar.removeClass(el,"active");if(target==el||target.parentNode==el){DyCalendar.cellClick(el,ev);} -var mon=DyCalendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=DyCalendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}} -with(DyCalendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};DyCalendar.tableMouseOver=function(ev){var cal=DyCalendar._C;if(!cal){return;} -var el=cal.activeDiv;var target=DyCalendar.getTargetElement(ev);if(target==el||target.parentNode==el){DyCalendar.addClass(el,"hilite active");DyCalendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2))) -DyCalendar.removeClass(el,"active");DyCalendar.removeClass(el,"hilite");DyCalendar.removeClass(el.parentNode,"rowhilite");} -ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=DyCalendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else -dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;) -if(range[i]==current) -break;while(count-->0) -if(decrease){if(--i<0) -i=range.length-1;}else if(++i>=range.length) -i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();} -var mon=DyCalendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){DyCalendar.removeClass(cal.hilitedMonth,"hilite");} -DyCalendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){DyCalendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){DyCalendar.removeClass(cal.hilitedMonth,"hilite");} -var year=DyCalendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){DyCalendar.removeClass(cal.hilitedYear,"hilite");} -DyCalendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){DyCalendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){DyCalendar.removeClass(cal.hilitedYear,"hilite");}} -return DyCalendar.stopEvent(ev);};DyCalendar.tableMouseDown=function(ev){if(DyCalendar.getTargetElement(ev)==DyCalendar.getElement(ev)){return DyCalendar.stopEvent(ev);}};DyCalendar.calDragIt=function(ev){var cal=DyCalendar._C;if(!(cal&&cal.dragging)){return false;} -var posX;var posY;if(DyCalendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;} -cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return DyCalendar.stopEvent(ev);};DyCalendar.calDragEnd=function(ev){var cal=DyCalendar._C;if(!cal){return false;} -cal.dragging=false;with(DyCalendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);} -cal.hideShowCovered();};DyCalendar.dayMouseDown=function(ev){var el=DyCalendar.getElement(ev);if(el.disabled){return false;} -var cal=el.calendar;cal.activeDiv=el;DyCalendar._C=cal;if(el.navtype!=300)with(DyCalendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else -addEvent(document,DyCalendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);} -if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("DyCalendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"DyCalendar.showYearsCombo(true)":"DyCalendar.showYearsCombo(false)",250);}else{cal.timeout=null;} -return DyCalendar.stopEvent(ev);};DyCalendar.dayMouseDblClick=function(ev){DyCalendar.cellClick(DyCalendar.getElement(ev),ev||window.event);if(DyCalendar.is_ie){document.selection.empty();}};DyCalendar.dayMouseOver=function(ev){var el=DyCalendar.getElement(ev);if(DyCalendar.isRelated(el,ev)||DyCalendar._C||el.disabled){return false;} -if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);} -el.calendar.tooltips.innerHTML=el.ttip;} -if(el.navtype!=300){DyCalendar.addClass(el,"hilite");if(el.caldate){DyCalendar.addClass(el.parentNode,"rowhilite");}} -return DyCalendar.stopEvent(ev);};DyCalendar.dayMouseOut=function(ev){with(DyCalendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled) -return false;removeClass(el,"hilite");if(el.caldate) -removeClass(el.parentNode,"rowhilite");if(el.calendar) -el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(ev);}};DyCalendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){DyCalendar.removeClass(cal.currentDateEl,"selected");DyCalendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}} -cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl) -cal._toggleMultipleDate(new Date(date));else -newdate=!el.disabled;if(other_month) -cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){DyCalendar.removeClass(el,"hilite");cal.callCloseHandler();return;} -date=new Date(cal.date);if(el.navtype==0) -date.setDateOnly(new Date());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);} -date.setMonth(m);};switch(el.navtype){case 400:DyCalendar.removeClass(el,"hilite");var text=DyCalendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?DyCalendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";} -alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);} -break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);} -break;case 1:if(mon<11){setMonth(mon+1);}else if(year=0;) -if(range[i]==current) -break;if(ev&&ev.shiftKey){if(--i<0) -i=range.length-1;}else if(++i>=range.length) -i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;} -break;} -if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0) -newdate=closing=true;} -if(newdate){ev&&cal.callHandler();} -if(closing){DyCalendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};DyCalendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;} -this.date=this.dateStr?new Date(this.dateStr):new Date();var table=DyCalendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;DyCalendar.addEvent(table,"mousedown",DyCalendar.tableMouseDown);var div=DyCalendar.createElement("div");this.element=div;div.className="calendar";div.style.zIndex="9999";if(this.isPopup){div.style.position="absolute";div.style.display="none";} -div.appendChild(table);var thead=DyCalendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=DyCalendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2) -cell.className+=" nav";DyCalendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="
"+text+"
";return cell;};row=DyCalendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=DyCalendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=DyCalendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=DyCalendar._TT["CLOSE"];} -row=DyCalendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=DyCalendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=DyCalendar._TT["PREV_MONTH"];this._nav_now=hh(DyCalendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=DyCalendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=DyCalendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=DyCalendar._TT["NEXT_YEAR"];row=DyCalendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=DyCalendar.createElement("td",row);cell.className="name wn";cell.innerHTML=DyCalendar._TT["WK"];} -for(var i=7;i>0;--i){cell=DyCalendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;DyCalendar._add_evs(cell);}} -this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=DyCalendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=DyCalendar.createElement("tr",tbody);if(this.weekNumbers){cell=DyCalendar.createElement("td",row);} -for(var j=7;j>0;--j){cell=DyCalendar.createElement("td",row);cell.calendar=this;DyCalendar._add_evs(cell);}} -if(this.showsTime){row=DyCalendar.createElement("tr",tbody);row.className="time";cell=DyCalendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=DyCalendar._TT["TIME"]||" ";cell=DyCalendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=DyCalendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=DyCalendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number") -part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}} -DyCalendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=DyCalendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=DyCalendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12) -AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else -cell.innerHTML=" ";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";} -H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12) -h+=12;else if(/am/i.test(AP.innerHTML)&&h==12) -h=0;} -var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};} -var tfoot=DyCalendar.createElement("tfoot",table);row=DyCalendar.createElement("tr",tfoot);row.className="footrow";cell=hh(DyCalendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=DyCalendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";} -this.tooltips=cell;div=DyCalendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i0;--i){var yr=DyCalendar.createElement("div");yr.className=DyCalendar.is_ie?"label-IEfix":"label";div.appendChild(yr);} -this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};DyCalendar._keyEvent=function(ev){var cal=window._dynarch_popupDyCalendar;if(!cal||cal.multiple) -return false;(DyCalendar.is_ie)&&(ev=window.event);var act=(DyCalendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&DyCalendar.cellClick(cal._nav_pm);break;case 38:act&&DyCalendar.cellClick(cal._nav_py);break;case 39:act&&DyCalendar.cellClick(cal._nav_nm);break;case 40:act&&DyCalendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:DyCalendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new Date(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new Date(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0) -ne=cal.ar_days[y][x];else{x=6;K=38;continue;} -break;case 38:if(--y>=0) -ne=cal.ar_days[y][x];else{prevMonth();setVars();} -break;case 39:if(++x<7) -ne=cal.ar_days[y][x];else{x=0;K=40;continue;} -break;case 40:if(++ythis.maxYear){year=this.maxYear;date.setFullYear(year);} -this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0) -day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=DyCalendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=DyCalendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;} -row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML=" ";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;} -cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates) -dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(this.getDateToolTip){var toolTip=this.getDateToolTip(date,year,month,iday);if(toolTip) -cell.title=toolTip;} -if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status)) -cell.disabled=true;cell.className+=" "+status;}} -if(!cell.disabled){cell.caldate=new Date(date);cell.ttip="_";if(!this.multiple&¤t_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;} -if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=DyCalendar._TT["PART_TODAY"];} -if(weekend.indexOf(wday.toString())!=-1) -cell.className+=cell.otherMonth?" oweekend":" weekend";}} -if(!(hasdays||this.showsOtherMonths)) -row.className="emptyrow";} -this.title.innerHTML=DyCalendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};DyCalendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d) -continue;if(cell) -cell.className+=" selected";}}};DyCalendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){DyCalendar.addClass(cell,"selected");this.multiple[ds]=date;}else{DyCalendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};DyCalendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};DyCalendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};DyCalendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};DyCalendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};DyCalendar.prototype.setDateStatusHandler=DyCalendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};DyCalendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};DyCalendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};DyCalendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);} -this.hideShowCovered();};DyCalendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);DyCalendar._C=null;window._dynarch_popupDyCalendar=null;};DyCalendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};DyCalendar._checkDyCalendar=function(ev){var calendar=window._dynarch_popupDyCalendar;if(!calendar){return false;} -var el=DyCalendar.is_ie?DyCalendar.getElement(ev):DyCalendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupDyCalendar.callCloseHandler();return DyCalendar.stopEvent(ev);}};DyCalendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];DyCalendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];DyCalendar.removeClass(cell,"hilite");DyCalendar.removeClass(cell,"active");}} -this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupDyCalendar=this;DyCalendar.addEvent(document,"keydown",DyCalendar._keyEvent);DyCalendar.addEvent(document,"keypress",DyCalendar._keyEvent);DyCalendar.addEvent(document,"mousedown",DyCalendar._checkDyCalendar);} -this.hideShowCovered();};DyCalendar.prototype.hide=function(){if(this.isPopup){DyCalendar.removeEvent(document,"keydown",DyCalendar._keyEvent);DyCalendar.removeEvent(document,"keypress",DyCalendar._keyEvent);DyCalendar.removeEvent(document,"mousedown",DyCalendar._checkDyCalendar);} -this.element.style.display="none";this.hidden=true;this.hideShowCovered();};DyCalendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};DyCalendar.prototype.showAtElement=function(el,opts){var self=this;var p=DyCalendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;} -function fixPosition(box){if(box.x<0) -box.x=0;if(box.y<0) -box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=DyCalendar.getAbsolutePos(cp);document.body.removeChild(cp);if(document.body.scrollLeft){br.x+=document.body.scrollLeft;} -br.x+=window.scrollX;if(document.body.scrollTop){br.y+=document.body.scrollTop;} -br.y+=window.scrollY;var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";DyCalendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);} -switch(valign){case"T":p.y-=h;break;case"B":p.y+=el.offsetHeight;break;case"C":p.y+=(el.offsetHeight-h)/2;break;case"t":p.y+=el.offsetHeight-h;break;case"b":break;} -switch(halign){case"L":p.x-=w;break;case"R":p.x+=el.offsetWidth;break;case"C":p.x+=(el.offsetWidth-w)/2;break;case"l":p.x+=el.offsetWidth-w;break;case"r":break;} -p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(DyCalendar.is_khtml) -setTimeout("DyCalendar.continuation_for_the_fucking_khtml_browser()",10);else -DyCalendar.continuation_for_the_fucking_khtml_browser();};DyCalendar.prototype.setDateFormat=function(str){this.dateFormat=str;};DyCalendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};DyCalendar.prototype.parseDate=function(str,fmt){if(!fmt) -fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};DyCalendar.prototype.hideShowCovered=function(){if(!DyCalendar.is_ie&&!DyCalendar.is_opera) -return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!DyCalendar.is_khtml) -value=document.defaultView.getComputedStyle(obj,"").getPropertyValue("visibility");else -value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else -value='';} -return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=DyCalendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=DyCalendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2EY2)||(CY229)?1900:2000);break;case"%b":case"%B":for(j=0;j<12;++j){if(DyCalendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}} -break;case"%H":case"%I":case"%k":case"%l":hr=parseInt(a[i],10);break;case"%P":case"%p":if(/pm/i.test(a[i])&&hr<12) -hr+=12;else if(/am/i.test(a[i])&&hr>=12) -hr-=12;break;case"%M":min=parseInt(a[i],10);break;}} -if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0) -return new Date(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}} -if(y==0) -y=today.getFullYear();if(m!=-1&&d!=0) -return new Date(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();} -if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new Date(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0) -ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=DyCalendar._SDN[w];s["%A"]=DyCalendar._DN[w];s["%b"]=DyCalendar._SMN[m];s["%B"]=DyCalendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!DyCalendar.is_ie5&&!DyCalendar.is_khtml) -return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i'+str+' '; + } + } + } + this.loaded_popup_menus[menu_id] = html; + } + + // 레이어 출력 + if(html) { + var area = jQuery("#popup_menu_area").html('
    '+html+'
'); + var areaOffset = {top:params['page_y'], left:params['page_x']}; + + if(area.outerHeight()+areaOffset.top > jQuery(window).height()+jQuery(window).scrollTop()) + areaOffset.top = jQuery(window).height() - area.outerHeight() + jQuery(window).scrollTop(); + if(area.outerWidth()+areaOffset.left > jQuery(window).width()+jQuery(window).scrollLeft()) + areaOffset.left = jQuery(window).width() - area.outerWidth() + jQuery(window).scrollLeft(); + + if($.browser.safari) { + areaOffset.top -= 16; + areaOffset.left -= 16; + } + + area.css({ visibility:"visible", top:areaOffset.top, left:areaOffset.left }); + } + } + } + +}) (jQuery); + +/* jQuery(document).ready() */ +jQuery(function($) { + /* 팝업메뉴 레이어 생성 */ + if(!$('#popup_menu_area').length) { + var menuObj = $('
') + .attr('id', 'popup_menu_area') + .css({visibility:'hidden', zIndex:9999}); + $(document.body).append(menuObj); + } + + $(document).click(function(evt) { + var area = jQuery("#popup_menu_area"); + if(!area.length) return; + + // 이전에 호출되었을지 모르는 팝업메뉴 숨김 + area.css('visibility', 'hidden'); + + var targetObj = $(evt.target); + if(!targetObj.length) return; + + // obj의 nodeName이 div나 span이 아니면 나올대까지 상위를 찾음 + if(targetObj.length && jQuery.inArray(targetObj.attr('nodeName'), ['DIV', 'SPAN', 'A']) == -1) targetObj = targetObj.parent(); + if(!targetObj.length || jQuery.inArray(targetObj.attr('nodeName'), ['DIV', 'SPAN', 'A']) == -1) return; + + // 객체의 className값을 구함 + var class_name = targetObj.attr('className'); + if(class_name.indexOf('_') <= 0) return; + // className을 분리 + var class_name_list = class_name.split(' '); + + var menu_id = ''; + var menu_id_regx = /^([a-zA-Z]+)_([0-9]+)$/; + + + for(var i = 0, c = class_name_list.length; i < c; i++) { + if(menu_id_regx.test(class_name_list[i])) { + menu_id = class_name_list[i]; + } + } + + if(!menu_id) return; + + // module명과 대상 번호가 없으면 return + var tmp_arr = menu_id.split('_'); + var module_name = tmp_arr[0]; + var target_srl = tmp_arr[1]; + if(!module_name || !target_srl || target_srl < 1) return; + + // action이름을 규칙에 맞게 작성 + var action_name = "get" + module_name.substr(0,1).toUpperCase() + module_name.substr(1,module_name.length-1) + "Menu"; + + // 서버에 메뉴를 요청 + var params = new Array(); + params["target_srl"] = target_srl; + params["cur_mid"] = current_mid; + params["cur_act"] = current_url.getQuery('act'); + params["menu_id"] = menu_id; + params["page_x"] = evt.pageX; + params["page_y"] = evt.pageY; + + var response_tags = new Array("error","message","menus"); + + if(typeof(XE.loaded_popup_menus[menu_id]) != 'undefined') { + XE.displayPopupMenu(params, response_tags, params); + return; + } + show_waiting_message = false; + exec_xml(module_name, action_name, params, XE.displayPopupMenu, response_tags, params); + show_waiting_message = true; + }); + + /* select - option의 disabled=disabled 속성을 IE에서도 체크하기 위한 함수 */ + if($.browser.msie) { + $('select').each(function(i, sels) { + var disabled_exists = false; + var first_enable = new Array(); + + for(var j=0; j < sels.options.length; j++) { + if(sels.options[j].disabled) { + sels.options[j].style.color = '#CCCCCC'; + disabled_exists = true; + }else{ + first_enable[i] = (first_enable[i] > -1) ? first_enable[i] : j; + } + } + + if(!disabled_exists) return; + + sels.oldonchange = sels.onchange; + sels.onchange = function() { + if(this.options[this.selectedIndex].disabled) { + + this.selectedIndex = first_enable[i]; + /* + if(this.options.length<=1) this.selectedIndex = -1; + else if(this.selectedIndex < this.options.length - 1) this.selectedIndex++; + else this.selectedIndex--; + */ + + } else { + if(this.oldonchange) this.oldonchange(); + } + }; + + if(sels.selectedIndex >= 0 && sels.options[ sels.selectedIndex ].disabled) sels.onchange(); + + }); + } +}); + +/* + * jQuery 1.2.6 + * Opera 브라우저에서 $(window).height() / width() 값을 잘못 가져오는 문제 수정 + * jQuery 1.3에서 수정되었음 + * @link http://dev.jquery.com/changeset/5938 + */ +if(jQuery.fn.jquery == '1.2.6') { + jQuery.each([ "Height", "Width" ], function(i, name){ + var type = name.toLowerCase(); + + jQuery.fn[ type ] = function( size ) { + return this[0] == window ? + // Opera 브라우저에서 $(window).height() / width() 값을 잘못 가져오는 문제 수정 + jQuery.browser.opera && document.body.parentNode[ "client" + name ] || + + jQuery.browser.safari && window[ "inner" + name ] || + document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] : + + this[0] == document ? + Math.max( + Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), + Math.max(document.body["offset" + name], document.documentElement["offset" + name]) + ) : + + size == undefined ? + (this.length ? jQuery.css( this[0], type ) : null) : + this.css( type, size.constructor == String ? size : size + "px" ); + }; + }); +} + + + /** * @brief location.href에서 특정 key의 값을 return **/ @@ -11,7 +279,7 @@ String.prototype.getQuery = function(key) { var idx = this.indexOf('?'); if(idx == -1) return null; var query_string = this.substr(idx+1, this.length); - var args = {} + var args = {}; query_string.replace(/([^=]+)=([^&]*)(&|$)/g, function() { args[arguments[1]] = arguments[2]; }); var q = args[key]; @@ -41,7 +309,7 @@ String.prototype.setQuery = function(key, val) { if( !args.hasOwnProperty(i) ) continue; var arg = args[i]; if(!arg.toString().trim()) continue; - + arg = decodeURI(arg); q_list[q_list.length] = i+'='+arg; } uri = uri+"?"+q_list.join("&"); @@ -49,59 +317,50 @@ String.prototype.setQuery = function(key, val) { if(val.toString().trim()) uri = uri+"?"+key+"="+val; } - uri = uri.replace(/^https:\/\//i,'http://'); - if(typeof(ssl_actions)!='undefined' && typeof(ssl_actions.length)!='undefined' && uri.getQuery('act')) { + var re = /https:\/\/([^:\/]+)(:\d+|)/i; + var check = re.exec(uri); + if(check) + { + var toReplace = "http://"+check[1]; + if(typeof(http_port)!='undefined' && http_port != 80) + { + toReplace += ":" + http_port; + } + uri = uri.replace(re,toReplace); + } + var bUseSSL = false; + if(typeof(enforce_ssl)!='undefined' && enforce_ssl) + { + bUseSSL = true; + } + else if(typeof(ssl_actions)!='undefined' && typeof(ssl_actions.length)!='undefined' && uri.getQuery('act')) { var act = uri.getQuery('act'); for(i=0;i'; html += ''; @@ -290,245 +497,54 @@ function displayMultimedia(src, width, height, options) { * @brief 에디터에서 사용되는 내용 여닫는 코드 (고정, zbxe용) **/ function zbxe_folder_open(id) { - var open_text_obj = xGetElementById("folder_open_"+id); - var close_text_obj = xGetElementById("folder_close_"+id); - var folder_obj = xGetElementById("folder_"+id); - open_text_obj.style.display = "none"; - close_text_obj.style.display = "block"; - folder_obj.style.display = "block"; + jQuery("#folder_open_"+id).hide(); + jQuery("#folder_close_"+id).show(); + jQuery("#folder_"+id).show(); } - function zbxe_folder_close(id) { - var open_text_obj = xGetElementById("folder_open_"+id); - var close_text_obj = xGetElementById("folder_close_"+id); - var folder_obj = xGetElementById("folder_"+id); - open_text_obj.style.display = "block"; - close_text_obj.style.display = "none"; - folder_obj.style.display = "none"; -} - - -/** - * @brief 에디터에서 사용하되 내용 여닫는 코드 (zb5beta beta 호환용으로 남겨 놓음) - **/ -function svc_folder_open(id) { - var open_text_obj = xGetElementById("_folder_open_"+id); - var close_text_obj = xGetElementById("_folder_close_"+id); - var folder_obj = xGetElementById("_folder_"+id); - open_text_obj.style.display = "none"; - close_text_obj.style.display = "block"; - folder_obj.style.display = "block"; -} - -function svc_folder_close(id) { - var open_text_obj = xGetElementById("_folder_open_"+id); - var close_text_obj = xGetElementById("_folder_close_"+id); - var folder_obj = xGetElementById("_folder_"+id); - open_text_obj.style.display = "block"; - close_text_obj.style.display = "none"; - folder_obj.style.display = "none"; + jQuery("#folder_open_"+id).show(); + jQuery("#folder_close_"+id).hide(); + jQuery("#folder_"+id).hide(); } /** - * @brief 팝업의 경우 내용에 맞춰 현 윈도우의 크기를 조절해줌 + * @brief 팝업의 경우 내용에 맞춰 현 윈도우의 크기를 조절해줌 * 팝업의 내용에 맞게 크기를 늘리는 것은... 쉽게 되지는 않음.. ㅡ.ㅜ * popup_layout 에서 window.onload 시 자동 요청됨. **/ function setFixedPopupSize() { + var bodyObj = jQuery('#popBody'); - if(xGetElementById('popBody')) { - if(xHeight('popBody')>500) { - xGetElementById('popBody').style.overflowY = 'scroll'; - xGetElementById('popBody').style.overflowX = 'hidden'; - xHeight('popBody', 500); + if(bodyObj.length) { + if(bodyObj.height() > 500) { + bodyObj.css({ overflowY:'scroll', overflowX:'hidden', height:500 }); } } - var w = xWidth("popup_content"); - var h = xHeight("popup_content"); + var w = jQuery("#popup_content").width(); + var h = jQuery("#popup_content").height(); - var obj_list = xGetElementsByTagName('div'); - for(i=0;iw) w = ww; - } + jQuery('div').each(function() { + var ww = jQuery(this).width(); + if(jQuery.inArray(this.id, ['waitingforserverresponse', 'fororiginalimagearea', 'fororiginalimageareabg']) == -1) { + if(ww > w) w = ww; + } + }); // 윈도우에서는 브라우저 상관없이 가로 픽셀이 조금 더 늘어나야 한다. - if(xUA.indexOf('windows')>0) { - if(xOp7Up) w += 10; - else if(xIE4Up) w += 10; + if(navigator.userAgent.toLowerCase().indexOf('windows') > 0) { + if(jQuery.browser.opera) w += 10; + else if(jQuery.browser.msie) w += 10; else w += 6; } - window.resizeTo(w,h); - - var h1 = xHeight(window.document.body); - window.resizeBy(0,h-h1); + window.resizeTo(w, h); + + var h1 = jQuery(window).height(); + window.resizeBy(0, h-h1); window.scrollTo(0,0); } -/** - * @brief 이름, 게시글등을 클릭하였을 경우 팝업 메뉴를 보여주는 함수 - **/ -xAddEventListener(window, 'load', createPopupMenu); -xAddEventListener(document, 'click', chkPopupMenu); - -var loaded_popup_menus = new Array(); - -/* 멤버 팝업 메뉴 레이어를 생성하는 함수 (문서 출력이 완료되었을때 동작) */ -function createPopupMenu(evt) { - var area = xGetElementById("popup_menu_area"); - if(area) return; - area = xCreateElement("div"); - area.id = "popup_menu_area"; - area.style.visibility = 'hidden'; - area.style.zIndex = 9999; - document.body.appendChild(area); -} - -/* 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리 */ -function chkPopupMenu(evt) { - - // 이전에 호출되었을지 모르는 팝업메뉴 숨김 - var area = xGetElementById("popup_menu_area"); - if(!area) return; - - if(area.style.visibility != "hidden") area.style.visibility = "hidden"; - - // 이벤트 대상이 없으면 무시 - var e = new xEvent(evt); - - if(!e) return; - - // 대상의 객체 구함 - var obj = e.target; - if(!obj) return; - - - // obj의 nodeName이 div나 span이 아니면 나올대까지 상위를 찾음 - if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN' && obj.nodeName != 'A') obj = obj.parentNode; - if(!obj || (obj.nodeName != 'DIV' && obj.nodeName != 'SPAN' && obj.nodeName != 'A')) return; - - // 객체의 className값을 구함 - var class_name = obj.className; - if(!class_name) return; - // className을 분리 - var class_name_list = class_name.split(' '); - - var menu_id = ''; - var menu_id_regx = /^([a-zA-Z]+)_([0-9]+)$/; - - - for(var i=0,c=class_name_list.length;i0 ? e.pageX : GetObjLeft(obj); - params["page_y"] = e.pageY >0 ? e.pageY : GetObjTop(obj)+ xHeight(obj); - - var response_tags = new Array("error","message","menus"); - - if(loaded_popup_menus[menu_id]) { - displayPopupMenu(params, response_tags, params); - return; - } - show_waiting_message = false; - exec_xml(module_name, action_name, params, displayPopupMenu, response_tags, params); - show_waiting_message = true; - -} - -function GetObjTop(obj) { - if(obj.offsetParent == document.body) return xOffsetTop(obj); - else return xOffsetTop(obj) + GetObjTop(obj.offsetParent); -} -function GetObjLeft(obj) { - if(obj.offsetParent == document.body) return xOffsetLeft(obj); - else return xOffsetLeft(obj) + GetObjLeft(obj.offsetParent); -} - -function displayPopupMenu(ret_obj, response_tags, params) { - - var target_srl = params["target_srl"]; - var menu_id = params["menu_id"]; - var menus = ret_obj['menus']; - var html = ""; - - if(loaded_popup_menus[menu_id]) { - html = loaded_popup_menus[menu_id]; - - } else { - if(menus) { - var item = menus['item']; - if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item); - if(item.length) { - for(var i=0;i'+str+' '; - } - } - } - loaded_popup_menus[menu_id] = html; - } - - // 레이어 출력 - if(html) { - var area = xGetElementById("popup_menu_area"); - xInnerHtml(area, '
    '+html+'
'); - xLeft(area, params["page_x"]); - xTop(area, params["page_y"]); - if(xWidth(area)+xLeft(area)>xClientWidth()+xScrollLeft()) xLeft(area, xClientWidth()-xWidth(area)+xScrollLeft()); - if(xHeight(area)+xTop(area)>xClientHeight()+xScrollTop()) xTop(area, xClientHeight()-xHeight(area)+xScrollTop()); - area.style.visibility = "visible"; - } -} - /** * @brief 추천/비추천,스크랩,신고기능등 특정 srl에 대한 특정 module/action을 호출하는 함수 **/ @@ -549,23 +565,11 @@ function completeMessage(ret_obj) { location.reload(); } -/** - * @brief 날짜 선택 (달력 열기) - **/ -function open_calendar(fo_id, day_str, callback_func) { - if(typeof(day_str)=="undefined") day_str = ""; - var url = "./common/tpl/calendar.php?"; - if(fo_id) url+="fo_id="+fo_id; - if(day_str) url+="&day_str="+day_str; - if(callback_func) url+="&callback_func="+callback_func; - - popopen(url, 'Calendar'); -} /* 언어코드 (lang_type) 쿠키값 변경 */ function doChangeLangType(obj) { - if(typeof(obj)=="string") { + if(typeof(obj) == "string") { setLangType(obj); } else { var val = obj.options[obj.selectedIndex].value; @@ -590,20 +594,20 @@ function doDocumentPreview(obj) { var content = editorGetContent(editor_sequence); - var win = window.open("","previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes"); + var win = window.open("", "previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes"); - var dummy_obj = xGetElementById("previewDocument"); + var dummy_obj = jQuery("#previewDocument"); - if(!dummy_obj) { - var fo_code = '
'+ - ''+ - ''+ - ''+ - '
'; - var dummy = xCreateElement("DIV"); - xInnerHtml(dummy, fo_code); - window.document.body.insertBefore(dummy,window.document.body.lastChild); - dummy_obj = xGetElementById("previewDocument"); + if(!dummy_obj.length) { + jQuery( + '
'+ + ''+ + ''+ + ''+ + '
' + ).appendTo(document.body); + + dummy_obj = jQuery("#previewDocument")[0]; } if(dummy_obj) { @@ -632,7 +636,7 @@ function doDocumentSave(obj) { } function completeDocumentSave(ret_obj) { - xGetElementsByAttribute('input', 'name', 'document_srl')[0].value = ret_obj['document_srl']; + jQuery('input[name=document_srl]').eq(0).val(ret_obj['document_srl']); alert(ret_obj['message']); } @@ -662,35 +666,6 @@ function viewSkinInfo(module, skin) { popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+module+"&skin="+skin, 'SkinInfo'); } -/* 체크박스 선택 */ -function checkboxSelectAll(form, name, option){ - var value; - var fo_obj = xGetElementById(form); - for ( var i = 0 ; i < fo_obj.length ; i++ ){ - if(typeof(option) == "undefined") { - var select_mode = fo_obj[i].checked; - if ( select_mode == 0 ){ - value = true; - select_mode = 1; - }else{ - value = false; - select_mode = 0; - } - } - else if(option == true) value = true - else if(option == false) value = false - - if(fo_obj[i].name == name) fo_obj[i].checked = value; - } -} - -/* 체크박스를 실행 */ -function clickCheckBoxAll(form, name) { - var fo_obj = xGetElementById(form); - for ( var i = 0 ; i < fo_obj.length ; i++ ){ - if(fo_obj[i].name == name) fo_obj[i].click(); - } -} /* 관리자가 문서를 관리하기 위해서 선택시 세션에 넣음 */ var addedDocument = new Array(); @@ -726,6 +701,18 @@ function transRGB2Hex(value) { return hex; } +/* 보안 로그인 모드로 전환 */ +function toggleSecuritySignIn() { + var href = location.href; + if(/https:\/\//i.test(href)) location.href = href.replace(/^https/i,'http'); + else location.href = href.replace(/^http/i,'https'); +} + +function reloadDocument() { + location.reload(); +} + + /** * * Base64 encode / decode @@ -869,62 +856,98 @@ var Base64 = { } -/* select - option의 disabled=disabled 속성을 IE에서도 체크하기 위한 함수 */ -if(xIE4Up) { - xAddEventListener(window, 'load', activateOptionDisabled); - - function activateOptionDisabled(evt) { - var sels = xGetElementsByTagName('select'); - for(var i=0; i < sels.length; i++){ - var disabled_exists = false; - var first_enable = new Array(); - for(var j=0; j < sels[i].options.length; j++) { - if(sels[i].options[j].disabled) { - sels[i].options[j].style.color = '#CCCCCC'; - disabled_exists = true; - }else{ - first_enable[i] = first_enable[i]>-1? first_enable[i] : j; - } - } - - if(!disabled_exists) continue; - - sels[i].oldonchange = sels[i].onchange; - sels[i].onchange = function() { - if(this.options[this.selectedIndex].disabled) { - - this.selectedIndex = first_enable[i]; -/* -if(this.options.length<=1) this.selectedIndex = -1; -else if(this.selectedIndex < this.options.length - 1) this.selectedIndex++; -else this.selectedIndex--; -*/ - - } else { - if(this.oldonchange) this.oldonchange(); - } - } - - if(sels[i].selectedIndex >= 0 && sels[i].options[ sels[i].selectedIndex ].disabled) sels[i].onchange(); - - } - } -} -/* 보안 로그인 모드로 전환 */ -function toggleSecuritySignIn() { - var href = location.href; - if(/https:\/\//i.test(href)) location.href = href.replace(/^https/i,'http'); - else location.href = href.replace(/^http/i,'https'); -} -/* 하위호환성 문제 */ -if(typeof(resizeImageContents) == 'undefined') -{ + + +/* ---------------------------------------------- + * DEPRECATED + * 하위호환용으로 남겨 놓음 + * ------------------------------------------- */ + +if(typeof(resizeImageContents) == 'undefined') { function resizeImageContents() {} } -function reloadDocument() { - location.reload(); +if(typeof(activateOptionDisabled) == 'undefined') { + function activateOptionDisabled() {} +} + +objectExtend = jQuery.extend; + +/** + * @brief 특정 Element의 display 옵션 토글 + **/ +function toggleDisplay(objId) { + jQuery('#'+objId).toggle(); +} + +/* 체크박스 선택 */ +function checkboxSelectAll(formObj, name, checked) { + var itemName = name; + var option = {}; + if(typeof(formObj) != "undefined") option.wrap = formObj; + if(typeof(checked) != "undefined") option.checked = checked; + + XE.checkboxToggleAll(itemName, option); +} + +/* 체크박스를 실행 */ +function clickCheckBoxAll(formObj, name) { + var itemName = name; + var option = { doClick:true }; + if(typeof(formObj) != "undefined") option.wrap = formObj; + + XE.checkboxToggleAll(itemName, option); +} + +/** + * @brief 에디터에서 사용하되 내용 여닫는 코드 (zb5beta beta 호환용으로 남겨 놓음) + **/ +function svc_folder_open(id) { + jQuery("#_folder_open_"+id).hide(); + jQuery("#_folder_close_"+id).show(); + jQuery("#_folder_"+id).show(); +} +function svc_folder_close(id) { + jQuery("#_folder_open_"+id).show(); + jQuery("#_folder_close_"+id).hide(); + jQuery("#_folder_"+id).hide(); +} + +/** + * @brief 날짜 선택 (달력 열기) + **/ +function open_calendar(fo_id, day_str, callback_func) { + if(typeof(day_str)=="undefined") day_str = ""; + + var url = "./common/tpl/calendar.php?"; + if(fo_id) url+="fo_id="+fo_id; + if(day_str) url+="&day_str="+day_str; + if(callback_func) url+="&callback_func="+callback_func; + + popopen(url, 'Calendar'); +} + +var loaded_popup_menus = XE.loaded_popup_menus; +function createPopupMenu() {} +function chkPopupMenu() {} +function displayPopupMenu(ret_obj, response_tags, params) { + XE.displayPopupMenu(ret_obj, response_tags, params); +} + +function GetObjLeft(obj) { + return jQuery(obj).offset().left; +} +function GetObjTop(obj) { + return jQuery(obj).offset().top; +} + +function replaceOuterHTML(obj, html) { + jQuery(obj).replaceWith(html); +} + +function getOuterHTML(obj) { + return jQuery(obj).html().trim(); } diff --git a/common/js/jquery.js b/common/js/jquery.js new file mode 100644 index 000000000..88e661eec --- /dev/null +++ b/common/js/jquery.js @@ -0,0 +1,3549 @@ +(function(){ +/* + * jQuery 1.2.6 - New Wave Javascript + * + * Copyright (c) 2008 John Resig (jquery.com) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $ + * $Rev: 5685 $ + */ + +// Map over jQuery in case of overwrite +var _jQuery = window.jQuery, +// Map over the $ in case of overwrite + _$ = window.$; + +var jQuery = window.jQuery = window.$ = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context ); +}; + +// A simple way to check for HTML strings or ID strings +// (both of which we optimize for) +var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/, + +// Is it a simple selector + isSimple = /^.[^:#\[\.]*$/, + +// Will speed up references to undefined, and allows munging its name. + undefined; + +jQuery.fn = jQuery.prototype = { + init: function( selector, context ) { + // Make sure that a selection was provided + selector = selector || document; + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this[0] = selector; + this.length = 1; + return this; + } + // Handle HTML strings + if ( typeof selector == "string" ) { + // Are we dealing with HTML string or an ID? + var match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) + selector = jQuery.clean( [ match[1] ], context ); + + // HANDLE: $("#id") + else { + var elem = document.getElementById( match[3] ); + + // Make sure an element was located + if ( elem ){ + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id != match[3] ) + return jQuery().find( selector ); + + // Otherwise, we inject the element directly into the jQuery object + return jQuery( elem ); + } + selector = []; + } + + // HANDLE: $(expr, [context]) + // (which is just equivalent to: $(content).find(expr) + } else + return jQuery( context ).find( selector ); + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) + return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); + + return this.setArray(jQuery.makeArray(selector)); + }, + + // The current version of jQuery being used + jquery: "1.2.6", + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + // The number of elements contained in the matched element set + length: 0, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == undefined ? + + // Return a 'clean' array + jQuery.makeArray( this ) : + + // Return just the object + this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + // Build a new jQuery matched element set + var ret = jQuery( elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Force the current matched set of elements to become + // the specified array of elements (destroying the stack in the process) + // You should use pushStack() in order to do this, but maintain the stack + setArray: function( elems ) { + // Resetting the length to 0, then using the native Array push + // is a super-fast way to populate an object with array-like properties + this.length = 0; + Array.prototype.push.apply( this, elems ); + + return this; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + var ret = -1; + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem && elem.jquery ? elem[0] : elem + , this ); + }, + + attr: function( name, value, type ) { + var options = name; + + // Look for the case where we're accessing a style value + if ( name.constructor == String ) + if ( value === undefined ) + return this[0] && jQuery[ type || "attr" ]( this[0], name ); + + else { + options = {}; + options[ name ] = value; + } + + // Check to see if we're setting style values + return this.each(function(i){ + // Set all the styles + for ( name in options ) + jQuery.attr( + type ? + this.style : + this, + name, jQuery.prop( this, options[ name ], type, i, name ) + ); + }); + }, + + css: function( key, value ) { + // ignore negative width and height values + if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) + value = undefined; + return this.attr( key, value, "curCSS" ); + }, + + text: function( text ) { + if ( typeof text != "object" && text != null ) + return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); + + var ret = ""; + + jQuery.each( text || this, function(){ + jQuery.each( this.childNodes, function(){ + if ( this.nodeType != 8 ) + ret += this.nodeType != 1 ? + this.nodeValue : + jQuery.fn.text( [ this ] ); + }); + }); + + return ret; + }, + + wrapAll: function( html ) { + if ( this[0] ) + // The elements to wrap the target around + jQuery( html, this[0].ownerDocument ) + .clone() + .insertBefore( this[0] ) + .map(function(){ + var elem = this; + + while ( elem.firstChild ) + elem = elem.firstChild; + + return elem; + }) + .append(this); + + return this; + }, + + wrapInner: function( html ) { + return this.each(function(){ + jQuery( this ).contents().wrapAll( html ); + }); + }, + + wrap: function( html ) { + return this.each(function(){ + jQuery( this ).wrapAll( html ); + }); + }, + + append: function() { + return this.domManip(arguments, true, false, function(elem){ + if (this.nodeType == 1) + this.appendChild( elem ); + }); + }, + + prepend: function() { + return this.domManip(arguments, true, true, function(elem){ + if (this.nodeType == 1) + this.insertBefore( elem, this.firstChild ); + }); + }, + + before: function() { + return this.domManip(arguments, false, false, function(elem){ + this.parentNode.insertBefore( elem, this ); + }); + }, + + after: function() { + return this.domManip(arguments, false, true, function(elem){ + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + }, + + end: function() { + return this.prevObject || jQuery( [] ); + }, + + find: function( selector ) { + var elems = jQuery.map(this, function(elem){ + return jQuery.find( selector, elem ); + }); + + return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? + jQuery.unique( elems ) : + elems ); + }, + + clone: function( events ) { + // Do the clone + var ret = this.map(function(){ + if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { + // IE copies events bound via attachEvent when + // using cloneNode. Calling detachEvent on the + // clone will also remove the events from the orignal + // In order to get around this, we use innerHTML. + // Unfortunately, this means some modifications to + // attributes in IE that are actually only stored + // as properties will not be copied (such as the + // the name attribute on an input). + var clone = this.cloneNode(true), + container = document.createElement("div"); + container.appendChild(clone); + return jQuery.clean([container.innerHTML])[0]; + } else + return this.cloneNode(true); + }); + + // Need to set the expando to null on the cloned set if it exists + // removeData doesn't work here, IE removes it from the original as well + // this is primarily for IE but the data expando shouldn't be copied over in any browser + var clone = ret.find("*").andSelf().each(function(){ + if ( this[ expando ] != undefined ) + this[ expando ] = null; + }); + + // Copy the events from the original to the clone + if ( events === true ) + this.find("*").andSelf().each(function(i){ + if (this.nodeType == 3) + return; + var events = jQuery.data( this, "events" ); + + for ( var type in events ) + for ( var handler in events[ type ] ) + jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); + }); + + // Return the cloned set + return ret; + }, + + filter: function( selector ) { + return this.pushStack( + jQuery.isFunction( selector ) && + jQuery.grep(this, function(elem, i){ + return selector.call( elem, i ); + }) || + + jQuery.multiFilter( selector, this ) ); + }, + + not: function( selector ) { + if ( selector.constructor == String ) + // test special case where just one selector is passed in + if ( isSimple.test( selector ) ) + return this.pushStack( jQuery.multiFilter( selector, this, true ) ); + else + selector = jQuery.multiFilter( selector, this ); + + var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; + return this.filter(function() { + return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; + }); + }, + + add: function( selector ) { + return this.pushStack( jQuery.unique( jQuery.merge( + this.get(), + typeof selector == 'string' ? + jQuery( selector ) : + jQuery.makeArray( selector ) + ))); + }, + + is: function( selector ) { + return !!selector && jQuery.multiFilter( selector, this ).length > 0; + }, + + hasClass: function( selector ) { + return this.is( "." + selector ); + }, + + val: function( value ) { + if ( value == undefined ) { + + if ( this.length ) { + var elem = this[0]; + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type == "select-one"; + + // Nothing was selected + if ( index < 0 ) + return null; + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + if ( option.selected ) { + // Get the specifc value for the option + value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; + + // We don't need an array for one selects + if ( one ) + return value; + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + + // Everything else, we just grab the value + } else + return (this[0].value || "").replace(/\r/g, ""); + + } + + return undefined; + } + + if( value.constructor == Number ) + value += ''; + + return this.each(function(){ + if ( this.nodeType != 1 ) + return; + + if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) + this.checked = (jQuery.inArray(this.value, value) >= 0 || + jQuery.inArray(this.name, value) >= 0); + + else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(value); + + jQuery( "option", this ).each(function(){ + this.selected = (jQuery.inArray( this.value, values ) >= 0 || + jQuery.inArray( this.text, values ) >= 0); + }); + + if ( !values.length ) + this.selectedIndex = -1; + + } else + this.value = value; + }); + }, + + html: function( value ) { + return value == undefined ? + (this[0] ? + this[0].innerHTML : + null) : + this.empty().append( value ); + }, + + replaceWith: function( value ) { + return this.after( value ).remove(); + }, + + eq: function( i ) { + return this.slice( i, i + 1 ); + }, + + slice: function() { + return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function(elem, i){ + return callback.call( elem, i, elem ); + })); + }, + + andSelf: function() { + return this.add( this.prevObject ); + }, + + data: function( key, value ){ + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + if ( data === undefined && this.length ) + data = jQuery.data( this[0], key ); + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } else + return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ + jQuery.data( this, key, value ); + }); + }, + + removeData: function( key ){ + return this.each(function(){ + jQuery.removeData( this, key ); + }); + }, + + domManip: function( args, table, reverse, callback ) { + var clone = this.length > 1, elems; + + return this.each(function(){ + if ( !elems ) { + elems = jQuery.clean( args, this.ownerDocument ); + + if ( reverse ) + elems.reverse(); + } + + var obj = this; + + if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) + obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); + + var scripts = jQuery( [] ); + + jQuery.each(elems, function(){ + var elem = clone ? + jQuery( this ).clone( true )[0] : + this; + + // execute all scripts after the elements have been injected + if ( jQuery.nodeName( elem, "script" ) ) + scripts = scripts.add( elem ); + else { + // Remove any inner scripts for later evaluation + if ( elem.nodeType == 1 ) + scripts = scripts.add( jQuery( "script", elem ).remove() ); + + // Inject the elements into the document + callback.call( obj, elem ); + } + }); + + scripts.each( evalScript ); + }); + } +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +function evalScript( i, elem ) { + if ( elem.src ) + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + + if ( elem.parentNode ) + elem.parentNode.removeChild( elem ); +} + +function now(){ + return +new Date; +} + +jQuery.extend = jQuery.fn.extend = function() { + // copy reference to target object + var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; + + // Handle a deep copy situation + if ( target.constructor == Boolean ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target != "object" && typeof target != "function" ) + target = {}; + + // extend jQuery itself if only one argument is passed + if ( length == i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) + // Extend the base object + for ( var name in options ) { + var src = target[ name ], copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) + continue; + + // Recurse if we're merging object values + if ( deep && copy && typeof copy == "object" && !copy.nodeType ) + target[ name ] = jQuery.extend( deep, + // Never move original objects, clone them + src || ( copy.length != null ? [ ] : { } ) + , copy ); + + // Don't bring in undefined values + else if ( copy !== undefined ) + target[ name ] = copy; + + } + + // Return the modified object + return target; +}; + +var expando = "jQuery" + now(), uuid = 0, windowData = {}, + // exclude the following css properties to add px + exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, + // cache defaultView + defaultView = document.defaultView || {}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) + window.jQuery = _jQuery; + + return jQuery; + }, + + // See test/unit/core.js for details concerning this function. + isFunction: function( fn ) { + return !!fn && typeof fn != "string" && !fn.nodeName && + fn.constructor != Array && /^[\s[]?function/.test( fn + "" ); + }, + + // check if an element is in a (or is an) XML document + isXMLDoc: function( elem ) { + return elem.documentElement && !elem.body || + elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; + }, + + // Evalulates a script in a global context + globalEval: function( data ) { + data = jQuery.trim( data ); + + if ( data ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.getElementsByTagName("head")[0] || document.documentElement, + script = document.createElement("script"); + + script.type = "text/javascript"; + if ( jQuery.browser.msie ) + script.text = data; + else + script.appendChild( document.createTextNode( data ) ); + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); + }, + + cache: {}, + + data: function( elem, name, data ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // Compute a unique ID for the element + if ( !id ) + id = elem[ expando ] = ++uuid; + + // Only generate the data cache if we're + // trying to access or manipulate it + if ( name && !jQuery.cache[ id ] ) + jQuery.cache[ id ] = {}; + + // Prevent overriding the named cache with undefined values + if ( data !== undefined ) + jQuery.cache[ id ][ name ] = data; + + // Return the named cache data, or the ID for the element + return name ? + jQuery.cache[ id ][ name ] : + id; + }, + + removeData: function( elem, name ) { + elem = elem == window ? + windowData : + elem; + + var id = elem[ expando ]; + + // If we want to remove a specific section of the element's data + if ( name ) { + if ( jQuery.cache[ id ] ) { + // Remove the section of cache data + delete jQuery.cache[ id ][ name ]; + + // If we've removed all the data, remove the element's cache + name = ""; + + for ( name in jQuery.cache[ id ] ) + break; + + if ( !name ) + jQuery.removeData( elem ); + } + + // Otherwise, we want to remove all of the element's data + } else { + // Clean up the element expando + try { + delete elem[ expando ]; + } catch(e){ + // IE has trouble directly removing the expando + // but it's ok with using removeAttribute + if ( elem.removeAttribute ) + elem.removeAttribute( expando ); + } + + // Completely remove the data cache + delete jQuery.cache[ id ]; + } + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, length = object.length; + + if ( args ) { + if ( length == undefined ) { + for ( name in object ) + if ( callback.apply( object[ name ], args ) === false ) + break; + } else + for ( ; i < length; ) + if ( callback.apply( object[ i++ ], args ) === false ) + break; + + // A special, fast, case for the most common use of each + } else { + if ( length == undefined ) { + for ( name in object ) + if ( callback.call( object[ name ], name, object[ name ] ) === false ) + break; + } else + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} + } + + return object; + }, + + prop: function( elem, value, type, i, name ) { + // Handle executable functions + if ( jQuery.isFunction( value ) ) + value = value.call( elem, i ); + + // Handle passing in a number to a CSS property + return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? + value + "px" : + value; + }, + + className: { + // internal only, use addClass("class") + add: function( elem, classNames ) { + jQuery.each((classNames || "").split(/\s+/), function(i, className){ + if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) + elem.className += (elem.className ? " " : "") + className; + }); + }, + + // internal only, use removeClass("class") + remove: function( elem, classNames ) { + if (elem.nodeType == 1) + elem.className = classNames != undefined ? + jQuery.grep(elem.className.split(/\s+/), function(className){ + return !jQuery.className.has( classNames, className ); + }).join(" ") : + ""; + }, + + // internal only, use hasClass("class") + has: function( elem, className ) { + return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; + } + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var old = {}; + // Remember the old values, and insert the new ones + for ( var name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + callback.call( elem ); + + // Revert the old values + for ( var name in options ) + elem.style[ name ] = old[ name ]; + }, + + css: function( elem, name, force ) { + if ( name == "width" || name == "height" ) { + var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; + + function getWH() { + val = name == "width" ? elem.offsetWidth : elem.offsetHeight; + var padding = 0, border = 0; + jQuery.each( which, function() { + padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; + border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; + }); + val -= Math.round(padding + border); + } + + if ( jQuery(elem).is(":visible") ) + getWH(); + else + jQuery.swap( elem, props, getWH ); + + return Math.max(0, val); + } + + return jQuery.curCSS( elem, name, force ); + }, + + curCSS: function( elem, name, force ) { + var ret, style = elem.style; + + // A helper method for determining if an element's values are broken + function color( elem ) { + if ( !jQuery.browser.safari ) + return false; + + // defaultView is cached + var ret = defaultView.getComputedStyle( elem, null ); + return !ret || ret.getPropertyValue("color") == ""; + } + + // We need to handle opacity special in IE + if ( name == "opacity" && jQuery.browser.msie ) { + ret = jQuery.attr( style, "opacity" ); + + return ret == "" ? + "1" : + ret; + } + // Opera sometimes will give the wrong display answer, this fixes it, see #2037 + if ( jQuery.browser.opera && name == "display" ) { + var save = style.outline; + style.outline = "0 solid black"; + style.outline = save; + } + + // Make sure we're using the right name for getting the float value + if ( name.match( /float/i ) ) + name = styleFloat; + + if ( !force && style && style[ name ] ) + ret = style[ name ]; + + else if ( defaultView.getComputedStyle ) { + + // Only "float" is needed here + if ( name.match( /float/i ) ) + name = "float"; + + name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); + + var computedStyle = defaultView.getComputedStyle( elem, null ); + + if ( computedStyle && !color( elem ) ) + ret = computedStyle.getPropertyValue( name ); + + // If the element isn't reporting its values properly in Safari + // then some display: none elements are involved + else { + var swap = [], stack = [], a = elem, i = 0; + + // Locate all of the parent display: none elements + for ( ; a && color(a); a = a.parentNode ) + stack.unshift(a); + + // Go through and make them visible, but in reverse + // (It would be better if we knew the exact display type that they had) + for ( ; i < stack.length; i++ ) + if ( color( stack[ i ] ) ) { + swap[ i ] = stack[ i ].style.display; + stack[ i ].style.display = "block"; + } + + // Since we flip the display style, we have to handle that + // one special, otherwise get the value + ret = name == "display" && swap[ stack.length - 1 ] != null ? + "none" : + ( computedStyle && computedStyle.getPropertyValue( name ) ) || ""; + + // Finally, revert the display styles back + for ( i = 0; i < swap.length; i++ ) + if ( swap[ i ] != null ) + stack[ i ].style.display = swap[ i ]; + } + + // We should always get a number back from opacity + if ( name == "opacity" && ret == "" ) + ret = "1"; + + } else if ( elem.currentStyle ) { + var camelCase = name.replace(/\-(\w)/g, function(all, letter){ + return letter.toUpperCase(); + }); + + ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { + // Remember the original values + var left = style.left, rsLeft = elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + elem.runtimeStyle.left = elem.currentStyle.left; + style.left = ret || 0; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + elem.runtimeStyle.left = rsLeft; + } + } + + return ret; + }, + + clean: function( elems, context ) { + var ret = []; + context = context || document; + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement == 'undefined') + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + + jQuery.each(elems, function(i, elem){ + if ( !elem ) + return; + + if ( elem.constructor == Number ) + elem += ''; + + // Convert html string into DOM nodes + if ( typeof elem == "string" ) { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ + return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? + all : + front + ">"; + }); + + // Trim whitespace, otherwise indexOf won't work as expected + var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); + + var wrap = + // option or optgroup + !tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && + [ 1, "", "
" ] || + + !tags.indexOf("", "" ] || + + // matched above + (!tags.indexOf("", "" ] || + + !tags.indexOf("", "" ] || + + // IE can't serialize and + + + +

A

B

+ diff --git a/common/js/unittest/JSSpec/diff_match_patch.js b/common/js/unittest/JSSpec/diff_match_patch.js new file mode 100644 index 000000000..885e051dd --- /dev/null +++ b/common/js/unittest/JSSpec/diff_match_patch.js @@ -0,0 +1 @@ +function diff_match_patch(){this.Diff_Timeout=1.0;this.Diff_EditCost=4;this.Diff_DualThreshold=32;this.Match_Balance=0.5;this.Match_Threshold=0.5;this.Match_MinLength=100;this.Match_MaxLength=1000;this.Patch_Margin=4;function getMaxBits(){var maxbits=0;var oldi=1;var newi=2;while(oldi!=newi){maxbits++;oldi=newi;newi=newi<<1}return maxbits}this.Match_MaxBits=getMaxBits()}var DIFF_DELETE=-1;var DIFF_INSERT=1;var DIFF_EQUAL=0;diff_match_patch.prototype.diff_main=function(text1,text2,opt_checklines){if(text1==text2){return[[DIFF_EQUAL,text1]]}if(typeof opt_checklines=='undefined'){opt_checklines=true}var checklines=opt_checklines;var commonlength=this.diff_commonPrefix(text1,text2);var commonprefix=text1.substring(0,commonlength);text1=text1.substring(commonlength);text2=text2.substring(commonlength);commonlength=this.diff_commonSuffix(text1,text2);var commonsuffix=text1.substring(text1.length-commonlength);text1=text1.substring(0,text1.length-commonlength);text2=text2.substring(0,text2.length-commonlength);var diffs=this.diff_compute(text1,text2,checklines);if(commonprefix){diffs.unshift([DIFF_EQUAL,commonprefix])}if(commonsuffix){diffs.push([DIFF_EQUAL,commonsuffix])}this.diff_cleanupMerge(diffs);return diffs};diff_match_patch.prototype.diff_compute=function(text1,text2,checklines){var diffs;if(!text1){return[[DIFF_INSERT,text2]]}if(!text2){return[[DIFF_DELETE,text1]]}var longtext=text1.length>text2.length?text1:text2;var shorttext=text1.length>text2.length?text2:text1;var i=longtext.indexOf(shorttext);if(i!=-1){diffs=[[DIFF_INSERT,longtext.substring(0,i)],[DIFF_EQUAL,shorttext],[DIFF_INSERT,longtext.substring(i+shorttext.length)]];if(text1.length>text2.length){diffs[0][0]=diffs[2][0]=DIFF_DELETE}return diffs}longtext=shorttext=null;var hm=this.diff_halfMatch(text1,text2);if(hm){var text1_a=hm[0];var text1_b=hm[1];var text2_a=hm[2];var text2_b=hm[3];var mid_common=hm[4];var diffs_a=this.diff_main(text1_a,text2_a,checklines);var diffs_b=this.diff_main(text1_b,text2_b,checklines);return diffs_a.concat([[DIFF_EQUAL,mid_common]],diffs_b)}if(checklines&&text1.length+text2.length<250){checklines=false}var linearray;if(checklines){var a=this.diff_linesToChars(text1,text2);text1=a[0];text2=a[1];linearray=a[2]}diffs=this.diff_map(text1,text2);if(!diffs){diffs=[[DIFF_DELETE,text1],[DIFF_INSERT,text2]]}if(checklines){this.diff_charsToLines(diffs,linearray);this.diff_cleanupSemantic(diffs);diffs.push([DIFF_EQUAL,'']);var pointer=0;var count_delete=0;var count_insert=0;var text_delete='';var text_insert='';while(pointer=1&&count_insert>=1){var a=this.diff_main(text_delete,text_insert,false);diffs.splice(pointer-count_delete-count_insert,count_delete+count_insert);pointer=pointer-count_delete-count_insert;for(var j=a.length-1;j>=0;j--){diffs.splice(pointer,0,a[j])}pointer=pointer+a.length}count_insert=0;count_delete=0;text_delete='';text_insert=''}pointer++}diffs.pop()}return diffs};diff_match_patch.prototype.diff_linesToChars=function(text1,text2){var linearray=[];var linehash={};linearray.push('');function diff_linesToCharsMunge(text){var chars='';while(text){var i=text.indexOf('\n');if(i==-1){i=text.length}var line=text.substring(0,i+1);text=text.substring(i+1);if(linehash.hasOwnProperty?linehash.hasOwnProperty(line):(linehash[line]!==undefined)){chars+=String.fromCharCode(linehash[line])}else{linearray.push(line);linehash[line]=linearray.length-1;chars+=String.fromCharCode(linearray.length-1)}}return chars}var chars1=diff_linesToCharsMunge(text1);var chars2=diff_linesToCharsMunge(text2);return[chars1,chars2,linearray]};diff_match_patch.prototype.diff_charsToLines=function(diffs,linearray){for(var x=0;x0&&(new Date()).getTime()>ms_end){return null}v_map1[d]={};for(var k=-d;k<=d;k+=2){if(k==-d||k!=d&&v1[k-1]=0;d--){while(1){if(v_map[d].hasOwnProperty?v_map[d].hasOwnProperty((x-1)+','+y):(v_map[d][(x-1)+','+y]!==undefined)){x--;if(last_op===DIFF_DELETE){path[0][1]=text1.charAt(x)+path[0][1]}else{path.unshift([DIFF_DELETE,text1.charAt(x)])}last_op=DIFF_DELETE;break}else if(v_map[d].hasOwnProperty?v_map[d].hasOwnProperty(x+','+(y-1)):(v_map[d][x+','+(y-1)]!==undefined)){y--;if(last_op===DIFF_INSERT){path[0][1]=text2.charAt(y)+path[0][1]}else{path.unshift([DIFF_INSERT,text2.charAt(y)])}last_op=DIFF_INSERT;break}else{x--;y--;if(last_op===DIFF_EQUAL){path[0][1]=text1.charAt(x)+path[0][1]}else{path.unshift([DIFF_EQUAL,text1.charAt(x)])}last_op=DIFF_EQUAL}}}return path};diff_match_patch.prototype.diff_path2=function(v_map,text1,text2){var path=[];var x=text1.length;var y=text2.length;var last_op=null;for(var d=v_map.length-2;d>=0;d--){while(1){if(v_map[d].hasOwnProperty?v_map[d].hasOwnProperty((x-1)+','+y):(v_map[d][(x-1)+','+y]!==undefined)){x--;if(last_op===DIFF_DELETE){path[path.length-1][1]+=text1.charAt(text1.length-x-1)}else{path.push([DIFF_DELETE,text1.charAt(text1.length-x-1)])}last_op=DIFF_DELETE;break}else if(v_map[d].hasOwnProperty?v_map[d].hasOwnProperty(x+','+(y-1)):(v_map[d][x+','+(y-1)]!==undefined)){y--;if(last_op===DIFF_INSERT){path[path.length-1][1]+=text2.charAt(text2.length-y-1)}else{path.push([DIFF_INSERT,text2.charAt(text2.length-y-1)])}last_op=DIFF_INSERT;break}else{x--;y--;if(last_op===DIFF_EQUAL){path[path.length-1][1]+=text1.charAt(text1.length-x-1)}else{path.push([DIFF_EQUAL,text1.charAt(text1.length-x-1)])}last_op=DIFF_EQUAL}}}return path};diff_match_patch.prototype.diff_commonPrefix=function(text1,text2){if(!text1||!text2||text1.charCodeAt(0)!==text2.charCodeAt(0)){return 0}var pointermin=0;var pointermax=Math.min(text1.length,text2.length);var pointermid=pointermax;var pointerstart=0;while(pointermintext2.length?text1:text2;var shorttext=text1.length>text2.length?text2:text1;if(longtext.length<10||shorttext.length<1){return null}var dmp=this;function diff_halfMatchI(longtext,shorttext,i){var seed=longtext.substring(i,i+Math.floor(longtext.length/4));var j=-1;var best_common='';var best_longtext_a,best_longtext_b,best_shorttext_a,best_shorttext_b;while((j=shorttext.indexOf(seed,j+1))!=-1){var prefixLength=dmp.diff_commonPrefix(longtext.substring(i),shorttext.substring(j));var suffixLength=dmp.diff_commonSuffix(longtext.substring(0,i),shorttext.substring(0,j));if(best_common.length=longtext.length/2){return[best_longtext_a,best_longtext_b,best_shorttext_a,best_shorttext_b,best_common]}else{return null}}var hm1=diff_halfMatchI(longtext,shorttext,Math.ceil(longtext.length/4));var hm2=diff_halfMatchI(longtext,shorttext,Math.ceil(longtext.length/2));var hm;if(!hm1&&!hm2){return null}else if(!hm2){hm=hm1}else if(!hm1){hm=hm2}else{hm=hm1[4].length>hm2[4].length?hm1:hm2}var text1_a,text1_b,text2_a,text2_b;if(text1.length>text2.length){text1_a=hm[0];text1_b=hm[1];text2_a=hm[2];text2_b=hm[3]}else{text2_a=hm[0];text2_b=hm[1];text1_a=hm[2];text1_b=hm[3]}var mid_common=hm[4];return[text1_a,text1_b,text2_a,text2_b,mid_common]};diff_match_patch.prototype.diff_cleanupSemantic=function(diffs){var changes=false;var equalities=[];var lastequality=null;var pointer=0;var length_changes1=0;var length_changes2=0;while(pointer=bestScore){bestScore=score;bestEquality1=equality1;bestEdit=edit;bestEquality2=equality2}}if(diffs[pointer-1][1]!=bestEquality1){diffs[pointer-1][1]=bestEquality1;diffs[pointer][1]=bestEdit;diffs[pointer+1][1]=bestEquality2}}pointer++}};diff_match_patch.prototype.diff_cleanupEfficiency=function(diffs){var changes=false;var equalities=[];var lastequality='';var pointer=0;var pre_ins=false;var pre_del=false;var post_ins=false;var post_del=false;while(pointer0&&diffs[pointer-count_delete-count_insert-1][0]==DIFF_EQUAL){diffs[pointer-count_delete-count_insert-1][1]+=text_insert.substring(0,commonlength)}else{diffs.splice(0,0,[DIFF_EQUAL,text_insert.substring(0,commonlength)]);pointer++}text_insert=text_insert.substring(commonlength);text_delete=text_delete.substring(commonlength)}commonlength=this.diff_commonSuffix(text_insert,text_delete);if(commonlength!==0){diffs[pointer][1]=text_insert.substring(text_insert.length-commonlength)+diffs[pointer][1];text_insert=text_insert.substring(0,text_insert.length-commonlength);text_delete=text_delete.substring(0,text_delete.length-commonlength)}}if(count_delete===0){diffs.splice(pointer-count_delete-count_insert,count_delete+count_insert,[DIFF_INSERT,text_insert])}else if(count_insert===0){diffs.splice(pointer-count_delete-count_insert,count_delete+count_insert,[DIFF_DELETE,text_delete])}else{diffs.splice(pointer-count_delete-count_insert,count_delete+count_insert,[DIFF_DELETE,text_delete],[DIFF_INSERT,text_insert])}pointer=pointer-count_delete-count_insert+(count_delete?1:0)+(count_insert?1:0)+1}else if(pointer!==0&&diffs[pointer-1][0]==DIFF_EQUAL){diffs[pointer-1][1]+=diffs[pointer][1];diffs.splice(pointer,1)}else{pointer++}count_insert=0;count_delete=0;text_delete='';text_insert=''}}if(diffs[diffs.length-1][1]===''){diffs.pop()}var changes=false;pointer=1;while(pointerloc){break}last_chars1=chars1;last_chars2=chars2}if(diffs.length!=x&&diffs[x][0]===DIFF_DELETE){return last_chars2}return last_chars2+(loc-last_chars1)};diff_match_patch.prototype.diff_prettyHtml=function(diffs){this.diff_addIndex(diffs);var html=[];for(var x=0;x/g,'>');t=t.replace(/\n/g,'¶
');if(m===DIFF_DELETE){html.push('',t,'')}else if(m===DIFF_INSERT){html.push('',t,'')}else{html.push('',t,'')}}return html.join('')};diff_match_patch.prototype.diff_text1=function(diffs){var txt=[];for(var x=0;xthis.Match_MaxBits){return alert('Pattern too long for this browser.')}var s=this.match_alphabet(pattern);var score_text_length=text.length;score_text_length=Math.max(score_text_length,this.Match_MinLength);score_text_length=Math.min(score_text_length,this.Match_MaxLength);var dmp=this;function match_bitapScore(e,x){var d=Math.abs(loc-x);return(e/pattern.length/dmp.Match_Balance)+(d/score_text_length/(1.0-dmp.Match_Balance))}var score_threshold=this.Match_Threshold;var best_loc=text.indexOf(pattern,loc);if(best_loc!=-1){score_threshold=Math.min(match_bitapScore(0,best_loc),score_threshold)}best_loc=text.lastIndexOf(pattern,loc+pattern.length);if(best_loc!=-1){score_threshold=Math.min(match_bitapScore(0,best_loc),score_threshold)}var matchmask=1<<(pattern.length-1);best_loc=null;var bin_min,bin_mid;var bin_max=Math.max(loc+loc,text.length);var last_rd;for(var d=0;d=start;j--){if(d===0){rd[j]=((rd[j+1]<<1)|1)&s[text.charAt(j)]}else{rd[j]=((rd[j+1]<<1)|1)&s[text.charAt(j)]|((last_rd[j+1]<<1)|1)|((last_rd[j]<<1)|1)|last_rd[j+1]}if(rd[j]&matchmask){var score=match_bitapScore(d,j);if(score<=score_threshold){score_threshold=score;best_loc=j;if(j>loc){start=Math.max(0,loc-(j-loc))}else{break}}}}if(match_bitapScore(d+1,loc)>score_threshold){break}last_rd=rd}return best_loc};diff_match_patch.prototype.match_alphabet=function(pattern){var s=Object();for(var i=0;i2){this.diff_cleanupSemantic(diffs);this.diff_cleanupEfficiency(diffs)}}if(diffs.length===0){return[]}var patches=[];var patch=new patch_obj();var char_count1=0;var char_count2=0;var prepatch_text=text1;var postpatch_text=text1;for(var x=0;x=2*this.Patch_Margin){if(patch.diffs.length!==0){this.patch_addContext(patch,prepatch_text);patches.push(patch);patch=new patch_obj();prepatch_text=postpatch_text}}if(diff_type!==DIFF_INSERT){char_count1+=diff_text.length}if(diff_type!==DIFF_DELETE){char_count2+=diff_text.length}}if(patch.diffs.length!==0){this.patch_addContext(patch,prepatch_text);patches.push(patch)}return patches};diff_match_patch.prototype.patch_apply=function(patches,text){this.patch_splitMax(patches);var results=[];var delta=0;for(var x=0;xthis.Match_MaxBits){var bigpatch=patches[x];patches.splice(x,1);var patch_size=this.Match_MaxBits;var start1=bigpatch.start1;var start2=bigpatch.start2;var precontext='';while(bigpatch.diffs.length!==0){var patch=new patch_obj();var empty=true;patch.start1=start1-precontext.length;patch.start2=start2-precontext.length;if(precontext!==''){patch.length1=patch.length2=precontext.length;patch.diffs.push([DIFF_EQUAL,precontext])}while(bigpatch.diffs.length!==0&&patch.length1 + + + +JSSpec results + + + + + + + +

A

B

+ diff --git a/common/js/xml_handler.js b/common/js/xml_handler.js index 5f9adf6bf..0bd88660d 100644 --- a/common/js/xml_handler.js +++ b/common/js/xml_handler.js @@ -386,3 +386,59 @@ function xml2json(xml, tab, ignoreAttrib) { var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, ""); return "{" + (tab ? json.replace(/\t/g, tab) : json.replace(/\t|\n/g, "")) + "}"; } + + +/** + * @brief exec_json (exec_xml와 같은 용도) + **/ +(function($){ +$.exec_json = function(action,data,func){ + if(typeof(data) == 'undefined') data = {}; + action = action.split("."); + if(action.length == 2){ + + if(show_waiting_message) { + $("#waitingforserverresponse").html(waiting_message).css('top',$(document).scrollTop()+20).css('left',$(document).scrollLeft()+20).css('visibility','visible'); + } + + $.extend(data,{module:action[0],act:action[1]}); + $.ajax({ + type:"POST" + ,dataType:"json" + ,url:request_uri + ,contentType:"application/json" + ,data:$.param(data) + ,success : function(data){ + $("#waitingforserverresponse").css('visibility','hidden'); + if(data.error > 0) alert(data.message); + if($.isFunction(func)) func(data); + } + }); + } +}; + +$.fn.exec_html = function(action,data,type){ + if(typeof(data) == 'undefined') data = {}; + if(!$.inArray(type, ['html','append','prepend'])) type = 'html'; + + var self = $(this); + action = action.split("."); + if(action.length == 2){ + if(show_waiting_message) { + $("#waitingforserverresponse").html(waiting_message).css('top',$(document).scrollTop()+20).css('left',$(document).scrollLeft()+20).css('visibility','visible'); + } + + $.extend(data,{module:action[0],act:action[1]}); + $.ajax({ + type:"POST" + ,dataType:"html" + ,url:request_uri + ,data:$.param(data) + ,success : function(html){ + $("#waitingforserverresponse").css('visibility','hidden'); + self[type](html); + } + }); + } +}; +})(jQuery); diff --git a/common/lang/en.lang.php b/common/lang/en.lang.php index f7ebf4b45..f2257b8a1 100644 --- a/common/lang/en.lang.php +++ b/common/lang/en.lang.php @@ -69,6 +69,7 @@ $lang->disable = 'Disable'; // Essential Words + $lang->menu = 'Menu'; $lang->no = 'No.'; $lang->notice = 'Notice'; $lang->secret = 'Secret'; diff --git a/common/lang/es.lang.php b/common/lang/es.lang.php index 97e26950f..dc49ef3bb 100644 --- a/common/lang/es.lang.php +++ b/common/lang/es.lang.php @@ -68,6 +68,7 @@ $lang->disable = 'Desactivar'; //Desactivado // Palabras Esenciales + $lang->menu = 'Menu'; $lang->no = 'Nº'; $lang->notice = 'Aviso'; //boletín, noticia $lang->secret = 'Secreto'; diff --git a/common/lang/fr.lang.php b/common/lang/fr.lang.php index de01744ce..769047ae9 100644 --- a/common/lang/fr.lang.php +++ b/common/lang/fr.lang.php @@ -69,6 +69,7 @@ $lang->disable = 'Invalide'; // Mots essentiels + $lang->menu = 'Menu'; $lang->no = 'No'; $lang->notice = 'Notice'; $lang->secret = 'Secret'; diff --git a/common/lang/ge.lang.php b/common/lang/ge.lang.php index aeaa35b3b..c5fa00e68 100644 --- a/common/lang/ge.lang.php +++ b/common/lang/ge.lang.php @@ -69,6 +69,7 @@ $lang->deaktivieren = 'Deaktivieren'; // Essential Words + $lang->menu = 'Menu'; $lang->no = 'Nein'; $lang->notice = 'Hinweis'; $lang->secret = 'Geheim'; diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index 636f6461c..c1c44352d 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -69,13 +69,14 @@ $lang->disable = '不可'; // 基本用語 + $lang->menu = 'Menu'; $lang->no = '番号'; $lang->notice = 'お知らせ'; $lang->secret = '非公開'; $lang->category = $lang->category_srl = 'カテゴリ'; $lang->none_category = 'カテゴリ無し'; $lang->document_srl = '書き込み番号'; - $lang->user_id = 'ユーザID'; + $lang->user_id = 'ユーザーID'; $lang->author = '作成者'; $lang->password = 'パスワード'; $lang->password1 = 'パスワード'; @@ -263,26 +264,25 @@ $lang->is_required = '必須項目'; // ftp 관련 - $lang->ftp_form_title = 'FTP情報の入力'; + $lang->ftp_form_title = 'サーバーのFTP情報の入力'; $lang->ftp = 'FTP'; $lang->ftp_port = 'FTP port'; - $lang->cmd_check_ftp_connect = 'FTP接続確認'; + $lang->cmd_check_ftp_connect = 'FTP接続をテストする'; $lang->about_ftp_info = " FTP情報は次の場合、利用されます。
- 1. PHPの safe_mode=Onになった際、FTP情報を用いてゼロボードXEが正常に動きます。
- 2. 自動アップデート等で、FTP情報が使われます。
+ 1. PHPのsafe_mode=Onになった際、FTP情報を用いてXEが正常に動きます。
+ 2. FTP経由でXEの自動アップデート等に使われます。
FTP情報は files/config/ftp.config.php の中に保存されます。
- また、ゼロボードXEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。
+ また、XEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。(省略可能)
"; - $lang->msg_safe_mode_ftp_needed = "PHPのsafe_modeがOnの場合、FTP情報を登録することで、ゼロボードXEのインストール及び利用が可能になります。"; + $lang->msg_safe_mode_ftp_needed = "PHPのsafe_modeがOnの場合、FTP情報を登録することで、XEのインストール及び利用が可能になります。"; $lang->msg_ftp_not_connected = "localhostへのFTP接続エラーが発生しました。FTPポート(port)番号をはじめ、FTPサービスが可能であるかをご確認下さい。"; $lang->msg_ftp_invalid_auth_info = "ログインが失敗しました。 FTP情報を再度ご確認下さい。"; $lang->msg_ftp_mkdir_fail = "FTPを用いたディレクトリ生成に失敗しました。FTPサーバーの設定を再度ご確認ください。"; $lang->msg_ftp_chmod_fail = "FTPを用いたディレクトリパーミッション(permission)変更に失敗しました。FTPサーバーの設定を再度ご確認ください。"; $lang->msg_ftp_connect_success = "FTP接続に成功しました。"; - // xml filterで用いられているjavascript用のアラートメッセージ $lang->filter->isnull = '%sを入力して下さい。'; $lang->filter->outofrange = '%sの文字の長さを合わせて下さい。'; diff --git a/common/lang/ko.lang.php b/common/lang/ko.lang.php index 42713cae9..3e1e254fc 100644 --- a/common/lang/ko.lang.php +++ b/common/lang/ko.lang.php @@ -69,6 +69,7 @@ $lang->disable = '불가능'; // 기본 단어 + $lang->menu = '메뉴'; $lang->no = '번호'; $lang->notice = '공지'; $lang->secret = '비밀'; diff --git a/common/lang/ru.lang.php b/common/lang/ru.lang.php index 669bee0fc..b93002a45 100644 --- a/common/lang/ru.lang.php +++ b/common/lang/ru.lang.php @@ -69,6 +69,7 @@ $lang->disable = 'Выключено'; // Существенные слова + $lang->menu = 'Menu'; $lang->no = 'No.'; $lang->notice = 'Уведомление'; $lang->secret = 'Секрет'; diff --git a/common/lang/zh-CN.lang.php b/common/lang/zh-CN.lang.php index 9cb7e8572..3af0ffaf1 100644 --- a/common/lang/zh-CN.lang.php +++ b/common/lang/zh-CN.lang.php @@ -69,6 +69,7 @@ $lang->disable = '禁用'; // 基本词语 + $lang->menu = '菜单'; $lang->no = '编号'; $lang->notice = '公告'; $lang->secret = '密帖'; diff --git a/common/lang/zh-TW.lang.php b/common/lang/zh-TW.lang.php index b3a0a0335..22ab9c775 100644 --- a/common/lang/zh-TW.lang.php +++ b/common/lang/zh-TW.lang.php @@ -69,6 +69,7 @@ $lang->disable = '禁用'; // 基本詞語 + $lang->menu = 'Menu'; $lang->no = '編號'; $lang->notice = '公告'; $lang->secret = '秘密'; diff --git a/common/tpl/common_layout.html b/common/tpl/common_layout.html index 81caf7640..96453daae 100644 --- a/common/tpl/common_layout.html +++ b/common/tpl/common_layout.html @@ -51,6 +51,9 @@ var current_mid = "{$mid}"; var waiting_message = "{$lang->msg_call_server}"; var ssl_actions = new Array("{implode('","',$ssl_actions)}"); + var http_port = {Context::get("_http_port")}; + var https_port = {Context::get("_https_port")}; + var enforce_ssl = true; //]]> {Context::getHtmlHeader()} diff --git a/common/tpl/images/join.gif b/common/tpl/images/join.gif deleted file mode 100644 index 34dd47610..000000000 Binary files a/common/tpl/images/join.gif and /dev/null differ diff --git a/common/tpl/images/joinbottom.gif b/common/tpl/images/joinbottom.gif deleted file mode 100644 index 48b81c80a..000000000 Binary files a/common/tpl/images/joinbottom.gif and /dev/null differ diff --git a/common/tpl/images/line.gif b/common/tpl/images/line.gif deleted file mode 100644 index 1a259eea0..000000000 Binary files a/common/tpl/images/line.gif and /dev/null differ diff --git a/common/tpl/images/minus.gif b/common/tpl/images/minus.gif deleted file mode 100644 index 3d212a97a..000000000 Binary files a/common/tpl/images/minus.gif and /dev/null differ diff --git a/common/tpl/images/minusbottom.gif b/common/tpl/images/minusbottom.gif deleted file mode 100644 index dc3198be2..000000000 Binary files a/common/tpl/images/minusbottom.gif and /dev/null differ diff --git a/common/tpl/images/page.gif b/common/tpl/images/page.gif deleted file mode 100644 index 42d7318c5..000000000 Binary files a/common/tpl/images/page.gif and /dev/null differ diff --git a/common/tpl/images/plus.gif b/common/tpl/images/plus.gif deleted file mode 100644 index b2c997233..000000000 Binary files a/common/tpl/images/plus.gif and /dev/null differ diff --git a/common/tpl/images/plusbottom.gif b/common/tpl/images/plusbottom.gif deleted file mode 100644 index b5671d891..000000000 Binary files a/common/tpl/images/plusbottom.gif and /dev/null differ diff --git a/config/config.inc.php b/config/config.inc.php index a83006794..e2642cfae 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -14,7 +14,7 @@ * 이 내용은 XE의 버전을 관리자 페이지에 표시하기 위한 용도이며 * config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '1.1.1'); + define('__ZBXE_VERSION__', '1.1.2'); /** * @brief 디버깅 메세지 출력 diff --git a/layouts/xe_blog/conf/info.xml b/layouts/xe_blog/conf/info.xml index 859810c1e..e3d7f62de 100644 --- a/layouts/xe_blog/conf/info.xml +++ b/layouts/xe_blog/conf/info.xml @@ -1,7 +1,7 @@ XE 블로그 기본 스킨 - ZBXEブログのデフォルトスキン + XEブログのデフォルトスキン XE博客默认皮肤 Default Skin of XE blog Standard-Skin von XE Blog @@ -14,7 +14,7 @@ HTML/CSS : 소지훈 - ゼロボードXEブログの基本スキンです。 + XEブログの基本スキンです。 デザイン:ソギジョン (http://blog.naver.com/addcozy) HTML/CSS : Ju-Hoon So diff --git a/layouts/xe_official/conf/info.xml b/layouts/xe_official/conf/info.xml index 902285e04..414c2e271 100644 --- a/layouts/xe_official/conf/info.xml +++ b/layouts/xe_official/conf/info.xml @@ -1,13 +1,13 @@ - ZBXE 공식 사이트 레이아웃 - ZBXEオフィシャルレイアウト - ZBXE Official website layout - ZBXE Offizielle Website-Layout - ZBXE Официальный сайт макет - Diseño oficial de la página web de ZBXE - ZBXE 官方网站布局 - ZBXE 官方網站版面 + XE 공식 사이트 레이아웃 + XEオフィシャルレイアウト + XE Official website layout + XE Offizielle Website-Layout + XE Официальный сайт макет + Diseño oficial de la página web de XE + XE 官方网站布局 + XE 官方網站版面 XE 공식 사이트 레이아웃입니다. 디자인 : 이소라 @@ -15,7 +15,7 @@ 레이아웃 제작 : zero - ゼロボードXEのオフィシャルサイトのレイアウトです。 + XEのオフィシャルサイトのレイアウトです。 デザイン:イ ソラ パブリシング:ジョン チャンミョン レイアウト作成:Zero @@ -141,7 +141,7 @@ 홈 페이지 URL ホームページURL 主页地址 - 主頁URL + 主頁網址 Homepage URL Homepage URL Домашняя страница URL @@ -149,7 +149,7 @@ 로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요. ロゴをクリックした時に移動するホームページのURLを入力してください。 点击网站LOGO时要移动的页面URL。 - 請輸入要移往的頁面URL,當用戶按了網站LOGO後。 + 請輸入當用戶按了網站LOGO後,要前往的頁面網址。 Please input the URL to redirect when user clicks the logo Bitte geben Sie die URL umzuleiten, wenn Benutzer klickt das Logo Пожалуйста, введите URL для перенаправления, когда пользователь нажимает логотип diff --git a/modules/addon/conf/info.xml b/modules/addon/conf/info.xml index 554d6da28..78dcaab28 100644 --- a/modules/addon/conf/info.xml +++ b/modules/addon/conf/info.xml @@ -7,7 +7,7 @@ アドオン Additions Аддоны - 插件 + 附加元件 애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다. This module is for maintaining addons which can toggle use and disuse states. Este Módulo es para agregar Addons, como también el manejo de ellos. @@ -15,7 +15,7 @@ アドオンの「登録、使用、未使用」などを設定する管理モジュールです。 Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать. - 登錄或啟用/禁用插件的管理模組。 + 設定附加元件「登錄、啟用、禁用」的管理模組。 0.1 2007-02-28 manager diff --git a/modules/addon/lang/zh-TW.lang.php b/modules/addon/lang/zh-TW.lang.php index c75683d74..ea55114a7 100644 --- a/modules/addon/lang/zh-TW.lang.php +++ b/modules/addon/lang/zh-TW.lang.php @@ -5,13 +5,13 @@ * @brief 正體中文語言 **/ - $lang->addon = "插件"; + $lang->addon = "附加元件"; - $lang->addon_info = '插件資訊'; - $lang->addon_maker = '插件作者'; + $lang->addon_info = '資料'; + $lang->addon_maker = '作者'; $lang->addon_license = '版權'; $lang->addon_history = '更新紀錄'; - $lang->about_addon_mid = "可以指定使用插件的對象。
(全部解除表示可用在所有對象。)"; - $lang->about_addon = '插件是附加延伸的功能,而不是輸出結果組件。
啟用/禁用插件,為網站提供強大的功能。'; + $lang->about_addon_mid = "可以指定使用附加元件的目標。
(全部不選取表示可用在所有目標。)"; + $lang->about_addon = '附加元件可擴展程式功能,而不是顯示輸出HTML結果。
『啟用/禁用』附加元件,增強網站的功能。'; ?> diff --git a/modules/addon/tpl/setup_addon.html b/modules/addon/tpl/setup_addon.html index 5caa6a0ad..40dffe86f 100644 --- a/modules/addon/tpl/setup_addon.html +++ b/modules/addon/tpl/setup_addon.html @@ -68,13 +68,13 @@
{$lang->module} - +

{$lang->about_addon_mid}

- + {$modules->title} diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 444b64e70..f5e17314d 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -44,6 +44,15 @@ Context::set('use_rewrite', $db_info->use_rewrite=='Y'?'Y':'N'); Context::set('use_optimizer', $db_info->use_optimizer!='N'?'Y':'N'); Context::set('qmail_compatibility', $db_info->qmail_compatibility=='Y'?'Y':'N'); + Context::set('use_ssl', $db_info->use_ssl?$db_info->use_ssl:"none"); + if($db_info->http_port) + { + Context::set('http_port', $db_info->http_port); + } + if($db_info->https_port) + { + Context::set('https_port', $db_info->https_port); + } Context::setBrowserTitle("XE Admin Page"); } @@ -205,6 +214,7 @@ **/ function dispAdminConfig() { $db_info = Context::getDBInfo(); + debugPrint($db_info); Context::set('selected_lang', $db_info->lang_type); Context::set('lang_supported', Context::loadLangSupported()); diff --git a/modules/admin/lang/en.lang.php b/modules/admin/lang/en.lang.php index 11fdb7793..947b50dbb 100644 --- a/modules/admin/lang/en.lang.php +++ b/modules/admin/lang/en.lang.php @@ -57,4 +57,13 @@ $lang->cmd_lang_select = "Language"; $lang->about_cmd_lang_select = "Selected languages only will be serviced"; $lang->about_recompile_cache = "You can arrange useless or invalid cache files"; + $lang->use_ssl = "SSL 사용"; + $lang->ssl_options = array( + 'none' => "사용안함", + 'optional' => "선택적으로", + 'always' => "항상사용" + ); + $lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; + $lang->server_ports = "서버포트지정"; + $lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; ?> diff --git a/modules/admin/lang/es.lang.php b/modules/admin/lang/es.lang.php index fec5ce90f..2d6faa3a3 100644 --- a/modules/admin/lang/es.lang.php +++ b/modules/admin/lang/es.lang.php @@ -58,4 +58,13 @@ $lang->cmd_lang_select = "언어선택"; $lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; $lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; + $lang->use_ssl = "SSL 사용"; + $lang->ssl_options = array( + 'none' => "사용안함", + 'optional' => "선택적으로", + 'always' => "항상사용" + ); + $lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; + $lang->server_ports = "서버포트지정"; + $lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; ?> diff --git a/modules/admin/lang/fr.lang.php b/modules/admin/lang/fr.lang.php index 35024acda..299c3f7e2 100644 --- a/modules/admin/lang/fr.lang.php +++ b/modules/admin/lang/fr.lang.php @@ -57,4 +57,13 @@ $lang->cmd_lang_select = "언어선택"; $lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; $lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; + $lang->use_ssl = "SSL 사용"; + $lang->ssl_options = array( + 'none' => "사용안함", + 'optional' => "선택적으로", + 'always' => "항상사용" + ); + $lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; + $lang->server_ports = "서버포트지정"; + $lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; ?> diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index 8be182ff3..ac817f6e2 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -10,8 +10,8 @@ $lang->module_category_title = array( 'service' => 'サービス型モジュール', - 'manager' => '管理型モジュール', 'utility' => '機能性モジュール', + 'manager' => '管理型モジュール', 'accessory' => '付加モジュール', 'base' => '基本モジュール', ); @@ -44,17 +44,26 @@ $lang->msg_manage_module_cannot_delete = 'モジュール、アドオン、ウィジェットのショットカットは削除できません。'; $lang->msg_default_act_is_null = 'デフォルトの管理者のアクションが指定されていないため、ショットカットを登録することができません。'; - $lang->welcome_to_xe = 'ゼロボードXEの管理者ページです。'; + $lang->welcome_to_xe = 'XEの管理者ページです。'; $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; $lang->about_lang_env = "上で設定された言語を、初めてサイトに訪問したユーザに同じく適用させるためには、希望する言語に変更してから「保存」ボタンをクリックしてください。"; - $lang->xe_license = 'ゼロボードXEのライセンスはGPLです。'; + $lang->xe_license = 'XEのライセンスはGPLです。'; $lang->about_shortcut = 'よく使用するモジュールに登録されたショートカットは削除できます。'; $lang->yesterday = "Yesterday"; $lang->today = "Today"; - $lang->cmd_lang_select = "언어선택"; - $lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; - $lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; + $lang->cmd_lang_select = "言語選択"; + $lang->about_cmd_lang_select = "選択された言語のみでサービスを行います。"; + $lang->about_recompile_cache = "要らないか誤ったキャッシューファイルを整理します。"; + $lang->use_ssl = "SSL環境設定"; + $lang->ssl_options = array( + 'none' => "使わない", + 'optional' => "部分的に使う", + 'always' => "常に使う" + ); + $lang->about_use_ssl = "「部分的に使う場合」は「会員登録/会員情報変更」など特定のactionでSSLを利用する場合、「常に使う」は全てのサービスがSSLを使う場合に選択します。"; + $lang->server_ports = "サーバーポート指定"; + $lang->about_server_ports = "一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。"; ?> diff --git a/modules/admin/lang/ko.lang.php b/modules/admin/lang/ko.lang.php index 916181cdb..b52acdacb 100644 --- a/modules/admin/lang/ko.lang.php +++ b/modules/admin/lang/ko.lang.php @@ -57,4 +57,13 @@ $lang->cmd_lang_select = "언어선택"; $lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; $lang->about_recompile_cache = "쓸모 없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; + $lang->use_ssl = "SSL 사용"; + $lang->ssl_options = array( + 'none' => "사용안함", + 'optional' => "선택적으로", + 'always' => "항상사용" + ); + $lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; + $lang->server_ports = "서버포트지정"; + $lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; ?> diff --git a/modules/admin/lang/ru.lang.php b/modules/admin/lang/ru.lang.php index 02fd29bae..750895f5c 100644 --- a/modules/admin/lang/ru.lang.php +++ b/modules/admin/lang/ru.lang.php @@ -57,4 +57,13 @@ $lang->cmd_lang_select = "언어선택"; $lang->about_cmd_lang_select = "선택된 언어들만 서비스 됩니다"; $lang->about_recompile_cache = "쓸모없어졌거나 잘못된 캐시파일들을 정리할 수 있습니다"; + $lang->use_ssl = "SSL 사용"; + $lang->ssl_options = array( + 'none' => "사용안함", + 'optional' => "선택적으로", + 'always' => "항상사용" + ); + $lang->about_use_ssl = "선택적으로에서는 회원가입/정보수정등의 지정된 action에서 SSL을 사용하고 항상 사용은 모든 서비스가 SSL을 이용하게 됩니다."; + $lang->server_ports = "서버포트지정"; + $lang->about_server_ports = "HTTP는 80, HTTPS는 443이외의 다른 포트를 사용하는 경우에 포트를 지정해주어야합니다."; ?> diff --git a/modules/admin/lang/zh-CN.lang.php b/modules/admin/lang/zh-CN.lang.php index c8391cc71..391d61f5d 100644 --- a/modules/admin/lang/zh-CN.lang.php +++ b/modules/admin/lang/zh-CN.lang.php @@ -58,4 +58,13 @@ $lang->cmd_lang_select = "多国语言支援"; $lang->about_cmd_lang_select = "只支援被选语言。"; $lang->about_recompile_cache = "整理无用的或错误的缓冲文件。"; + $lang->use_ssl = "SSL使用"; + $lang->ssl_options = array( + 'none' => "不使用", + 'optional' => "选择性", + 'always' => "使用" + ); + $lang->about_use_ssl = "选择性使用选项应用于新用户注册/修改用户信息等已指定的action当中,使用选项应用于所有服务。"; + $lang->server_ports = "指定服务器端口"; + $lang->about_server_ports = "使用除HTTP(80), HTTPS(443)以外的端口时,必须得指定该服务器端口号。"; ?> diff --git a/modules/admin/lang/zh-TW.lang.php b/modules/admin/lang/zh-TW.lang.php index bb7aaef28..de5b63132 100644 --- a/modules/admin/lang/zh-TW.lang.php +++ b/modules/admin/lang/zh-TW.lang.php @@ -10,8 +10,8 @@ $lang->module_category_title = array( 'service' => '服務類模組', - 'manager' => '管理類模組', 'utility' => '功能模組', + 'manager' => '管理類模組', 'accessory' => '附加模組', 'base' => '基本模組', ); @@ -27,12 +27,12 @@ $lang->about_download_link = "官方網站已發佈新版本。\n請按 [download] 下載最新版本。"; $lang->item_module = "模組列表"; - $lang->item_addon = "插件列表"; + $lang->item_addon = "元件列表"; $lang->item_widget = "控件列表"; $lang->item_layout = "版面列表"; $lang->module_name = "模組名稱"; - $lang->addon_name = "插件名稱"; + $lang->addon_name = "元件名稱"; $lang->version = "版本"; $lang->author = "作者"; $lang->table_count = "表格數"; @@ -41,14 +41,14 @@ $lang->cmd_shortcut_management = "編輯選單"; $lang->msg_is_not_administrator = '只有管理員才可以檢視'; - $lang->msg_manage_module_cannot_delete = '模組,插件,版面設計,控件模組的快捷選單是無法刪除的。'; + $lang->msg_manage_module_cannot_delete = '模組,附加元件,版面設計,控件模組的快捷選單是無法刪除的。'; $lang->msg_default_act_is_null = '沒有指定預設管理員的動作,是無法新增到快捷選單的。'; $lang->welcome_to_xe = 'XE 管理頁面'; $lang->about_admin_page = "後台管理頁面未完成"; $lang->about_lang_env = "可以設置顯示語言給首次訪問的使用者。修改語言環境後,請按 [儲存] 按鈕進行儲存。"; - $lang->xe_license = 'XE遵循 GPL協議'; + $lang->xe_license = 'XE遵循 GPL 協議'; $lang->about_shortcut = '可以刪除新增到常用模組中的快捷選單。'; $lang->yesterday = "昨天"; @@ -57,4 +57,13 @@ $lang->cmd_lang_select = "選擇語言"; $lang->about_cmd_lang_select = "只提供所選擇的語言服務"; $lang->about_recompile_cache = "可有效的整理錯誤的暫存檔"; + $lang->use_ssl = "SSL功能"; + $lang->ssl_options = array( + 'none' => "禁止使用", + 'optional' => "選擇使用", + 'always' => "總是使用" + ); + $lang->about_use_ssl = "當會員登入或修改資料等動作時,可選擇是否使用 SSL 功能。"; + $lang->server_ports = "主機埠口"; + $lang->about_server_ports = "預設 HTTP 是 80、HTTPS 是 443,如果想使用其他的埠口的話,請自行設定。"; ?> diff --git a/modules/admin/tpl/config.html b/modules/admin/tpl/config.html index a0bc434f8..81c1b2c8e 100644 --- a/modules/admin/tpl/config.html +++ b/modules/admin/tpl/config.html @@ -53,6 +53,25 @@

{$lang->about_qmail_compatibility}

+ +
{$lang->use_ssl}
+ + +

{$lang->about_use_ssl}

+ + + +
{$lang->server_ports}
+ + HTTP : , + HTTPS: +

{$lang->about_server_ports}

+ + diff --git a/modules/admin/tpl/js/admin.js b/modules/admin/tpl/js/admin.js index 0c1f955af..a1353e981 100644 --- a/modules/admin/tpl/js/admin.js +++ b/modules/admin/tpl/js/admin.js @@ -52,3 +52,6 @@ function doRecompileCacheFile() { } +jQuery(function(){ + jQuery("table.adminTable tr").attr('class','').filter(":nth-child(even)").attr('class','row2'); +}); \ No newline at end of file diff --git a/modules/board/board.admin.controller.php b/modules/board/board.admin.controller.php index cb31848ec..ed821c8fd 100644 --- a/modules/board/board.admin.controller.php +++ b/modules/board/board.admin.controller.php @@ -155,6 +155,7 @@ $extra_vars->search_list_count = $args->search_list_count; $extra_vars->except_notice = $args->except_notice!='Y'?'N':'Y'; $extra_vars->consultation = $args->consultation!='Y'?'N':'Y'; + $extra_vars->secret = $args->secret!='Y'?'N':'Y'; $extra_vars->admin_mail = $args->admin_mail; $extra_vars->page_count = $args->page_count; @@ -265,7 +266,7 @@ **/ function procBoardAdminInsertCategory($args = null) { // 입력할 변수 정리 - if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','title','expand','group_srls'); + if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','title','expand','group_srls','color'); if($args->expand !="Y") $args->expand = "N"; $args->group_srls = str_replace('|@|',',',$args->group_srls); @@ -316,7 +317,7 @@ * @brief 카테고리 삭제 **/ function procBoardAdminDeleteCategory() { - // 변수 정리 + // 변수 정리 $args = Context::gets('module_srl','category_srl'); $oDB = &DB::getInstance(); @@ -324,7 +325,7 @@ $oDocumentModel = &getModel('document'); - // 원정보를 가져옴 + // 원정보를 가져옴 $category_info = $oDocumentModel->getCategory($args->category_srl); if($category_info->parent_srl) $parent_srl = $category_info->parent_srl; @@ -352,6 +353,7 @@ /** * @brief 카테고리 이동 **/ +/* function procBoardAdminMoveCategory() { $source_category_srl = Context::get('source_category_srl'); $target_category_srl = Context::get('target_category_srl'); @@ -373,13 +375,78 @@ $output = $oDocumentController->updateCategory($source_args); if(!$output->toBool()) return $output; - // xml파일 재생성 + // xml파일 재생성 $xml_file = $oDocumentController->makeCategoryFile($source_category->module_srl); // return 변수 설정 $this->add('xml_file', $xml_file); $this->add('source_category_srl', $source_category_srl); } +*/ + + function procBoardAdminMoveCategory() { + $source_category_srl = Context::get('source_srl'); + + // parent_srl 이 있으면 첫 자식으로 들어간다 + $parent_category_srl = Context::get('parent_srl'); + + // target_srl 이 있으면 target_srl 아래로 형제로 들어간다 + $target_category_srl = Context::get('target_srl'); + + $oDocumentModel = &getModel('document'); + $oDocumentController = &getController('document'); + $source_category = $oDocumentModel->getCategory($source_category_srl); + + + //parent_category_srl 의 첫 자식으로 넣자 + if($parent_category_srl > 0 || ($parent_category_srl == 0 && $target_category_srl == 0)){ + $parent_category = $oDocumentModel->getCategory($parent_category_srl); + + $args->module_srl = $source_category->module_srl; + $args->parent_srl = $parent_category_srl; + $output = executeQuery('document.getChildCategoryMinListOrder', $args); + + if(!$output->toBool()) return $output; + $args->list_order = (int)$output->data->list_order; + if(!$args->list_order) $args->list_order = 0; + $args->list_order--; + + + $source_args->category_srl = $source_category_srl; + $source_args->parent_srl = $parent_category_srl; + $source_args->list_order = $args->list_order; + $output = $oDocumentController->updateCategory($source_args); + if(!$output->toBool()) return $output; + + + // $target_category_srl의 아래동생으로 + }else if($target_category_srl > 0){ + $target_category = $oDocumentModel->getCategory($target_category_srl); + + //$target_category의 아래 동생을 모두 내린다 + $output = $oDocumentController->updateCategoryListOrder($target_category->module_srl, $target_category->list_order+1); + if(!$output->toBool()) return $output; + + + $source_args->category_srl = $source_category_srl; + $source_args->parent_srl = $target_category->parent_srl; + $source_args->list_order = $target_category->list_order+1; + $output = $oDocumentController->updateCategory($source_args); + if(!$output->toBool()) return $output; + + } + + + // xml파일 재생성 + $xml_file = $oDocumentController->makeCategoryFile($source_category->module_srl); + + // return 변수 설정 + $this->add('xml_file', $xml_file); + $this->add('source_category_srl', $source_category_srl); + + } + + /** * @brief xml 파일을 갱신 @@ -388,14 +455,14 @@ * 개발 중간의 문제인 것 같고 현재는 문제가 생기지 않으나 굳이 없앨 필요 없는 기능 **/ function procBoardAdminMakeXmlFile() { - // 입력값을 체크 + // 입력값을 체크 $module_srl = Context::get('module_srl'); - // xml파일 재생성 + // xml파일 재생성 $oDocumentController = &getController('document'); $xml_file = $oDocumentController->makeCategoryFile($module_srl); - // return 값 설정 + // return 값 설정 $this->add('xml_file',$xml_file); } } diff --git a/modules/board/board.admin.model.php b/modules/board/board.admin.model.php index 39e17ba37..f547ab1a0 100644 --- a/modules/board/board.admin.model.php +++ b/modules/board/board.admin.model.php @@ -56,7 +56,7 @@ // template 파일을 직접 컴파일한후 tpl변수에 담아서 return한다. $oTemplate = &TemplateHandler::getInstance(); $tpl = $oTemplate->compile($this->module_path.'tpl', 'category_info'); - + $tpl = str_replace("\n",'',$tpl); // return 할 변수 설정 $this->add('tpl', $tpl); } diff --git a/modules/board/board.admin.view.php b/modules/board/board.admin.view.php index 60c414054..a0ccb8f20 100644 --- a/modules/board/board.admin.view.php +++ b/modules/board/board.admin.view.php @@ -198,7 +198,7 @@ Context::set('category_xml_file', $category_xml_file); Context::addJsFile('./common/js/tree_menu.js'); - Context::set('layout','none'); +// Context::set('layout','none'); $this->setTemplateFile('category_list'); } diff --git a/modules/board/lang/en.lang.php b/modules/board/lang/en.lang.php index f25bbe2b8..f870bc280 100644 --- a/modules/board/lang/en.lang.php +++ b/modules/board/lang/en.lang.php @@ -5,9 +5,9 @@ * @brief board modules's basic language pack **/ - $lang->board = "Board"; + $lang->board = 'Board'; - $lang->except_notice = "Exclude Notices"; + $lang->except_notice = 'Exclude Notices'; $lang->cmd_manage_menu = 'Manage Menus'; $lang->cmd_make_child = 'Add Child Category'; @@ -16,10 +16,12 @@ // Item $lang->parent_category_title = 'Parent Category'; $lang->category_title = 'Category'; + $lang->category_color = 'Category Font Color'; $lang->expand = 'Expand'; $lang->category_group_srls = 'Accessable Group'; $lang->search_result = 'Search Result'; $lang->consultation = 'Consultation'; + $lang->secret = 'Secret'; $lang->admin_mail = "Administrator's Mail"; // words used in button @@ -33,8 +35,11 @@ $lang->about_category_group_srls = 'Only selected group will be able to use current category'; $lang->about_layout_setup = 'You can manually modify board layout code. Insert or manage the widget code anywhere you want'; $lang->about_board_category = 'You can make board categories.
When board category is broken, try rebuilding the cache file manually.'; - $lang->about_except_notice = "Notice articles will not be displayed on normal list."; - $lang->about_board = "This module is for creating and managing boards.\nYou may select the module name from the list after creating one to configure specifically.\nPlease be careful with board's module name, since it will be the url. (ex : http://domain/zb/?mid=modulename)"; - $lang->about_consultation = "Non-administrator members would see their own articles.\nNon-members would not be able to write articles when using consultation."; + $lang->about_except_notice = 'Notice articles will not be displayed on normal list.'; + $lang->about_board = 'This module is for creating and managing boards.'; + $lang->about_consultation = "Non-administrator members would see their own articles.\nNon-members would not be able to write articles when using consultation."; + $lang->about_secret = 'Users will be able to write secret articles or comments.'; $lang->about_admin_mail = 'A mail will be sent when an article or comment is submitted.
Multiple mails can be sent with commas(,).'; -?> + + $lang->about_category_color = 'You can set font color of category.'; +?> \ No newline at end of file diff --git a/modules/board/lang/es.lang.php b/modules/board/lang/es.lang.php index 9fd72ce4c..92b14d299 100644 --- a/modules/board/lang/es.lang.php +++ b/modules/board/lang/es.lang.php @@ -5,9 +5,9 @@ * @sumario Paquete del idioma español para el Módulo de Teblero **/ - $lang->board = "Tablero"; + $lang->board = 'Tablero'; - $lang->except_notice = "Excluir Avisos"; + $lang->except_notice = 'Excluir Avisos'; $lang->cmd_manage_menu = 'Manejo del menú'; $lang->cmd_make_child = 'Agregar sub categoría'; $lang->cmd_enable_move_category = "Cambiar la posición de la categoría. (arrastrar y soltar luego de haber selecionado)"; @@ -18,10 +18,12 @@ // Artículos $lang->parent_category_title = 'Categoría Superior'; $lang->category_title = 'Nombre de la categoría'; + $lang->category_color = '분류 폰트색깔'; $lang->expand = 'Expandir'; $lang->category_group_srls = 'Limitar el grupo'; $lang->search_result = 'Resultado de la búsqueda'; $lang->consultation = '상담 기능'; + $lang->secret = '비밀글 기능'; $lang->admin_mail = '관리자 메일'; // Palabras utilizadas en los botones @@ -35,8 +37,12 @@ $lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다'; $lang->about_layout_setup = 'Puede modificar manualmente el código del diseño de tableros. Insertar o modificar el código de widget.'; $lang->about_board_category = 'Puede crear las categorias de tableros.
Cuando no funciona la categoría de tableros, rehacer el archivo caché manualmente para solucionar.'; - $lang->about_except_notice = "Aviso de los artículos no se mostrará en la lista normal."; - $lang->about_board = "Este módulo es para crear y manejar los tableros.\nLuego de crear un Tablero, seleciona el nombre del módulo para la configuración más detallada.\nSea cuidadoso con el nombre del módulo, ya que ese nombre va a ser la dirección URL. (ej : http://dominio/zb/?mid=nombre del módulo)"; + $lang->about_except_notice = 'Aviso de los artículos no se mostrará en la lista normal.'; + $lang->about_board = 'Este módulo es para crear y manejar los tableros.'; $lang->about_consultation = "No administrador de los miembros que consideran que su propia artocles. \ NNon miembros no serían capaces de escribir artículos al utilizar la consulta."; + $lang->about_secret = '게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.'; $lang->about_admin_mail = '글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다
,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.'; -?> + + $lang->about_category_color = '분류 폰트색깔을 지정합니다.'; + +?> \ No newline at end of file diff --git a/modules/board/lang/fr.lang.php b/modules/board/lang/fr.lang.php index 967cb1202..ae1a26acf 100644 --- a/modules/board/lang/fr.lang.php +++ b/modules/board/lang/fr.lang.php @@ -1,13 +1,13 @@ board = "Panneau"; + $lang->board = 'Panneau'; - $lang->except_notice = "Exclure des Notices"; + $lang->except_notice = 'Exclure des Notices'; $lang->cmd_manage_menu = 'Administration de Menu'; $lang->cmd_make_child = 'Ajouter une catégorie inférieure'; @@ -20,6 +20,7 @@ $lang->category_group_srls = 'Groupe Accessible'; $lang->search_result = 'Résultat de la Recherche'; $lang->consultation = 'Consultation'; + $lang->secret = '비밀글 기능'; $lang->admin_mail = 'Mél de l\'administrateur'; // Mots utilisés en bouton @@ -34,7 +35,8 @@ $lang->about_layout_setup = 'Vous pouvez manuellement modifier le code de Mise en Page du blogue. Insérez ou administrez le code de Gadget n\'importe où vous voulez.'; $lang->about_board_category = 'Vous pouvez créer des catégories de Panneau d\'Affichage. Quand la catégorie d\'affichage est cassé, essayez manuellement rétablir l\'antémémoire du fichier.'; $lang->about_except_notice = "Le titre de Notice dont l'article se représentera toujours en tête de la liste ne sera exposé sur la liste générale."; - $lang->about_board = "Ce module se sert à créer et à administrer des Panneaux d'Affichage.\nAprés avoir créé un module, si vous cliquez le nom sur le liste, vous pouvez configurer particulièrement.\nFaites attention quand vous nomer un module du Panneau, car ce sera URL. (ex : http://domain/zb/?mid=nom_de_module)"; - $lang->about_consultation = "Les membres non-administratifs verront seulement les ariticles d\'eux-même.\nNon-membres ne pourraient pas écrire des articles quand la Consultation est appliqué."; + $lang->about_board = 'Ce module se sert à créer et à administrer des Panneaux d\'Affichage.'; + $lang->about_consultation = "Les membres non-administratifs verront seulement les ariticles d\'eux-même.\nNon-membres ne pourraient pas écrire des articles quand la Consultation est appliqué."; + $lang->about_secret = '게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.'; $lang->about_admin_mail = 'Un message éléctronique sera envoyé à l\'adresse inscrite quand un article ou commentaire se soumet.
On peut inscrire multiple adresses délimité par les virgules.'; -?> +?> \ No newline at end of file diff --git a/modules/board/lang/jp.lang.php b/modules/board/lang/jp.lang.php index 823fbf47e..ce7843b83 100644 --- a/modules/board/lang/jp.lang.php +++ b/modules/board/lang/jp.lang.php @@ -1,30 +1,32 @@ board = "掲示板"; + $lang->board = '掲示板'; - $lang->except_notice = "お知らせの非表示機能"; + $lang->except_notice = 'お知らせの非表示機能'; $lang->cmd_manage_menu = 'メニュー管理'; $lang->cmd_make_child = '下位カテゴリ追加'; $lang->cmd_enable_move_category = "カテゴリ位置変更(選択後上のメニューをドラッグして下さい)"; - $lang->cmd_remake_cache = 'キャッシュファイル再生性'; - $lang->cmd_layout_setup = 'レイアウト設定'; - $lang->cmd_layout_edit = 'レイアウト編集'; // 項目 $lang->parent_category_title = '上位カテゴリ名'; $lang->category_title = 'カテゴリ名'; + $lang->category_color = 'カテゴリフォント色'; + $lang->expand = '拡張表示'; $lang->category_group_srls = 'グループ制限'; $lang->search_result = '検索結果'; $lang->consultation = '相談機能'; + $lang->secret = '秘密文機能'; $lang->admin_mail = '管理者メールアドレス'; + + // ボタンに使用する用語 $lang->cmd_board_list = '掲示板リスト'; $lang->cmd_module_config = '掲示板共通設定'; @@ -37,7 +39,10 @@ $lang->about_layout_setup = 'ブログのレイアウトのコードを直接修正します。ウィジェットコードを好きなところに入力、又は管理して下さい。'; $lang->about_board_category = 'ブログのカテゴリを作成します。
ブログのカテゴリが誤作動する場合、「キャッシュファイルの再生性」を手動で行うことで解決できます。'; $lang->about_except_notice = "リストの上段に常に表示されるお知らせの書き込みを一般リストからお知らせの書き込みが表示されないようにします。"; - $lang->about_board = "掲示板の生成、および管理する掲示板モジュールです。\n生成後、リストからモジュール名を選択すると詳細設定ができます。\n掲示板のモジュール名はURLの一部となりますので注意してください。 (ex : http://ドメイン/zb/?mid=モジュール名)"; + $lang->about_board = '掲示板の生成、および管理する掲示板モジュールです。'; $lang->about_consultation = "相談機能とは、管理権限のない会員に本人の書き込みだけを表示する機能です。\n但し、相談機能を使用する際は、非会員の書き込みは自動的に禁止されます。"; + $lang->about_secret = '掲示板およびコメントの秘密文を登録できるようにします。'; $lang->about_admin_mail = '書き込みやコメントが掲載される時、登録メールアドレス宛にメールが送信されます。
複数のメールアドレスへ送信する場合は「,」(半額コンマ)区切りで登録して下さい。'; -?> + + $lang->about_category_color = 'カテゴリのフォント色を設定します。'; +?> \ No newline at end of file diff --git a/modules/board/lang/ko.lang.php b/modules/board/lang/ko.lang.php index eb37f0485..1a0a3050f 100644 --- a/modules/board/lang/ko.lang.php +++ b/modules/board/lang/ko.lang.php @@ -5,9 +5,9 @@ * @brief 게시판(board) 모듈의 기본 언어팩 **/ - $lang->board = "게시판"; + $lang->board = '게시판'; - $lang->except_notice = "공지사항 제외"; + $lang->except_notice = '공지사항 제외'; $lang->cmd_manage_menu = '메뉴관리'; $lang->cmd_make_child = '하위 카테고리 추가'; @@ -16,12 +16,17 @@ // 항목 $lang->parent_category_title = '상위 카테고리명'; $lang->category_title = '분류명'; + $lang->category_color = '분류 폰트색깔'; + $lang->expand = '펼침'; $lang->category_group_srls = '그룹제한'; $lang->search_result = '검색결과'; $lang->consultation = '상담 기능'; + $lang->secret = '비밀글 기능'; $lang->admin_mail = '관리자 메일'; + + // 버튼에 사용되는 언어 $lang->cmd_board_list = '게시판 목록'; $lang->cmd_module_config = '게시판 공통 설정'; @@ -33,8 +38,11 @@ $lang->about_category_group_srls = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다'; $lang->about_layout_setup = '블로그의 레이아웃 코드를 직접 수정할 수 있습니다. 위젯 코드를 원하는 곳에 삽입하시거나 관리하세요'; $lang->about_board_category = '분류를 만드실 수 있습니다.
분류가 오동작을 할 경우 캐시파일 재생성을 수동으로 해주시면 해결이 될 수 있습니다.'; - $lang->about_except_notice = "목록 상단에 늘 나타나는 공지사항을 일반 목록에서 공지사항을 출력하지 않도록 합니다."; - $lang->about_board = "게시판을 생성하고 관리할 수 있는 게시판 모듈입니다.\n생성하신 후 목록에서 모듈이름을 선택하시면 자세한 설정이 가능합니다.\n게시판의 모듈이름은 접속 url이 되므로 신중하게 입력해주세요. (ex : http://도메인/zb/?mid=모듈이름)"; + $lang->about_except_notice = '목록 상단에 늘 나타나는 공지사항을 일반 목록에서 공지사항을 출력하지 않도록 합니다.'; + $lang->about_board = '게시판을 생성하고 관리할 수 있는 게시판 모듈입니다.'; $lang->about_consultation = "상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다\n단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다."; + $lang->about_secret = '게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.'; $lang->about_admin_mail = '글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다
,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.'; -?> + + $lang->about_category_color = '분류 폰트색깔을 지정합니다.'; +?> \ No newline at end of file diff --git a/modules/board/lang/ru.lang.php b/modules/board/lang/ru.lang.php index f0236d941..b30e73b34 100644 --- a/modules/board/lang/ru.lang.php +++ b/modules/board/lang/ru.lang.php @@ -1,13 +1,13 @@ | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467; + * @author Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467; * @brief Russian basic language pack **/ - $lang->board = "Форум"; + $lang->board = 'Форум'; - $lang->except_notice = "공지사항 제외"; + $lang->except_notice = '공지사항 제외'; $lang->cmd_manage_menu = 'Управление меню'; $lang->cmd_make_child = 'Добавить дочернюю категорию'; @@ -19,10 +19,13 @@ // Объект $lang->parent_category_title = 'Родительская категория'; $lang->category_title = 'Категория'; + $lang->category_color = '분류 폰트색깔'; + $lang->expand = 'Расширить'; $lang->category_group_srls = 'Доступные группы'; $lang->search_result = 'Результат поиска'; $lang->consultation = '상담 기능'; + $lang->secret = '비밀글 기능'; $lang->admin_mail = '관리자 메일'; // слова, использованные в кнопке @@ -37,7 +40,11 @@ $lang->about_layout_setup = 'Вы можете вручную изменять лейаут код блога. Вставляйте или управляйте кодом виджетов везде, где хотите'; $lang->about_board_category = 'Вы можете сделать категории блога.
Когда категория блога испорчена, попробуйте перепостроить файл кеша вручную.'; $lang->about_except_notice = "목록 상단에 늘 나타나는 공지사항을 일반 목록에서 공지사항을 출력하지 않도록 합니다."; - $lang->about_board = "Этот модуль служит для создания и управления форумами.\nВы можете выбрать имя модуля из списка после создания для дополнительного конифигурирования.\nПожалуйста, будте осторожны с именем модуля форума, поскольку оно будет URL. (например : http://domain/zb/?mid=имя_модуля)"; + $lang->about_board = 'Этот модуль служит для создания и управления форумами.'; $lang->about_consultation = "상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다\n단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다."; + $lang->about_secret = '게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.'; $lang->about_admin_mail = '글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다
,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.'; -?> + + $lang->about_category_color = '분류 폰트색깔을 지정합니다.'; + +?> \ No newline at end of file diff --git a/modules/board/lang/zh-CN.lang.php b/modules/board/lang/zh-CN.lang.php index 6f62e301e..91774c441 100644 --- a/modules/board/lang/zh-CN.lang.php +++ b/modules/board/lang/zh-CN.lang.php @@ -5,7 +5,7 @@ * @brief 版面(board) 模块语言包 **/ - $lang->board = "版面"; + $lang->board = "版面"; $lang->except_notice = "公告选项"; @@ -19,10 +19,12 @@ // 项目 $lang->parent_category_title = '上级分类名'; $lang->category_title = '分类名'; + $lang->category_color = '分类颜色'; $lang->expand = '展开'; $lang->category_group_srls = '用户组'; $lang->search_result = '搜索结果'; $lang->consultation = '咨询功能'; + $lang->secret = '密帖'; $lang->admin_mail = '管理员电子邮件'; // 按钮语言 @@ -38,7 +40,9 @@ $lang->about_layout_setup = '可直接编辑博客布局代码。可以把控件代码插入到您喜欢的位置。'; $lang->about_board_category = '可以添加/删除分类项
分类有异常情况时,可以尝试重新生成缓冲文件。'; $lang->about_except_notice = "设置公告目录项不再重复显示到普通目录当中。"; - $lang->about_board = "可生成及管理版面的模块。\n生成版面后,点击模块名即可对其详细设置。"; + $lang->about_board = "可生成及管理版面的模块。"; $lang->about_consultation = "咨询功能是指除有管理权限的会员以外,其他会员只能浏览自己发表的主题。\n使用咨询功能时系统将自动禁止非会员的发表主题权限。"; + $lang->about_secret = '设置主题及评论当中使用密帖与否。'; $lang->about_admin_mail = '有新的主题或评论时,将自动发电子邮件来通知管理员。
多数电子邮件由逗号(,)来分隔。'; -?> + $lang->about_category_color = '请指定分类颜色(必须带#符号)。ex)#ff0000'; +?> \ No newline at end of file diff --git a/modules/board/lang/zh-TW.lang.php b/modules/board/lang/zh-TW.lang.php index 897903543..4ebb1d874 100644 --- a/modules/board/lang/zh-TW.lang.php +++ b/modules/board/lang/zh-TW.lang.php @@ -5,9 +5,9 @@ * @brief 討論板(board) 模組語言 **/ - $lang->board = "討論板"; + $lang->board = '討論板'; - $lang->except_notice = "公告選項"; + $lang->except_notice = '公告選項'; $lang->cmd_manage_menu = '選單管理'; $lang->cmd_make_child = '新增子分類'; @@ -16,10 +16,12 @@ // 項目 $lang->parent_category_title = '主分類'; $lang->category_title = '分類名稱'; + $lang->category_color = '分類顏色'; $lang->expand = '展開'; $lang->category_group_srls = '用戶組'; $lang->search_result = '搜尋結果'; $lang->consultation = '咨詢功能'; + $lang->secret = '秘密'; $lang->admin_mail = '管理員電子郵件'; // 按鈕語言 @@ -33,8 +35,10 @@ $lang->about_category_group_srls = '被選擇的用戶組才可以檢視此分類。'; $lang->about_layout_setup = '可直接編輯部落格版面設計原始碼。可把控件原始碼插入到您喜歡的位置。'; $lang->about_board_category = '可以新增/刪除分類項目
分類有異常情況時,可以嘗試重新建立暫存檔。'; - $lang->about_except_notice = "設置公告列表項目,不再重複顯示到普通列表當中。"; - $lang->about_board = "可建立及管理討論板的模組。\n建立討論板後,按模組名稱即可對其詳細設置。"; + $lang->about_except_notice = '設置公告列表項目,不再重複顯示到普通列表當中。'; + $lang->about_board = '可建立及管理討論板的模組。'; $lang->about_consultation = "咨詢功能是指除有管理權限的會員以外,其他會員只能瀏覽自己發表的主題。\n使用咨詢功能時系統將自動禁止非會員的發表主題權限。"; - $lang->about_admin_mail = '有新的主題或評論時,將自動發電子郵件來通知管理員。
多數電子郵件由逗號(,)來分隔。'; -?> + $lang->about_secret = '可用於討論板或回覆時選擇是否使用。'; + $lang->about_admin_mail = '有新的主題或評論時,將自動發電子郵件來通知管理員。
多數電子郵件由逗號(,)區隔。'; + $lang->about_category_color = '設定分類顏色。'; +?> \ No newline at end of file diff --git a/modules/board/skins/xe_board/comment_form.html b/modules/board/skins/xe_board/comment_form.html index 4714b2da9..4edf41f4e 100644 --- a/modules/board/skins/xe_board/comment_form.html +++ b/modules/board/skins/xe_board/comment_form.html @@ -48,9 +48,10 @@ useNotify())-->checked="checked" id="notify_message" /> - + isSecret())-->checked="checked" id="is_secret" /> +
{$oComment->getEditor()}
diff --git a/modules/board/skins/xe_board/extra_var_form.html b/modules/board/skins/xe_board/extra_var_form.html index 6701ff629..fb0befc23 100644 --- a/modules/board/skins/xe_board/extra_var_form.html +++ b/modules/board/skins/xe_board/extra_var_form.html @@ -1,22 +1,5 @@ - - - - - - - - - - - - - - - - - @@ -30,7 +13,7 @@ {@ $val->value = $oDocument->getExtraValue($key)} - + @@ -73,12 +56,24 @@ - -
{zdate($val->value,"Y-m-d")}
+ + - + + + + diff --git a/modules/board/skins/xe_board/style.forum.html b/modules/board/skins/xe_board/style.forum.html index 19881dea2..4741e08fe 100644 --- a/modules/board/skins/xe_board/style.forum.html +++ b/modules/board/skins/xe_board/style.forum.html @@ -7,7 +7,7 @@
- +
{@ $no_line_class=""} diff --git a/modules/board/skins/xe_board/style.gallery.html b/modules/board/skins/xe_board/style.gallery.html index b9d7cf277..85c3a1745 100644 --- a/modules/board/skins/xe_board/style.gallery.html +++ b/modules/board/skins/xe_board/style.gallery.html @@ -6,7 +6,7 @@
- + {@ $no_line_class=""} + {@ $no_line_class=""}
@@ -65,7 +64,7 @@ isCarted())-->checked="checked" /> - {$category_list[$document->get('category_srl')]->title} + get('category_srl')]->color)-->style="color:{$category_list[$document->get('category_srl')]->color};">{$category_list[$document->get('category_srl')]->title} {$document->getTitle($module_info->subject_cut_size)} @@ -95,7 +94,7 @@ isCarted())-->checked="checked" /> - {$category_list[$document->get('category_srl')]->title} + get('category_srl')]->color)-->style="color:{$category_list[$document->get('category_srl')]->color};">{$category_list[$document->get('category_srl')]->title} {$document->getTitle($module_info->subject_cut_size)} diff --git a/modules/board/skins/xe_board/style.webzine.html b/modules/board/skins/xe_board/style.webzine.html index 5eacee08d..2c3620396 100644 --- a/modules/board/skins/xe_board/style.webzine.html +++ b/modules/board/skins/xe_board/style.webzine.html @@ -16,7 +16,7 @@
{$lang->no}
{@ $no_line_class=""} - {@ $no_line_class=""} + {@ $no_line_class=""}
diff --git a/modules/board/skins/xe_board/write_form.html b/modules/board/skins/xe_board/write_form.html index 54836f7cb..c951736e5 100644 --- a/modules/board/skins/xe_board/write_form.html +++ b/modules/board/skins/xe_board/write_form.html @@ -1,7 +1,7 @@ -
+ @@ -61,10 +61,12 @@ +
isSecret())-->checked="checked" id="is_secret" />
+
allowComment())-->checked="checked" id="allow_comment" /> diff --git a/modules/board/skins/xe_default/_extra_var_form.html b/modules/board/skins/xe_default/_extra_var_form.html index b12fda321..e054d216c 100644 --- a/modules/board/skins/xe_default/_extra_var_form.html +++ b/modules/board/skins/xe_default/_extra_var_form.html @@ -1,21 +1,3 @@ - - - - - - - - - - - - - - - - - - {@ $val->default = explode(',', $val->default) } @@ -24,7 +6,7 @@ {@ $val->value = $oDocument->getExtraValue($key)} - + @@ -61,12 +43,24 @@ - -
{zdate($val->value,"Y-m-d")}
+ + - + + + + diff --git a/modules/board/skins/xe_default/_style.forum.html b/modules/board/skins/xe_default/_style.forum.html index b622de972..6213b74e9 100644 --- a/modules/board/skins/xe_default/_style.forum.html +++ b/modules/board/skins/xe_default/_style.forum.html @@ -7,7 +7,7 @@ - + {@ $no_line_class=""} diff --git a/modules/board/skins/xe_default/_style.gallery.html b/modules/board/skins/xe_default/_style.gallery.html index 7cc0c0ac0..64e89d547 100644 --- a/modules/board/skins/xe_default/_style.gallery.html +++ b/modules/board/skins/xe_default/_style.gallery.html @@ -4,7 +4,7 @@
- {@ $no_line_class=""} + {@ $no_line_class=""} diff --git a/modules/board/skins/xe_default/_style.list.html b/modules/board/skins/xe_default/_style.list.html index 374444d32..101b15cce 100644 --- a/modules/board/skins/xe_default/_style.list.html +++ b/modules/board/skins/xe_default/_style.list.html @@ -18,7 +18,7 @@ {$lang->no}{@ $no_line_class=""} - {@ $no_line_class=""} + {@ $no_line_class=""} diff --git a/modules/board/skins/xe_default/_style.webzine.html b/modules/board/skins/xe_default/_style.webzine.html index f0e2473e7..500dcc9e0 100644 --- a/modules/board/skins/xe_default/_style.webzine.html +++ b/modules/board/skins/xe_default/_style.webzine.html @@ -18,7 +18,7 @@ {$lang->no}{@ $no_line_class=""} - {@ $no_line_class=""} + {@ $no_line_class=""} diff --git a/modules/board/skins/xe_guestbook/extra_var_form.html b/modules/board/skins/xe_guestbook/extra_var_form.html index c76387fe1..ed78fe633 100644 --- a/modules/board/skins/xe_guestbook/extra_var_form.html +++ b/modules/board/skins/xe_guestbook/extra_var_form.html @@ -1,23 +1,5 @@ - - - - - - - - - - - - - - - - - - {@ $val->default = explode(',', $val->default) } @@ -30,7 +12,7 @@ {@ $val->value = $oDocument->getExtraValue($key)} - + @@ -73,14 +55,27 @@ - -
{zdate($val->value,"Y-m-d")}
+ + - + + + + +

{$val->desc}

diff --git a/modules/board/tpl/board_insert.html b/modules/board/tpl/board_insert.html index 272b90404..4bef5990a 100644 --- a/modules/board/tpl/board_insert.html +++ b/modules/board/tpl/board_insert.html @@ -20,7 +20,7 @@ - +
{$lang->is_default}
is_default=='Y')-->checked="checked" id="fld_for_default" class="checkbox" /> @@ -43,7 +43,7 @@ - +
{$lang->browser_title}
@@ -64,7 +64,7 @@

{$lang->about_layout}

- +
{$lang->skin}
@@ -102,7 +102,7 @@ - +
{$lang->list_count}
@@ -116,7 +116,7 @@

{$lang->about_search_list_count}

- +
{$lang->page_count}
@@ -130,13 +130,20 @@

{$lang->about_except_notice}

- +
{$lang->consultation}
consultation=='Y')-->checked="checked" />

{nl2br($lang->about_consultation)}

+ +
{$lang->secret}
+ + secret=='Y')-->checked="checked" /> +

{nl2br($lang->about_secret)}

+ +
{$lang->admin_mail}
@@ -144,7 +151,7 @@

{$lang->about_admin_mail}

- +
{$lang->description}
@@ -158,7 +165,7 @@

{$lang->about_header_text}

- +
{$lang->footer_text}
@@ -172,7 +179,7 @@

{$lang->about_admin_id}

- + @@ -198,7 +205,7 @@ - + @@ -214,7 +221,7 @@ - + @@ -222,7 +229,7 @@ - + @@ -230,7 +237,7 @@ - +
{$lang->extra_vars} {$i}
{$lang->column_name}
{$lang->is_required}
checked="checked" />
{$lang->default_value}

{$lang->about_extra_vars_default_value}

{$lang->description}
{$lang->cmd_search}
checked="checked" />
@@ -238,4 +245,4 @@ - + \ No newline at end of file diff --git a/modules/board/tpl/category_info.html b/modules/board/tpl/category_info.html index 83ceb74b0..5fc1e4341 100644 --- a/modules/board/tpl/category_info.html +++ b/modules/board/tpl/category_info.html @@ -15,15 +15,16 @@

{$lang->about_category_title}

- -
{$lang->expand}
+ +
{$lang->category_color}
- expand=="Y")-->checked="checked" class="checkbox" /> - {$lang->about_expand} + +

{$lang->about_category_color}

- -
{$lang->category_group_srls}
+ + +
{$lang->category_group_srls}
group_srls)&&in_array($key, $category_info->group_srls))-->checked="checked" class="checkbox" />
@@ -33,14 +34,11 @@ - - {$lang->cmd_delete} - - {$lang->cmd_close} - - - {$lang->cmd_make_child} - + + + + + - + \ No newline at end of file diff --git a/modules/board/tpl/category_list.html b/modules/board/tpl/category_list.html index 1cffd2efb..a235ac67c 100644 --- a/modules/board/tpl/category_list.html +++ b/modules/board/tpl/category_list.html @@ -1,46 +1,40 @@ + - - + + + +

{$lang->board} {$lang->cmd_management}

-
{nl2br($lang->about_board_category)}
- -
- {$lang->cmd_insert} - {$lang->cmd_remake_cache} - {$lang->cmd_open_all} - {$lang->cmd_close_all} - {$lang->cmd_close} +
{nl2br($lang->about_board_category)}
- -

- - - -
- - - -
+{$lang->cmd_remake_cache}
-
-
-
-
+ +
+
+ -
diff --git a/modules/board/tpl/filter/insert_board.xml b/modules/board/tpl/filter/insert_board.xml index 71d5a806a..62f97dabf 100644 --- a/modules/board/tpl/filter/insert_board.xml +++ b/modules/board/tpl/filter/insert_board.xml @@ -20,6 +20,7 @@ + diff --git a/modules/board/tpl/filter/insert_category.xml b/modules/board/tpl/filter/insert_category.xml index 1dae396c9..0a2b71bae 100644 --- a/modules/board/tpl/filter/insert_category.xml +++ b/modules/board/tpl/filter/insert_category.xml @@ -9,6 +9,7 @@ + diff --git a/modules/board/tpl/grant_list.html b/modules/board/tpl/grant_list.html index 02fa952bc..36f90bbbe 100644 --- a/modules/board/tpl/grant_list.html +++ b/modules/board/tpl/grant_list.html @@ -24,8 +24,8 @@ - {$lang->cmd_select_all} - {$lang->cmd_unselect_all} + {$lang->cmd_select_all} + {$lang->cmd_unselect_all} diff --git a/modules/board/tpl/header.html b/modules/board/tpl/header.html index 2e0202b48..071da9b9c 100644 --- a/modules/board/tpl/header.html +++ b/modules/board/tpl/header.html @@ -18,7 +18,7 @@
  • class="on">{$lang->cmd_view_info}
  • class="on">{$lang->cmd_addition_setup}
  • -
  • class="on">{$lang->cmd_manage_category}
  • +
  • class="on">{$lang->cmd_manage_category}
  • class="on">{$lang->cmd_manage_grant}
  • class="on">{$lang->cmd_manage_skin}
  • diff --git a/modules/board/tpl/index.html b/modules/board/tpl/index.html index 0c2571521..6f0323789 100644 --- a/modules/board/tpl/index.html +++ b/modules/board/tpl/index.html @@ -11,7 +11,7 @@
    {$lang->no}
    -
    +
    diff --git a/modules/board/tpl/js/board_admin.js b/modules/board/tpl/js/board_admin.js index 5a379af6a..acce326d2 100644 --- a/modules/board/tpl/js/board_admin.js +++ b/modules/board/tpl/js/board_admin.js @@ -4,6 +4,185 @@ * @brief board 모듈의 관리자용 javascript **/ + +function Tree(url){ + // clear tree; + jQuery('#menu > ul > li > ul').remove(); + if(jQuery("ul.simpleTree > li > a").size() ==0)jQuery('').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li"); + + //ajax get data and transeform ul il + jQuery.get(url,function(data){ + jQuery(data).find("node").each(function(i){ + var text = jQuery(this).attr("text"); + var node_srl = jQuery(this).attr("node_srl"); + var parent_srl = jQuery(this).attr("parent_srl"); + var color = jQuery(this).attr("color"); + var url = jQuery(this).attr("url"); + + // node + + var node = ''; + if(color){ + node = jQuery('
  • '+text+'
  • '); + }else{ + node = jQuery('
  • '+text+'
  • '); + } + + + + // button + jQuery('').bind("click",function(e){ + jQuery("#tree_"+node_srl+" > span").click(); + addNode(node_srl,e); + return false; + }).appendTo(node); + + jQuery('').bind("click",function(e){ + jQuery("#tree_"+node_srl+" > span").click(); + modifyNode(node_srl,e); + return false; + }).appendTo(node); + + jQuery('').bind("click",function(e){ + deleteNode(node_srl); + return false; + }).appendTo(node); + + // insert parent child + if(parent_srl>0){ + if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('
      ')); + jQuery('#tree_'+parent_srl+'> ul').append(node); + }else{ + if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("
        ").appendTo('#menu ul.simpleTree > li'); + jQuery('#menu ul.simpleTree > li > ul').append(node); + } + + }); + + //button show hide + jQuery("#menu li").each(function(){ + if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide(); + if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide(); + }); + + + // draw tree + simpleTreeCollection = jQuery('.simpleTree').simpleTree({ + autoclose: false, + afterClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterDblClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterMove:function(destination, source, pos){ + var module_srl = jQuery("#fo_category input[name=module_srl]").val(); + var parent_srl = destination.attr('id').replace(/.*_/g,''); + var source_srl = source.attr('id').replace(/.*_/g,''); + + var target = source.prevAll("li:not([class^=line])"); + var target_srl = 0; + if(target.length >0){ + target_srl = source.prevAll("li:not([class^=line])").get(0).id.replace(/.*_/g,''); + parent_srl = 0; + } + + jQuery.exec_json("board.procBoardAdminMoveCategory",{ "module_srl":module_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl}, + function(data){ + if(data.error > 0) Tree(xml_url); + }); + + }, + + // i want you !! made by sol + beforeMovedToLine : function(destination, source, pos){ + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth); + }, + + // i want you !! made by sol + beforeMovedToFolder : function(destination, source, pos){ + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1); + }, + afterAjax:function() + { + //alert('Loaded'); + }, + animate:true + ,docToFolderConvert:true + }); + + + + // open all node + nodeToggleAll(); + },"xml"); +} +function addNode(node,e){ + var params ={ + "category_srl":0 + ,"parent_srl":node + ,"module_srl":jQuery("#fo_category [name=module_srl]").val() + }; + + jQuery.exec_json('board.getBoardAdminCategoryTplInfo', params, function(data){ + jQuery('#category_info').html(data.tpl); + }); +} + +function modifyNode(node,e){ + var params ={ + "category_srl":node + ,"parent_srl":0 + ,"module_srl":jQuery("#fo_category [name=module_srl]").val() + }; + + jQuery.exec_json('board.getBoardAdminCategoryTplInfo', params, function(data){ + jQuery('#category_info').html(data.tpl); + }); +} + + +function nodeToggleAll(){ + jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){ + simpleTreeCollection[0].nodeToggle(this); + }); +} + +function deleteNode(node){ + if(confirm(lang_confirm_delete)){ + var params ={ + "category_srl":node + ,"parent_srl":0 + ,"module_srl":jQuery("#fo_category [name=module_srl]").val() + }; + + jQuery.exec_json('board.procBoardAdminDeleteCategory', params, function(data){ + if(data.error==0) Tree(xml_url); + }); + } +} + +/* 카테고리 아이템 입력후 */ +function completeInsertCategory(ret_obj) { + jQuery('#category_info').html(""); + Tree(xml_url); +} + +function hideCategoryInfo() { + jQuery('#category_info').html(""); +} + + + + + + + + + + + + /* 모듈 생성 후 */ function completeInsertBoard(ret_obj) { var error = ret_obj['error']; @@ -57,30 +236,6 @@ function completeUpdateCategory(ret_obj) { } /* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i__isupdate = false; // trigger 호출 (before) $output = ModuleHandler::triggerCall('comment.insertComment', 'before', $obj); if(!$output->toBool()) return $output; @@ -209,11 +210,11 @@ // 댓글의 권한을 부여 $this->addGrant($obj->comment_srl); } - + // trigger 호출 (after) if($output->toBool()) { - $trigger_output = ModuleHandler::triggerCall('comment.insertComment', 'after', $obj); + $trigger_output = ModuleHandler::triggerCall('comment.insertComment', 'after', $obj); if(!$trigger_output->toBool()) { $oDB->rollback(); return $trigger_output; @@ -243,6 +244,7 @@ * @brief 댓글 수정 **/ function updateComment($obj, $is_admin = false) { + $obj->__isupdate = true; // trigger 호출 (before) $output = ModuleHandler::triggerCall('comment.updateComment', 'before', $obj); if(!$output->toBool()) return $output; diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php index f4aa379b3..261457a16 100644 --- a/modules/comment/comment.model.php +++ b/modules/comment/comment.model.php @@ -184,7 +184,7 @@ /** * @brief document_srl에 해당하는 문서의 댓글 목록을 가져옴 **/ - function getCommentList($document_srl, $page = 0, $is_admin = false) { + function getCommentList($document_srl, $page = 0, $is_admin = false, $count = 0) { // 해당 문서의 모듈에 해당하는 댓글 수를 구함 $oDocumentModel = &getModel('document'); $oDocument = $oDocumentModel->getDocument($document_srl); @@ -197,9 +197,14 @@ // 정해진 댓글수에 따른 댓글 목록 구함 $module_srl = $oDocument->get('module_srl'); - $comment_config = $this->getCommentConfig($module_srl); - $comment_count = $comment_config->comment_count; - if(!$comment_count) $comment_count = 50; + + if(!$count) { + $comment_config = $this->getCommentConfig($module_srl); + $comment_count = $comment_config->comment_count; + if(!$comment_count) $comment_count = 50; + } else { + $comment_count = $count; + } // 페이지가 없으면 제일 뒤 페이지를 구함 if(!$page) $page = (int)( ($oDocument->getCommentCount()-1) / $comment_count) + 1; diff --git a/modules/comment/lang/jp.lang.php b/modules/comment/lang/jp.lang.php index c68c821a8..ee72c6745 100644 --- a/modules/comment/lang/jp.lang.php +++ b/modules/comment/lang/jp.lang.php @@ -6,10 +6,10 @@ **/ $lang->cmd_comment_do = 'このコメントを..'; - + $lang->comment_list = 'コメントリスト'; $lang->cmd_toggle_checked_comment = '選択項目の反転'; - $lang->cmd_delete_checked_comment = '選択項目削除'; + $lang->cmd_delete_checked_comment = '選択項目削除'; $lang->comment_count = 'コメント数'; $lang->about_comment_count = 'コメントを指定した数だけ表示し、それ以上はリスト化します。'; diff --git a/modules/comment/lang/zh-TW.lang.php b/modules/comment/lang/zh-TW.lang.php index af67fe367..56dd113c7 100644 --- a/modules/comment/lang/zh-TW.lang.php +++ b/modules/comment/lang/zh-TW.lang.php @@ -5,7 +5,7 @@ * @brief 評論(comment)模組語言 **/ - $lang->cmd_comment_do = '將把此評論..'; + $lang->cmd_comment_do = '將此評論..'; $lang->comment_list = '評論列表'; $lang->cmd_toggle_checked_comment = '反選'; diff --git a/modules/comment/tpl/comment_list.html b/modules/comment/tpl/comment_list.html index d16e8b0c0..b2a45f9f5 100644 --- a/modules/comment/tpl/comment_list.html +++ b/modules/comment/tpl/comment_list.html @@ -14,7 +14,7 @@
        {$lang->no}
        -
        +
        @@ -65,15 +65,15 @@ diff --git a/modules/comment/tpl/declared_list.html b/modules/comment/tpl/declared_list.html index 2963bb1d3..1196f17f1 100644 --- a/modules/comment/tpl/declared_list.html +++ b/modules/comment/tpl/declared_list.html @@ -13,7 +13,7 @@ - + @@ -37,8 +37,8 @@ diff --git a/modules/communication/communication.controller.php b/modules/communication/communication.controller.php index 4343a8883..7ebaa9923 100644 --- a/modules/communication/communication.controller.php +++ b/modules/communication/communication.controller.php @@ -135,7 +135,8 @@ $flag_path = './files/member_extra_info/new_message_flags/'.getNumberingPath($receiver_srl); FileHandler::makeDir($flag_path); $flag_file = sprintf('%s%s', $flag_path, $receiver_srl); - FileHandler::writeFile($flag_file,'1'); + $flag_count = FileHandler::readFile($flag_file); + FileHandler::writeFile($flag_file, ++$flag_count); $oDB->commit(); diff --git a/modules/communication/lang/jp.lang.php b/modules/communication/lang/jp.lang.php index 97d8fb670..a9baf4a19 100644 --- a/modules/communication/lang/jp.lang.php +++ b/modules/communication/lang/jp.lang.php @@ -44,6 +44,5 @@ $lang->msg_content_is_null = '内容を入力してください。'; $lang->msg_allow_message_to_friend = '友達からのみメッセージを受信できるように設定したユーザであるため、送信できませんでした。'; $lang->msg_disallow_message = 'メッセージの受信を拒否している受信者であるため、送信できませんでした。'; - $lang->about_allow_message = 'メッセージを受信するかを設定します。'; ?> diff --git a/modules/communication/skins/default/friends.html b/modules/communication/skins/default/friends.html index f68e5b451..cb7779998 100644 --- a/modules/communication/skins/default/friends.html +++ b/modules/communication/skins/default/friends.html @@ -25,7 +25,7 @@
        {$lang->comment}
        {$lang->user_name}
        {$lang->date}
        {$lang->cmd_cancel_declare} - {$lang->cmd_select_all} - {$lang->cmd_reverse_all} + {$lang->cmd_select_all} + {$lang->cmd_reverse_all}
        - + - + - + - + - + - + - + - - - - - - - - - + diff --git a/modules/editor/tpl/js/editor.js b/modules/editor/tpl/js/editor.js index 804cd33c5..4351192e5 100755 --- a/modules/editor/tpl/js/editor.js +++ b/modules/editor/tpl/js/editor.js @@ -174,6 +174,24 @@ function editorStart(editor_sequence, primary_key, content_key, editor_height, f // 자동저장 필드가 있다면 자동 저장 기능 활성화 if(typeof(fo_obj._saved_doc_title)!="undefined" ) editorEnableAutoSave(fo_obj, editor_sequence); + + + // 좋지는 않으나;; 스타일 변형을 막기 위해 start 할때 html이면 바꿔주자 + if (xGetCookie('editor_mode') == 'html'){ + var iframe_obj = editorGetIFrame(editor_sequence); + if(xGetElementById('fileUploader_'+editor_sequence)) xGetElementById('fileUploader_'+editor_sequence).style.display='block'; + textarea_obj = editorGetTextArea(editor_sequence); + textarea_obj.value = content; + xWidth(textarea_obj, xWidth(iframe_obj.parentNode)); + xHeight(textarea_obj, xHeight(iframe_obj.parentNode)); + editorMode[editor_sequence] = 'html'; + if(xGetElementById('xeEditor_'+editor_sequence)) { + xGetElementById('xeEditor_'+editor_sequence).className = 'xeEditor html'; + xGetElementById('use_rich_'+editor_sequence).className = ''; + xGetElementById('preview_html_'+editor_sequence).className = ''; + xGetElementById('use_html_'+editor_sequence).className = 'active'; + } + } } @@ -401,6 +419,13 @@ function editorChangeHeader(obj,srl) { **/ function editorChangeMode(mode, editor_sequence) { + + if(mode == 'html' || mode ==''){ + var expire = new Date(); + expire.setTime(expire.getTime()+ (7000 * 24 * 3600000)); + xSetCookie('editor_mode', mode, expire); + } + var iframe_obj = editorGetIFrame(editor_sequence); if(!iframe_obj) return; @@ -448,6 +473,7 @@ function editorChangeMode(mode, editor_sequence) { if(!fo_obj) { fo_obj = xCreateElement('form'); fo_obj.id = "preview_form"; + fo_obj.method = "post"; fo_obj.action = request_uri; fo_obj.target = "editor_preview_"+editor_sequence; xInnerHtml(fo_obj,''); diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index 05fd9157c..70dbadf06 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -221,6 +221,7 @@ function reloadFileList(settings) { var params = new Array(); params["file_list_area_id"] = settings["fileListAreaID"]; params["editor_sequence"] = settings["editorSequence"]; + params["mid"] = current_mid; var response_tags = new Array("error","message","files","upload_status","upload_target_srl","editor_sequence"); exec_xml("file","getFileList", params, completeReloadFileList, response_tags, settings); } diff --git a/modules/editor/tpl/setup_component.html b/modules/editor/tpl/setup_component.html index cc9b13bc6..966a57955 100644 --- a/modules/editor/tpl/setup_component.html +++ b/modules/editor/tpl/setup_component.html @@ -54,13 +54,13 @@ - + diff --git a/modules/file/file.admin.model.php b/modules/file/file.admin.model.php index 882baf4ce..22e26247b 100644 --- a/modules/file/file.admin.model.php +++ b/modules/file/file.admin.model.php @@ -30,6 +30,9 @@ case 'filesize' : $args->s_filesize = (int)$search_keyword; break; + case 'filesize_mega' : + $args->s_filesize = (int)$search_keyword * 1024 * 1024; + break; case 'download_count' : $args->s_download_count = (int)$search_keyword; break; @@ -37,7 +40,16 @@ $args->s_regdate = $search_keyword; break; case 'ipaddress' : - $args->s_ipaddress= $search_keyword; + $args->s_ipaddress = $search_keyword; + break; + case 'user_id' : + $args->s_user_id = $search_keyword; + break; + case 'user_name' : + $args->s_user_name = $search_keyword; + break; + case 'nick_name' : + $args->s_nick_name = $search_keyword; break; } } diff --git a/modules/file/file.model.php b/modules/file/file.model.php index fbf60f1c6..ea3116e29 100644 --- a/modules/file/file.model.php +++ b/modules/file/file.model.php @@ -17,6 +17,12 @@ * @brief 특정 문서에 속한 첨부파일 목록을 return **/ function getFileList() { + + $mid = Context::get("mid"); + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleInfoByMid($mid); + Context::set("module_srl",$config->module_srl); + $editor_sequence = Context::get("editor_sequence"); $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; if($upload_target_srl) { @@ -77,18 +83,30 @@ // 설정 정보를 받아옴 (module model 객체를 이용) $oModuleModel = &getModel('module'); + $file_module_config = $oModuleModel->getModuleConfig('file'); + if($module_srl) $file_config = $oModuleModel->getModulePartConfig('file',$module_srl); - if(!$file_config) $file_config = $oModuleModel->getModuleConfig('file'); + if(!$file_config) $file_config = $file_module_config; + if($file_config) { $config->allowed_filesize = $file_config->allowed_filesize; $config->allowed_attach_size = $file_config->allowed_attach_size; $config->allowed_filetypes = $file_config->allowed_filetypes; $config->download_grant = $file_config->download_grant; } + + // 전체 파일첨부 속성을 먼저 따른다 + if(!$config->allowed_filesize) $config->allowed_filesize = $file_module_config->allowed_filesize; + if(!$config->allowed_attach_size) $config->allowed_attach_size = $file_module_config->allowed_attach_size; + if(!$config->allowed_filetypes) $config->allowed_filetypes = $file_module_config->allowed_filetypes; + if(!$config->download_grant) $config->download_grant = $file_module_config->download_grant; + + // 그래도 없으면 default로 if(!$config->allowed_filesize) $config->allowed_filesize = '2'; if(!$config->allowed_attach_size) $config->allowed_attach_size = '3'; if(!$config->allowed_filetypes) $config->allowed_filetypes = '*.*'; if(!$config->download_grant) $config->download_grant = array(); + return $config; } diff --git a/modules/file/lang/en.lang.php b/modules/file/lang/en.lang.php index 1e2aec7e2..65054cf0e 100644 --- a/modules/file/lang/en.lang.php +++ b/modules/file/lang/en.lang.php @@ -31,11 +31,16 @@ $lang->msg_checked_file_is_deleted = '%d attachment(s) was(were) deleted'; $lang->msg_exceeds_limit_size = 'File size of attachment is bigger than allowed size.'; - $lang->search_target_list = array( + + $lang->file_search_target_list = array( 'filename' => 'File Name', 'filesize' => 'File Size (byte, over)', + 'filesize_mega' => 'File Size (mbyte, over)', 'download_count' => 'Downloads (over)', 'regdate' => 'Registered Date', + 'user_id' => 'User UD', + 'user_name' => 'User Name', + 'nick_name' => 'Nickname', 'ipaddress' => 'IP Address', ); ?> diff --git a/modules/file/lang/es.lang.php b/modules/file/lang/es.lang.php index 49a931386..30133cb32 100644 --- a/modules/file/lang/es.lang.php +++ b/modules/file/lang/es.lang.php @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = 'Total de %d archivos eliminados'; $lang->msg_exceeds_limit_size = 'Ha excedido el límite del tamaño total de los archivos adjuntos'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => 'Nombre del archivo', 'filesize' => 'Tamaño del archivo (Byte, sobre)', + 'filesize_mega' => '파일크기 (Mb, 이상)', 'download_count' => 'Descargados (Sobre)', + 'user_id' => '아이디', + 'user_name' => '이름', + 'nick_name' => '닉네임', 'regdate' => 'La fecha registrada', 'ipaddress' => 'Dirección IP', ); diff --git a/modules/file/lang/fr.lang.php b/modules/file/lang/fr.lang.php index c7d21be81..f12dfba2f 100644 --- a/modules/file/lang/fr.lang.php +++ b/modules/file/lang/fr.lang.php @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = '%d Annexe(s) est(sont) supprimé(s)'; $lang->msg_exceeds_limit_size = 'La mesure de l\'(des) Annexe(s) est plus grande que celle consentie.'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => 'Nom de Fichier', 'filesize' => 'Mesure de Fichier (octet, surplus)', + 'filesize_mega' => '파일크기 (Mb, 이상)', 'download_count' => 'Téléchargés (surplus)', + 'user_id' => '아이디', + 'user_name' => '이름', + 'nick_name' => '닉네임', 'regdate' => 'Enrgistré', 'ipaddress' => 'Adresse IP', ); diff --git a/modules/file/lang/jp.lang.php b/modules/file/lang/jp.lang.php index 52e17dbf5..1f36ee473 100644 --- a/modules/file/lang/jp.lang.php +++ b/modules/file/lang/jp.lang.php @@ -1,7 +1,7 @@ 翻訳:RisaPapa + * @author zero 翻訳:RisaPapa、ミニミ * @brief 添付ファイル(file)モジュールの基本言語パッケージ **/ @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = '%d個の添付ファイルを削除しました'; $lang->msg_exceeds_limit_size = 'ファイルサイズの制限を超えたため、添付できません。'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => 'ファイル名', 'filesize' => 'ファイルサイズ((Byte以上)', + 'filesize_mega' => 'ファイルサイズ (Mb、以上)', 'download_count' => 'ダウンロード数(以上)', + 'user_id' => 'ユーザーID', + 'user_name' => '名前', + 'nick_name' => 'ニックネーム', 'regdate' => '登録日', 'ipaddress' => 'IPアドレス', ); diff --git a/modules/file/lang/ko.lang.php b/modules/file/lang/ko.lang.php index 0fbf82997..b49df9ad0 100644 --- a/modules/file/lang/ko.lang.php +++ b/modules/file/lang/ko.lang.php @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = '%d개의 첨부파일이 삭제되었습니다'; $lang->msg_exceeds_limit_size = '허용된 용량을 초과하여 첨부가 되지 않았습니다'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => '파일이름', 'filesize' => '파일크기 (byte, 이상)', + 'filesize_mega' => '파일크기 (Mb, 이상)', 'download_count' => '다운로드 회수 (이상)', + 'user_id' => '아이디', + 'user_name' => '이름', + 'nick_name' => '닉네임', 'regdate' => '등록일', 'ipaddress' => 'IP 주소', ); diff --git a/modules/file/lang/ru.lang.php b/modules/file/lang/ru.lang.php index 8fc8d7987..a4cfae678 100644 --- a/modules/file/lang/ru.lang.php +++ b/modules/file/lang/ru.lang.php @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = 'Всего %d вложений было удалено'; $lang->msg_exceeds_limit_size = 'Вложение провалено: превышен лимит размера файлов'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => 'Имя файла', 'filesize' => 'Размер файла (байт, Выше)', + 'filesize_mega' => '파일크기 (Mb, 이상)', 'download_count' => 'Скачано (Выше)', + 'user_id' => '아이디', + 'user_name' => '이름', + 'nick_name' => '닉네임', 'regdate' => 'Дата', 'ipaddress' => 'IP-Адрес', ); diff --git a/modules/file/lang/zh-CN.lang.php b/modules/file/lang/zh-CN.lang.php index f5c29250a..e041a556c 100644 --- a/modules/file/lang/zh-CN.lang.php +++ b/modules/file/lang/zh-CN.lang.php @@ -31,10 +31,14 @@ $lang->msg_checked_file_is_deleted = '已删除%d个文件!'; $lang->msg_exceeds_limit_size = '已超过系统指定的上传文件大小!'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => '文件名', 'filesize' => '文件大小 (byte, 以上)', + 'filesize_mega' => '文件大小 (Mb, 以上)', 'download_count' => '下载次数 (以上)', + 'user_id' => '用户名', + 'user_name' => '姓名', + 'nick_name' => '昵称', 'regdate' => '登录日期', 'ipaddress' => 'IP地址', ); diff --git a/modules/file/lang/zh-TW.lang.php b/modules/file/lang/zh-TW.lang.php index 273ad0814..eb7d95979 100644 --- a/modules/file/lang/zh-TW.lang.php +++ b/modules/file/lang/zh-TW.lang.php @@ -20,7 +20,7 @@ $lang->about_allowed_filesize = '最大單一上傳檔案大小(管理員不受此限制)。'; $lang->about_allowed_attach_size = '每個主題最大上傳檔案大小(管理員不受此限制)。'; - $lang->about_allowed_filetypes = '只允許上傳指定的檔案類型。 可以用"*.副檔名"來指定或用 ";"來 區分多個副檔名
        例) *.* or *.jpg;*.gif;
        (管理員不受此限制)'; + $lang->about_allowed_filetypes = '設定允許上傳的檔案類型。 可以用"*.副檔名"來指定或用 ";"來 區分多個副檔名
        例) *.* or *.jpg;*.gif;
        (管理員不受此限制)'; $lang->cmd_delete_checked_file = '刪除所選項目'; $lang->cmd_move_to_document = '檢視原始主題'; @@ -29,12 +29,16 @@ $lang->msg_not_permitted_download = '您不具備下載的權限。'; $lang->msg_cart_is_null = ' 請選擇要刪除的檔案。'; $lang->msg_checked_file_is_deleted = '已刪除%d個檔案!'; - $lang->msg_exceeds_limit_size = '已超過系統指定的上傳檔案大小!'; + $lang->msg_exceeds_limit_size = '已超過系統指定的檔案大小!'; - $lang->search_target_list = array( + $lang->file_search_target_list = array( 'filename' => '檔案名稱', 'filesize' => '檔案大小 (byte, 以上)', + 'filesize_mega' => '檔案大小 (Mb, 以上)', 'download_count' => '下載次數 (以上)', + 'user_id' => '帳號', + 'user_name' => '姓名', + 'nick_name' => '暱稱', 'regdate' => '登錄日期', 'ipaddress' => 'IP位址', ); diff --git a/modules/file/queries/getFileList.xml b/modules/file/queries/getFileList.xml index fc58f0e21..515f77629 100644 --- a/modules/file/queries/getFileList.xml +++ b/modules/file/queries/getFileList.xml @@ -1,23 +1,28 @@ -
        - + diff --git a/modules/counter/tpl/js/counter.js b/modules/counter/tpl/js/counter.js index b6a4ec9bf..ef8446462 100644 --- a/modules/counter/tpl/js/counter.js +++ b/modules/counter/tpl/js/counter.js @@ -4,7 +4,7 @@ **/ // 이벤트 등록 -xAddEventListener(window,'load',doCallCounter); +jQuery(doCallCounter); // counter 모듈을 호출하는 함수 function doCallCounter() { diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 2b43a0ea0..cd4b3cab5 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -295,7 +295,7 @@ // 댓글 이전 if($oDocument->getCommentCount()) { $oCommentModel = &getModel('comment'); - $comment_output = $oCommentModel->getCommentList($document_srl, true); + $comment_output = $oCommentModel->getCommentList($document_srl, 0, true, 99999999); $comments = $comment_output->data; if(count($comments)) { $oCommentController = &getController('comment'); @@ -338,10 +338,14 @@ $oDocumentController->updateTrackbackCount($obj->document_srl, $success_count); } } + + $copied_srls[$document_srl] = $obj->document_srl; } - $oDB->commit(); - return new Object(); + + $output = new Object(); + $output->add('copied_srls', $copied_srls); + return $output; } /** diff --git a/modules/document/document.admin.view.php b/modules/document/document.admin.view.php index 052873549..71c66e3dd 100644 --- a/modules/document/document.admin.view.php +++ b/modules/document/document.admin.view.php @@ -149,6 +149,11 @@ } } + // 게시판만 뽑자 + foreach($module_list as $module_srl => $module) { + if($module->module != 'board') unset($module_list[$module_srl]); + } + // module_category와 module의 조합 if($module_categories) { foreach($module_list as $module_srl => $module) { diff --git a/modules/document/document.class.php b/modules/document/document.class.php index 33b8b5975..feeb4f7fa 100644 --- a/modules/document/document.class.php +++ b/modules/document/document.class.php @@ -1,6 +1,6 @@ isIndexExists("documents","idx_module_notice")) return true; - + // 2008. 02. 18 게시글에 module_srl + document_srl 복합인덱스 만들기 (manian님 확인) if(!$oDB->isIndexExists("documents","idx_module_document_srl")) return true; @@ -94,10 +94,14 @@ **/ if(!$oDB->isColumnExists("documents","extra_vars")) return true; - // 2008. 04. 23 blamed count 컬럼 추가 - if(!$oDB->isColumnExists("documents", "blamed_count")) return true; + // 2008. 04. 23 blamed count 컬럼 추가 + if(!$oDB->isColumnExists("documents", "blamed_count")) return true; if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) return true; - if(!$oDB->isColumnExists("document_voted_log", "point")) return true; + if(!$oDB->isColumnExists("document_voted_log", "point")) return true; + + + // 2008-12-15 문서 분류에 color를 추가 + if(!$oDB->isColumnExists("document_categories", "color")) return true; return false; } @@ -149,19 +153,19 @@ /** * 2007. 10. 11 : 관리자 페이지의 기본 설정 Action 추가, 게시글 관리 action 추가 **/ - if(!$oModuleModel->getActionForward('dispDocumentAdminConfig')) + if(!$oModuleModel->getActionForward('dispDocumentAdminConfig')) $oModuleController->insertActionForward('document', 'view', 'dispDocumentAdminConfig'); - if(!$oModuleModel->getActionForward('dispDocumentAdminManageDocument')) + if(!$oModuleModel->getActionForward('dispDocumentAdminManageDocument')) $oModuleController->insertActionForward('document', 'view', 'dispDocumentAdminManageDocument'); // 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가 - if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after')) + if(!$oModuleModel->getTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after')) $oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after'); /** * 2007. 10. 18 : 관리자 페이지의 신고된 목록 보기 action 추가 **/ - if(!$oModuleModel->getActionForward('dispDocumentAdminDeclared')) + if(!$oModuleModel->getActionForward('dispDocumentAdminDeclared')) $oModuleController->insertActionForward('document', 'view', 'dispDocumentAdminDeclared'); // 2007. 10. 25 문서 분류에 parent_srl, expand를 추가 @@ -184,7 +188,7 @@ // 2008. 04. 23 blamed count 컬럼 추가 if(!$oDB->isColumnExists("documents", "blamed_count")) { - $oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true); + $oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true); $oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count')); } @@ -192,10 +196,15 @@ $oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count')); } - if(!$oDB->isColumnExists("document_voted_log", "point")) - $oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true); - return new Object(0,'success_updated'); - } + if(!$oDB->isColumnExists("document_voted_log", "point")) + $oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true); + + + if(!$oDB->isColumnExists("document_categories","color")) $oDB->addColumn('document_categories',"color","char",7); + + return new Object(0,'success_updated'); + + } /** * @brief 캐시 파일 재생성 @@ -215,7 +224,7 @@ if($logged_info->is_admin=='Y') return true; $actions = array('procDocumentAdminAddCart','dispDocumentAdminManageDocument','procDocumentAdminManageCheckedDocument'); - if(!in_array($this->act, $actions)) return false; + if(in_array($this->act, $actions)) return true; $oModuleModel = &getModel('module'); if($oModuleModel->isSiteAdmin()) return true; diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index 1f6e38863..d6c2265be 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -879,21 +879,24 @@ $group_srls = $node->group_srls; $mid = $node->mid; $module_srl = $node->module_srl; - + $parent_srl = $node->parent_srl; + $color = $node->color; // node->group_srls값이 있으면 if($group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$group_srls); else $group_check_code = "true"; $attribute = sprintf( - 'mid="%s" module_srl="%d" node_srl="%d" category_srl = "%d" text="" url="%s" expand="%s" document_count="%d" ', + 'mid="%s" module_srl="%d" node_srl="%d" parent_srl="%d" category_srl="%d" text="" url="%s" expand="%s" color="%s" document_count="%d" ', $mid, $module_srl, $category_srl, + $parent_srl, $category_srl, $group_check_code, $title, getUrl('','mid',$node->mid,'category',$category_srl), $expand, + $color, $node->document_count ); @@ -938,7 +941,7 @@ // 속성을 생성한다 ( category_srl_list를 이용해서 선택된 메뉴의 노드에 속하는지를 검사한다. 꽁수지만 빠르고 강력하다고 생각;;) $attribute = sprintf( - '"mid" => "%s", "module_srl" => "%d","node_srl"=>"%s","category_srl"=>"%s","parent_srl"=>"%s","text"=>$_category_title[%d],"selected"=>(in_array(Context::get("category"),array(%s))?1:0),"expand"=>"%s", "list"=>array(%s),"document_count"=>"%d","grant"=>%s?true:false', + '"mid" => "%s", "module_srl" => "%d","node_srl"=>"%s","category_srl"=>"%s","parent_srl"=>"%s","text"=>$_category_title[%d],"selected"=>(in_array(Context::get("category"),array(%s))?1:0),"expand"=>"%s","color"=>"%s", "list"=>array(%s),"document_count"=>"%d","grant"=>%s?true:false', $node->mid, $node->module_srl, $node->category_srl, @@ -947,6 +950,7 @@ $node->category_srl, $selected, $expand, + $node->color, $child_buff, $node->document_count, $group_check_code diff --git a/modules/document/document.model.php b/modules/document/document.model.php index b35f06805..bc1248588 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -122,6 +122,7 @@ } $args->document_srls = $document_srls; $args->list_count = $list_count; + $args->order_type = 'asc'; $output = executeQuery('document.getDocuments', $args); $document_list = $output->data; @@ -330,7 +331,7 @@ $target_args->document_srls = implode(',',$target_srls); $target_args->list_order = $args->sort_index; - $target_args->order = $args->order_type; + $target_args->order_type = $args->order_type; $target_args->list_count = $args->list_count; $target_args->page = 1; $output = executeQueryArray('document.getDocuments', $target_args); @@ -513,7 +514,6 @@ $this->_arrangeCategory($document_category, $menu->list, 0); $this->category_list[$module_srl] = $document_category; } - return $this->category_list[$module_srl]; } @@ -532,6 +532,7 @@ $obj->parent_srl = $val['parent_srl']; $obj->title = $obj->text = $val['text']; $obj->expand = $val['expand']=='Y'?true:false; + $obj->color = $val['color']; $obj->document_count = $val['document_count']; $obj->depth = $depth; $obj->child_count = 0; @@ -655,11 +656,14 @@ function getDocumentCategories() { $module_srl = Context::get('module_srl'); $categories= $this->getCategoryList($module_srl); - if(!$categories) return; + $lang = Context::get('lang'); - $output = ''; - foreach($categories as $category_srl => $category) { - $output .= sprintf("%d,%d,%s\n",$category_srl, $category->depth,$category->title); + // 분류 없음 추가 + $output = "0,0,{$lang->none_category}\n"; + if($categories){ + foreach($categories as $category_srl => $category) { + $output .= sprintf("%d,%d,%s\n",$category_srl, $category->depth,$category->title); + } } $this->add('categories', $output); } diff --git a/modules/document/document.view.php b/modules/document/document.view.php index 951b28fcd..7fb35b2e2 100644 --- a/modules/document/document.view.php +++ b/modules/document/document.view.php @@ -31,9 +31,20 @@ // 권한 체크 if(!$oDocument->isAccessible()) return new Object(-1,'msg_not_permitted'); + + // 설정된 확장 변수를 찾는다. + $oModuleModel = &getModel('module'); + $module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl); + $extra_vars = array(); + foreach($module_info->extra_vars as $key => $extra_var){ + $extra_vars[$key]->name = $extra_var->name; + $extra_vars[$key]->value = $oDocument->getExtraValue($key); + if(is_array($extra_vars[$key]->value)) $extra_vars[$key]->value = join("",$extra_vars[$key]->value); + } + Context::set('extra_vars', $extra_vars); + // 브라우저 타이틀 설정 Context::setBrowserTitle($oDocument->getTitleText()); - Context::set('oDocument', $oDocument); Context::set('layout','none'); diff --git a/modules/document/lang/jp.lang.php b/modules/document/lang/jp.lang.php index 685a00521..97e9a7ec3 100644 --- a/modules/document/lang/jp.lang.php +++ b/modules/document/lang/jp.lang.php @@ -32,7 +32,7 @@ $lang->search_target_list = array( 'title' => 'タイトル', 'content' => '内容', - 'user_id' => 'ユーザID', + 'user_id' => 'ユーザーID', 'member_srl' => '会員番号', 'user_name' => 'ユーザ名', 'nick_name' => 'ニックネーム', diff --git a/modules/document/queries/getChildCategoryMinListOrder.xml b/modules/document/queries/getChildCategoryMinListOrder.xml new file mode 100644 index 000000000..0ae643680 --- /dev/null +++ b/modules/document/queries/getChildCategoryMinListOrder.xml @@ -0,0 +1,12 @@ + + +
        {$lang->receiver} diff --git a/modules/communication/skins/default/skin.xml b/modules/communication/skins/default/skin.xml index 6d9d6b622..f2b125402 100644 --- a/modules/communication/skins/default/skin.xml +++ b/modules/communication/skins/default/skin.xml @@ -2,7 +2,7 @@ 기본 스킨 默认皮肤 - 기본 스킨 + 基本スキン Default Skin Por defecto piel 기본 스킨 @@ -16,8 +16,8 @@ HTML/CSS : Chan-Myung Jeong (http://naradesign.net) - デザイン:ソギジョン (http://blog.naver.com/addcozy) - HTML/CSS:ジョンチャンミョン (http://naradesign.net) + デザイン:Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML/CSS:Chan-Myung Jeong (http://naradesign.net) Design : Ki-Jeong Seo (http://blog.naver.com/addcozy) diff --git a/modules/counter/lang/jp.lang.php b/modules/counter/lang/jp.lang.php index 24dba440a..5c7f5d386 100644 --- a/modules/counter/lang/jp.lang.php +++ b/modules/counter/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief 日本語言語パッケージ(基本的な内容のみ) **/ diff --git a/modules/counter/tpl/index.html b/modules/counter/tpl/index.html index 10d84d2ff..9fa2e8986 100644 --- a/modules/counter/tpl/index.html +++ b/modules/counter/tpl/index.html @@ -1,23 +1,8 @@ - - - - - - - - - - - - - - - - - + +
        + + + + + + + + + diff --git a/modules/document/queries/getDocumentListWithinTag.xml b/modules/document/queries/getDocumentListWithinTag.xml index 2f747c613..d6f0441b3 100644 --- a/modules/document/queries/getDocumentListWithinTag.xml +++ b/modules/document/queries/getDocumentListWithinTag.xml @@ -14,7 +14,7 @@ - + diff --git a/modules/document/queries/getDocuments.xml b/modules/document/queries/getDocuments.xml index e4e73f82f..61e2110a9 100644 --- a/modules/document/queries/getDocuments.xml +++ b/modules/document/queries/getDocuments.xml @@ -9,7 +9,7 @@ - + diff --git a/modules/document/queries/insertCategory.xml b/modules/document/queries/insertCategory.xml index c6271a4c3..5624c1618 100644 --- a/modules/document/queries/insertCategory.xml +++ b/modules/document/queries/insertCategory.xml @@ -5,7 +5,7 @@ - + @@ -13,5 +13,6 @@ + diff --git a/modules/document/queries/updateCategory.xml b/modules/document/queries/updateCategory.xml index 688e30c87..eafea4f3c 100644 --- a/modules/document/queries/updateCategory.xml +++ b/modules/document/queries/updateCategory.xml @@ -9,6 +9,7 @@ + diff --git a/modules/document/tpl/checked_list.html b/modules/document/tpl/checked_list.html index c4fa9bcb3..a851af496 100644 --- a/modules/document/tpl/checked_list.html +++ b/modules/document/tpl/checked_list.html @@ -14,7 +14,7 @@ @@ -63,11 +63,13 @@ diff --git a/modules/document/tpl/declared_list.html b/modules/document/tpl/declared_list.html index 837de2393..a932424f6 100644 --- a/modules/document/tpl/declared_list.html +++ b/modules/document/tpl/declared_list.html @@ -16,7 +16,7 @@ - + diff --git a/modules/document/tpl/document_list.html b/modules/document/tpl/document_list.html index 6e9eb5ef8..420bbef4f 100644 --- a/modules/document/tpl/document_list.html +++ b/modules/document/tpl/document_list.html @@ -16,7 +16,7 @@ - + diff --git a/modules/editor/components/quotation/lang/jp.lang.php b/modules/editor/components/quotation/lang/jp.lang.php index 928fc2110..3500cdafb 100644 --- a/modules/editor/components/quotation/lang/jp.lang.php +++ b/modules/editor/components/quotation/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief ウィジウィグエディター(editor)モジュール > 引用句 (quotation)コンポネント言語パッケージ **/ diff --git a/modules/editor/components/quotation/lang/zh-TW.lang.php b/modules/editor/components/quotation/lang/zh-TW.lang.php index 759c9c9c5..d63428202 100644 --- a/modules/editor/components/quotation/lang/zh-TW.lang.php +++ b/modules/editor/components/quotation/lang/zh-TW.lang.php @@ -8,8 +8,8 @@ $lang->quotation_use_folder = "使用折疊功能"; $lang->quotation_opener = "開啟按鈕名稱"; $lang->quotation_closer = "關閉按鈕名稱"; - $lang->quotation_padding = "內測邊距"; - $lang->quotation_margin = "外側邊距"; + $lang->quotation_padding = "內距"; + $lang->quotation_margin = "邊距"; $lang->quotation_border_color = "邊框顏色"; $lang->quotation_border_thickness = "邊框粗細"; @@ -26,7 +26,7 @@ $lang->quotation_border_style_list = array( "無", "實線", - "點線", + "虛線", "左側實線", "右側實線", ); diff --git a/modules/editor/components/url_link/lang/zh-TW.lang.php b/modules/editor/components/url_link/lang/zh-TW.lang.php index 6a304b968..83bfc642a 100644 --- a/modules/editor/components/url_link/lang/zh-TW.lang.php +++ b/modules/editor/components/url_link/lang/zh-TW.lang.php @@ -6,7 +6,7 @@ **/ $lang->urllink_title = "文字"; - $lang->urllink_url = "URL"; + $lang->urllink_url = "網址"; $lang->urllink_open_window = "新視窗"; $lang->urllink_bold = "粗體"; diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index 5dc1efd1a..4467791ca 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -156,14 +156,8 @@ $editor_config->comment_editor_height = (int)Context::get('comment_editor_height'); - $editor_config->enable_height_resizable = Context::get('enable_height_resizable'); - - $editor_config->enable_comment_height_resizable = Context::get('enable_comment_height_resizable'); - $editor_config->enable_autosave = Context::get('enable_autosave'); - if($editor_config->enable_height_resizable != 'Y') $editor_config->enable_height_resizable = 'N'; - if($editor_config->enable_comment_height_resizable != 'Y') $editor_config->enable_comment_height_resizable = 'N'; if($editor_config->enable_autosave != 'Y') $editor_config->enable_autosave = 'N'; $oModuleController = &getController('module'); diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index 9a480e85d..412e720a1 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -44,8 +44,6 @@ if(!$editor_config->editor_height) $editor_config->editor_height = 500; if(!$editor_config->comment_editor_height) $editor_config->comment_editor_height = 120; - if($editor_config->enable_height_resizable!='N') $editor_config->enable_height_resizable= "Y"; - if($editor_config->enable_comment_height_resizable!='Y') $editor_config->enable_comment_height_resizable= "N"; if($editor_config->enable_autosave!='N') $editor_config->enable_autosave = "Y"; if(!$editor_config->editor_skin) $editor_config->editor_skin = 'default'; @@ -83,10 +81,6 @@ if($option->disable_html) $html_mode = false; else $html_mode = true; - // 크기 조절 옵션 설정 - if(!$option->resizable) $resizable = false; - else $resizable = true; - // 높이 설정 if(!$option->height) $editor_height = 400; else $editor_height = $option->height; @@ -178,11 +172,6 @@ **/ Context::set('html_mode', $html_mode); - /** - * resizable 가능한지 변수 설정 - **/ - Context::set('enable_resizable', $resizable); - /** * 에디터 세로 크기 설정 **/ @@ -228,7 +217,6 @@ $config->enable_component_grant = $editor_config->enable_component_grant; $config->enable_html_grant = $editor_config->enable_html_grant; $config->editor_height = $editor_config->editor_height; - $config->enable_height_resizable = $editor_config->enable_height_resizable; $config->enable_autosave = $editor_config->enable_autosave; } else { $config->editor_skin = $editor_config->comment_editor_skin; @@ -238,7 +226,6 @@ $config->enable_component_grant = $editor_config->enable_comment_component_grant; $config->enable_html_grant = $editor_config->enable_comment_html_grant; $config->editor_height = $editor_config->comment_editor_height; - $config->enable_height_resizable = $editor_config->enable_comment_height_resizable; $config->enable_autosave = 'N'; } @@ -304,9 +291,6 @@ // 높이 설정 $option->height = $config->editor_height; - // 높이 조절 옵션 설정 - $option->resizable = $config->enable_height_resizable=='Y'?true:false; - // 자동 저장 유무 옵션 설정 $option->enable_autosave = $config->enable_autosave=='Y'?true:false; diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 71bb0af5d..2c82da296 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -54,8 +54,7 @@ $lang->edit->fontlist = array( 'MS Pゴシック', 'MS P明朝', - 'Osaka-等幅', - 'ヒラギノ角ゴ Pro W3', + 'MS UI Gothic', 'Arial', 'Arial Black', 'Tahoma', @@ -113,9 +112,12 @@ $lang->about_dblclick_in_editor = '背景、文字、イメージ、引用文の上にカーソルを合わせ、ダブルクリックすると詳細設定できるコンポーネントを表示します。'; - $lang->edit->rich_editor = '스타일 편집기'; - $lang->edit->html_editor = 'HTML 편집기'; - $lang->edit->extension ='확장 컴포넌트'; - $lang->edit->help = '도움말'; - $lang->edit->help_command = '단축키 안내'; + $lang->edit->rich_editor = 'ウイジウイグ編集'; + $lang->edit->html_editor = 'HTMLタグ編集'; + $lang->edit->extension ='拡張コンポーネント'; + $lang->edit->help = 'ヘルプ'; + $lang->edit->help_command = 'ショートカット‐キーの説明'; + + + ?> diff --git a/modules/editor/lang/zh-TW.lang.php b/modules/editor/lang/zh-TW.lang.php index 238d8ca1f..94c98f0dd 100644 --- a/modules/editor/lang/zh-TW.lang.php +++ b/modules/editor/lang/zh-TW.lang.php @@ -109,7 +109,7 @@ $lang->edit->icon_align_middle = '置中'; $lang->edit->icon_align_right = '靠右'; - $lang->about_dblclick_in_editor = '雙擊背景, 文字, 圖片, 引用,即可對其相關組件進行詳細設置。'; + $lang->about_dblclick_in_editor = '對背景, 文字, 圖片, 引用等組件按兩下,即可對其相關組件進行詳細設置。'; $lang->edit->rich_editor = '所見即所得'; diff --git a/modules/editor/skins/default/css/editor.css b/modules/editor/skins/default/css/editor.css index 614e8afdb..521aa716a 100644 --- a/modules/editor/skins/default/css/editor.css +++ b/modules/editor/skins/default/css/editor.css @@ -222,7 +222,7 @@ a.skipToolBox:active span{ width:auto; height:auto; padding:3px 15px; font-weigh /* Editor Resize Bar */ .xeEditor .textAreaDragIndicator{ border-top:1px solid; border-bottom:1px solid; clear:both; margin-bottom:5px;} .xeEditor .textAreaDragIndicator button{ width:100%; height:9px; border:none; cursor:n-resize; background-repeat:no-repeat; background-position:center center; } -.xeEditor .mask{ position:relative; width:100%;height:500px;margin-top:-500px;bottom:0; display:none; } +.xeEditor .mask{ position:absolute; width:100%;height:500px;margin-top:-500px;bottom:0; display:none; } /* File Uploader */ .xeEditor .fileUploader{ clear:both; position:relative; padding-top:5px; *zoom:1; *margin-bottom:5px;} diff --git a/modules/editor/skins/default/editor.html b/modules/editor/skins/default/editor.html index a94713a68..46d18c900 100644 --- a/modules/editor/skins/default/editor.html +++ b/modules/editor/skins/default/editor.html @@ -145,6 +145,8 @@ + +
        @@ -167,7 +169,7 @@ - + @@ -186,9 +188,7 @@
        -
        - @@ -238,8 +238,6 @@ editorStart("{$editor_sequence}", "{$editor_primary_key_name}", "{$editor_content_key_name}", '{$editor_height}' , '#000'); - - //]]> diff --git a/modules/editor/skins/msword2007/css/editor.css b/modules/editor/skins/msword2007/css/editor.css deleted file mode 100644 index d23101e75..000000000 --- a/modules/editor/skins/msword2007/css/editor.css +++ /dev/null @@ -1,58 +0,0 @@ -@charset "utf-8"; - -.xeEditor { } -.xeEditor .optionABC, -.xeEditor .option2, -.xeEditor .optionDE { clear:both; width:100%; border-bottom:1px solid #c2c2c2; overflow:hidden; background:#ffffff url(../images/bgBoardEditorOption.png) no-repeat -3px bottom;} -.xeEditor .optionABC .selectGroup { white-space:nowrap; display:block; height:22px; margin:0 .5em 0 0; padding-left:1em; float:left;} -.xeEditor .optionABC .buttonGroup, -.xeEditor .option2 .buttonGroup { white-space:nowrap; position:relative; display:block; margin:0 .5em 0 0; float:left; height:22px; overflow:hidden; padding-left:2px;} -.xeEditor .optionABC .buttonGroup img, -.xeEditor .option2 .buttonGroup img { float:left; display:block; margin-left:-1px; cursor:pointer;} -.xeEditor .optionA, -.xeEditor .optionB, -.xeEditor .optionC, -.xeEditor .optionE, -.xeEditor .optionF { float:left; background:#ffffff url(../images/bgBoardEditorOption.png) no-repeat left bottom; padding:.5em 0 .5em .7em; overflow:hidden;} -.xeEditor .optionA *, -.xeEditor .optionB *, -.xeEditor .optionC *, -.xeEditor .optionF * { vertical-align:middle;} -.xeEditor .optionA { background-position:-3px bottom; padding-left:0;} -.xeEditor .optionA select option { font-size:.9em; } - -.xeEditor .optionDE .buttonGroup { white-space:nowrap; position:relative; display:block; float:left; height:21px; overflow:hidden; padding-left:2px;} - -.xeEditor .optionDE img { float:left; display:block; margin-right:.5em; cursor:pointer;} -.xeEditor .optionD { padding:.5em 0 .5em .8em; overflow:hidden; float:left; border-right:1px solid #e0e0e0;} - -.xeEditor .editorInfo { background:#fbfbfb; padding:.5em; border:1px solid #e1e1dd; color:#999999; position:relative; margin:5px 10px 0 10px;} -.xeEditor .close { cursor:pointer; position:absolute; top:3px; right:3px; _top:3px; _right:25px;} -.xeEditor .editor_iframe_box { background:#ffffff; clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:0; margin:0 10px 0 10px; } -.xeEditor .editor_iframe_textarea { background:#ffffff; clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:0; margin:0 10px 0 10px; width:100%; font-size:1em; display:none;} - -.xeEditor .textAreaDragIndicator { text-align:center; background:url(../images/lineTextAreaDrag.gif) repeat-x left center; padding:5px 0 5px 0; } -.xeEditor .textAreaDragIndicatorBar { background:url(../images/buttonTextAreaDrag.gif) no-repeat center; cursor:move;height:14px;} - -.xeEditor .editor_info { clear:both; padding:5px 10px 5px 10px; overflow:hidden;} -.xeEditor .editor_info .editor_option { float:left; color:#888888; } -.xeEditor .editor_info .editor_autosaved_message { color:#888888; float:right; display:none;} - - -.xeEditor .fileAttach { border:none; table-layout:fixed; margin:10px 10px 0 10px; } - -.xeEditor .fileAttach .preview { padding:5px; border:1px solid #e1e1dd; width:100px; height:100px; margin-right:10px;} -.xeEditor .fileAttach .preview img { width:100px; height:100px; } - -.xeEditor .fileAttach .fileListArea .fileList { background:url(../images/select_dot.gif); overflow:auto; width:100%; height:auto; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; margin-bottom:10px; font-size:11px;} -.xeEditor .fileAttach .fileListArea .fileList option { line-height:100%; padding-left:.5em;} -.xeEditor .fileAttach .fileUploadControl { float:left; } -.xeEditor .fileAttach .file_attach_info { color:#AAAAAA; font-size:.9em; _font-size:8pt; text-align:right;} -*:first-child+html .xeEditor .fileAttach .file_attach_info { font-size:8pt; } - -.xeEditor .fileAttach .fileUploadControl .uploaderButton { display:block; cursor:pointer; background:url(../images/buttonTypeBCenter.gif) repeat-x left center; line-height:100%; overflow:visible; color:#3f4040; margin:0 1px; font-size:.9em; white-space:nowrap;} -.xeEditor .fileAttach .fileUploadControl .uploaderButton:hover { text-decoration:none;} -.xeEditor .fileAttach .fileUploadControl .uploaderButton img { vertical-align:middle;} -.xeEditor .fileAttach .fileUploadControl .uploaderButton .leftCap { width:2px; height:21px; background:url(../images/buttonTypeBLeft.gif) no-repeat; margin:0 .3em 0 0; position:relative; left:-1px;} -.xeEditor .fileAttach .fileUploadControl .uploaderButton .rightCap { width:2px; height:21px; background:url(../images/buttonTypeBRight.gif) no-repeat; margin:0 -1px 0 .4em;} -.xeEditor .fileAttach .fileUploadControl .uploaderButton .icon { margin:0 .2em;} diff --git a/modules/editor/skins/msword2007/editor.html b/modules/editor/skins/msword2007/editor.html deleted file mode 100644 index 42913d22a..000000000 --- a/modules/editor/skins/msword2007/editor.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - - - - - - - - -
        - -
        - - - -
        -
        -
        - - - - - -
        - -
        - {$lang->edit->help_bold} - {$lang->edit->help_italic} - {$lang->edit->help_underline} - {$lang->edit->help_strike} - - {$lang->edit->help_sub} - {$lang->edit->help_sup} - - {$lang->edit->help_fontcolor} - {$lang->edit->help_fontbgcolor} - {$lang->edit->help_removeformat} -
        -
        - -
        -
        - {$lang->edit->help_align_left} - {$lang->edit->help_align_center} - {$lang->edit->help_align_right} - {$lang->edit->help_align_full} -
        - - -
        - {$lang->edit->help_remove_indent} - {$lang->edit->help_add_indent} -
        - -
        - {$lang->edit->help_list_bullet} - {$lang->edit->help_list_number} -
        -
        -
        - - - - -
        -
        -
        - - - {$component->title} - - -
        -
        -
        - -
        - - - -
        - {$lang->about_dblclick_in_editor} - - close -
        - - - - -
        - -
        - -
        - - -
         
        - -
        - - - -
        - - - - -
        - - - - - - - - -
        - {$lang->cmd_select} + {$lang->cmd_select}
        • {$document->getNickName()}
          {$document->getTitle()}
        • @@ -29,7 +29,7 @@
        {$lang->move_target_module}
        - @@ -46,7 +46,7 @@
        {$lang->category}
        -
        {$lang->no}
        {$lang->title}
        {$lang->user_name}
        {$lang->cmd_declare}
        {$lang->no}
        + + +
        - - - - - - -
        preview
        - -
        - -
        -
        - - {$lang->edit->delete_selected} - {$lang->edit->link_file} -
        -
        {$upload_status}
        -
        - -
        - - - - diff --git a/modules/editor/skins/msword2007/images/bgBoardEditorOption.png b/modules/editor/skins/msword2007/images/bgBoardEditorOption.png deleted file mode 100644 index c17e3a74c..000000000 Binary files a/modules/editor/skins/msword2007/images/bgBoardEditorOption.png and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/blank.gif b/modules/editor/skins/msword2007/images/blank.gif deleted file mode 100644 index 35d42e808..000000000 Binary files a/modules/editor/skins/msword2007/images/blank.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/buttonClose.gif b/modules/editor/skins/msword2007/images/buttonClose.gif deleted file mode 100644 index 12cd8aaa9..000000000 Binary files a/modules/editor/skins/msword2007/images/buttonClose.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/buttonTextAreaDrag.gif b/modules/editor/skins/msword2007/images/buttonTextAreaDrag.gif deleted file mode 100644 index 853387176..000000000 Binary files a/modules/editor/skins/msword2007/images/buttonTextAreaDrag.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/buttonTypeBCenter.gif b/modules/editor/skins/msword2007/images/buttonTypeBCenter.gif deleted file mode 100644 index c501463ef..000000000 Binary files a/modules/editor/skins/msword2007/images/buttonTypeBCenter.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/buttonTypeBLeft.gif b/modules/editor/skins/msword2007/images/buttonTypeBLeft.gif deleted file mode 100644 index 0b919a5c0..000000000 Binary files a/modules/editor/skins/msword2007/images/buttonTypeBLeft.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/buttonTypeBRight.gif b/modules/editor/skins/msword2007/images/buttonTypeBRight.gif deleted file mode 100644 index d94c9a21f..000000000 Binary files a/modules/editor/skins/msword2007/images/buttonTypeBRight.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_ac.gif b/modules/editor/skins/msword2007/images/editor_btn_ac.gif deleted file mode 100644 index 889bac6d1..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_ac.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_aj.gif b/modules/editor/skins/msword2007/images/editor_btn_aj.gif deleted file mode 100644 index a660778ff..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_aj.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_al.gif b/modules/editor/skins/msword2007/images/editor_btn_al.gif deleted file mode 100644 index 4e5f2541c..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_al.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_ar.gif b/modules/editor/skins/msword2007/images/editor_btn_ar.gif deleted file mode 100644 index 8a9a7dad5..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_ar.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_b.gif b/modules/editor/skins/msword2007/images/editor_btn_b.gif deleted file mode 100644 index 4ef110d0e..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_b.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_bg.gif b/modules/editor/skins/msword2007/images/editor_btn_bg.gif deleted file mode 100644 index 5ef293348..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_bg.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_c.gif b/modules/editor/skins/msword2007/images/editor_btn_c.gif deleted file mode 100644 index 4d69b17c8..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_c.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_i.gif b/modules/editor/skins/msword2007/images/editor_btn_i.gif deleted file mode 100644 index ef993323a..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_i.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_id.gif b/modules/editor/skins/msword2007/images/editor_btn_id.gif deleted file mode 100644 index a45cc3b23..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_id.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_od.gif b/modules/editor/skins/msword2007/images/editor_btn_od.gif deleted file mode 100644 index 544757c9a..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_od.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_ol.gif b/modules/editor/skins/msword2007/images/editor_btn_ol.gif deleted file mode 100644 index b6a9f48c5..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_ol.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_rf.gif b/modules/editor/skins/msword2007/images/editor_btn_rf.gif deleted file mode 100644 index c14768871..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_rf.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_s.gif b/modules/editor/skins/msword2007/images/editor_btn_s.gif deleted file mode 100644 index 18bc6358d..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_s.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_sub.gif b/modules/editor/skins/msword2007/images/editor_btn_sub.gif deleted file mode 100644 index 3af30c982..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_sub.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_sup.gif b/modules/editor/skins/msword2007/images/editor_btn_sup.gif deleted file mode 100644 index a1547ac48..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_sup.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_u.gif b/modules/editor/skins/msword2007/images/editor_btn_u.gif deleted file mode 100644 index cd5e11f67..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_u.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/editor_btn_ul.gif b/modules/editor/skins/msword2007/images/editor_btn_ul.gif deleted file mode 100644 index 5e136ffc4..000000000 Binary files a/modules/editor/skins/msword2007/images/editor_btn_ul.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/lineTextAreaDrag.gif b/modules/editor/skins/msword2007/images/lineTextAreaDrag.gif deleted file mode 100644 index b8116ecd7..000000000 Binary files a/modules/editor/skins/msword2007/images/lineTextAreaDrag.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/images/select_dot.gif b/modules/editor/skins/msword2007/images/select_dot.gif deleted file mode 100644 index ceda644e3..000000000 Binary files a/modules/editor/skins/msword2007/images/select_dot.gif and /dev/null differ diff --git a/modules/editor/skins/msword2007/js/editor.js b/modules/editor/skins/msword2007/js/editor.js deleted file mode 100644 index 128b4a9b1..000000000 --- a/modules/editor/skins/msword2007/js/editor.js +++ /dev/null @@ -1,10 +0,0 @@ -// Editor Option Button -function eOptionOver2(obj) { - obj.style.marginTop='-22px'; - obj.style.zIndex='99'; -} - -function eOptionClick2(obj) { - obj.style.marginTop='-44px'; - obj.style.zIndex='99'; -} diff --git a/modules/editor/skins/msword2007/skin.xml b/modules/editor/skins/msword2007/skin.xml deleted file mode 100644 index 26be0224a..000000000 --- a/modules/editor/skins/msword2007/skin.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - MS Word 2007 테마 - MS Word 2007 テーマ - MS Word 2007样式皮肤 - MS Word 2007樣式面板 - MS Word 2007 테마입니다. - MS Word 2007 テーマです。 - MS Word 2007样式皮肤。 - MS Word 2007樣式。 - 0.1 - 2007-09-10 - - - Simulz - Simulz - Simulz - Simulz - - diff --git a/modules/editor/skins/xquared/editor.html b/modules/editor/skins/xquared/editor.html index 5aa6e3ef2..89615bf8d 100644 --- a/modules/editor/skins/xquared/editor.html +++ b/modules/editor/skins/xquared/editor.html @@ -44,9 +44,7 @@ -
        - @@ -95,8 +93,13 @@ diff --git a/modules/editor/skins/xquared/javascripts/xe_interface.js b/modules/editor/skins/xquared/javascripts/xe_interface.js index d19d909e7..3787bb7a3 100644 --- a/modules/editor/skins/xquared/javascripts/xe_interface.js +++ b/modules/editor/skins/xquared/javascripts/xe_interface.js @@ -30,8 +30,7 @@ function editorGetContent_xq(editor_sequence) { function editorStart_xq(editor, element, editor_sequence, content_key, editor_height, primary_key) { editor = new xq.Editor(element); - //editor.config.imagePathForDefaultToobar = request_uri+editor_path.substring(2)+'images/toolbar/'; - //editor.config.imagePathForContent = request_uri+editor_path.substring(2)+'images/content/'; + editor.config.whitelist.img = editor.config.whitelist.img.concat('editor_component', 'poll_srl','multimedia_src', 'auto_start', 'link_url', 'editor_sequence', 'use_folder', 'folder_opener', 'folder_closer', 'color', 'border_thickness', 'border_color', 'bg_color', 'border_style', 'margin', 'padding', 'bold', 'nx', 'ny', 'gx', 'gy', 'address', 'reg_sinpic', 'language','align'); editorRelKeys[editor_sequence] = new Array(); editorRelKeys[editor_sequence]['editor'] = editor; @@ -62,6 +61,10 @@ function editorStart_xq(editor, element, editor_sequence, content_key, editor_he editor.setStaticContent(fo_obj[content_key].value); editor.config.imagePathForDefaultToolbar = request_uri+editor_path+'images/toolbar/'; editor.config.contentCssList = [request_uri+editor_path+"/stylesheets/xq_contents.css"]; + return editor; +} + +function setEditMode(editor, editor_height, editor_sequence) { editor.setEditMode('wysiwyg'); editor.getFrame().style.width = "100%"; editor.getFrame().parentNode.style.height = editor_height; @@ -73,7 +76,8 @@ function editorStart_xq(editor, element, editor_sequence, content_key, editor_he xAddEventListener(editor.getFrame().contentWindow.document,'dblclick',editorSearchComponent); } catch(e) { } - + + var fo_obj = editorGetForm_xq(xq.$("xqEditor_"+editor_sequence)); if(typeof(fo_obj._saved_doc_title)!="undefined" ) editorEnableAutoSave(fo_obj, editor_sequence); } diff --git a/modules/editor/tpl/editor_module_config.html b/modules/editor/tpl/editor_module_config.html index 5df56ab43..8ec54ec8a 100644 --- a/modules/editor/tpl/editor_module_config.html +++ b/modules/editor/tpl/editor_module_config.html @@ -14,7 +14,7 @@
        {$lang->editor_skin}

        {$lang->about_editor_skin}

        {$lang->enable_html_grant}
        enable_html_grant))-->checked="checked"/>
        + + + +
        enable_comment_html_grant))-->checked="checked"/>
        + + + + +

        {$lang->about_enable_html_grant}

        {$lang->upload_file_grant}
        upload_file_grant))-->checked="checked"/>
        + + + +
        comment_upload_file_grant))-->checked="checked"/>
        + + + +

        {$lang->about_upload_file_grant}

        {$lang->enable_default_component_grant}
        enable_default_component_grant))-->checked="checked"/>
        + +
        enable_comment_default_component_grant))-->checked="checked"/>
        + + + +

        {$lang->about_default_component_grant}

        {$lang->enable_component_grant}
        enable_component_grant))-->checked="checked"/>
        + + + +
        enable_comment_component_grant))-->checked="checked"/>
        + + + +

        {$lang->about_component_grant}

        {$lang->editor_height}
        px @@ -120,26 +151,14 @@

        {$lang->about_editor_height}

        {$lang->height_resizable}
        - enable_height_resizable=='Y')-->checked="checked"/> - - enable_comment_height_resizable=='Y')-->checked="checked"/> -

        {$lang->about_editor_height_resizable}

        {$lang->enable_autosave}
        enable_autosave=='Y')-->checked="checked"/>

        {$lang->about_enable_autosave}

        {$lang->module} - +

        {$lang->about_component_mid}

        - + {$modules->title} diff --git a/modules/editor/tpl/view_component.html b/modules/editor/tpl/view_component.html index d4fe3cf71..2fa04cc03 100644 --- a/modules/editor/tpl/view_component.html +++ b/modules/editor/tpl/view_component.html @@ -20,7 +20,7 @@
        {$lang->regdate}
        {zdate($component->date, 'Y-m-d')}{zdate(str_replace('-',"",$component->date), 'Y-m-d')}
        {$lang->component_license}
        +
        +
        - + - - + + + - - - - - + + + + + + + + - + diff --git a/modules/file/tpl/file_list.html b/modules/file/tpl/file_list.html index e68563fa5..0bc5ac8a5 100644 --- a/modules/file/tpl/file_list.html +++ b/modules/file/tpl/file_list.html @@ -1,5 +1,4 @@ - @@ -15,7 +14,7 @@ - + @@ -112,7 +111,7 @@ diff --git a/modules/file/tpl/js/file_admin.js b/modules/file/tpl/js/file_admin.js index 92eff1785..e69de29bb 100644 --- a/modules/file/tpl/js/file_admin.js +++ b/modules/file/tpl/js/file_admin.js @@ -1,6 +0,0 @@ -function doCheckAll() { - var fo_obj = xGetElementById('fo_list'); - for(var i=0;iHomepage 站点 網站 + ホームページ XE의 여러 모듈들을 조합하여 홈페이지를 생성하기 가장 좋은 관리자 기능을 제공합니다 Homepage package provides convenient adminitration features to create an to manage homepages by combining several modules of XE. 组合XE各模块,快速新建站点。 網站模組結合XE的所有模組可快速又簡單地建立網站。 + 各種XEモジュールを組み合わせてホームページを作成する便利な機能です。 0.1 2008-11-04 package @@ -17,5 +19,6 @@ zero zero zero + zero diff --git a/modules/homepage/homepage.controller.php b/modules/homepage/homepage.controller.php index 81b8624c2..149f7757a 100644 --- a/modules/homepage/homepage.controller.php +++ b/modules/homepage/homepage.controller.php @@ -237,47 +237,8 @@ $target_srl = Context::get('target_srl'); if(!$menu_srl || !$mode || !$target_srl) return new Object(-1,'msg_invalid_request'); - - // 원본 메뉴들을 구함 - $oMenuAdminModel = &getAdminModel('menu'); $oMenuAdminController = &getAdminController('menu'); - - $target_item = $oMenuAdminModel->getMenuItemInfo($target_srl); - if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request'); - - // 위치 이동 (순서 조절) - if($mode == 'move') { - $args->parent_srl = $parent_srl; - $args->menu_srl = $menu_srl; - - if($source_srl) { - $source_item = $oMenuAdminModel->getMenuItemInfo($source_srl); - if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request'); - $args->listorder = $source_item->listorder-1; - } else { - $output = executeQuery('menu.getMaxListorder', $args); - if(!$output->toBool()) return $output; - $args->listorder = (int)$output->data->listorder; - if(!$args->listorder) $args->listorder= 0; - } - $args->parent_srl = $parent_srl; - $output = executeQuery('menu.updateMenuItemListorder', $args); - if(!$output->toBool()) return $output; - - $args->parent_srl = $parent_srl; - $args->menu_item_srl = $target_srl; - $output = executeQuery('menu.updateMenuItemNode', $args); - if(!$output->toBool()) return $output; - // 자식으로 추가 - } elseif($mode == 'insert') { - $args->menu_item_srl = $target_srl; - $args->parent_srl = $parent_srl; - $args->listorder = -1*getNextSequence(); - $output = executeQuery('menu.updateMenuItemNode', $args); - if(!$output->toBool()) return $output; - } - - $xml_file = $oMenuAdminController->makeXmlFile($menu_srl); + $xml_file = $oMenuAdminController->moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode); $this->add('xml_file', $xml_file); } diff --git a/modules/homepage/homepage.view.php b/modules/homepage/homepage.view.php index 53dc93764..670c1c80b 100644 --- a/modules/homepage/homepage.view.php +++ b/modules/homepage/homepage.view.php @@ -91,6 +91,7 @@ $this->setTemplateFile('menu_manage'); } + function dispHomepageBottomMenu() { // 메뉴 정보 가져오기 $menu_srl = $this->homepage_info->second_menu_srl; diff --git a/modules/homepage/lang/jp.lang.php b/modules/homepage/lang/jp.lang.php new file mode 100644 index 000000000..844af4148 --- /dev/null +++ b/modules/homepage/lang/jp.lang.php @@ -0,0 +1,87 @@ +homepage = "ホームページ"; + $lang->homepage_title = "ホームページ名"; + $lang->domain = "ドメイン"; + $lang->module_type = "タイプ"; + $lang->board = "掲示板"; + $lang->page = "ページ"; + $lang->url = "URL"; + $lang->module_id = "モジュール ID"; + $lang->item_group_grant = "メニューを見せるグループ"; + $lang->homepage_admin = "ホームページ管理者"; + $lang->do_selected_member = "選択した会員を : "; + + $lang->homepage_default_menus = array( + 'first' => array( + 'home' => 'ホーム', + 'notice' => 'お知らせ', + 'download' => 'ダウンロード', + 'gallery' => 'ギャラリー', + 'community' => 'コミュニティー', + 'freeboard' => '自由掲示板', + 'humor' => 'ユーモア掲示板', + 'qa' => 'Q and A', + ), + 'second' => array( + 'profile' => 'ホームページ紹介', + 'rule' => '運営規則', + ), + 'menu' => array( + 'first' => '基本メニュー', + 'second' => 'フッターメニュー', + ), + 'widget' => array( + 'download_rank' => 'ダウンロードランキング', + ), + ); + + $lang->cmd_homepage_menus = array( + "dispHomepageManage" => "ホームページ設定", + "dispHomepageMemberGroupManage" => "会員のグループ管理", + "dispHomepageMemberManage" => "会員リスト", + "dispHomepageTopMenu" => "基本メニュー 管理", + "dispHomepageBottomMenu" => "フッターメニュー 管理", + "dispHomepageMidSetup" => "モジュール詳細設定", + ); + $lang->cmd_homepage_registration = "ホームページ作成"; + $lang->cmd_homepage_setup = "ホームページ設定"; + $lang->cmd_homepage_delete = "ホームページ削除"; + $lang->cmd_go_home = "ホームへ移動"; + $lang->cmd_go_homepage_admin = 'ホームページ全体管理'; + $lang->cmd_change_layout = "変更"; + $lang->cmd_change_layout = "変更"; + $lang->cmd_select_index = "初期ページ選択"; + $lang->cmd_add_new_menu = "新しいメニュー追加"; + + $lang->about_homepage_act = array( + "dispHomepageManage" => "ホームページのレイアウトを変更します。", + "dispHomepageMemberGroupManage" => "ホームページ内のグループを管理します。", + "dispHomepageMemberManage" => "ホームページに登録されている会員を管理します。", + "dispHomepageTopMenu" => "ホームページのヘッダー(header、上段)や左側などのメニューを管理します。", + "dispHomepageBottomMenu" => "ホームページのフッター(footer、下段)のメニューを管理します。", + "dispHomepageMidSetup" => "ホームページの掲示板、ページなどのモジュールを管理します。", + ); + $lang->about_homepage = "ホームページサービス管理者は複数のホームページ作成、および各ホームページを簡単に管理が出来ます。"; + $lang->about_homepage_title = "ホームページ名は管理のためのみ使われ、実サービスには表示されません。"; + $lang->about_domain = "複数のホームページを作成するためには、専用のドメインが必要です。オリジナルドメインやサブ ドメインがあれば結構です。
        また、 XEインストールパスも一緒に記入してください。
        ex) www.zeroboard.com/zbxe"; + $lang->about_menu_names = "ホームページに使うメニュー名を言語別に指定出来ます。
        一個だけ記入した場合、他言語に一括適用されます。"; + $lang->about_menu_option = "メニューを選択するとき新しいウィンドウズに開けるかを選択します。
        拡張メニューはレイアウトによって動作します。"; + $lang->about_group_grant = "選択グループのみ、メニューが見えます。
        全てを解除すると非会員にも見えます。"; + $lang->about_module_type = "掲示板、ページはモジュールを生成し、URLはリンクの情報のみ要ります。
        一度作成した後、変更は出来ません。"; + $lang->about_browser_title = "メニューにアクセスした時、ブラウザーのタイトルです。"; + $lang->about_module_id = "掲示板、ページなどにリンクさせるアドレスです。
        例) http://ドメイン/[モジュールID], http://ドメイン/?mid=[モジュールID]"; + $lang->about_menu_item_url = "タイプをURLにした場合、リンク先を入れて下さい。
        http://は省いて入力して下さい。"; + $lang->about_menu_image_button = "テキストのメニュー名の代わりに、イメージのメニューを使えます。"; + $lang->about_homepage_delete = "ホームページを削除すると、リンクされている全てのモジュール(掲示板、ページなど)とそれに付随する書き込みが削除されます。
        ご注意ください。"; + $lang->about_homepage_admin = "ホームページ管理者の設定が出来ます。
        ホームページ管理者は 「 http://ドメイン/?module=homepage 」 として管理者ページにアクセスが出来ます。
        存在しない会員は管理者に登録できません。"; + + $lang->confirm_change_layout = "レイアウトの変更時、一部のレイアウト情報が失われる可能性があります。 変更しますか?"; + $lang->confirm_delete_menu_item = "メニュー削除時、リンクされている掲示板やページモジュールも一緒に削除されます。削除しますか?"; + $lang->msg_already_registed_domain = "既に登録されたドメインです。違うドメインを利用して下さい。"; +?> diff --git a/modules/homepage/lang/zh-TW.lang.php b/modules/homepage/lang/zh-TW.lang.php index 1c1dff6e4..804ba34cd 100644 --- a/modules/homepage/lang/zh-TW.lang.php +++ b/modules/homepage/lang/zh-TW.lang.php @@ -11,7 +11,7 @@ $lang->module_type = "目標"; $lang->board = "討論板"; $lang->page = "頁面"; - $lang->url = "URL"; + $lang->url = "網址"; $lang->module_id = "模組 ID"; $lang->item_group_grant = "顯示群組"; $lang->homepage_admin = "網站管理者"; @@ -68,7 +68,7 @@ ); $lang->about_homepage = "網站模組可快速建立網站,且容易進行設定。"; $lang->about_homepage_title = "只有在管理時才看的到此標題。"; - $lang->about_domain = "要建立網站必須要有個專屬域名。
        頂級域名或次級域名都可以。輸入時,請將 XE安裝路徑也一起輸入。
        例) www.zeroboard.com/zbxe"; + $lang->about_domain = "要建立網站必須要有個專屬域名。
        頂級域名或次級域名都可以。輸入時,請將XE安裝路徑也一起輸入。
        例) www.zeroboard.com/zbxe"; $lang->about_menu_names = "可指定語言。
        如果只輸入其中一項,其他語言將會顯示一樣。"; $lang->about_menu_option = "可設定案選單時,是否要以新視窗開啟。
        選展開的話,是隨版面。"; @@ -78,7 +78,7 @@ $lang->about_module_id = "連結討論板,頁面等模組時,所要輸入的格式。
        例) http://域名/[模組 ID], http://域名/?mid=[模組 ID]"; $lang->about_menu_item_url = "目標是 URL時,在此輸入網址。
        請勿輸入 http://"; $lang->about_menu_image_button = "可用圖片代替選單名稱"; - $lang->about_homepage_delete = "刪除網站:即刪除所有相關的模組(討論板,頁面等)以及相關文章。
        請慎重使用。"; + $lang->about_homepage_delete = "刪除網站:即刪除所有相關的模組(討論板,頁面等)以及相關文章。請慎重使用。"; $lang->about_homepage_admin = "可以建立網站管理員。
        管理員登入網址是 http://域名/?module=homepage。只能在現有的會員中指定管理員。"; $lang->confirm_change_layout = "變換版面可能會使原來的資料無法顯示。確定要變換嗎?"; diff --git a/modules/homepage/skins/xe_official/board_grant_list.html b/modules/homepage/skins/xe_official/board_grant_list.html index 707fb4b6f..f804af9d2 100644 --- a/modules/homepage/skins/xe_official/board_grant_list.html +++ b/modules/homepage/skins/xe_official/board_grant_list.html @@ -24,8 +24,8 @@ -
        - + + diff --git a/modules/homepage/skins/xe_official/css/default.css b/modules/homepage/skins/xe_official/css/default.css index bb3cc94cf..14a3e8f49 100644 --- a/modules/homepage/skins/xe_official/css/default.css +++ b/modules/homepage/skins/xe_official/css/default.css @@ -1,8 +1,5 @@ @charset "utf-8"; -#menu ul { margin-top:10px; } -#menu li { padding-bottom:10px; } - #menuItem { visibility:hidden; position:absolute; left:0; top:0; background-color:#FFFFFF; z-index:1000; border:2px solid #DDDDDD; padding:10px;} #menu_normal_btn_zone { display:none; } #menu_hover_btn_zone { display:none; } diff --git a/modules/homepage/skins/xe_official/js/homepage.js b/modules/homepage/skins/xe_official/js/homepage.js index 6d7d878da..7c1312146 100644 --- a/modules/homepage/skins/xe_official/js/homepage.js +++ b/modules/homepage/skins/xe_official/js/homepage.js @@ -1,206 +1,116 @@ -var max_menu_depth = 1; -var menuList = new Array(); -var mousePos = {x:0,y:0} -function chkMousePosition(evt) { - var e = new xEvent(evt); - mousePos = {x:e.pageX, y:e.pageY}; +function homepageLoadMenuInfo(url){ + // clear tree; + jQuery('#menu > ul > li > ul').remove(); + if(jQuery("ul.simpleTree > li > a").size() ==0)jQuery('').bind("click",function(e){homepageAddMenu(0,e);}).appendTo("ul.simpleTree > li"); - var pobj = e.target; - while(pobj) { - pobj = pobj.parentNode; - if(pobj && pobj.id == 'menuItem') return; - } + //ajax get data and transeform ul il + jQuery.get(url,function(data){ + jQuery(data).find("node").each(function(i){ + var text = jQuery(this).attr("text"); + var node_srl = jQuery(this).attr("node_srl"); + var parent_srl = jQuery(this).attr("parent_srl"); + var url = jQuery(this).attr("url"); - hideMenuItem(); + // node + var node = jQuery('
      • '+text+'
      • '); + + // button + jQuery('').bind("click",function(e){ + jQuery("#tree_"+node_srl+" > span").click(); + homepageAddMenu(node_srl,e); + return false; + }).appendTo(node); + + jQuery('').bind("click",function(e){ + jQuery.exec_json("homepage.getHomepageMenuItem",{ "node_srl":node_srl},function(data){ + jQuery("#tree_"+node_srl+" > span").click(); + data.menu_info['mode'] = 'update'; + menuFormInsert(data.menu_info); + jQuery("#menuItem").css('position','absolute').css('visibility','visible').css('top',e.pageY - jQuery("#header").height() - 70).css('left',e.pageX - jQuery("#navigation").width() -40); + jQuery('#itemAttr4').css("display",'block'); + }); + return false; + + }).appendTo(node); + + jQuery('').bind("click",function(e){ + homepageDeleteMenu(node_srl); + return false; + }).appendTo(node); + + // insert parent child + if(parent_srl>0){ + if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('
          ')); + jQuery('#tree_'+parent_srl+'> ul').append(node); + }else{ + if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("
            ").appendTo('#menu ul.simpleTree > li'); + jQuery('#menu ul.simpleTree > li > ul').append(node); + } + + }); + + //button show hide + jQuery("#menu li").each(function(){ + if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide(); + if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide(); + }); + + + // draw tree + simpleTreeCollection = jQuery('.simpleTree').simpleTree({ + autoclose: false, + afterClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterDblClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterMove:function(destination, source, pos){ + jQuery('#menuItem').css("visibility",'hidden'); + + var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val(); + var parent_srl = destination.attr('id').replace(/.*_/g,''); + var target_srl = source.attr('id').replace(/.*_/g,''); + var brothers = jQuery('#'+destination.attr('id')+' > ul > li:not([class^=line])').length; + var mode = brothers >1 ? 'move':'insert'; + var source_srl = pos == 0 ? 0: source.prevAll("li:not(.line)").get(0).id.replace(/.*_/g,''); + + jQuery.exec_json("homepage.procHomepageMenuItemMove",{ "menu_srl":menu_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl,"mode":mode}, + function(data){ + if(data.error>0){ + homepageLoadMenuInfo(xml_url); + } + }); + }, + + // i want you !! made by sol + beforeMovedToLine : function(destination, source, pos){ + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth); + }, + + // i want you !! made by sol + beforeMovedToFolder : function(destination, source, pos){ + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1); + }, + afterAjax:function() + { + //alert('Loaded'); + }, + animate:true + ,docToFolderConvert:true + }); + + // open all node + nodeToggleAll(); + },"xml"); } -function homepageLoadMenuInfo(xml_file) { - var oXml = new xml_handler(); - oXml.reset(); - oXml.xml_path = xml_file; - oXml.request(completeHomepageLoadMenuInfo, oXml); -} - -function completeHomepageLoadMenuInfo(oXml) { - var waiting_obj = xGetElementById("waitingforserverresponse"); - if(waiting_obj) waiting_obj.style.visibility = "hidden"; - - var xmlDoc = oXml.getResponseXml(); - if(!xmlDoc) return null; - - // node 태그에 해당하는 값들을 가져와서 html을 작성 - var node_list = xmlDoc.getElementsByTagName("node"); - if(node_list.length<1) return; - - // select 내용 없앰 - xInnerHtml('menu',''); - - var root = xmlDoc.getElementsByTagName("root")[0]; - root.setAttribute('node_srl',0); - root.setAttribute('parent_srl',0); - xGetElementById('menu').appendChild(getGabItem(0,0,0)); - homepageInsertMenuObject(xGetElementById('menu'), root, 0); - -} - -function getGabItem(parent_srl, up_srl, depth) { - if(typeof(parent_srl)=='undefined' || !parent_srl) parent_srl = 0; - if(typeof(up_srl)=='undefined' || !up_srl) up_srl = 0; - if(typeof(depth)=='undefined' || !depth) depth = 0; - - var gabObj = xCreateElement('div'); - gabObj.id = 'gab_'+parent_srl+'_'+up_srl; - gabObj.style.cursor = "pointer"; - gabObj.style.width = '100%'; - gabObj.style.height = '1px'; - gabObj.style.marign = '5px 0 0 0'; - gabObj.style.padding = '0 0 5px 0'; - gabObj.style.overflow = "hidden"; - gabObj.style.whitespace = "nowrap"; - return gabObj; -} - -// root부터 시작해서 recursive하게 노드를 표혐 -function homepageInsertMenuObject(drawObj, parent_node, depth) { - - for (var i=0; i< parent_node.childNodes.length; i++) { - - var html = ""; - - var node = parent_node.childNodes.item(i); - if(node.nodeName!="node") continue; - - var node_srl = node.getAttribute("node_srl"); - var parent_srl = node.getAttribute("parent_srl"); - var text = node.getAttribute("text"); - var url = node.getAttribute("url"); - - if(!text) continue; - - var itemObj = xCreateElement('div'); - itemObj.style.margin = "0 0 0 "+(depth*20)+"px"; - - if(parent_srl>0 && i<1) itemObj.appendChild(getGabItem(parent_srl, 0, depth)); - - var textObj = xCreateElement('div'); - textObj.className = "page"; - textObj.style.cursor = "pointer"; - textObj.id = "node_"+node_srl; - textObj.style.padding = "5px 0 5px 20px"; - xInnerHtml(textObj, text); - - if(depth < max_menu_depth-1) - xInnerHtml(textObj, xInnerHtml(textObj) + ' '); - - xInnerHtml(textObj, xInnerHtml(textObj) + ' '); - - if(!node.hasChildNodes()) { - xInnerHtml(textObj, xInnerHtml(textObj) + ' '); - } - itemObj.appendChild(textObj); - - if(node.hasChildNodes()) homepageInsertMenuObject(itemObj, node, depth+1); - itemObj.appendChild(getGabItem(parent_srl, node_srl, depth)); - - drawObj.appendChild(itemObj); - } - -} - -function homepageAddMenu(node_srl) { - menuFormReset(); - var obj = new Array(); - obj['mode'] = 'insert'; - if(typeof(node_srl)!='undefined' && node_srl > 0) { - obj['parent_srl'] = node_srl; - } - menuFormInsert(obj) - showMenuItem(); -} - -function homepageModifyMenu(node_srl) { - var params = new Array(); - params['node_srl'] = node_srl; - var response_tags = new Array('error','message','menu_info'); - exec_xml('homepage','getHomepageMenuItem', params, completeModifyMenu, response_tags); -} - -function completeModifyMenu(ret_obj) { - var menu_info = ret_obj['menu_info']; - menu_info['mode'] = 'update'; - menuFormInsert(menu_info) - showMenuItem(); - showMenuButton(); -} - -function homepageDeleteMenu(node_srl) { - var fo_obj = xGetElementById('menu_item_form'); - fo_obj.menu_item_srl.value = node_srl; - - procFilter(fo_obj, delete_menu_item); -} - -function completeChangeLayout(ret_obj) { - location.reload(); -} - -function hideMenuItem() { - xGetElementById('menuItem').style.visibility = 'hidden'; - menuFormReset(); -} - -function showMenuButton() { - xGetElementById('itemAttr4').style.display = 'block'; -} - -function showMenuItem() { - var obj = xGetElementById('menuItem'); - xLeft(obj, mousePos.x - xWidth('navigation') - 40); - xTop(obj, mousePos.y - xHeight('header') - 70 ); - obj.style.visibility = 'visible'; -} - -function menuFormReset() { - var fo_obj = xGetElementById("fo_menu"); - - fo_obj.parent_srl.value = ''; - fo_obj.menu_item_srl.value = ''; - fo_obj.mode.value = ''; - - var names = xGetElementsByClassName("menu_names"); - for(var i in names) names[i].value = ""; - - fo_obj.browser_title.value = ''; - - fo_obj.menu_open_window.checked = false; - fo_obj.menu_expand.checked = false; - - for(var i=0; i 0) { + obj['parent_srl'] = node_srl; + } + + menuFormInsert(obj); + + jQuery("#menuItem").css('position','absolute').css('visibility','visible').css('top',e.pageY - jQuery("#header").height() - 70).css('left',e.pageX - jQuery("#navigation").width() -40); + jQuery('#itemAttr4').css("display",'block'); } -/* 메뉴 이미지 업로드 후처리 */ -function completeMenuUploadButton(target, filename) { - var column_name = target.replace(/^menu_/,''); - var fo_obj = xGetElementById("fo_menu"); - var zone_obj = xGetElementById(target+'_zone'); - var img_obj = xGetElementById(target+'_img'); - fo_obj[column_name].value = filename; - - var img = new Image(); - img.src = filename; - img_obj.src = img.src; - zone_obj.style.display = "block"; -} - -function doDeleteButton(target) { - var fo_obj = xGetElementById("fo_menu"); - - var col_name = target.replace(/^menu_/,''); - - var params = new Array(); - params['target'] = target; - params['menu_srl'] = fo_obj.menu_srl.value; - params['menu_item_srl'] = fo_obj.menu_item_srl.value; - params['filename'] = fo_obj[col_name].value; - - var response_tags = new Array('error','message', 'target'); - - exec_xml('homepage','procHomepageDeleteButton', params, completeDeleteButton, response_tags); -} - -function completeDeleteButton(ret_obj) { - var target = ret_obj['target']; - - var column_name = target.replace(/^menu_/,''); - var fo_obj = xGetElementById("fo_menu"); - var zone_obj = xGetElementById(target+'_zone'); - var img_obj = xGetElementById(target+'_img'); - fo_obj[column_name].value = ""; - img_obj.src = ""; - zone_obj.style.display = "none"; -} - -/* drag item */ -xAddEventListener(document, 'mousedown', dragItem); - -var dragObj = null; -var dragTarget = null; -var dragTmpObjectect = new Array(); -var dragDisappear = 0; - -function dragItem(evt) { - var e = new xEvent(evt); - if(!e.target) return; - var obj = e.target; - while(obj) { - if(obj && obj.nodeName == 'DIV' && typeof(obj.id)!='undefined' && obj.id.indexOf('node_')>-1) { - dragEnable(obj, evt); - return; - } - obj = obj.parentNode; +function homepageDeleteMenu(node_srl) { + if(confirm(lang_confirm_delete)){ + jQuery('#menuItem').css("visibility",'hidden'); + var fo_obj = jQuery('#menu_item_form').get(0); + fo_obj.menu_item_srl.value = node_srl; + procFilter(fo_obj, delete_menu_item); } } -function getDragTmpObject(obj) { - if(!dragTmpObjectect[obj.id]) { - tmpObj = xCreateElement('div'); - tmpObj.id = obj.id + '_tmp'; - tmpObj.style.display = 'none'; - tmpObj.style.position = 'absolute'; - tmpObj.style.opacity = 0.5; - tmpObj.style.filter = 'alpha(opacity=50)'; - tmpObj.style.cursor = "pointer"; - xInnerHtml(tmpObj,xInnerHtml(obj)); - - document.body.appendChild(tmpObj); - dragTmpObjectect[obj.id] = tmpObj; - } - return dragTmpObjectect[obj.id]; +function nodeToggleAll(){ + jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){ + simpleTreeCollection[0].nodeToggle(this); + }); } -function removeDragTmpObject(obj) { - if(!dragTmpObjectect[obj.id]) return; - dragTmpObjectect[obj.id] = null; -} +function doReloadTreeMenu(){ + var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val(); -function dragEnable(obj, evt) { - if(obj.id.indexOf('node_')<0) return; - obj.draggable = true; - - dragObj = obj; - dragObj.id = obj.id; - - var e = new xEvent(evt); - xPreventDefault(evt); - obj.xDPX = e.pageX; - obj.xDPY = e.pageY; - - xAddEventListener(document, 'mouseup', dragUp, false); - xAddEventListener(document, 'mousemove', dragMove, false); - - var tmpObj = getDragTmpObject(obj); - xLeft(tmpObj, e.pageX+1); - xTop(tmpObj, e.pageY+1); - xWidth(tmpObj, xWidth(obj)); - xHeight(tmpObj, xHeight(obj)); - xDisplay(tmpObj, 'block'); -} - -function dragMove(evt) { - if(!dragObj) return; - - var e = new xEvent(evt); - var target = e.target; - var obj = dragObj; - var tobj = getDragTmpObject(obj); - xLeft(tobj, e.pageX+1); - xTop(tobj, e.pageY+1); - - if(target && target.nodeName == "DIV" && typeof(target.id)!='undefined' && (target.id.indexOf('gab_')>-1||target.id.indexOf('node_')>-1)) { - var isChilds = false; - var pObj = target.parentNode; - while(pObj) { - if(pObj.firstChild && typeof(pObj.firstChild.id)!='undefined' && pObj.firstChild.id == dragObj.id) { - isChilds = true; - break; + jQuery.exec_json("menu.procMenuAdminMakeXmlFile",{ "menu_srl":menu_srl}, + function(data){ + homepageLoadMenuInfo(xml_url); } - pObj = pObj.parentNode; - } - if(dragTarget) { - dragTarget.style.backgroundColor = ''; - dragTarget.style.borderTop = '0px solid #000'; - dragTarget = null; - } - - if(!isChilds) { - dragTarget = target; - if(target.id.indexOf('gab_')>-1) { - dragTarget.style.borderTop = '1px solid #000'; - } else { - dragTarget.style.backgroundColor = '#DDDDDD'; - } - } - } else if(dragTarget) { - dragTarget.style.backgroundColor = ''; - dragTarget.style.borderTop = '0px solid #000'; - dragTarget = null; - } - - xPreventDefault(evt); + ); + jQuery('#menuItem').css("visibility",'hidden'); + menuFormReset(); } -function dragUp(evt) { - if(!dragObj) return; - - if(dragTarget && dragTarget.id != dragObj.id && confirm(confirmMenuMove)) { - var mode = null; - if(dragTarget.id.indexOf('gab_')>-1) mode = 'move'; - else mode = 'insert'; - - var tmpArr = dragTarget.id.split('_'); - var parent_srl = tmpArr[1]; - var source_srl = mode=='move'?tmpArr[2]:0; - - var tmpArr = dragObj.id.split('_'); - var target_srl = tmpArr[1]; - - var params = new Array(); - params['menu_srl'] = xGetElementById('fo_menu').menu_srl.value; - params['mode'] = mode; - params['parent_srl'] = parent_srl; - params['source_srl'] = source_srl; - params['target_srl'] = target_srl; - var response_tags = new Array('error','message','xml_file'); - exec_xml('homepage','procHomepageMenuItemMove', params, completeInsertMenuItem, response_tags); - } - - var tobj = getDragTmpObject(dragObj); - - xRemoveEventListener(document, 'mouseup', dragUp, false); - xRemoveEventListener(document, 'mousemove', dragMove, false); - - dragDisappear = dragDisapearObject(tobj, dragObj); - - var e = new xEvent(evt); - xPreventDefault(evt); - dragObj = null; - - if(dragTarget) { - dragTarget.style.backgroundColor = ''; - dragTarget.style.borderTop = '0px solid #000'; - dragTarget = null; - } -} - - -// 스르르 사라지게 함;; -function dragDisapearObject(obj, tobj) { - var it = 20; - var ib = 20; - - var x = parseInt(xPageX(obj),10); - var y = parseInt(xPageY(obj),10); - var ldt = (x - parseInt(xPageX(tobj),10)) / ib; - var tdt = (y - parseInt(xPageY(tobj),10)) / ib; - - return setInterval(function() { - if(ib < 1) { - clearInterval(dragDisappear); - xDisplay(obj, 'none'); - removeDragTmpObject(tobj); - return; - } - ib -= 3; - x-=ldt; - y-=tdt; - xLeft(obj, x); - xTop(obj, y); - }, it/ib); +function closeTreeMenuInfo(){ + jQuery('#menuItem').css("visibility",'hidden'); } - -function completeInsertBoard(ret_obj) { - alert(ret_obj['message']); - location.reload(); -} - -function completeInsertPage(ret_obj) { - alert(ret_obj['message']); - location.reload(); -} - -function doDeleteGroup(group_srl) { - var fo_obj = xGetElementById('fo_group'); - fo_obj.group_srl.value = group_srl; - procFilter(fo_obj, delete_group); -} - -function completeInsertGroup(ret_obj) { - location.href = current_url.setQuery('group_srl',''); -} - -function completeDeleteGroup(ret_obj) { - location.href = current_url.setQuery('group_srl',''); - -} - -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i - - + + +

            {$lang->cmd_homepage_menus[$act]}

            {$lang->about_homepage_act[$act]}

            - +{$lang->cmd_remake_cache} - +
            - {$lang->cmd_add_new_menu}
        {$lang->no}
        - {$lang->cmd_unselect_all} - {$lang->cmd_reverse_all} + {$lang->cmd_unselect_all} + {$lang->cmd_reverse_all}
        {$lang->cmd_select_all}{$lang->cmd_unselect_all}{$lang->cmd_select_all}{$lang->cmd_unselect_all}
        - {@ $_row = 0;} - - - - - - {@ $_row ++ } - - - - - - - - - - - - - - - - - -
        {$lang->menu_name}
        {$val}
        {$lang->about_menu_names}
        {$lang->cmd_option}
        - - - - -

        {$lang->about_menu_option}

        -
        {$lang->item_group_grant}
        - - group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"/> - - -

        {$lang->about_group_grant}

        -
        {$lang->module_type}
        - -

        {$lang->about_module_type}

        -
        + + + + +
        - - - - - - - - - -
        {$lang->browser_title}
        - -

        {$lang->about_browser_title}

        -
        {$lang->module_id}
        - -

        {$lang->about_module_id}

        -
        + + - - - - - -
        {$lang->url}
        - http:// -

        {$lang->about_menu_item_url}

        -
        +
        - - - - - - - - - - - - - - - - - -
        {$lang->menu_img_btn}
        {$lang->menu_normal_btn}
        - - -
        {$lang->menu_hover_btn}
        - - -
        {$lang->menu_active_btn}
        - - -
        {$lang->about_menu_image_button}
        - - - - - -
        - - {$lang->cmd_close} -
        + + {@ $_row = 0;} + + + + + + {@ $_row ++ } + + + + + + + + + + + + + + + + + +
        {$lang->menu_name}
        {$val}
        +
        {$lang->about_menu_names}
        {$lang->cmd_option}
        + + + + +

        {$lang->about_menu_option}

        +
        {$lang->item_group_grant}
        + + group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"/> + + +

        {$lang->about_group_grant}

        +
        {$lang->module_type}
        + +

        {$lang->about_module_type}

        +
        + + + + + + + + + +
        {$lang->browser_title}
        + +

        {$lang->about_browser_title}

        +
        {$lang->module_id}
        + +

        {$lang->about_module_id}

        +
        + + + + + + +
        {$lang->url}
        + http:// +

        {$lang->about_menu_item_url}

        +
        + + + + + + + + + + + + + + + + + + +
        {$lang->menu_img_btn}
        {$lang->menu_normal_btn}
        + + +
        {$lang->menu_hover_btn}
        + + +
        {$lang->menu_active_btn}
        + + +
        {$lang->about_menu_image_button}
        + + + + + +
        + + + + +
        diff --git a/modules/homepage/skins/xe_official/page_insert.html b/modules/homepage/skins/xe_official/page_insert.html index 7bed05df8..adb0e97d1 100644 --- a/modules/homepage/skins/xe_official/page_insert.html +++ b/modules/homepage/skins/xe_official/page_insert.html @@ -21,8 +21,8 @@ - {$lang->cmd_select_all} - {$lang->cmd_unselect_all} + {$lang->cmd_select_all} + {$lang->cmd_unselect_all} diff --git a/modules/importer/lang/jp.lang.php b/modules/importer/lang/jp.lang.php index d920f31f1..decd6450b 100644 --- a/modules/importer/lang/jp.lang.php +++ b/modules/importer/lang/jp.lang.php @@ -1,17 +1,17 @@ cmd_sync_member = '同期化'; $lang->cmd_continue = '続ける'; - $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; + $lang->preprocessing = 'データ移転のため、準備中です。'; // 項目 - $lang->importer = 'ZBデータ変換'; + $lang->importer = 'ZBデータ変換'; $lang->source_type = 'データ変換の対象'; $lang->type_member = '会員情報'; $lang->type_message = 'メッセージ情報'; @@ -22,19 +22,21 @@ $lang->xml_file = 'XMLファイル'; $lang->import_step_title = array( - 1 => 'Step 1. 以前対象選択', + 1 => 'Step 1. 移転先を選択', 12 => 'Step 1-2. 対象モジュール選択', 13 => 'Step 1-3. 対象カテゴリ選択', 2 => 'Step 2. XMLファイルアップロード', 3 => 'Step 2. 会員情報と書き込みデータの同期化', + 99 => 'データ移転', ); $lang->import_step_desc = array( 1 => '変換するXMLファイルの種類を選択してください。', 12 => 'データ変換を行う対象モジュールを選択してください。', 13 => 'データ変換を行う対象カテゴリを選択してください。', - 2 => "データ変換を行うXMLファイルパスを入力してください。同じアカウントのサーバ上では、相対または絶対パスを、異なるサーバにアップロードされている場合は、「http://アドレス..」を入力してください。", + 2 => "データ変換を行うXMLファイルパスを入力してください。同じアカウントのサーバ上では、相対または絶対パスを、異なるサーバにアップロードされている場合は「http://アドレス..」を入力してください。", 3 => '会員情報と書き込みデータの情報の変換を行った後、データが合わない場合があります。この時に同期化を行うと「user_id」をもとに正しく動作するようにします。', + 99 => 'データを移転しています。', ); // 案内/警告 @@ -45,14 +47,13 @@ $lang->msg_import_finished = '%d/%d個のデータ変換が完了しました。場合によって変換されていないデータがあることもあります。'; $lang->msg_sync_completed = '会員情報、書き込みデータ、コメントのデータの同期化(変換)が完了しました。'; - // Bla, Blah.. + // その他.. $lang->about_type_member = 'データ変換の対象が会員情報の場合は選択してください。'; $lang->about_type_message = 'データ移転対象がメッセージの場合選択してください。'; $lang->about_type_ttxml = 'データ移転対象が、TTXML(textcube系列)の場合選択してください。'; $lang->about_ttxml_user_id = 'TTXML移転時に投稿者として指定するユーザIDを入力してください(すでに加入されているIDでなければなりません)。'; $lang->about_type_module = 'データ変換の対象が書き込みデータである場合は選択してください。'; $lang->about_type_syncmember = '会員情報と書き込みデータなどの変換を行った後、会員情報を同期化する必要がある場合は、選択してください。'; - $lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをゼロボードXEのデータに変換することができます。\n変換するためには、XML Exporterを利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。"; - + $lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをXEのデータに変換することができます。\n変換するためには、XML Exporterを利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。"; $lang->about_target_path = "添付ファイルをダウンロードするためには、ゼロボード4がインストールされた場所を入力してください。同じサーバ上にある場合は「/home/ID/public_html/bbs」のように入力し、他のサーバにある場合は、「http://ドメイン/bbs」のようにゼロボードがインストールされているURLを入力してください。"; ?> diff --git a/modules/install/install.admin.controller.php b/modules/install/install.admin.controller.php index 5218c03b6..442241f4f 100644 --- a/modules/install/install.admin.controller.php +++ b/modules/install/install.admin.controller.php @@ -56,12 +56,37 @@ $qmail_compatibility = Context::get('qmail_compatibility'); if($qmail_compatibility!='Y') $qmail_compatibility = 'N'; + $use_ssl = Context::get('use_ssl'); + if(!$use_ssl) $use_ssl = 'none'; + + $http_port = Context::get('http_port'); + $https_port = Context::get('https_port'); + $db_info = Context::getDBInfo(); $db_info->time_zone = $time_zone; $db_info->qmail_compatibility = $qmail_compatibility; $db_info->use_rewrite = $use_rewrite; $db_info->use_optimizer = $use_optimizer; $db_info->lang_type = Context::get('lang_type'); + $db_info->use_ssl = $use_ssl; + if($http_port) + { + $db_info->http_port = (int) $http_port; + } + else if($db_info->http_port) + { + unset($db_info->http_port); + } + + if($https_port) + { + $db_info->https_port = (int) $https_port; + } + else if($db_info->https_port) + { + unset($db_info->https_port); + } + Context::setDBInfo($db_info); $oInstallController = &getController('install'); diff --git a/modules/install/lang/jp.lang.php b/modules/install/lang/jp.lang.php index d307609df..8076e4c59 100644 --- a/modules/install/lang/jp.lang.php +++ b/modules/install/lang/jp.lang.php @@ -1,14 +1,14 @@ introduce_title = 'XEのインストール'; $lang->license = <<GNU 一般公衆利用許諾契約書 - 翻訳文 @@ -16,40 +16,41 @@ Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA この利用許諾契約書を、一字一句そのままに複製し頒布することは許可する。しかし変更は認めない。 - はじめに + ソフトウェア向けライセンスの大半は、あなたがそのソフトウェアを共有したり変更したりする自由を奪うように設計されています。対照的に、GNU 一般公衆利用許諾契約書は、あなたがフリーソフトウェアを共有したり変更したりする自由を保証する--すなわち、ソフトウェアがそのユーザすべてにとってフリーであることを保証することを目的としています。この一般公衆利用許諾契約書はフリーソフトウェア財団のソフトウェアのほとんどに適用されており、また GNU GPLを適用すると決めたフリーソフトウェア財団以外の作者によるプログラムにも適用されています(いくつかのフリーソフトウェア財団のソフトウェアには、GNU GPLではなくGNU ライブラリ一般公衆利用許諾契約書が適用されています)。あなたもまた、ご自分のプログラムにGNU GPLを適用することが可能です。 -私たちがフリーソフトウェアと言うとき、それは利用の自由について言及しているのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設計されています(希望に応じてその種のサービスに手数料を課す自由も保証されます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを入手することが可能であるということ、あなたがソフトウェアを変更し、その一部を新たなフリーのプログラムで利用できるということ、そして、以上で述べたようなことができるということがあなたに知らされるということも保証されます。 +私たちがフリーソフトウェアと言うとき、それは利用の自由について言及しているのであって、価格は問題にしていません。私たちの一般公衆利用許諾契約書は、あなたがフリーソフトウェアの複製物を頒布する自由を保証するよう設計されています(希望に応じてその種のサービスに手数料を課す自由も保証されます)。また、あなたがソースコードを受け取るか、あるいは望めばそれを入手することが可能であるということ、あなたがソフトウェアを変更し、その一部を新たなフリーのプログラムで利用出来るということ、そして、以上で述べたようなことが出来るということがあなたに知らされるということも保証されます。 あなたの権利を守るため、私たちは誰かがあなたの有するこれらの権利を否定することや、これらの権利を放棄するよう要求することを禁止するという制限を加える必要があります。よって、あなたがソフトウェアの複製物を頒布したりそれを変更したりする場合には、そういった制限のためにあなたにある種の責任が発生することになります。 -例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。また、あなたは彼らもソースコードを受け取るか手に入れることができるよう保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件を示し、彼らに自らの持つ権利について知らしめるようにしなければなりません。 +例えば、あなたがフリーなプログラムの複製物を頒布する場合、有料か無料に関わらず、あなたは自分が有する権利を全て受領者に与えなければなりません。また、あなたは彼らもソースコードを受け取るか手に入れることが出来るよう保証しなければなりません。そして、あなたは彼らに対して以下で述べる条件を示し、彼らに自らの持つ権利について知らしめるようにしなければなりません。 私たちはあなたの権利を二段階の手順を踏んで保護します。(1) まずソフトウェアに対して著作権を主張し、そして (2) あなたに対して、ソフトウェアの複製や頒布または改変についての法的な許可を与えるこの契約書を提示します。 また、各作者や私たちを保護するため、私たちはこのフリーソフトウェアには何の保証も無いということを誰もが確実に理解するようにし、またソフトウェアが誰か他人によって改変され、それが次々と頒布されていったとしても、その受領者は彼らが手に入れたソフトウェアがオリジナルのバージョンでは無いこと、そして原作者の名声は他人によって持ち込まれた可能性のある問題によって影響されることがないということを周知させたいと思います。 -最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に特許ライセンスを取得することによって、事実上プログラムを独占的にしてしまうという危険を避けたいと思います。こういった事態を予防するため、私たちはいかなる特許も誰もが自由に利用できるようライセンスされるか、全くライセンスされないかのどちらかでなければならないことを明確にしました。 +最後に、ソフトウェア特許がいかなるフリーのプログラムの存在にも不断の脅威を投げかけていますが、私たちは、フリーなプログラムの再頒布者が個々に特許ライセンスを取得することによって、事実上プログラムを独占的にしてしまうという危険を避けたいと思います。こういった事態を予防するため、私たちはいかなる特許も誰もが自由に利用出来るようライセンスされるか、全くライセンスされないかのどちらかでなければならないことを明確にしました。 複製や頒布、改変についての正確な条件と制約を以下で述べていきます。 複製、頒布、改変に関する条件と制約 -0. この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一般公衆利用許諾契約書の定める条件の下で頒布できる、という告知が著作権者によって記載されたプログラムまたはその他の著作物全般に適用される。以下では、「『プログラム』」とはそのようにしてこの契約書が適用されたプログラムや著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プログラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すなわち、『プログラム』かその一部を、全く同一のままか、改変を加えたか、あるいは他の言語に翻訳された形で含む著作物のことである(「改変」という語の本来の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞれの契約者は「あなた」と表現される。 + +0. この利用許諾契約書は、そのプログラム(またはその他の著作物)をこの一般公衆利用許諾契約書の定める条件の下で頒布出来る、という告知が著作権者によって記載されたプログラムまたはその他の著作物全般に適用される。以下では、「『プログラム』」とはそのようにしてこの契約書が適用されたプログラムや著作物全般を意味し、また「『プログラム』を基にした著作物」とは『プログラム』やその他著作権法の下で派生物と見なされるもの全般を指す。すなわち、『プログラム』かその一部を、全く同一のままか、改変を加えたか、あるいは他の言語に翻訳された形で含む著作物のことである(「改変」という語の本来の意味からはずれるが、以下では翻訳も改変の一種と見なす)。それぞれの契約者は「あなた」と表現される。 複製や頒布、改変以外の活動はこの契約書ではカバーされない。それらはこの契約書の対象外である。『プログラム』を実行する行為自体に制限はない。また、そのような『プログラム』の出力結果は、その内容が『プログラム』を基にした著作物を構成する場合のみこの契約書によって保護される(『プログラム』を実行したことによって作成されたということとは無関係である)。このような線引きの妥当性は、『プログラム』が何をするのかに依存する。 -1. それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer of warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の不在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プログラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複製または頒布することができる。媒体は問わない。 +1. それぞれの複製物において適切な著作権表示と保証の否認声明(disclaimer of warranty)を目立つよう適切に掲載し、またこの契約書および一切の保証の不在に触れた告知すべてをそのまま残し、そしてこの契約書の複製物を『プログラム』のいかなる受領者にも『プログラム』と共に頒布する限り、あなたは『プログラム』のソースコードの複製物を、あなたが受け取った通りの形で複製または頒布することが出来る。媒体は問わない。 あなたは、物理的に複製物を譲渡するという行為に関して手数料を課しても良いし、希望によっては手数料を取って交換における保護の保証を提供しても良い。 -2. あなたは自分の『プログラム』の複製物かその一部を改変して『プログラム』を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定める条件の下で複製または頒布することができる。ただし、そのためには以下の条件すべてを満たしていなければならない: +2. あなたは自分の『プログラム』の複製物かその一部を改変して『プログラム』を基にした著作物を形成し、そのような改変点や著作物を上記第1節の定める条件の下で複製または頒布することが出来る。ただし、そのためには以下の条件すべてを満たしていなければならない: a) あなたがそれらのファイルを変更したということと変更した日時が良く 分かるよう、改変されたファイルに告示しなければならない。 b) 『プログラム』またはその一部を含む著作物、あるいは『プログラム』 かその一部から派生した著作物を頒布あるいは発表する場合には、その 全体をこの契約書の条件に従って第三者へ無償で利用許諾しなけれ ばならない。 -c) 改変されたプログラムが、通常実行する際に対話的にコマンドを読むよ うになっているならば、そのプログラムを最も一般的な方法で対話的に 実行する際、適切な著作権表示、無保証であること(あるいはあなたが保 証を提供するということ)、ユーザがプログラムをこの契約書で述べた条 件の下で頒布することができるということ、そしてこの契約書の複製物 を閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印 刷されるか、あるいは画面に表示されるようにしなければならない(例外 として、『プログラム』そのものは対話的であっても通常そのような告 知を印刷しない場合には、『プログラム』を基にしたあなたの著作物に そのような告知を印刷させる必要はない)。 +c) 改変されたプログラムが、通常実行する際に対話的にコマンドを読むよ うになっているならば、そのプログラムを最も一般的な方法で対話的に 実行する際、適切な著作権表示、無保証であること(あるいはあなたが保 証を提供するということ)、ユーザがプログラムをこの契約書で述べた条 件の下で頒布することが出来るということ、そしてこの契約書の複製物 を閲覧するにはどうしたらよいかというユーザへの説明を含む告知が印 刷されるか、あるいは画面に表示されるようにしなければならない(例外 として、『プログラム』そのものは対話的であっても通常そのような告 知を印刷しない場合には、『プログラム』を基にしたあなたの著作物に そのような告知を印刷させる必要はない)。 以上の必要条件は全体としての改変された著作物に適用される。著作物の一部が『プログラム』から派生したものではないと確認でき、それら自身別の独立した著作物であると合理的に考えられるならば、あなたがそれらを別の著作物として分けて頒布する場合、そういった部分にはこの契約書とその条件は適用されない。しかし、あなたが同じ部分を『プログラム』を基にした著作物全体の一部として頒布するならば、全体としての頒布物は、この契約書が課す条件に従わなければならない。というのは、この契約書が他の契約者に与える許可は『プログラム』丸ごと全体に及び、誰が書いたかは関係なく各部分のすべてを保護するからである。 @@ -57,7 +58,7 @@ c) 改変されたプログラムが、通常実行する際に対話的にコ また、『プログラム』を基にしていないその他の著作物を『プログラム』(あるいは『プログラム』を基にした著作物)と一緒に集めただけのものを一巻の保管装置ないし頒布媒体に収めても、その他の著作物までこの契約書が保護する対象になるということにはならない。 -3. あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2節における派生物)をオブジェクトコードないし実行形式で複製または頒布することができる。ただし、その場合あなたは以下のうちどれか一つを実施しなければならない: +3. あなたは上記第1節および2節の条件に従い、『プログラム』(あるいは第2節における派生物)をオブジェクトコードないし実行形式で複製または頒布することが出来る。ただし、その場合あなたは以下のうちどれか一つを実施しなければならない: a) 著作物に、『プログラム』に対応した完全かつ機械で読み取り可能なソー スコードを添付する。ただし、ソースコードは上記第1節および2節の条 件に従いソフトウェアの交換で習慣的に使われる媒体で頒布しなければ ならない。あるいは、 @@ -67,7 +68,7 @@ c) 対応するソースコード頒布の申し出に際して、あなたが 著作物のソースコードとは、それに対して改変を加える上で好ましいとされる著作物の形式を意味する。ある実行形式の著作物にとって完全なソースコードとは、それが含むモジュールすべてのソースコード全部に加え、関連するインターフェース定義ファイルのすべてとライブラリのコンパイルやインストールを制御するために使われるスクリプトをも加えたものを意味する。しかし特別な例外として、そのコンポーネント自体が実行形式に付随するのでは無い限り、頒布されるものの中に、実行形式が実行されるオペレーティングシステムの主要なコンポーネント(コンパイラやカーネル等)と通常一緒に(ソースかバイナリ形式のどちらかで)頒布されるものを含んでいる必要はないとする。 -実行形式またはオブジェクトコードの頒布が、指定された場所からコピーするためのアクセス手段を提供することで為されるとして、その上でソースコードも同等のアクセス手段によって同じ場所からコピーできるようになっているならば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられるようになっていなくてもソースコード頒布の条件を満たしているものとする。 +実行形式またはオブジェクトコードの頒布が、指定された場所からコピーするためのアクセス手段を提供することで為されるとして、その上でソースコードも同等のアクセス手段によって同じ場所からコピー出来るようになっているならば、第三者がオブジェクトコードと一緒にソースも強制的にコピーさせられるようになっていなくてもソースコード頒布の条件を満たしているものとする。 4. あなたは『プログラム』を、この契約書において明確に提示された行為を除き複製や改変、サブライセンス、あるいは頒布してはならない。他に『プログラム』を複製や改変、サブライセンス、あるいは頒布する企てはすべて無効であり、この契約書の下でのあなたの権利を自動的に終結させることになろう。しかし、複製物や権利をこの契約書に従ってあなたから得た人々に関しては、そのような人々がこの契約書に完全に従っている限り彼らのライセンスまで終結することはない。 @@ -85,7 +86,7 @@ c) 対応するソースコード頒布の申し出に際して、あなたが 8. 『プログラム』の頒布や利用が、ある国においては特許または著作権が主張されたインターフェースのいずれかによって制限されている場合、『プログラム』にこの契約書を適用した元の著作権者は、そういった国々を排除した明確な地理的頒布制限を加え、そこで排除されていない国の中やそれらの国々の間でのみ頒布が許可されるようにしても構わない。その場合、そのような制限はこの契約書本文で書かれているのと同様に見なされる。 -9. フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許諾書を発表することができる。そのような新版は現在のバージョンとその精神においては似たものになるだろうが、新たな問題や懸念を解決するため細部では異なる可能性がある。 +9. フリーソフトウェア財団は、時によって改訂または新版の一般公衆利用許諾書を発表することが出来る。そのような新版は現在のバージョンとその精神においては似たものになるだろうが、新たな問題や懸念を解決するため細部では異なる可能性がある。 それぞれのバージョンには、見分けが付くようにバージョン番号が振られている。『プログラム』においてそれに適用されるこの契約書のバージョン番号が指定されていて、更に「それ以降のいかなるバージョン(any later version)」も適用して良いとなっていた場合、あなたは従う条件と制約として、指定のバージョンか、フリーソフトウェア財団によって発行された指定のバージョン以降の版のどれか一つのどちらかを選ぶことが出来る。『プログラム』でライセンスのバージョン番号が指定されていないならば、あなたは今までにフリーソフトウェア財団から発行されたバージョンの中から好きに選んで構わない。 @@ -97,10 +98,8 @@ c) 対応するソースコード頒布の申し出に際して、あなたが 12. 適切な法か書面での同意によって命ぜられない限り、著作権者、または上記で許可されている通りに『プログラム』を改変または再頒布したその他の団体は、あなたに対して『プログラム』の利用ないし利用不能で生じた通常損害や特別損害、偶発損害、間接損害(データの消失や不正確な処理、あなたか第三者が被った損失、あるいは『プログラム』が他のソフトウェアと一緒に動作しないという不具合などを含むがそれらに限らない)に一切の責任を負わない。そのような損害が生ずる可能性について彼らが忠告されていたとしても同様である。 - 条件と制約終わり - GNU 一般公衆利用許諾契約書 - 原文 GNU GENERAL PUBLIC LICENSE @@ -194,7 +193,7 @@ END OF TERMS AND CONDITIONS EndOfLicense; - $lang->install_condition_title = "インストールするための必須条件を確認してください。"; + $lang->install_condition_title = "インストールするための必須条件を確認して下さい。"; $lang->install_checklist_title = array( 'php_version' => 'PHPバージョン', @@ -206,12 +205,12 @@ EndOfLicense; ); $lang->install_checklist_desc = array( - 'php_version' => '【必須】PHPバージョンが 5.2.2の場合は、PHPのセキュリティバグのため、インストールできません。', - 'permission' => '【必須】XEのインストールパスまたは「./files」ディレクトリのパーミッションが「707」でなければなりません', + 'php_version' => '【必須】PHPバージョンが 5.2.2の場合は、PHPのセキュリティバグのため、インストール出来ません。', + 'permission' => '【必須】XEのインストールパスまたは「./files」ディレクトリのパーミッションを「707」に設定して下さい。', 'xml' => '【必須】XML通信のためにXMLライブラリが必要です', - 'session' => '【必須】XEでは、セッションを使用しているため、「php.ini」の設定で「session.auto_start=0」にしなければなりません。', + 'session' => '【必須】XEでは、セッションを使用しているため、「php.ini」の設定を「session.auto_start=0」にして下さい。', 'iconv' => 'UTF-8と多言語サポート及び文字コード変換のため、「iconv」をインストールする必要があります。', - 'gd' => 'イメージ変換機能を使用するためには、「GD」ライブラリをインストールする必要があります。', + 'gd' => 'イメージ変換機能を使用するためには、「GDライブラリ」をインストールする必要があります。', ); $lang->install_checklist_xml = 'XMLライブラリのインストール'; @@ -221,18 +220,18 @@ EndOfLicense; $lang->install_checklist_gd = 'GDライブラリのインストール'; $lang->install_without_iconv = '文字列処理のための「iconv」ライブラリがインストールされていません。'; $lang->install_session_auto_start = 'PHPの設定で「session.auto_start==1」 にするとセッション処理に問題が発生することがあります。'; - $lang->install_permission_denied = 'インストールする対象のディレクトリのパーミッションが「707」になっていません。'; + $lang->install_permission_denied = 'インストールする対象ディレクトリのパーミッションが「707」になっていません。'; $lang->cmd_agree_license = 'ライセンスに同意します。'; - $lang->cmd_install_fix_checklist = 'インストールするための必須条件を設定しました。'; + $lang->cmd_install_fix_checklist = 'インストール必須条件を設定しました。'; $lang->cmd_install_next = 'インストールを続けます。'; - $lang->cmd_ignore = 'Ignore'; + $lang->cmd_ignore = 'FTP設定を省略する'; $lang->db_desc = array( - 'mysql' => 'MySQL DBで PHPの「mysql*()」関数を利用してデータの入出力を行います。
        DBは「myisam」タイプで作成されるため、トランザクション処理はできません。', + 'mysql' => 'MySQL DBで PHPの「mysql*()」関数を利用してデータの入出力を行います。
        DBは「myisam」タイプで作成されるため、トランザクション処理は出来ません。', 'mysql_innodb' => 'MySQL DBで「innodb」タイプでデータの入出力を行います。
        「innodb」ではトランザクションの処理が行えます。', - 'sqlite2' => 'ファイルタイプデータベースである「sqlite2」をサポートします。
        インストールの際は、DBファイルはウェブがらアクセスできない場所に作成してください。
        (安定化までのテストは行われていません)', - 'sqlite3_pdo' => 'PHPのPDOを経由うして「sqlite3」をサポートします。
        インストールの際は、DBファイルはウェブからアクセスできない場所に生成してください。', + 'sqlite2' => 'ファイルタイプデータベースである「sqlite2」をサポートします。
        インストール時、セキュリティのため、DBファイルはウェブがらアクセスできない場所に作成して下さい。
        (安定化までのテストは行われていません)', + 'sqlite3_pdo' => 'PHPのPDOを経由うして「sqlite3」をサポートします。
        インストール時、セキュリティのため、DBファイルはウェブからアクセスできない場所に作成して下さい。', 'cubrid' => 'CUBRID DBを利用します。', 'postgresql' => 'PostgreSql DBを利用します。', 'firebird' => 'Firebird DBを利用します。', @@ -241,7 +240,7 @@ EndOfLicense; $lang->form_title = 'データベース & 管理者情報入力'; $lang->db_title = 'データベース情報入力'; $lang->db_type = 'データベースの種類'; - $lang->select_db_type = '使用するデータベースを選択してください。'; + $lang->select_db_type = '使用するデータベースを選択して下さい。'; $lang->db_hostname = 'ホスト名'; $lang->db_port = 'ポート番号'; $lang->db_userid = 'ユーザID'; @@ -254,23 +253,22 @@ EndOfLicense; $lang->env_title = '環境設定'; $lang->use_optimizer = 'オプティマイザ使用'; - $lang->about_optimizer = 'オプティマイザを使用すると多数の「CSS/ JS」ファイルを、統合・圧縮して転送するため、レスポンスが早くなります。
        但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。'; + $lang->about_optimizer = 'オプティマイザを使用すると多数の「CSS/JS」ファイルを、統合・圧縮して転送するのでレスポンスが早くなります。
        但し、CSSまたはJSファイルによっては問題が生じる場合があります。この場合は、チェックを外すと正常に動作します。'; $lang->use_rewrite = 'リライト・モジュールを使用'; - $lang->about_rewrite = 'Webサーバで「リライト・モジュール(mod_rewrite)」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを「http://アドレス/123」のように動的だけど静的なページに見せることができます。'; + $lang->about_rewrite = 'Webサーバで「リライト・モジュール(mod_rewrite)」をサポートしている場合は、「http://アドレス/?document_srl=123」のようなアドレスを動的だけど「http://アドレス/123」のように静的なページに見せることができます。'; $lang->time_zone = 'タイムゾーン'; - $lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差が生じる場合、タイムゾーンを指定すれば、表示時間を指定したところの時間に設定できます。'; + $lang->about_time_zone = 'サーバの設定時間とサービスしているローカル時間との差がある場合、タイムゾーンを指定して表示時間を合わせることが出来ます。'; $lang->qmail_compatibility = 'Qmail 互換'; - $lang->about_qmail_compatibility = 'Qmail等、CRLFを改行コードで認識できないMTAでメールが発送されるようにします。'; + $lang->about_qmail_compatibility = 'Qmail等、CRLFを改行コードで認識できないMTAでメールが送信出来るようにします。'; - - $lang->about_database_file = 'Sqliteはファイルにデータを保存します。そのため、データベースファイルにはウェブからアクセスできない場所にしなければなりません。
        データファイルのパーミッションは「707」に設定してください。'; + $lang->about_database_file = 'Sqliteはファイルにデータを保存します。そのため、データベースファイルにはウェブからアクセスできない場所にしなければなりません。
        データファイルのパーミッションは「707」に設定して下さい。'; $lang->success_installed = '正常にインストールされました。'; $lang->success_updated = '正常にアップデートされました。'; - $lang->msg_cannot_proc = 'インストールできる環境が整っていないため、リクエストを実行できませんでした。'; + $lang->msg_cannot_proc = 'インストール出来る環境が整っていないため、リクエストを実行出来ませんでした。'; $lang->msg_already_installed = '既にインストールされています。'; - $lang->msg_dbconnect_failed = "データベースアクセスにエラーが発生しました。\nデータベースの情報をもう一度確認してください。"; + $lang->msg_dbconnect_failed = "データベースアクセスにエラーが発生しました。\nデータベースの情報をもう一度確認して下さい。"; $lang->msg_table_is_exists = "既にデータベースにデーブルが作成されています。\nconfigファイルを再作成しました。"; $lang->msg_install_completed = "インストールが完了しました。\nありがとうございます。"; $lang->msg_install_failed = "インストールファイルを作成する際にエラーが発生しました。"; diff --git a/modules/install/lang/zh-TW.lang.php b/modules/install/lang/zh-TW.lang.php index 6e06d1dc0..1f05ea754 100644 --- a/modules/install/lang/zh-TW.lang.php +++ b/modules/install/lang/zh-TW.lang.php @@ -5,16 +5,15 @@ * @brief 正體中文語言(包含基本內容) **/ - $lang->introduce_title = '安裝 XE'; + $lang->introduce_title = 'XE程式安裝'; $lang->license = <<GNU通用公共許可證 - 翻譯文 -1991.6第二版 - -版權所有(c)1989,1991 free software foundation, inc. - -675 mass ave, cambridge,mao2139, usa +Version2、1991年6月 +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 允許每個人複製和發佈此許可證原始檔案的副本,但絕對不允許對它進行任何修改。 @@ -186,45 +185,45 @@ END OF TERMS AND CONDITIONS EndOfLicense; - $lang->install_condition_title = "確認安裝所需環境。"; + $lang->install_condition_title = "確認安裝時必須要具備的條件"; $lang->install_checklist_title = array( 'php_version' => 'PHP版本', 'permission' => '權限', - 'xml' => 'XML', - 'iconv' => 'ICONV', - 'gd' => 'GD', - 'session' => 'Session.auto_start 設置', + 'xml' => 'XML Library', + 'iconv' => 'ICONV Library', + 'gd' => 'GD Library', + 'session' => 'Session.auto_start設置', ); $lang->install_checklist_desc = array( - 'php_version' => '[需求] 由於 PHP 5.2.2 版本的 BUG,無法安裝 XE。', - 'permission' => '[需求] XE的安裝路徑或 ./files資料夾權限必須是707', - 'xml' => '[需求]為了 XML通訊,將需要安裝 XML', - 'session' => '[需求] 為了能使用暫存功能,在 php.ini 中必須將 session.auto_start=0', - 'iconv' => '為了使 UTF-8和其他語言環境之間能互相轉換,必須安裝 iconv', - 'gd' => '使用圖片轉換功能前,必須先得安裝 GD', + 'php_version' => '[必須] 由於 PHP 5.2.2 版本的問題,無法安裝 XE程式。', + 'permission' => '[必須] XE的資料夾或 ./files資料夾權限必須是『707』。', + 'xml' => '[必須] 必須要安裝 XML Library,才能夠使用 XML通訊。', + 'session' => '[必須] 在『php.ini』中必須要設定『session.auto_start=0』,才能使用暫存功能', + 'iconv' => '安裝『iconv』,才能夠使 UTF-8和其他語言文字能互相轉換。', + 'gd' => '安裝『GD Library』才可以使用圖片轉換功能。', ); - $lang->install_checklist_xml = '安裝 XML'; - $lang->install_without_xml = '還沒有安裝 XML!'; - $lang->install_checklist_gd = '安裝 GD'; - $lang->install_without_gd = '還沒有安裝負責轉換圖片功能的 GD!'; - $lang->install_checklist_gd = '安裝 GD'; - $lang->install_without_iconv = '還沒有安裝負責處理字串的 iconv!'; + $lang->install_checklist_xml = '安裝 XML Library'; + $lang->install_without_xml = '尚未安裝 XML Library!'; + $lang->install_checklist_gd = '安裝 GD Library'; + $lang->install_without_gd = '尚未安裝負責轉換圖片功能的 GD Library!'; + $lang->install_checklist_gd = '安裝 GD Library'; + $lang->install_without_iconv = '尚未安裝負責處理字串的 iconv!'; $lang->install_session_auto_start = 'PHP設置中設置成 session.auto_start==1,可能在處理 session時會發生錯誤。'; - $lang->install_permission_denied = '安裝目錄權限不是 707!'; + $lang->install_permission_denied = '安裝目錄權限不是『707』!'; $lang->cmd_agree_license = '同意使用條款'; - $lang->cmd_install_fix_checklist = '已設置了必要的安裝條件。'; + $lang->cmd_install_fix_checklist = '重新檢查'; $lang->cmd_install_next = '開始進行安裝'; $lang->cmd_ignore = '忽略'; $lang->db_desc = array( - 'mysql' => '利用 php的 mysql*()函數使用 mysql 資料庫。
        資料庫數據是以 myisam 建立,因此不能實現 transaction。', - 'mysql_innodb' => '利用innodb使用 mysql 資料庫。
        innodb可以使用 transaction。', - 'sqlite2' => '支援用檔案形式保存數據的 sqlite2。
        安裝時,資料庫數據應建立在 web無法訪問的地方。
        (尚未通過安全測試)', - 'sqlite3_pdo' => '用 PHP的 PDO支援 sqlite3。
        安裝時,資料庫數據應建立在 web無法訪問的地方。', + 'mysql' => '利用PHP的『mysql*()』函數使用MySQL資料庫。
        利用『myisam』建立資料庫檔案,因此不能實現 transaction。', + 'mysql_innodb' => '利用『innodb』使用 mysql 資料庫。
        innodb可以使用 transaction。', + 'sqlite2' => '支援用檔案形式保存數據的『sqlite2』。
        安裝時,資料庫數據應建立在 web無法訪問的地方。
        (尚未通過安全測試)', + 'sqlite3_pdo' => '用 PHP的 PDO支援『sqlite3』。
        安裝時,資料庫數據應建立在 web無法訪問的地方。', 'cubrid' => '使用 CUBRID DB。', 'postgresql' => '使用 PostgreSql DB。', 'firebird' => '使用 Firebird DB。', @@ -245,14 +244,14 @@ EndOfLicense; $lang->admin_title = '管理員資料'; $lang->env_title = '環境設置'; - $lang->use_optimizer = '使用 Optimizer'; - $lang->about_optimizer = '使用 Optimizer可以對大部分的 CSS/JS檔案進行整合/壓縮傳送使之加快網站訪問速度。
        只是有時會發生小小的問題。這時候請暫時不要使用Optimizer。'; - $lang->use_rewrite = '使用 rewrite模組'; - $lang->about_rewrite = '如主機支援 rewrite模組並選擇此項,可以簡化複雜的網址。
        例如,http://域名/?document_srl=123可簡化成 http://域名/123。'; + $lang->use_optimizer = '使用Optimizer'; + $lang->about_optimizer = '使用Optimizer可以對大部分的CSS/JS檔案進行整合/壓縮傳送使之加快網站訪問速度。
        只是有時會發生小小的問題。這時候請暫時不要使用Optimizer。'; + $lang->use_rewrite = '使用rewrite模組'; + $lang->about_rewrite = '如主機支援rewrite模組並選擇此項,可以簡化複雜的網址。
        例如,http://域名/?document_srl=123可簡化成 http://域名/123。'; $lang->time_zone = '時區'; $lang->about_time_zone = '主機時間和您所處的時間有差異時,可以設置時區來滿足你所需要的時間顯示。'; $lang->qmail_compatibility = 'Qmail互換'; - $lang->about_qmail_compatibility = '支援無法識別 CRLF為換行符的 Qmail等 MTA,也能發送電子郵件。'; + $lang->about_qmail_compatibility = '支援無法識別CRLF為換行符的Qmail等MTA,也能發送電子郵件。'; $lang->about_database_file = 'Sqlite是保存資料於檔案中。資料庫的檔案位置應該放在web不能訪問的地方。
        資料檔案應放在具有707權限的位置。'; diff --git a/modules/install/tpl/form.sqlite2.html b/modules/install/tpl/form.sqlite2.html index 313c38c54..b1795ae6d 100644 --- a/modules/install/tpl/form.sqlite2.html +++ b/modules/install/tpl/form.sqlite2.html @@ -16,7 +16,7 @@ {$db_type} - +

        {$lang->about_database_file}

        diff --git a/modules/install/tpl/form.sqlite3_pdo.html b/modules/install/tpl/form.sqlite3_pdo.html index c16f2953b..35c0cdfcb 100644 --- a/modules/install/tpl/form.sqlite3_pdo.html +++ b/modules/install/tpl/form.sqlite3_pdo.html @@ -16,7 +16,7 @@ {$db_type} - +

        {$lang->about_database_file}

        diff --git a/modules/integration_search/lang/jp.lang.php b/modules/integration_search/lang/jp.lang.php index d2381a9fa..64da850bf 100644 --- a/modules/integration_search/lang/jp.lang.php +++ b/modules/integration_search/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、ミニミ * @brief 日本語言語パッケージ(基本的な内容のみう) **/ diff --git a/modules/integration_search/skins/default/skin.xml b/modules/integration_search/skins/default/skin.xml index d351be840..78bc1d0f0 100644 --- a/modules/integration_search/skins/default/skin.xml +++ b/modules/integration_search/skins/default/skin.xml @@ -4,12 +4,12 @@ 搜索默认皮肤 統合検索のデフォルトスキン Default Skin of Integration Search - 綜合搜尋預設面板 + 預設綜合搜尋面板 통합검색 모듈의 기본 스킨 搜索模块的默认皮肤。 統合検索モジュールのデフォルトスキンです。 Default skin of integration search module - 綜合搜尋預設面板。 + 預設綜合搜尋面板。 0.1 2007-07-24 diff --git a/modules/integration_search/tpl/index.html b/modules/integration_search/tpl/index.html index c2b32bb3c..96bcf0da1 100644 --- a/modules/integration_search/tpl/index.html +++ b/modules/integration_search/tpl/index.html @@ -22,7 +22,7 @@ - {$lang->about_target_module} + {$lang->about_target_module} @@ -40,7 +40,7 @@ {$val->module} - target_mid))-->checked="checked" /> + target_mid))-->checked="checked" /> @@ -51,5 +51,5 @@ - + diff --git a/modules/integration_search/tpl/js/integration_search_admin.js b/modules/integration_search/tpl/js/integration_search_admin.js index b2bf3b494..3e2ba967a 100644 --- a/modules/integration_search/tpl/js/integration_search_admin.js +++ b/modules/integration_search/tpl/js/integration_search_admin.js @@ -3,29 +3,3 @@ * @author zero (zero@nzeo.com) * @brief integration_search 모듈의 관리자용 javascript **/ - -/* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i專案 プロジェクトへアクセス - - 소스 열람 - 查看代码 - 檢視原始碼 - ソース閲覧 - 티켓 열람 查看计划 @@ -25,6 +19,18 @@ 建立專案 チケット発行 + + 타임라인 + 时间轴 + Timeline + Timeline + + + 소스 열람 + 查看代码 + 檢視原始碼 + ソース閲覧 + 개발자 开发者 @@ -45,9 +51,9 @@ - + + - diff --git a/modules/issuetracker/issuetracker.controller.php b/modules/issuetracker/issuetracker.controller.php index d474e1a7f..c2e083ba0 100644 --- a/modules/issuetracker/issuetracker.controller.php +++ b/modules/issuetracker/issuetracker.controller.php @@ -303,6 +303,21 @@ } if($change_args!==null) { + // 이슈 상태 변경시 보고자에게 쪽지 발송 + if($oIssue->get('member_srl') && $oIssue->useNotify()) { + // 현재 로그인한 사용자와 글을 쓴 사용자를 비교하여 동일하지 않으면 진행 + if($logged_info->member_srl != $oIssue->get('member_srl')) { + // 변수 정리 + $title = '['.Context::getLang('cmd_resolve_as').'-'.$status_lang[$change_args->status].'] '.$oIssue->getTitleText(); + $content = sprintf('%s

        from : %s', nl2br($args->content), $oIssue->getPermanentUrl(), $oIssue->getPermanentUrl()); + $receiver_srl = $oIssue->get('member_srl'); + $sender_member_srl = $logged_info->member_srl; + + // 쪽지 발송 + $oCommunicationController = &getController('communication'); + $oCommunicationController->sendMessage($sender_member_srl, $receiver_srl, $title, $content, false); + } + } $change_args->target_srl = $target_srl; $output = executeQueryArray('issuetracker.updateIssue', $change_args); diff --git a/modules/issuetracker/issuetracker.item.php b/modules/issuetracker/issuetracker.item.php index 4656122de..3922d87cd 100644 --- a/modules/issuetracker/issuetracker.item.php +++ b/modules/issuetracker/issuetracker.item.php @@ -1,6 +1,6 @@ module_srl = $module_srl; $args->{$target} = $value; if($status !== null) $args->status = $status; $output = executeQuery('issuetracker.getIssuesCount', $args); @@ -386,30 +387,32 @@ $solvedHistory = array(); $output2 = executeQueryArray("issuetracker.getHistories", $args); - foreach($output2->data as $history) - { - $hist = unserialize($history->history); - $h = array(); - if(!is_array($hist)) continue; - $res = ""; - $bFirst = true; - foreach($hist as $key => $val) { - if($bFirst) { $bFirst = false; } - else { $res .= "
        "; } - if($val[0]) $str = Context::getLang('history_format'); - else $str = Context::getLang('history_format_not_source'); - $str = str_replace('[source]', $val[0], $str); - $str = str_replace('[target]', $val[1], $str); - $str = str_replace('[key]', Context::getLang($key), $str); - $res .= $str; + if(count($output2->data)) { + foreach($output2->data as $history) + { + $hist = unserialize($history->history); + $h = array(); + if(!is_array($hist)) continue; + $res = ""; + $bFirst = true; + foreach($hist as $key => $val) { + if($bFirst) { $bFirst = false; } + else { $res .= "
        "; } + if($val[0]) $str = Context::getLang('history_format'); + else $str = Context::getLang('history_format_not_source'); + $str = str_replace('[source]', $val[0], $str); + $str = str_replace('[target]', $val[1], $str); + $str = str_replace('[key]', Context::getLang($key), $str); + $res .= $str; + } + $obj = null; + $obj->date = $history->regdate; + $obj->type = "i"; + $obj->message = $res; + $obj->target_srl = $history->target_srl; + $obj->author = $history->nick_name; + $output->data[] = $obj; } - $obj = null; - $obj->date = $history->regdate; - $obj->type = "i"; - $obj->message = $res; - $obj->target_srl = $history->target_srl; - $obj->author = $history->nick_name; - $output->data[] = $obj; } usort($output->data, _compare); diff --git a/modules/issuetracker/issuetracker.view.php b/modules/issuetracker/issuetracker.view.php index 32c4878b2..30fd7d65d 100644 --- a/modules/issuetracker/issuetracker.view.php +++ b/modules/issuetracker/issuetracker.view.php @@ -37,6 +37,16 @@ $this->setTemplatePath($template_path); // 권한에 따른 메뉴 제한 + if(!$this->grant->access) { + $this->grant->ticket_view = $this->grant->ticket_write = $this->grant->timeline = $this->grant->browser_source = $this->grant->download = 0; + unset($GLOBALS['lang']->project_menus); + } else { + if(!$this->grant->ticket_view) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewIssue']); + if(!$this->grant->ticket_write) unset($GLOBALS['lang']->project_menus['dispIssuetrackerNewIssue']); + if(!$this->grant->timeline) unset($GLOBALS['lang']->project_menus['dispIssuetrackerTimeline']); + if(!$this->grant->browser_source) unset($GLOBALS['lang']->project_menus['dispIssuetrackerViewSource']); + if(!$this->grant->download) unset($GLOBALS['lang']->project_menus['dispIssuetrackerDownload']); + } if(!$this->grant->manager) unset($GLOBALS['lang']->project_menus['dispIssuetrackerAdminProjectSetting']); // 템플릿에서 사용할 검색옵션 세팅 (검색옵션 key값은 미리 선언되어 있는데 이에 대한 언어별 변경을 함) @@ -64,11 +74,16 @@ } Context::set('display_option', $display_option); - if(!Context::get('act')) Context::set('act','dispIssuetrackerViewIssue'); + if(Context::get('document_srl')) { + $this->act = 'dispIssuetrackerViewIssue'; + Context::set('act','dispIssuetrackerViewIssue'); + } + + if(!Context::get('act')) Context::set('act','dispIssuetrackerViewMilestone'); } function dispIssuetrackerTimeline() { - if(!$this->grant->access) return $this->dispIssuetrackerMessage('msg_not_permitted'); + if(!$this->grant->timeline) return $this->dispIssuetrackerMessage('msg_not_permitted'); $oController = &getController('issuetracker'); $oController->syncChangeset($this->module_info); $oModel = &getModel('issuetracker'); @@ -106,13 +121,13 @@ if($output) { foreach($output as $key => $milestone) { $issues = null; - $issues['new'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'new'); - $issues['reviewing'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'reviewing'); - $issues['assign'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'assign'); - $issues['resolve'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'resolve'); - $issues['reopen'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'reopen'); - $issues['postponed'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'postponed'); - $issues['invalid'] = $oIssuetrackerModel->getIssuesCount('milestone_srl', $milestone->milestone_srl,'invalid'); + $issues['new'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'new'); + $issues['reviewing'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'reviewing'); + $issues['assign'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'assign'); + $issues['resolve'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'resolve'); + $issues['reopen'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'reopen'); + $issues['postponed'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'postponed'); + $issues['invalid'] = $oIssuetrackerModel->getIssuesCount($this->module_srl,'milestone_srl', $milestone->milestone_srl,'invalid'); $issues['total'] = $issues['new']+$issues['assign']+$issues['resolve']+$issues['reopen']+$issues['reviewing']; $milestone->issues = $issues; $milestones[$milestone->milestone_srl] = $milestone; @@ -388,7 +403,7 @@ $package_list[$release->package_srl]->releases[$release->release_srl] = $release; } else { if(!$package_srl) { - $package_list = $oIssuetrackerModel->getPackageList($this->module_srl, 0, 3); + $package_list = $oIssuetrackerModel->getPackageList($this->module_srl, 0, 1); } else { $package_list = $oIssuetrackerModel->getPackageList($this->module_srl, $package_srl, 0); } diff --git a/modules/issuetracker/lang/jp.lang.php b/modules/issuetracker/lang/jp.lang.php index f26f17643..ef9c3e578 100644 --- a/modules/issuetracker/lang/jp.lang.php +++ b/modules/issuetracker/lang/jp.lang.php @@ -74,9 +74,10 @@ $lang->about_component = 'イシューのコンポーネントを設定します。'; $lang->project_menus = array( + 'dispIssuetrackerViewMilestone' => 'マイルストーン', 'dispIssuetrackerViewIssue' => 'イシュー閲覧', 'dispIssuetrackerNewIssue' => 'イシュー登録', - 'dispIssuetrackerViewMilestone' => 'マイルストーン', + 'dispIssuetrackerTimeline' => 'マイルストーン', 'dispIssuetrackerViewSource' => 'ソースコード閲覧', 'dispIssuetrackerDownload' => 'ダウンロード', 'dispIssuetrackerAdminProjectSetting' => '設定', diff --git a/modules/issuetracker/lang/ko.lang.php b/modules/issuetracker/lang/ko.lang.php index 14a62f92c..5b6fb0eef 100644 --- a/modules/issuetracker/lang/ko.lang.php +++ b/modules/issuetracker/lang/ko.lang.php @@ -74,10 +74,10 @@ $lang->about_component = '문제의 대상 구성요소를 설정합니다'; $lang->project_menus = array( + 'dispIssuetrackerViewMilestone' => '개발계획', 'dispIssuetrackerViewIssue' => '문제 열람', 'dispIssuetrackerNewIssue' => '문제 작성', 'dispIssuetrackerTimeline' => '타임 라인', - 'dispIssuetrackerViewMilestone' => '개발계획', 'dispIssuetrackerViewSource' => '코드 열람', 'dispIssuetrackerDownload' => '다운로드', 'dispIssuetrackerAdminProjectSetting' => '설정', diff --git a/modules/issuetracker/lang/zh-TW.lang.php b/modules/issuetracker/lang/zh-TW.lang.php index f6af51060..d767dc65d 100644 --- a/modules/issuetracker/lang/zh-TW.lang.php +++ b/modules/issuetracker/lang/zh-TW.lang.php @@ -74,10 +74,10 @@ $lang->about_component = '設置問題組件。'; $lang->project_menus = array( + 'dispIssuetrackerViewMilestone' => '版本開發', 'dispIssuetrackerViewIssue' => '問題清單', 'dispIssuetrackerNewIssue' => '發表問題', 'dispIssuetrackerTimeline' => '時間軸', - 'dispIssuetrackerViewMilestone' => '版本開發', 'dispIssuetrackerViewSource' => '檢視原始碼', 'dispIssuetrackerDownload' => '下載', 'dispIssuetrackerAdminProjectSetting' => '設置', @@ -87,7 +87,7 @@ $lang->msg_attached = '檔案已新增。'; $lang->msg_no_releases = '尚未被新增的發佈版本。'; - $lang->cmd_document_do = '將把此問題.. '; + $lang->cmd_document_do = '將此問題.. '; $lang->not_assigned = '尚未分配'; $lang->not_assigned_description = '尚未被分配的問題清單'; ?> diff --git a/modules/issuetracker/queries/getMilestones.xml b/modules/issuetracker/queries/getMilestones.xml index 4137e583b..1e197df81 100644 --- a/modules/issuetracker/queries/getMilestones.xml +++ b/modules/issuetracker/queries/getMilestones.xml @@ -10,6 +10,6 @@ - + diff --git a/modules/issuetracker/skins/xe_issuetracker/extra_var_form.html b/modules/issuetracker/skins/xe_issuetracker/extra_var_form.html index 2f2a8963b..278e29946 100644 --- a/modules/issuetracker/skins/xe_issuetracker/extra_var_form.html +++ b/modules/issuetracker/skins/xe_issuetracker/extra_var_form.html @@ -1,22 +1,5 @@ - - - - - - - - - - - - - - - - - @@ -30,7 +13,7 @@ {@ $val->value = $oIssue->getExtraValue($key)} - + @@ -73,12 +56,26 @@ - -
        {zdate($val->value,"Y-m-d")}
        - + + + + + + + + diff --git a/modules/issuetracker/skins/xe_issuetracker/filter/insert.xml b/modules/issuetracker/skins/xe_issuetracker/filter/insert.xml index a5794c81a..ae70604ac 100644 --- a/modules/issuetracker/skins/xe_issuetracker/filter/insert.xml +++ b/modules/issuetracker/skins/xe_issuetracker/filter/insert.xml @@ -4,7 +4,7 @@ - + diff --git a/modules/issuetracker/skins/xe_issuetracker/filter/insert_history.xml b/modules/issuetracker/skins/xe_issuetracker/filter/insert_history.xml index 858856740..8305ad795 100644 --- a/modules/issuetracker/skins/xe_issuetracker/filter/insert_history.xml +++ b/modules/issuetracker/skins/xe_issuetracker/filter/insert_history.xml @@ -1,10 +1,10 @@
        - + - + diff --git a/modules/issuetracker/skins/xe_issuetracker/header.html b/modules/issuetracker/skins/xe_issuetracker/header.html index 2c2ae4751..58a63737f 100644 --- a/modules/issuetracker/skins/xe_issuetracker/header.html +++ b/modules/issuetracker/skins/xe_issuetracker/header.html @@ -21,6 +21,7 @@ +
          @@ -31,3 +32,4 @@
        + diff --git a/modules/issuetracker/skins/xe_issuetracker/issue_list.html b/modules/issuetracker/skins/xe_issuetracker/issue_list.html index a4d8341b4..1563d76d2 100644 --- a/modules/issuetracker/skins/xe_issuetracker/issue_list.html +++ b/modules/issuetracker/skins/xe_issuetracker/issue_list.html @@ -111,7 +111,12 @@ -
        {$v->title}
        + +
        + + {$v->title} +
        + diff --git a/modules/issuetracker/skins/xe_issuetracker/newissue.html b/modules/issuetracker/skins/xe_issuetracker/newissue.html index 346bd3ab7..e64453482 100644 --- a/modules/issuetracker/skins/xe_issuetracker/newissue.html +++ b/modules/issuetracker/skins/xe_issuetracker/newissue.html @@ -58,7 +58,7 @@
    - useNotify())-->checked="checked" id="notify_message" /> + useNotify() || !$oIssue->get('notify_message'))-->checked="checked" id="notify_message" />
    @@ -87,6 +87,7 @@ + @@ -109,6 +110,7 @@ + diff --git a/modules/issuetracker/skins/xe_issuetracker/timeline.html b/modules/issuetracker/skins/xe_issuetracker/timeline.html index 394e57774..5911bf58c 100644 --- a/modules/issuetracker/skins/xe_issuetracker/timeline.html +++ b/modules/issuetracker/skins/xe_issuetracker/timeline.html @@ -15,7 +15,7 @@ {zdate($changeset->date,"H:i")} {@ $oIssue = $issues[$changeset->target_srl]; } - Issue #{$changeset->target_srl} ({$issues[$changeset->target_srl]->getTitleText(30)}) by {$changeset->author} + Issue #{$changeset->target_srl} ({htmlspecialchars($issues[$changeset->target_srl]->getTitleText(30))}) by {$changeset->author} Changeset [{$changeset->revision}] by {$changeset->author} diff --git a/modules/issuetracker/skins/xe_issuetracker/view_issue.html b/modules/issuetracker/skins/xe_issuetracker/view_issue.html index 57c9a5ba1..2fa2e9e32 100644 --- a/modules/issuetracker/skins/xe_issuetracker/view_issue.html +++ b/modules/issuetracker/skins/xe_issuetracker/view_issue.html @@ -22,12 +22,6 @@ {$lang->component} : {$oIssue->getComponentTitle()} - - {$lang->package} : - {$oIssue->getPackageTitle()} - {$lang->occured_version} : - {$oIssue->getReleaseTitle()} - {$lang->status} : {$oIssue->getStatus()} @@ -40,6 +34,14 @@ + + + {$lang->package} : + {$oIssue->getPackageTitle()} + {$lang->occured_version} : + {$oIssue->getReleaseTitle()} + + @@ -195,6 +197,7 @@ + @@ -216,6 +219,7 @@ + diff --git a/modules/issuetracker/tpl/grant_list.html b/modules/issuetracker/tpl/grant_list.html index bb3c23299..eeb0eafc6 100644 --- a/modules/issuetracker/tpl/grant_list.html +++ b/modules/issuetracker/tpl/grant_list.html @@ -24,8 +24,8 @@ - {$lang->cmd_select_all} - {$lang->cmd_unselect_all} + {$lang->cmd_select_all} + {$lang->cmd_unselect_all} diff --git a/modules/issuetracker/tpl/js/issue_admin.js b/modules/issuetracker/tpl/js/issue_admin.js index 31cadcda9..423a72758 100644 --- a/modules/issuetracker/tpl/js/issue_admin.js +++ b/modules/issuetracker/tpl/js/issue_admin.js @@ -95,30 +95,6 @@ function completeUpdateCategory(ret_obj) { } /* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i - - - - - - - - - - - - - - - - - - + + @@ -29,8 +13,8 @@ - - + + @@ -41,18 +25,12 @@
    {$lang->name}
    {$lang->deadline}
    {$lang->name}
    {$lang->deadline}
    {$lang->complete}
    {$lang->completed_date}
    {$lang->is_default}
    -
    {zdate("Ymd",$milestone->deadline)}
    - +
    is_completed == 'Y')-->checked /> -
    {zdate("Ymd",$milestone->released_date)}
    - +
    @@ -73,4 +51,18 @@
    + + + diff --git a/modules/issuetracker/tpl/project_setting.html b/modules/issuetracker/tpl/project_setting.html index 9dc352053..f154f064c 100644 --- a/modules/issuetracker/tpl/project_setting.html +++ b/modules/issuetracker/tpl/project_setting.html @@ -9,23 +9,8 @@ - - - - - - - - - - - - - - - - - + +
    @@ -61,10 +46,20 @@ -
    - + + + diff --git a/modules/krzip/conf/info.xml b/modules/krzip/conf/info.xml index 7db900c6c..dcab5e577 100644 --- a/modules/krzip/conf/info.xml +++ b/modules/krzip/conf/info.xml @@ -24,7 +24,7 @@ 通过设置可以修改邮编搜索服务器。 - ゼロボードで運用している郵便番号サーバを利用して韓国の郵便番号を検索します。 + XEで運用している郵便番号サーバを利用して韓国の郵便番号を検索します。 郵便番号検索サーバは設定によって変更することができます。 diff --git a/modules/layout/lang/jp.lang.php b/modules/layout/lang/jp.lang.php index fbc4d6dca..659f1b853 100644 --- a/modules/layout/lang/jp.lang.php +++ b/modules/layout/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa * @brief レイアウト(layout)モジュールの基本言語パッケージ **/ @@ -29,5 +29,5 @@ $lang->about_layout_code = "下のレイアウトコードを修正して保存するとサービスに反映されます。 必ずプレビューで確認した上で保存してください。 - ゼロボードXEのテンプレート文法はゼロボードXEテンプレートを参考してください。"; + XEのテンプレート文法はXEテンプレートを参考してください。"; ?> diff --git a/modules/layout/layout.admin.controller.php b/modules/layout/layout.admin.controller.php index 8339a5ecb..0751b7f6d 100644 --- a/modules/layout/layout.admin.controller.php +++ b/modules/layout/layout.admin.controller.php @@ -155,7 +155,7 @@ $cache_list = FileHandler::readDir("./files/cache/layout","",false,true); if(count($cache_list)) { foreach($cache_list as $cache_file) { - $pos = strpos($cache_file, $layout_srl.'_'); + $pos = strpos($cache_file, $layout_srl.'.'); if($pos>0)FileHandler::removeFile($cache_file); } } diff --git a/modules/ldap/conf/info.xml b/modules/ldap/conf/info.xml index 747015c30..638749b5d 100644 --- a/modules/ldap/conf/info.xml +++ b/modules/ldap/conf/info.xml @@ -3,9 +3,11 @@ LDAP 인증 연동 모듈 LDAP认证模块 LDAP認證模組 + LDAP認証連動モジュール zero zero zero + zero LDAP 인증 연동하는 모듈입니다. 적수님(http://ggang.net)님이 매우 큰 도움 주셨습니다. @@ -18,12 +20,17 @@ LDAP認證模組。 感謝 적수님(http://ggang.net)提供非常大的幫助。 + + LDAP認証連動モジュール + JeokSu(http://ggang.net)さんに感謝します。 + 0.1 2007-07-28 accessory zero - zero + zero zero + zero diff --git a/modules/ldap/lang/jp.lang.php b/modules/ldap/lang/jp.lang.php new file mode 100644 index 000000000..d6537456f --- /dev/null +++ b/modules/ldap/lang/jp.lang.php @@ -0,0 +1,31 @@ + 翻訳:ミニミ + * @brief 日本語言語パッケージ(基本的な内容のみ) + **/ + + $lang->ldap = 'LDAP認証連動'; + $lang->use_ldap = 'LDAP認証連動を使用する'; + $lang->ldap_server = 'LDAPサーバーアドレス'; + $lang->ldap_port = 'LDAPサーバーポート番号'; + $lang->ldap_userdn_suffix = 'ユーザーサフィックス'; + $lang->ldap_basedn = 'ベースDN(suffix)'; + + $lang->ldap_email_entry = '会員メールアカウントカラム'; + $lang->ldap_nickname_entry = '会員名カラム'; + $lang->ldap_username_entry = '会員のニックネームカラム'; + $lang->ldap_group_entry = '会員のグループカラム'; + + $lang->about_use_ldap = 'LDAP認証連動のためには、下記のサーバー情報とともに上にチェックして下さい。'; + $lang->about_ldap_server = 'LDAPサーバー情報を入力してください。'; + $lang->about_ldap_port = 'LDAPサーバーのポート(port)番号情報を入力してください。'; + $lang->about_ldap_userdn_suffix = '認証のためのユーザーサフィックスを入力してください。 (例: @abc.com)'; + $lang->about_ldap_basedn = 'ディレクトリの ベースDN(suffix)をログインして下さい。 (例: dc=abc,dc=com)'; + + $lang->about_ldap_email_entry = 'LDAP情報中、会員のメールアカウント情報として使うカラム名を入力してください。 (重複不可)'; + $lang->about_ldap_username_entry = 'LDAP情報中、会員名情報として使うカラム名を入力してください。 (重複可能)'; + $lang->about_ldap_nickname_entry = 'LDAP情報中、会員のニックネーム情報として使うカラム名を入力してください。 (重複不可)'; + $lang->about_ldap_group_entry = 'LDAP情報中、会員のグループ情報として使うカラム名を入力してください。'; + +?> diff --git a/modules/lifepod/conf/info.xml b/modules/lifepod/conf/info.xml index f3c02f848..49655047a 100644 --- a/modules/lifepod/conf/info.xml +++ b/modules/lifepod/conf/info.xml @@ -11,7 +11,7 @@ Este módulo muestra calendario de lifepod. 把Lifepod日历连接到zbXE的模块。 This module displays calendar from lifepod. - (Openmaru社提供の)LifepodサービスのカレンダーをゼロボードXEに連動して出力するモジュールです。 + (Openmaru社提供の)LifepodサービスのカレンダーをXEに連動して出力するモジュールです。 Этот модуль отображает календать с lifepod'а. 將 Lifepod日曆連結到 XE中的模組。 0.12 diff --git a/modules/lifepod/lang/jp.lang.php b/modules/lifepod/lang/jp.lang.php index 8cb297d59..0ef5a781b 100644 --- a/modules/lifepod/lang/jp.lang.php +++ b/modules/lifepod/lang/jp.lang.php @@ -11,5 +11,5 @@ $lang->cmd_lifepod_list = 'ライフポッドリスト'; $lang->cmd_view_info = 'ライフポッド情報'; - $lang->about_lifepod = "ライフポッド(Lifepod)はOpenmaru社が提供しているカレンダーサービスです。
    ライフポッドゼロボードXEモジュールでライフポッドの特定カレンダーを内部ページのように閲覧が出来るようにします。"; + $lang->about_lifepod = "ライフポッド(Lifepod)はOpenmaru社が提供しているカレンダーサービスです。
    ライフポッドXEモジュールでライフポッドの特定カレンダーを内部ページのように閲覧が出来るようにします。"; ?> diff --git a/modules/lifepod/lang/zh-TW.lang.php b/modules/lifepod/lang/zh-TW.lang.php index 9e8dee5b4..b77a54e9d 100644 --- a/modules/lifepod/lang/zh-TW.lang.php +++ b/modules/lifepod/lang/zh-TW.lang.php @@ -2,14 +2,14 @@ /** * @file zh-TW.lang.php * @author haneul (haneul0318@gmail.com) 翻譯:royallin - * @brief lifepod模組的語言 + * @brief lifepod模組語言 **/ $lang->lifepod = "Lifepod API"; - $lang->calendar_address = "日曆 XML地址"; + $lang->calendar_address = "XML網址"; $lang->cmd_lifepod_list = 'Lifepod列表'; $lang->cmd_view_info = 'Lifepod資訊'; - $lang->about_lifepod = "Lifepod是由 Openmaru提供的日曆服務。
    此模組是把特定的 Lifepod日曆整合到 zerboardXE中的模組。"; + $lang->about_lifepod = "Lifepod是由Openmaru提供的日曆服務。
    此模組是把特定的Lifepod日曆整合到XE中的模組。"; ?> diff --git a/modules/lifepod/tpl/grant_list.html b/modules/lifepod/tpl/grant_list.html index a2afd306a..00fe24e4c 100644 --- a/modules/lifepod/tpl/grant_list.html +++ b/modules/lifepod/tpl/grant_list.html @@ -18,8 +18,8 @@ - {$lang->cmd_select_all} - {$lang->cmd_unselect_all} + {$lang->cmd_select_all} + {$lang->cmd_unselect_all} diff --git a/modules/lifepod/tpl/js/lifepod_admin.js b/modules/lifepod/tpl/js/lifepod_admin.js index 1486c17f0..64e6e1d93 100644 --- a/modules/lifepod/tpl/js/lifepod_admin.js +++ b/modules/lifepod/tpl/js/lifepod_admin.js @@ -33,30 +33,6 @@ function completeDeleteLifepod(ret_obj) { } /* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i 'Nickname', 'email_address' => 'Email Address', 'regdate' => 'Join Date', + 'regdate_more' => '가입일시(이상)', + 'regdate_less' => '가입일시(이하)', 'last_login' => 'Last Login Date', + 'last_login_more' => '최근로그인일시(이상)', + 'last_login_less' => '최근로그인일시(이하)', 'extra_vars' => 'Extra Vars', ); diff --git a/modules/member/lang/es.lang.php b/modules/member/lang/es.lang.php index aa1646a19..823337997 100644 --- a/modules/member/lang/es.lang.php +++ b/modules/member/lang/es.lang.php @@ -72,7 +72,11 @@ 'nick_name' => 'Apodo', 'email_address' => 'Dirección de Email', 'regdate' => 'Fecha del registro', + 'regdate_more' => '가입일시(이상)', + 'regdate_less' => '가입일시(이하)', 'last_login' => 'Fecha de su última conección', + 'last_login_more' => '최근로그인일시(이상)', + 'last_login_less' => '최근로그인일시(이하)', 'extra_vars' => 'Variables Extra', ); diff --git a/modules/member/lang/fr.lang.php b/modules/member/lang/fr.lang.php index 07e888fc7..2ce4d94c4 100644 --- a/modules/member/lang/fr.lang.php +++ b/modules/member/lang/fr.lang.php @@ -73,7 +73,11 @@ 'nick_name' => 'Surnom', 'email_address' => 'Mél', 'regdate' => 'Jour d\'Inscription', + 'regdate_more' => '가입일시(이상)', + 'regdate_less' => '가입일시(이하)', 'last_login' => 'Jour de la connexion dernière', + 'last_login_more' => '최근로그인일시(이상)', + 'last_login_less' => '최근로그인일시(이하)', 'extra_vars' => 'Variables additionnels ', ); diff --git a/modules/member/lang/jp.lang.php b/modules/member/lang/jp.lang.php index d4ed92a91..454e7cf62 100644 --- a/modules/member/lang/jp.lang.php +++ b/modules/member/lang/jp.lang.php @@ -37,8 +37,8 @@ $lang->image_mark_max_width = '横幅制限サイズ'; $lang->image_mark_max_height = '縦幅制限サイズ'; $lang->signature_max_height = '署名欄の高さの制限'; - $lang->enable_openid = 'OpenID使用'; - $lang->enable_join = '会員加入を許可する'; + $lang->enable_openid = 'OpenID使用'; + $lang->enable_join = '会員登録を許可する'; $lang->enable_confirm = 'メール認証を使用'; $lang->enable_ssl = 'SSL使用'; $lang->security_sign_in = 'セキュア(SSL)'; @@ -46,25 +46,25 @@ $lang->limit_date = '制限日'; $lang->after_login_url = 'ログイン後表示するページのURL'; $lang->after_logout_url = 'ログアウト後表示するページのURL'; - $lang->redirect_url = '加入後表示するページ'; - $lang->agreement = '会員加入規約'; + $lang->redirect_url = '登録後表示するページ'; + $lang->agreement = '会員登録規約'; $lang->accept_agreement = '規約に同意する'; $lang->member_info = '会員情報'; $lang->current_password = '現在のパスワード'; $lang->openid = 'OpenID'; - $lang->allow_message = '쪽지 허용'; + $lang->allow_message = 'メッセージ許可'; $lang->allow_message_type = array( - 'Y' => '모두 허용', - 'F' => '등록된 친구들만 허용', - 'N' => '모두 금지', + 'Y' => '全て許可', + 'F' => '登録した友達のみ許可', + 'N' => '全て禁止', ); - $lang->about_allow_message = '쪽지 허용 방법 및 대상을 지정할 수 있습니다'; + $lang->about_allow_message = 'メッセージの許可タイプ及び対象を設定します。'; $lang->webmaster_name = 'ウェブマスターのお名前'; $lang->webmaster_email = 'ウェブマスターのメールアドレス'; $lang->about_keep_signed = 'ブラウザを閉じてもログイン状態が維持されます。\n\nログイン維持機能を利用すると、次回からログインする必要がなくなります。\n\nただ、インターネットカフェ、学校など公共場所で利用する場合、個人情報が流出する恐れがありますので、必ずログアウトしてください。'; - $lang->about_webmaster_name = '確認メール、またはサイト管理時に使用されるウェブマスターのお名前を入力してください(デフォルト : webmaster)。'; + $lang->about_webmaster_name = '確認メール、またはサイト管理時に使用されるウェブマスターのお名前を入力してください(デフォルト : webmaster)。'; $lang->about_webmaster_email = 'ウェブマスターのメールアドレスを入力して下さい。'; $lang->search_target_list = array( @@ -72,14 +72,18 @@ 'user_name' => 'お名前', 'nick_name' => 'ニックネーム', 'email_address' => 'メールアドレス', - 'regdate' => '加入日', + 'regdate' => '登録日', + 'regdate_more' => '登録日(以上)', + 'regdate_less' => '登録日(以下)', 'last_login' => '最近のログイン', + 'last_login_more' => '最近ログイン日(以上)', + 'last_login_less' => '最近ログイン日(以下)', 'extra_vars' => '拡張変数', ); $lang->cmd_login = 'ログイン'; $lang->cmd_logout = 'ログアウト'; - $lang->cmd_signup = '会員加入'; + $lang->cmd_signup = '会員登録'; $lang->cmd_modify_member_info = '会員情報修正'; $lang->cmd_modify_member_password = 'パスワード変更'; $lang->cmd_view_member_info = '会員情報表示'; @@ -91,7 +95,7 @@ $lang->cmd_member_group = 'グループ管理'; $lang->cmd_send_mail = 'メール送信'; $lang->cmd_manage_id = '禁止ID管理'; - $lang->cmd_manage_form = '加入フォーム管理'; + $lang->cmd_manage_form = '登録フォーム管理'; $lang->cmd_view_own_document = '書き込み表示'; $lang->cmd_trace_document = 'Trace Written Articles'; $lang->cmd_trace_comment = 'Trace Written Comments'; @@ -128,8 +132,8 @@ $lang->msg_exists_user_id = '既に存在するユーザIDです。他のIDを入力して下さい。'; $lang->msg_exists_email_address = '既に存在するメールアドレスです。他のメールアドレスを入力して下さい。'; $lang->msg_exists_nick_name = '既に存在するニックネームです。他のニックネームを入力して下さい。'; - $lang->msg_signup_disabled = '会員に加入することができません。'; - $lang->msg_already_logged = '既に会員に加入されています。'; + $lang->msg_signup_disabled = '会員に登録することができません。'; + $lang->msg_already_logged = '既に会員に登録されています。'; $lang->msg_not_logged = 'ログインしていません。'; $lang->msg_insert_group_name = 'グループ名を入力して下さい。'; $lang->msg_check_group = 'グループを選択して下さい。'; @@ -158,36 +162,37 @@ $lang->about_member_description = '会員に対する管理者のメモ帳です。'; $lang->about_group = '一つのユーザIDは多数のグループに属することができます。'; - $lang->about_column_type = '追加する加入フォームのタイプを指定して下さい。'; + $lang->about_column_type = '追加する登録フォームのタイプを指定して下さい。'; $lang->about_column_name = 'テンプレートで使用できる英文字の名前を入力して下さい(変数名)。'; - $lang->about_column_title = '加入または情報修正・照合時に表示されるタイトルです。'; + $lang->about_column_title = '登録または情報修正・照合時に表示されるタイトルです。'; $lang->about_default_value = 'デフォルトで入力される値を指定することができます。'; $lang->about_active = '活性化(有効化)にチェックを入れないと正常に表示されません。'; - $lang->about_form_description = '説明欄に入力すると加入時に表示されます。'; - $lang->about_required = 'チェックを入れると会員加入時に必須入力項目として設定されます。'; + $lang->about_form_description = '説明欄に入力すると登録時に表示されます。'; + $lang->about_required = 'チェックを入れると会員登録時に必須入力項目として設定されます。'; $lang->about_enable_openid = 'OpenIDをサポートする際にチェックを入れます。'; - $lang->about_enable_join = 'チェックを入れないとユーザが会員に加入できません。'; + $lang->about_enable_join = 'チェックを入れないとユーザが会員に登録できません。'; $lang->about_enable_confirm = '登録されたメールアドレスに確認メールを送信し、会員登録を確認します。'; $lang->about_enable_ssl = 'サーバーでSSLが可能な場合、会員登録/情報変更/ログイン等の個人情報はSSL(https)経由でサーバーにより安全に送信されます。'; - $lang->about_limit_day = '会員加入後一定の期間中、認証制限を行うことができます。'; + $lang->about_limit_day = '会員登録後一定の期間中、認証制限を行うことができます。'; $lang->about_limit_date = '指定された期間まで該当ユーザはログインできなくします。'; $lang->about_after_login_url = 'ログイン後表示されるページのURLを指定できます。指定のない場合、現在のページが維持されます。'; $lang->about_after_logout_url = 'ログアウト後表示されるページのURLを指定できます。指定のない場合、現在のページが維持されます。'; - $lang->about_redirect_url = '会員加入後、表示されるページのURLを指定できます。指定のない場合は会員加入する前のページに戻ります。'; - $lang->about_agreement = '会員加入規約がない場合は表示されません。'; + $lang->about_redirect_url = '会員登録後、表示されるページのURLを指定できます。指定のない場合は会員登録する前のページに戻ります。'; + $lang->about_agreement = '会員登録規約がない場合は表示されません。'; $lang->about_image_name = 'ユーザの名前を文字の代わりにイメージで表示させることができます。'; $lang->about_image_mark = '使用者の名前の前にマークを付けることができます。'; $lang->about_profile_image = 'ユーザのプロフィールイメージが使用できるようにします。'; $lang->about_signature_max_height = '署名欄の高さのサイズを制限します。 (0 もしくは空の場合は制限なし。)'; - $lang->about_accept_agreement = '加入規約をすべて読んだ上で同意します。'; + $lang->about_accept_agreement = '登録規約をすべて読んだ上で同意します。'; - $lang->about_member_default = '会員加入時に基本グループとして設定されます。'; + $lang->about_member_default = '会員登録時に基本グループとして設定されます。'; - $lang->about_openid = 'OpenIDで加入する際、IDとメールなどの基本情報は、このサイトに保存されますが、パスワードと認証のための処理用の情報は該当するOpenID提供サービス側で行われます。'; - $lang->about_openid_leave = 'OpenIDの退会は現在のサイトから会員情報を削除することを意味します。
    退会後ログインすると新しく加入することになり、書き込んだコンテンツに対する権限を維持することができません。'; - $lang->about_find_member_account = 'ID/パスワードは加入時に登録されたメールにてお知らせします。
    加入時に登録したメールアドレスを入力して「IDとパスワードの検索」ボタンをクリックして下さい。
    '; + $lang->about_openid = 'OpenIDで登録する際、IDとメールなどの基本情報は、このサイトに保存されますが、パスワードと認証のための処理用の情報は該当するOpenID提供サービス側で行われます。'; + $lang->about_openid_leave = 'OpenIDの退会は現在のサイトから会員情報を削除することを意味します。
    退会後ログインすると新しく登録することになり、書き込んだコンテンツに対する権限を維持することができません。'; + $lang->about_find_member_account = 'ID/パスワードは登録時に登録されたメールにてお知らせします。
    登録時に登録したメールアドレスを入力して「IDとパスワードの検索」ボタンをクリックして下さい。
    '; - $lang->about_member = "会員の作成・修正・削除することができ、グループの管理、加入フォームの管理などが行える会員管理モジュールです。デフォルトで作成されたグループにグループを追加作成して会員管理ができるようにし、加入フォーム管理では基本情報の他、フォームの入力情報を追加することができます。"; + $lang->about_member = "会員の作成・修正・削除することができ、グループの管理、登録フォームの管理などが行える会員管理モジュールです。デフォルトで作成されたグループにグループを追加作成して会員管理ができるようにし、登録フォーム管理では基本情報の他、フォームの入力情報を追加することができます。"; + $lang->about_ssl_port = '基本ポート以外のSSLポートを利用する場合、入力して下さい。'; ?> diff --git a/modules/member/lang/ko.lang.php b/modules/member/lang/ko.lang.php index bc834ac99..96b5d7dc2 100644 --- a/modules/member/lang/ko.lang.php +++ b/modules/member/lang/ko.lang.php @@ -73,7 +73,11 @@ 'nick_name' => '닉네임', 'email_address' => '메일주소', 'regdate' => '가입일시', + 'regdate_more' => '가입일시(이상)', + 'regdate_less' => '가입일시(이하)', 'last_login' => '최근로그인일시', + 'last_login_more' => '최근로그인일시(이상)', + 'last_login_less' => '최근로그인일시(이하)', 'extra_vars' => '확장변수', ); @@ -190,4 +194,5 @@ $lang->about_find_member_account = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다
    가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.
    '; $lang->about_member = "회원을 생성/수정/삭제 할 수 있고 그룹관리나 가입폼 관리등을 할 수 있는 회원 관리 모듈입니다.\n기본으로 생성된 그룹외의 그룹을 생성하여 회원 관리가 가능하고 가입폼관리를 통한 기본 정보외의 추가 정보를 요구받을 수도 있습니다."; + $lang->about_ssl_port = '기본 포트 이외의 SSL 포트를 사용하는 경우 포트번호를 입력해주세요'; ?> diff --git a/modules/member/lang/ru.lang.php b/modules/member/lang/ru.lang.php index af6e11855..66ee8a9b8 100644 --- a/modules/member/lang/ru.lang.php +++ b/modules/member/lang/ru.lang.php @@ -71,7 +71,11 @@ 'nick_name' => 'Ник', 'email_address' => 'Email', 'regdate' => 'Дата регистрации', + 'regdate_more' => '가입일시(이상)', + 'regdate_less' => '가입일시(이하)', 'last_login' => 'Дата последнего входа', + 'last_login_more' => '최근로그인일시(이상)', + 'last_login_less' => '최근로그인일시(이하)', 'extra_vars' => 'Экстра перем.', ); diff --git a/modules/member/lang/zh-CN.lang.php b/modules/member/lang/zh-CN.lang.php index 356f40ab0..dc2807437 100644 --- a/modules/member/lang/zh-CN.lang.php +++ b/modules/member/lang/zh-CN.lang.php @@ -73,7 +73,11 @@ 'nick_name' => '昵称', 'email_address' => '邮箱地址', 'regdate' => '注册日期', - 'last_login' => '最近登录', + 'regdate_more' => '注册日期(以上)', + 'regdate_less' => '注册日期(以下)', + 'last_login' => '最后登录', + 'last_login_more' => '最后登录(以上)', + 'last_login_less' => '最后登录시(以下)', 'extra_vars' => '扩展变数', ); diff --git a/modules/member/lang/zh-TW.lang.php b/modules/member/lang/zh-TW.lang.php index 39b7324f9..ae503ec69 100644 --- a/modules/member/lang/zh-TW.lang.php +++ b/modules/member/lang/zh-TW.lang.php @@ -40,13 +40,13 @@ $lang->enable_openid = '支援 OpenID'; $lang->enable_join = '允許會員註冊'; $lang->enable_confirm = '使用郵件認證'; - $lang->enable_ssl = '使用 SSL功能'; + $lang->enable_ssl = '使用 SSL 功能'; $lang->security_sign_in = '使用安全登入'; $lang->limit_day = '認證限制'; $lang->limit_date = '限制日期'; $lang->after_login_url = '登入後頁面轉向'; $lang->after_logout_url = '登出後頁面轉向'; - $lang->redirect_url = '註冊會員後頁面轉向'; + $lang->redirect_url = '會員註冊後頁面轉向'; $lang->agreement = '會員使用條款'; $lang->accept_agreement = '同意條款'; $lang->member_info = '會員資料'; @@ -71,9 +71,13 @@ 'user_id' => '帳號', 'user_name' => '姓名', 'nick_name' => '暱稱', - 'email_address' => '郵件地址', + 'email_address' => '電子郵件', 'regdate' => '註冊日期', + 'regdate_more' => '註冊日期(更多)', + 'regdate_less' => '註冊日期(較少)', 'last_login' => '最近登入', + 'last_login_more' => '最近登入(更多)', + 'last_login_less' => '最近登入(較少)', 'extra_vars' => '延伸變數', ); @@ -144,10 +148,10 @@ $lang->msg_user_not_confirmed = '您的註冊資料還沒有被確認,請確認您的電子郵箱。'; $lang->msg_user_limited = '您輸入的帳號%s以後才可以開始使用。'; - $lang->about_user_id = '帳號必須由 3~20字以內的英文+數字組成,第一個字必須是英文。'; - $lang->about_password = '密碼必須在 6~20字以內。'; - $lang->about_user_name = '姓名必須是 2~20字以內。'; - $lang->about_nick_name = '暱稱必須是 2~20字以內。'; + $lang->about_user_id = '帳號必須由 3~20 字以內的英文+數字組成,第一個字必須是英文。'; + $lang->about_password = '密碼必須在 6~20 字以內。'; + $lang->about_user_name = '姓名必須是 2~20 字以內。'; + $lang->about_nick_name = '暱稱必須是 2~20 字以內。'; $lang->about_email_address = '電子郵件地址除郵件認證外,當修改密碼或忘記密碼時也可以使用。'; $lang->about_homepage = '請輸入您的網址。'; $lang->about_blog_url = '請輸入部落格網址。'; @@ -166,15 +170,15 @@ $lang->about_form_description = '說明欄裡輸入的內容,在註冊時會顯示。'; $lang->about_required = '註冊時成為必填項目。'; - $lang->about_enable_openid = '想要網站支援 OpenID時,請勾選此項。'; + $lang->about_enable_openid = '想要網站支援 OpenID 時,請勾選此項。'; $lang->about_enable_join = '選擇此項後,用戶才可以註冊。'; $lang->about_enable_confirm = '為確認會員註冊資料,會向會員輸入的郵件地址發送註冊認證郵件。'; - $lang->about_enable_ssl = '如主機提供 SSL認證服務,新會員註冊/修改會員資料/登入等資料的傳送將使用 SSL(https)認證。'; + $lang->about_enable_ssl = '如主機提供 SSL 認證服務,新會員註冊/修改會員資料/登入等資料的傳送將使用 SSL(https) 認證。'; $lang->about_limit_day = '註冊會員後的認證有效期限。'; $lang->about_limit_date = '直到指定日期,否則該帳號都無法登入。'; - $lang->about_after_login_url = '可以指定登入後的頁面轉向 URL(留空為目前頁面)。'; - $lang->about_after_logout_url = '可以指定登出登錄後的頁面轉向url(留空為目前頁面)。'; - $lang->about_redirect_url = '請輸入註冊會員後的頁面轉向 URL。(留空為返回前頁)'; + $lang->about_after_login_url = '可以指定登入後的頁面轉向網址(留空為目前頁面)。'; + $lang->about_after_logout_url = '可以指定登出後的頁面轉向網址(留空為目前頁面)。'; + $lang->about_redirect_url = '請輸入會員註冊後的頁面轉向網址。(留空為返回前頁)'; $lang->about_agreement = '沒有會員條款時不顯示。'; $lang->about_image_name = '用戶暱稱可以用圖片替代。'; @@ -185,9 +189,10 @@ $lang->about_member_default = '將成為註冊會員時的預設用戶組。'; - $lang->about_openid = '用 OpenID註冊時,該網站只儲存帳號和郵件等基本資料,密碼和認證處理是在提供 OpenID服務的網站中得到解決。'; - $lang->about_openid_leave = '刪除 OpenID就等於永久刪除站內會員的資料。
    被刪除後,再重新登錄就等於新會員註冊,因此對以前自己寫的主題將失去其權限。'; + $lang->about_openid = '用 OpenID 註冊時,該網站只儲存帳號和郵件等基本資料,密碼和認證處理是在提供 OpenID 服務的網站中得到解決。'; + $lang->about_openid_leave = '刪除 OpenID 就等於永久刪除站內會員的資料。
    被刪除後,再重新登錄就等於新會員註冊,因此對以前自己寫的主題將失去其權限。'; $lang->about_find_member_account = '帳號/密碼將發送到您註冊時,所輸入的電子郵件當中。
    輸入註冊時的電子郵件地址後,請按「查詢帳號/密碼」按鈕。
    '; $lang->about_member = "可以新增/修改/刪除會員及管理用戶組或註冊表單的會員管理模組。\n此模組不僅可以建立預設用戶組以外的其他用戶組來管理會員,並且通過註冊表單的管理獲得除會員基本資料以外的延伸資料。"; + $lang->about_ssl_port = '請輸入想要使用預設 SSL 埠口以外的埠口。'; ?> diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index 1271910a1..c70c74636 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -83,13 +83,12 @@ **/ function procMemberAdminInsertConfig() { // 기본 정보를 받음 - $args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','enable_confirm','enable_ssl','limit_day','after_login_url','after_logout_url','redirect_url','agreement','profile_image','profile_image_max_width','profile_image_max_height','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height','signature_max_height','editor_skin','editor_colorset'); + $args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','enable_confirm','limit_day','after_login_url','after_logout_url','redirect_url','agreement','profile_image','profile_image_max_width','profile_image_max_height','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height','signature_max_height','editor_skin','editor_colorset'); if(!$args->skin) $args->skin = "default"; if(!$args->colorset) $args->colorset = "white"; if(!$args->editor_skin) $args->editor_skin= "default"; if(!$args->editor_colorset) $args->editor_colorset = "white"; if($args->enable_join!='Y') $args->enable_join = 'N'; - if($args->enable_ssl!='Y') $args->enable_ssl = 'N'; if($args->enable_openid!='Y') $args->enable_openid= 'N'; if($args->profile_image !='Y') $args->profile_image = 'N'; if($args->image_name!='Y') $args->image_name = 'N'; diff --git a/modules/member/member.admin.model.php b/modules/member/member.admin.model.php index 40e294adb..5f5f8b14a 100644 --- a/modules/member/member.admin.model.php +++ b/modules/member/member.admin.model.php @@ -51,13 +51,25 @@ $args->s_email_address = $search_keyword; break; case 'regdate' : - $args->s_regdate = $search_keyword; + $args->s_regdate = ereg_replace("[^0-9]","",$search_keyword); + break; + case 'regdate_more' : + $args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'regdate_less' : + $args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); break; case 'last_login' : $args->s_last_login = $search_keyword; break; + case 'last_login_more' : + $args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; + case 'last_login_less' : + $args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14); + break; case 'extra_vars' : - $args->s_extra_vars = $search_keyword; + $args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword); break; } } diff --git a/modules/member/member.class.php b/modules/member/member.class.php index 394c239ce..df550b18e 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -17,7 +17,7 @@ $member_config = $oModuleModel->getModuleConfig('member'); // SSL 사용시 회원가입/정보/비밀번호등과 관련된 action에 대해 SSL 전송하도록 지정 - if($member_config->enable_ssl == 'Y') { + if(Context::get('_use_ssl') == 'optional') { Context::addSSLAction('dispMemberLoginForm'); Context::addSSLAction('dispMemberModifyPassword'); Context::addSSLAction('dispMemberSignUpForm'); diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index f0df9c090..22c0881e4 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -52,6 +52,12 @@ require_once('./modules/member/openid_lib/libcurlemu.inc.php'); $user_id = Context::get('user_id'); + if (!$user_id) $user_id = Context::get('openid'); + + $referer_url = Context::get('referer_url'); + if (!$referer_url) $referer_url = $_SERVER['HTTP_REFERER']; + if (!$referer_url) + $referer_url = htmlspecialchars_decode(getRequestUri(RELEASE_SSL)); $openid = new SimpleOpenID(); @@ -65,12 +71,17 @@ $error = $openid->GetError(); $this->setError(-1); $this->setMessage($error['description']); + + if (Context::getRequestMethod() == 'POST') + header("location:" . $referer_url); } else { - $goto = urlencode(substr($_SERVER['HTTP_REFERER'],strlen(Context::getRequestUri(RELEASE_SSL)))); + $goto = urlencode($referer_url); $ApprovedURL = Context::getRequestUri(RELEASE_SSL) . "?module=member&act=procMemberOpenIDValidate&goto=" . $goto; $openid->SetApprovedURL($ApprovedURL); $url = $openid->GetRedirectURL(); $this->add('redirect_url', $url); + if (Context::getRequestMethod() == 'POST') + header("location:" . $url); } ob_clean(); } @@ -118,7 +129,7 @@ // 페이지 이동 if(Context::get('goto')){ $goto = Context::get('goto'); - header("location:./" . $goto); + header("location:" . $goto); }else{ header("location:./"); } diff --git a/modules/member/member.view.php b/modules/member/member.view.php index eef077373..775a75205 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -123,6 +123,7 @@ $this->setTemplateFile('modify_info'); } + /** * @brief 회원 작성글 보기 **/ @@ -201,6 +202,7 @@ **/ function dispMemberLoginForm() { // 템플릿 파일 지정 + Context::set('referer_url', $_SERVER['HTTP_REFERER']); $this->setTemplateFile('login_form'); } diff --git a/modules/member/queries/getMemberList.xml b/modules/member/queries/getMemberList.xml index 97bd4c0d1..95bf6961d 100644 --- a/modules/member/queries/getMemberList.xml +++ b/modules/member/queries/getMemberList.xml @@ -16,6 +16,10 @@ + + + + diff --git a/modules/member/queries/getMemberListWithinGroup.xml b/modules/member/queries/getMemberListWithinGroup.xml index a2c37bdae..e80affa2f 100644 --- a/modules/member/queries/getMemberListWithinGroup.xml +++ b/modules/member/queries/getMemberListWithinGroup.xml @@ -19,6 +19,10 @@ + + + + diff --git a/modules/member/schemas/member_autologin.xml b/modules/member/schemas/member_autologin.xml index a18bf578c..c4bc326fe 100644 --- a/modules/member/schemas/member_autologin.xml +++ b/modules/member/schemas/member_autologin.xml @@ -1,4 +1,4 @@ - - + +
    diff --git a/modules/member/skins/default/filter/openid_login.xml b/modules/member/skins/default/filter/openid_login.xml index 61bba2ff2..2557ca8ee 100644 --- a/modules/member/skins/default/filter/openid_login.xml +++ b/modules/member/skins/default/filter/openid_login.xml @@ -1,6 +1,7 @@ - + + diff --git a/modules/member/skins/default/login_form.html b/modules/member/skins/default/login_form.html index f86f47352..f26dfa61e 100644 --- a/modules/member/skins/default/login_form.html +++ b/modules/member/skins/default/login_form.html @@ -46,15 +46,16 @@

    {$lang->openid}

    -
    + +
    {$lang->about_openid}
    diff --git a/modules/member/skins/default/modify_info.html b/modules/member/skins/default/modify_info.html index 6b1488292..70668f499 100644 --- a/modules/member/skins/default/modify_info.html +++ b/modules/member/skins/default/modify_info.html @@ -16,25 +16,11 @@ - - - - - - - - - - - - - - - - - + + -
    profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data"> + + profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data"> @@ -130,13 +116,11 @@ {$lang->birthday} - -
    {zdate($member_info->birthday,"Y-m-d")}
    + + +

    {$lang->about_birthday}

    - @@ -237,11 +221,9 @@ -
    {zdate($val->value,"Y-m-d")}
    + + - @@ -257,4 +239,18 @@ {$lang->cmd_cancel}
    + + + diff --git a/modules/member/skins/default/saved_list.html b/modules/member/skins/default/saved_list.html index 239c3b952..996f3622f 100644 --- a/modules/member/skins/default/saved_list.html +++ b/modules/member/skins/default/saved_list.html @@ -21,7 +21,7 @@ {$val->getRegdate("Y-m-d H:i:s")} - + {$lang->cmd_delete} diff --git a/modules/member/skins/default/saved_list_popup.html b/modules/member/skins/default/saved_list_popup.html index 55f690077..94efb316e 100644 --- a/modules/member/skins/default/saved_list_popup.html +++ b/modules/member/skins/default/saved_list_popup.html @@ -31,7 +31,7 @@ {$val->getRegdate("Y-m-d H:i:s")} - + {$lang->cmd_select} diff --git a/modules/member/skins/default/signup_form.html b/modules/member/skins/default/signup_form.html index 612b4a2bd..086fc5e6b 100644 --- a/modules/member/skins/default/signup_form.html +++ b/modules/member/skins/default/signup_form.html @@ -2,29 +2,14 @@ - - - - - - - - - - - - - - - - - + + -
    -

    {$lang->cmd_signup}

    -
    +
    +

    {$lang->cmd_signup}

    +
    @@ -60,35 +45,35 @@ {$lang->user_name} * - +

    {$lang->about_user_name}

    {$lang->nick_name} * - +

    {$lang->about_nick_name}

    {$lang->email_address} * - +

    {$lang->about_email_address}

    {$lang->homepage} - +

    {$lang->about_homepage}

    {$lang->blog} - +

    {$lang->about_blog_url}

    @@ -96,7 +81,9 @@ {$lang->birthday} -
    + + +

    {$lang->about_birthday}

    @@ -106,10 +93,6 @@ - - @@ -128,7 +111,7 @@ @@ -128,10 +109,7 @@ @@ -244,11 +222,7 @@ -
    {zdate($val->value,"Y-m-d")}
    - - + @@ -269,3 +243,17 @@ + + + diff --git a/modules/member/tpl/member_config.html b/modules/member/tpl/member_config.html index 203330d89..32fbfc544 100644 --- a/modules/member/tpl/member_config.html +++ b/modules/member/tpl/member_config.html @@ -43,13 +43,6 @@ {$lang->about_enable_confirm} - - - - - + diff --git a/modules/menu/lang/jp.lang.php b/modules/menu/lang/jp.lang.php index ace4fb13d..cbb44eea8 100644 --- a/modules/menu/lang/jp.lang.php +++ b/modules/menu/lang/jp.lang.php @@ -1,6 +1,6 @@ 翻訳:RisaPapa、liahona * @brief メニュー(menu)モジュールの基本言語パッケージ **/ diff --git a/modules/menu/lang/zh-TW.lang.php b/modules/menu/lang/zh-TW.lang.php index e02f31162..28ea5aea8 100644 --- a/modules/menu/lang/zh-TW.lang.php +++ b/modules/menu/lang/zh-TW.lang.php @@ -39,15 +39,15 @@ $lang->msg_cannot_delete_for_child = '有子選單的選單不能刪除。'; $lang->about_title = '請輸入連接模組時,容易區分的標題。'; - $lang->about_menu_management = "選單管理可以建構所選擇版面中使用的選單。\n不僅可以建構指定級(層級)選單,點擊輸入的選單項即可對其詳細設置。\n點擊選單前圖標可以展開選單。\n偶爾無法正常顯示選單時,請按\"重新建立暫存檔\"按鈕更新資料。\n* 可能無法正常顯示指定級(層級)以上的選單。"; + $lang->about_menu_management = "選單管理可以建構所選擇版面中使用的選單。\n不僅可以建構指定級(層級)選單,點擊輸入的選單名稱即可對其進行詳細設置。\n點擊選單前圖標可以展開選單。\n偶爾無法正常顯示選單時,請按\"重新建立暫存檔\"按鈕更新資料。\n* 可能無法正常顯示指定級(層級)以上的選單。"; $lang->about_menu_name = '輸入不是圖片按鈕時,顯示為選單名標題。'; - $lang->about_menu_url = "點擊選單後,要移往的 URL。
    連接其他模組時,只輸入id值即可。
    沒有內容時,點擊選單不會產生任何事情。"; + $lang->about_menu_url = "按選單名稱後,要移往的網址。
    連結其他模組時,只要輸入模組id即可。
    沒有內容時,點擊選單不會產生任何事情。"; $lang->about_menu_open_window = '按選單後,是否要以新視窗開啟。'; $lang->about_menu_expand = '使用樹型選單(tree_menu.js)時,總是呈現展開狀態。'; $lang->about_menu_img_btn = '如果登錄圖片按鈕,在版面中會自動替換顯示為圖片按鈕。'; $lang->about_menu_group_srls = '如果選擇用戶組,只有所屬組用戶才能看到此選單。 —(xml檔案中不能隱藏)'; - $lang->about_menu = "選單模組可以透過選單管理器,整理已建立的模組並和版面互相連接,輕鬆架設一個完整的網站。\n選單模組雖然具有連接模組和版面,並透過版面來顯示多種類型的選單,但它不具備管理網站的功能。"; + $lang->about_menu = "選單模組可以透過選單管理器,管理已建立的模組並可和版面相互連結,輕鬆架設一個完整的網站。\n選單模組雖然可連結模組和版面,並透過版面來顯示多種類型的選單,但它不具備管理網站的功能。"; $lang->alert_image_only = "只允許圖形檔案。"; ?> diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index fd0d4758a..7769e9f8b 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -30,7 +30,7 @@ } /** - * @brief 메뉴 제목 변경 + * @brief 메뉴 제목 변경 **/ function procMenuAdminUpdate() { // 입력할 변수 정리 @@ -50,7 +50,7 @@ function procMenuAdminDelete() { $menu_srl = Context::get('menu_srl'); - // 캐시 파일 삭제 + // 캐시 파일 삭제 $cache_list = FileHandler::readDir("./files/cache/menu","",false,true); if(count($cache_list)) { foreach($cache_list as $cache_file) { @@ -139,7 +139,7 @@ // XML 파일을 갱신하고 위치을 넘겨 받음 $xml_file = $this->makeXmlFile($args->menu_srl); - // url이 mid일 경우 기록 남김 + // url이 mid일 경우 기록 남김 if(preg_match('/^([a-zA-Z0-9\_\-]+)$/', $args->url)) { $mid = $args->url; @@ -147,7 +147,7 @@ $mid_args->mid = $mid; // menu_srl에 해당하는 레이아웃 값을 구함 - $output = executeQuery('menu.getMenuLayout', $args); + $output = executeQuery('menu.getMenuLayout', $args); // 해당 모듈에 레이아웃 값이 정해져 있지 않으면 지정 $oModuleModel = &getModel('module'); @@ -167,15 +167,15 @@ } /** - * @brief 메뉴 메뉴 삭제 + * @brief 메뉴 메뉴 삭제 **/ function procMenuAdminDeleteItem() { - // 변수 정리 + // 변수 정리 $args = Context::gets('menu_srl','menu_item_srl'); $oMenuAdminModel = &getAdminModel('menu'); - // 원정보를 가져옴 + // 원정보를 가져옴 $item_info = $oMenuAdminModel->getMenuItemInfo($args->menu_item_srl); if($item_info->parent_srl) $parent_srl = $item_info->parent_srl; @@ -209,8 +209,9 @@ /** * @brief 메뉴의 메뉴를 이동 **/ +/* function procMenuAdminMoveItem() { - // 변수 설정 + // 변수 설정 $menu_id = Context::get('menu_id'); $source_item_srl = str_replace('menu_'.$menu_id.'_','',Context::get('source_item')); $target_item_srl = str_replace('menu_'.$menu_id.'_','',Context::get('target_item')); @@ -233,7 +234,7 @@ $output = executeQuery('menu.updateMenuItemParent', $target_args); if(!$output->toBool()) return $output; - // xml파일 재생성 + // xml파일 재생성 $xml_file = $this->makeXmlFile($target_item->menu_srl); // return 변수 설정 @@ -241,6 +242,65 @@ $this->add('xml_file', $xml_file); $this->add('source_item_srl', $source_item_srl); } +*/ + + function procMenuAdminMoveItem() { + $menu_srl = Context::get('menu_srl'); + $mode = Context::get('mode'); + $parent_srl = Context::get('parent_srl'); + $source_srl = Context::get('source_srl'); + $target_srl = Context::get('target_srl'); + + if(!$menu_srl || !$mode || !$target_srl) return new Object(-1,'msg_invalid_request'); + $this->moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode); + } + + + + function moveMenuItem($menu_srl,$parent_srl,$source_srl,$target_srl,$mode){ + // 원본 메뉴들을 구함 + $oMenuAdminModel = &getAdminModel('menu'); + + $target_item = $oMenuAdminModel->getMenuItemInfo($target_srl); + if($target_item->menu_item_srl != $target_srl) return new Object(-1,'msg_invalid_request'); + + // 위치 이동 (순서 조절) + if($mode == 'move') { + $args->parent_srl = $parent_srl; + $args->menu_srl = $menu_srl; + + if($source_srl) { + $source_item = $oMenuAdminModel->getMenuItemInfo($source_srl); + if($source_item->menu_item_srl != $source_srl) return new Object(-1,'msg_invalid_request'); + $args->listorder = $source_item->listorder-1; + } else { + $output = executeQuery('menu.getMaxListorder', $args); + if(!$output->toBool()) return $output; + $args->listorder = (int)$output->data->listorder; + if(!$args->listorder) $args->listorder= 0; + } + $args->parent_srl = $parent_srl; + $output = executeQuery('menu.updateMenuItemListorder', $args); + if(!$output->toBool()) return $output; + + $args->parent_srl = $parent_srl; + $args->menu_item_srl = $target_srl; + $output = executeQuery('menu.updateMenuItemNode', $args); + if(!$output->toBool()) return $output; + // 자식으로 추가 + } elseif($mode == 'insert') { + $args->menu_item_srl = $target_srl; + $args->parent_srl = $parent_srl; + $args->listorder = -1*getNextSequence(); + $output = executeQuery('menu.updateMenuItemNode', $args); + if(!$output->toBool()) return $output; + } + + $xml_file = $this->makeXmlFile($menu_srl); + return $xml_file; +// $this->add('xml_file', $xml_file); + } + /** * @brief xml 파일을 갱신 @@ -249,7 +309,7 @@ * 개발 중간의 문제인 것 같고 현재는 문제가 생기지 않으나 굳이 없앨 필요 없는 기능 **/ function procMenuAdminMakeXmlFile() { - // 입력값을 체크 + // 입력값을 체크 $menu_srl = Context::get('menu_srl'); // 해당 메뉴의 정보를 구함 @@ -257,10 +317,10 @@ $menu_info = $oMenuAdminModel->getMenu($menu_srl); $menu_title = $menu_info->title; - // xml파일 재생성 + // xml파일 재생성 $xml_file = $this->makeXmlFile($menu_srl); - // return 값 설정 + // return 값 설정 $this->add('menu_title',$menu_title); $this->add('xml_file',$xml_file); } @@ -316,8 +376,8 @@ function makeXmlFile($menu_srl) { // xml파일 생성시 필요한 정보가 없으면 그냥 return if(!$menu_srl) return; - - // DB에서 menu_srl에 해당하는 메뉴 아이템 목록을 listorder순으로 구해옴 + + // DB에서 menu_srl에 해당하는 메뉴 아이템 목록을 listorder순으로 구해옴 $args->menu_srl = $menu_srl; $args->sort_index = 'listorder'; $output = executeQuery('menu.getMenuItems', $args); @@ -350,7 +410,7 @@ } // 캐시 파일의 권한과 그룹 설정을 위한 공통 헤더 - $header_script = + $header_script = '$lang_type = Context::getLangType(); '. '$is_logged = Context::get(\'is_logged\'); '. '$logged_info = Context::get(\'logged_info\'); '. @@ -378,7 +438,7 @@ 'header("Pragma: no-cache"); '. '%s'. '?>'. - '%s', + '%s', $header_script, $this->getXmlTree($tree[0], $tree) ); @@ -391,9 +451,9 @@ '%s; '. '%s; '. '$menu->list = array(%s); '. - '?>', + '?>', $header_script, - $php_output['name'], + $php_output['name'], $php_output['buff'] ); @@ -419,7 +479,7 @@ // 자식 노드의 데이터 가져옴 if($menu_item_srl&&$tree[$menu_item_srl]) $child_buff = $this->getXmlTree($tree[$menu_item_srl], $tree); - // 변수 정리 + // 변수 정리 $names = $oMenuAdminModel->getMenuItemNames($node->name); foreach($names as $key => $val) { $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); @@ -457,7 +517,7 @@ $link = ''; } - // node->group_srls값이 있으면 + // node->group_srls값이 있으면 if($group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$group_srls); else $group_check_code = "true"; $attribute = sprintf( @@ -478,7 +538,7 @@ $group_check_code, $link ); - + if($child_buff) $buff .= sprintf('%s', $attribute, $child_buff); else $buff .= sprintf('', $attribute); } @@ -498,11 +558,11 @@ $oMenuAdminModel = &getAdminModel('menu'); foreach($source_node as $menu_item_srl => $node) { - // 자식 노드가 있으면 자식 노드의 데이터를 먼저 얻어옴 + // 자식 노드가 있으면 자식 노드의 데이터를 먼저 얻어옴 if($menu_item_srl&&$tree[$menu_item_srl]) $child_output = $this->getPhpCacheCode($tree[$menu_item_srl], $tree); else $child_output = array("buff"=>"", "url_list"=>array()); - // 변수 정리 + // 변수 정리 $names = $oMenuAdminModel->getMenuItemNames($node->name); foreach($names as $key => $val) { $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); @@ -513,7 +573,7 @@ if($node->url) $child_output['url_list'][] = $node->url; $output['url_list'] = array_merge($output['url_list'], $child_output['url_list']); - // node->group_srls값이 있으면 + // node->group_srls값이 있으면 if($node->group_srls) $group_check_code = sprintf('($is_admin==true||(is_array($group_srls)&&count(array_intersect($group_srls, array(%s)))))',$node->group_srls); else $group_check_code = "true"; @@ -584,7 +644,7 @@ $link_active, $link ); - + // buff 데이터를 생성한다 $output['buff'] .= sprintf('%s=>array(%s),', $node->menu_item_srl, $attribute); $output['name'] .= $name_str; diff --git a/modules/menu/menu.admin.model.php b/modules/menu/menu.admin.model.php index 2c3e55d16..774a5defc 100644 --- a/modules/menu/menu.admin.model.php +++ b/modules/menu/menu.admin.model.php @@ -152,7 +152,8 @@ $tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info'); // return 할 변수 설정 - $this->add('tpl', $tpl); + + $this->add('tpl', str_replace("\n"," ",$tpl)); } } diff --git a/modules/menu/menu.admin.view.php b/modules/menu/menu.admin.view.php index 247d8a653..ca48223c0 100644 --- a/modules/menu/menu.admin.view.php +++ b/modules/menu/menu.admin.view.php @@ -71,7 +71,6 @@ Context::set('menu_info', $menu_info); // 레이아웃을 팝업으로 지정 - Context::set('layout','none'); $this->setTemplateFile('menu_management'); } diff --git a/modules/menu/tpl/index.html b/modules/menu/tpl/index.html index faac5a776..b7f1216f5 100644 --- a/modules/menu/tpl/index.html +++ b/modules/menu/tpl/index.html @@ -1,5 +1,6 @@ + @@ -26,7 +27,7 @@ - + diff --git a/modules/menu/tpl/js/menu_admin.js b/modules/menu/tpl/js/menu_admin.js index c58ed8076..ba874e686 100644 --- a/modules/menu/tpl/js/menu_admin.js +++ b/modules/menu/tpl/js/menu_admin.js @@ -1,12 +1,4 @@ -/* 메뉴 입력후 */ -function completeInsertMenu(ret_obj) { - var menu_srl = ret_obj['menu_srl']; - alert(ret_obj['message']); - location.href = current_url.setQuery('act','dispMenuAdminContent'); - //var url = current_url.setQuery('act','dispMenuAdminManagement').setQuery('menu_srl',menu_srl); - //window.open(url); -} /* 메뉴 삭제 */ function doDeleteMenu(menu_srl) { @@ -69,9 +61,7 @@ function checkMousePosition(e) { */ function hideCategoryInfo() { - var obj = xGetElementById('menu_zone_info'); - xInnerHtml(obj,''); - obj.style.display = "none"; + jQuery("#menu_zone_info").html(""); } function completeGetMenuItemTplInfo(ret_obj, response_tags) { @@ -104,29 +94,6 @@ function completeGetMenuItemTplInfo(ret_obj, response_tags) { */ } -/* 메뉴 아이템 입력후 */ -function completeInsertMenuItem(ret_obj) { - var menu_id = ret_obj['menu_id']; - var xml_file = ret_obj['xml_file']; - var menu_title = ret_obj['menu_title']; - var menu_srl = ret_obj['menu_srl']; - var menu_item_srl = ret_obj['menu_item_srl']; - var parent_srl = ret_obj['parent_srl']; - - if(!xml_file) return; - - loadTreeMenu(xml_file, 'menu', 'menu_zone_menu', menu_title, '', doGetMenuItemInfo, menu_item_srl, doMoveTree); - - if(!menu_srl) xInnerHtml("menu_zone_info", ""); - else { - var params = {node_srl:menu_item_srl, parent_srl:parent_srl} - doGetMenuItemInfo('menu', params) - } - - if(typeof('fixAdminLayoutFooter')=="function") fixAdminLayoutFooter(); -} - - /* 메뉴를 드래그하여 이동한 후 실행할 함수 , 이동하는 item_srl과 대상 item_srl을 받음 */ function doMoveTree(menu_id, source_item, target_item) { var fo_obj = xGetElementById("fo_move_menu"); @@ -259,3 +226,12 @@ function completeDeleteButton(ret_obj, response_tags) { img_obj.src = ""; zone_obj.style.display = "none"; } +/* 메뉴 입력후 */ +function completeInsertMenu(ret_obj) { + var menu_srl = ret_obj['menu_srl']; + alert(ret_obj['message']); + location.href = current_url.setQuery('act','dispMenuAdminContent'); + + //var url = current_url.setQuery('act','dispMenuAdminManagement').setQuery('menu_srl',menu_srl); + //window.open(url); +} \ No newline at end of file diff --git a/modules/menu/tpl/js/menu_tree.js b/modules/menu/tpl/js/menu_tree.js new file mode 100644 index 000000000..0ee8aab2a --- /dev/null +++ b/modules/menu/tpl/js/menu_tree.js @@ -0,0 +1,165 @@ +function Tree(url){ + // clear tree; + jQuery('#menu > ul > li > ul').remove(); + + if(jQuery("ul.simpleTree > li > a").size() ==0)jQuery('').bind("click",function(e){addNode(0,e);}).appendTo("ul.simpleTree > li"); + + //ajax get data and transeform ul il + jQuery.get(url,function(data){ + jQuery(data).find("node").each(function(i){ + var text = jQuery(this).attr("text"); + var node_srl = jQuery(this).attr("node_srl"); + var parent_srl = jQuery(this).attr("parent_srl"); + var url = jQuery(this).attr("url"); + + // node + var node = jQuery('
  • '+text+'
  • '); + + // button + jQuery('').bind("click",function(e){ + addNode(node_srl,e); + return false; + }).appendTo(node); + + jQuery('').bind("click",function(e){ + modifyNode(node_srl,e); + return false; + }).appendTo(node); + + jQuery('').bind("click",function(e){ + deleteNode(node_srl); + return false; + }).appendTo(node); + + // insert parent child + if(parent_srl>0){ + if(jQuery('#tree_'+parent_srl+'>ul').length==0) jQuery('#tree_'+parent_srl).append(jQuery('
      ')); + jQuery('#tree_'+parent_srl+'> ul').append(node); + }else{ + if(jQuery('#menu ul.simpleTree > li > ul').length==0) jQuery("
        ").appendTo('#menu ul.simpleTree > li'); + jQuery('#menu ul.simpleTree > li > ul').append(node); + } + + }); + + //button show hide + jQuery("#menu li").each(function(){ + if(jQuery(this).parents('ul').size() > max_menu_depth) jQuery("a.add",this).hide(); + if(jQuery(">ul",this).size()>0) jQuery(">a.delete",this).hide(); + }); + + + // draw tree + simpleTreeCollection = jQuery('.simpleTree').simpleTree({ + autoclose: false, + afterClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterDblClick:function(node){ + //alert("text-"+jQuery('span:first',node).text()); + }, + afterMove:function(destination, source, pos){ + + jQuery("#menu_zone_info").html(""); + var menu_srl = jQuery("#fo_menu input[name=menu_srl]").val(); + var parent_srl = destination.attr('id').replace(/.*_/g,''); + var target_srl = source.attr('id').replace(/.*_/g,''); + var brothers = jQuery('#'+destination.attr('id')+' > ul > li:not([class^=line])').length; + var mode = brothers >1 ? 'move':'insert'; + var source_srl = pos == 0 ? 0: source.prevAll("li:not(.line)").get(0).id.replace(/.*_/g,''); + + jQuery.exec_json("menu.procMenuAdminMoveItem",{"menu_srl":menu_srl,"parent_srl":parent_srl,"target_srl":target_srl,"source_srl":source_srl,"mode":mode}, + function(data){ + if(data.error>0) Tree(xml_url); + }); + + }, + + // i want you !! made by sol + beforeMovedToLine : function(destination, source, pos){ +// if(typeof(destination.id) == 'undefined') return false; + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth); + }, + + // i want you !! made by sol + beforeMovedToFolder : function(destination, source, pos){ +// if(typeof(destination.id) == 'undefined') return false; + return (jQuery(destination).parents('ul').size() + jQuery('ul',source).size() <= max_menu_depth-1); + }, + afterAjax:function() + { + //alert('Loaded'); + }, + animate:true + ,docToFolderConvert:true + }); + + + // image url replace +// jQuery("#menu ul.simpleTree img").attr("src",function(){ return jQuery(this).attr("src").replace("images/","./common/js/plugins/ui.tree/images/");}); + + + + + // open all node + nodeToggleAll(); + },"xml"); +} + +function nodeToggleAll(){ + jQuery("[class*=close]", simpleTreeCollection[0]).each(function(){ + simpleTreeCollection[0].nodeToggle(this); + }); +} + + + +function modifyNode(node_srl,e){ + jQuery('#menu_zone_info').html(''); + jQuery("#tree_"+node_srl+" > span").click(); + var params ={ + "parent_srl":0 + ,"menu_item_srl":node_srl + }; + + jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){ + jQuery('#menu_zone_info').html(data.tpl); + jQuery('#menu_zone_info').html(data.tpl).css("margin-top",e.pageY-400); + }); +} + +function addNode(node_srl,e){ + + jQuery('#menu_zone_info').html(''); + jQuery("#tree_"+node_srl+" > span").click(); + + var params ={ + "menu_item_srl":0 + ,"parent_srl":node_srl + }; + + jQuery.exec_json('menu.getMenuAdminTplInfo', params, function(data){ + jQuery('#menu_zone_info').html(data.tpl).css("margin-top",e.pageY-400); + }); +} + + +function deleteNode(node_srl){ + + if(confirm(lang_confirm_delete)){ + jQuery('#menu_zone_info').html(''); + var params ={ + "menu_item_srl":node_srl + ,"menu_srl":jQuery("form input[name=menu_srl]").val() + }; + jQuery.exec_json('menu.procMenuAdminDeleteItem', params, function(data){ + Tree(xml_url); + }); + } +} + + +function completeInsertMenuItem(ret_obj) { + jQuery('#menu_zone_info').html(''); + Tree(xml_url); +} diff --git a/modules/menu/tpl/menu_item_info.html b/modules/menu/tpl/menu_item_info.html index ef5a93cf9..ac2f9f496 100644 --- a/modules/menu/tpl/menu_item_info.html +++ b/modules/menu/tpl/menu_item_info.html @@ -5,6 +5,16 @@
    - + @@ -198,11 +181,7 @@ -
    {zdate($val->value,"Y-m-d")}
    - - +
    {$val->description}
    @@ -221,5 +200,16 @@ + diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index 39d1214b5..5737711dd 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -2,23 +2,8 @@ - - - - - - - - - - - - - - - - - + +
    @@ -85,12 +70,8 @@
    {$lang->birthday}
    -
    {zdate($member_info->birthday,"Y-m-d")}
    +

    {$lang->about_birthday}

    - -
    {$lang->limit_date}
    -
    {zdate($member_info->limit_date,"Y-m-d")}
    - +

    {$lang->about_limit_date}

    {$lang->enable_ssl}
    - enable_ssl=='Y')-->checked="checked" class="checkbox" /> - {$lang->about_enable_ssl} -
    {$lang->limit_day}
    diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index 416784a1a..d43317555 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -40,7 +40,7 @@
    {$lang->no}
    {$lang->user_id}
    {$lang->user_name}
    {$lang->nick_name}
    {$no}{htmlspecialchars($val->title)}{htmlspecialchars($val->title)} {zdate($val->regdate,"Y-m-d")} {$lang->cmd_delete}
    + + + @@ -17,7 +27,7 @@ - + {@ $_row ++ } @@ -25,7 +35,7 @@ @@ -89,15 +99,25 @@
    + + + + + + +
    {$lang->parent_menu_name}
    {$lang->menu_name}
    {$val}
    {$lang->menu_url}
    - {$lang->cmd_search_mid} + {$lang->cmd_search_mid}

    {$lang->about_menu_url}

    + \ No newline at end of file diff --git a/modules/menu/tpl/menu_management.html b/modules/menu/tpl/menu_management.html index 1b2b00554..b7dea35a8 100644 --- a/modules/menu/tpl/menu_management.html +++ b/modules/menu/tpl/menu_management.html @@ -2,22 +2,19 @@ - + + + + +
    {$lang->menu_management}
    - {nl2br($lang->about_menu_management)} + {nl2br($lang->about_menu_management)} +{$lang->cmd_remake_cache} + @@ -57,14 +55,6 @@ - - -

    @@ -76,19 +66,23 @@ -
    - -
    - - - -
    - - + + +
    -
    + + + diff --git a/modules/module/lang/en.lang.php b/modules/module/lang/en.lang.php index 21002ea1f..145475feb 100644 --- a/modules/module/lang/en.lang.php +++ b/modules/module/lang/en.lang.php @@ -45,6 +45,7 @@ $lang->msg_no_checked_document = 'No checked articles exist.'; $lang->msg_move_failed = 'Failed to move'; $lang->msg_cannot_delete_for_child = 'Cannot delete a category having child categories.'; + $lang->msg_limit_mid ="Only alphabets+[alphabets+numbers+_] can be used as module name."; $lang->about_browser_title = "It will be shown in the browser title. It will be also used in a RSS/Trackback."; $lang->about_mid = "The module name will be used like http://address/?mid=ModuleName.\n(only english alphabet + [english alphabet ,numbers, and underscore(_)] are allowed)"; diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index 85f3c99d0..ba35905bb 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -45,6 +45,7 @@ $lang->msg_no_checked_document = '選択された書き込みがありません。'; $lang->msg_move_failed = '移動することができませんでした。'; $lang->msg_cannot_delete_for_child = '下位カテゴリのカテゴリは削除することができません。'; + $lang->msg_limit_mid ="モジュール名は「 半角英小文字+[半角英小文字+半角数字+_] 」のみ出来ます。"; $lang->about_browser_title = "ブラウザのタイトルバーに表示される内容です。RSS/Trackbackでも使用します。"; $lang->about_mid = "モジュール名は、http://アドレス/?mid=モジュール名、のように直接呼び出せる値です(英数+[英数,_のみ可])。"; @@ -61,7 +62,7 @@ $lang->about_page_count = 'リストの下段に移動できるページのリンク数が指定できます(デフォルト10個)。'; $lang->about_admin_id = '該当するモジュールに対して最高権限を持つ管理者を指定することができます。「,(コンマ)」で区切って多数のIDが指定できます(管理者ページへのアクセスはできません)。'; $lang->about_grant = '特定権限の対象をすべて解除するとログインしていない会員ユーザまで権限が与えられます。'; - $lang->about_module = "ゼロボードXEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。"; + $lang->about_module = "XEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。"; $lang->about_extra_vars_default_value = '多重・単一選択などのデフォルト値が、複数必要な場合は、「, (コンマ)」で区切って追加することができます。'; ?> diff --git a/modules/module/lang/zh-TW.lang.php b/modules/module/lang/zh-TW.lang.php index 426723d4a..7f724b1fd 100644 --- a/modules/module/lang/zh-TW.lang.php +++ b/modules/module/lang/zh-TW.lang.php @@ -60,9 +60,9 @@ $lang->about_list_count = '可以指定每頁顯示的主題數。(預設為20個)'; $lang->about_search_list_count = '可以指定搜尋或選擇分類時,每頁要顯示的文章數(預設為20個)。'; $lang->about_page_count = '可以指定顯示在清單下方的頁面數(預設為10個)。 '; - $lang->about_admin_id = '可以對該模組指定最高管理權限。
    有多名管理員時,可以用 (逗號) 區隔(無法訪問管理頁面)。 '; + $lang->about_admin_id = '可以對該模組指定最高管理權限。
    有多名管理員時,可以用 (.) 區隔(無法訪問管理頁面)。 '; $lang->about_grant = '全部解除特定權限的對象時,沒有登錄的會員也將具有相關權限。'; - $lang->about_module = "除基本 library以外 XE全部由模組組成。\n模組管理中列出所有已安裝的模組,因此易於管理。"; + $lang->about_module = "除基本函式庫以外XE全部由模組組成。\n模組管理中列出所有已安裝的模組,因此易於管理。"; - $lang->about_extra_vars_default_value = '當復選或單選的預設值需要很多個時,用 (逗號) 區隔。'; + $lang->about_extra_vars_default_value = '當復選或單選的預設值需要很多個時,用 (,) 區隔。'; ?> diff --git a/modules/opage/conf/info.xml b/modules/opage/conf/info.xml index 59a831137..d3b6e4dc6 100644 --- a/modules/opage/conf/info.xml +++ b/modules/opage/conf/info.xml @@ -9,7 +9,7 @@ 外部頁面 외부페이지를 XE내부로 삽입시키는 모듈 可以把外部页面插入到 Zeroboard XE内部的模块。 - 外部ページをゼロボードXE内部に挿入させるモジュール + 外部ページをXE内部に挿入させるモジュール Module for inserting external pages into inside of Zeroboard XE. 외부페이지를 XE내부로 삽입시키는 모듈 Модуль для вставки внешних страниц внутрь Zeroboard XE. diff --git a/modules/opage/lang/jp.lang.php b/modules/opage/lang/jp.lang.php index 1f35c207a..90a9dabfd 100644 --- a/modules/opage/lang/jp.lang.php +++ b/modules/opage/lang/jp.lang.php @@ -1,6 +1,6 @@ opage_path = "外部ドキュメントの場所"; $lang->opage_caching_interval = "キャッシング時間設定"; - $lang->about_opage = "外部のHTMLまたはPHPファイルをゼロボードXE内部で使用できるようにするモジュールです。
    絶対パス、相対パスで指定でき、「http://」で始まるサーバの外部ページも表示できます。"; - $lang->about_opage_path= "外部ドキュメントの場所を入力してください。
    「/path1/path2/sample.php」のような絶対パス、「../path2/sample.php」のような相対パスが使用できます。
    「http://URL/sample.php」のように使用すると結果を読み込んで表示します。
    現在ゼロボードXEがインストールされている絶対パスは次のようになっています。
    "; + $lang->about_opage = "外部のHTMLまたはPHPファイルをXE内部で使用できるようにするモジュールです。
    絶対パス、相対パスで指定でき、「http://」で始まるサーバの外部ページも表示できます。"; + $lang->about_opage_path= "外部ドキュメントの場所を入力してください。
    「/path1/path2/sample.php」のような絶対パス、「../path2/sample.php」のような相対パスが使用できます。
    「http://URL/sample.php」のように使用すると結果を読み込んで表示します。
    現在XEがインストールされている絶対パスは次のようになっています。
    "; $lang->about_opage_caching_interval = "分単位で指定でき、設定された時間の間は、臨時保存されたデータを出力します。
    他のサーバの情報を出力したり、データを出力する際、リソースが多く使われるため、数分単位でキャッシングすることをお勧めします。
    「0」に指定するとキャッシングされません。"; ?> diff --git a/modules/opage/lang/zh-TW.lang.php b/modules/opage/lang/zh-TW.lang.php index a590d286d..d23ff81c5 100644 --- a/modules/opage/lang/zh-TW.lang.php +++ b/modules/opage/lang/zh-TW.lang.php @@ -9,7 +9,7 @@ $lang->opage_path = "外部頁面路徑"; $lang->opage_caching_interval = "暫存時間設置"; - $lang->about_opage = "此模組可把外部 HTML或 PHP檔案插入到 XE中的模組。
    可以使用絕對路徑及相對路徑。而且使用以http:// 開頭的地址時,可以把外部主機中的頁面插入到 XE當中。"; - $lang->about_opage_path= "請輸入外部檔案路徑。
    可以使用如同 /path1/path2/sample.php的絕對路徑或如 ../path2/sample.php的相對路徑。
    如使用http://url/sample.php之類的地址,可以把此頁面的輸出結果顯示到 XE內部的指定位置。
    目前安裝的 XE絕對路徑如下:
    "; + $lang->about_opage = "此模組可把外部HTML或PHP檔案插入到 XE中的模組。
    可以使用絕對路徑及相對路徑。而且使用以http://開頭的網址時,可以把外部主機中的頁面插入到XE當中。"; + $lang->about_opage_path= "請輸入外部檔案路徑。
    可以使用如同 /path1/path2/sample.php的絕對路徑或如 ../path2/sample.php的相對路徑。
    如使用http://url/sample.php之類的地址,可以把此頁面的輸出結果顯示到XE內部的指定位置。
    目前安裝的XE絕對路徑如下:
    "; $lang->about_opage_caching_interval = "單位為分。暫存時間內頁面將輸出臨時儲存的資料。
    輸出外部主機訊息或資料時,如消耗資源很大,盡量把暫存時間設置大一點。
    0 表示不暫存。"; ?> diff --git a/modules/opage/tpl/js/opage_admin.js b/modules/opage/tpl/js/opage_admin.js index 9c4ee1c60..4f94966de 100644 --- a/modules/opage/tpl/js/opage_admin.js +++ b/modules/opage/tpl/js/opage_admin.js @@ -47,29 +47,3 @@ function doChangeCategory(fo_obj) { } return true; } - -/* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i{$v->title} - {$lang->cmd_select_all} - {$lang->cmd_unselect_all} + {$lang->cmd_select_all} + {$lang->cmd_unselect_all} diff --git a/modules/page/lang/zh-TW.lang.php b/modules/page/lang/zh-TW.lang.php index 4cb2856fd..a39a6d0e0 100644 --- a/modules/page/lang/zh-TW.lang.php +++ b/modules/page/lang/zh-TW.lang.php @@ -6,6 +6,6 @@ **/ $lang->page = "頁面"; - $lang->about_page = "可製作完整頁面的模組。\n利用最新主題列表或其他控件可以建立動態的頁面,且通過網頁編輯器做出多樣化的頁面。\n連接頁面 URL和其他模組連結的方式相同。即:mid=模組名稱。選擇預設選項時,此頁面將變為首頁。"; + $lang->about_page = "可製作完整頁面的模組。\n利用最新主題列表或其他控件可以建立動態的頁面,且通過網頁編輯器做出多樣化的頁面。\n連結頁面網址和其他模組連結的方式相同。即:mid=模組名稱。選擇預設選項時,此頁面將變為首頁。"; $lang->cmd_page_modify = "頁面編輯"; ?> diff --git a/modules/page/tpl/content.html b/modules/page/tpl/content.html index 73c506648..cba5b6e8d 100644 --- a/modules/page/tpl/content.html +++ b/modules/page/tpl/content.html @@ -3,10 +3,10 @@ diff --git a/modules/page/tpl/css/page.css b/modules/page/tpl/css/page.css index 5a4cf8021..3e654f17a 100644 --- a/modules/page/tpl/css/page.css +++ b/modules/page/tpl/css/page.css @@ -1,8 +1,9 @@ @charset "utf-8"; h3 { margin:0 10px 0 10px; } -.widget_list { margin:10px; } -.widget_list a { margin-bottom:10px; } -.editor_box { margin:0 10px 10px 10px; } -.button_box { float:right; overflow:hidden; } .adminLayer { margin-top:30px; } + +.buttonBox { border:2px solid #EEEEEE; padding:5px; overflow:hidden; *zoom:1;} +.buttonBox .fr { height:28px; } +.buttonBox .fl { height:28px; } +.buttonBox .buttonDiv { margin:2px 0; padding:0; border-top:1px solid EEEEEE; clear:both; } diff --git a/modules/page/tpl/filter/insert_page_content.xml b/modules/page/tpl/filter/insert_page_content.xml index 58e3b5c2e..05a2c2166 100644 --- a/modules/page/tpl/filter/insert_page_content.xml +++ b/modules/page/tpl/filter/insert_page_content.xml @@ -1,7 +1,6 @@
    - diff --git a/modules/page/tpl/js/page_admin.js b/modules/page/tpl/js/page_admin.js index fb95953f6..6fef7bd58 100644 --- a/modules/page/tpl/js/page_admin.js +++ b/modules/page/tpl/js/page_admin.js @@ -79,28 +79,3 @@ function completeRemoveWidgetCache(ret_obj) { alert(message); location.reload(); } - -/* 권한 관련 */ -function doSelectAll(obj, key) { - var fo_obj = obj.parentNode; - while(fo_obj.nodeName != 'FORM') { - fo_obj = fo_obj.parentNode; - } - - for(var i=0;i -
    - - - - -
    +
    -
    - - - +
    + +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +