From 750503add1c048374121763466e7042527f1d983 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 27 May 2009 07:07:26 +0000 Subject: [PATCH 001/243] =?UTF-8?q?=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EC=99=80=20=EB=A9=94=EC=9D=B8=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EA=B0=84=EC=9D=98=20SSO=20=EC=9D=B4=EB=8F=99=EC=8B=9C?= =?UTF-8?q?=20redire=20url=EC=97=90=20&=EA=B0=80=20&=EB=A1=9C=20?= =?UTF-8?q?=EB=90=98=EC=96=B4=20=EC=9E=88=EC=96=B4=20=EC=83=9D=EA=B8=B0?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6424 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index ba2609b27..1ccfc480d 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -360,7 +360,7 @@ // SSO 결과를 받는 경우 session_name() 세팅 if(Context::get('SSOID')) { setcookie(session_name(), Context::get('SSOID'), 0, '/'); - header("location:".getUrl('SSOID','')); + header("location:".str_replace('&','&',getUrl('SSOID',''))); return false; // SSO 결과를 요청 } else if($_COOKIE['sso']!=md5(Context::getRequestUri()) && !Context::get('SSOID')) { From 6f25cb3a1ec6e47a51bbf19c8854d2da03113f5d Mon Sep 17 00:00:00 2001 From: taggon Date: Wed, 27 May 2009 08:44:43 +0000 Subject: [PATCH 002/243] =?UTF-8?q?=EB=8B=A8=EB=9D=BD=EB=B3=84=20=ED=8E=B8?= =?UTF-8?q?=EC=A7=91=EA=B8=B0=20=EA=B8=B0=EB=B3=B8=20=EC=95=88=EB=82=B4?= =?UTF-8?q?=EB=AC=B8=EA=B5=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6425 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/lang/en.lang.php | 2 +- modules/editor/lang/es.lang.php | 2 +- modules/editor/lang/fr.lang.php | 2 +- modules/editor/lang/jp.lang.php | 2 +- modules/editor/lang/ko.lang.php | 382 ++++++++++++++--------------- modules/editor/lang/ru.lang.php | 2 +- modules/editor/lang/zh-CN.lang.php | 2 +- modules/editor/lang/zh-TW.lang.php | 2 +- 8 files changed, 198 insertions(+), 198 deletions(-) diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index d4b1615fd..d33363f11 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -211,7 +211,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/es.lang.php b/modules/editor/lang/es.lang.php index 786ec7efd..94547451e 100644 --- a/modules/editor/lang/es.lang.php +++ b/modules/editor/lang/es.lang.php @@ -207,7 +207,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index 9370d13ab..9c583f3d5 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -211,7 +211,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 1e7e25ad6..5b9baaaa6 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -213,7 +213,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index dcae5fcf0..550030171 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -1,219 +1,219 @@ - * @brief 위지윅에디터(editor) 모듈의 기본 언어팩 - **/ + /** + * @file modules/editor/lang/ko.lang.php + * @author zero + * @brief 위지윅에디터(editor) 모듈의 기본 언어팩 + **/ - $lang->editor = '위지윅 에디터'; - $lang->component_name = '컴포넌트'; - $lang->component_version = '버전'; - $lang->component_author = '제작자 '; - $lang->component_link = '링크'; - $lang->component_date = '제작일'; - $lang->component_license = '라이선스'; - $lang->component_history = '변경 이력'; - $lang->component_description = '설명'; - $lang->component_extra_vars = '설정 변수'; - $lang->component_grant = '권한설정'; - $lang->content_style = '문서 서식'; - $lang->content_font = '문서 폰트'; + $lang->editor = '위지윅 에디터'; + $lang->component_name = '컴포넌트'; + $lang->component_version = '버전'; + $lang->component_author = '제작자 '; + $lang->component_link = '링크'; + $lang->component_date = '제작일'; + $lang->component_license = '라이선스'; + $lang->component_history = '변경 이력'; + $lang->component_description = '설명'; + $lang->component_extra_vars = '설정 변수'; + $lang->component_grant = '권한설정'; + $lang->content_style = '문서 서식'; + $lang->content_font = '문서 폰트'; - $lang->about_component = '컴포넌트 소개'; - $lang->about_component_grant = '기본 컴포넌트외의 확장 컴포넌트 기능을 사용할 수 있는 권한을 지정할 수 있습니다.
(모두 해제시 아무나 사용 가능합니다)'; - $lang->about_component_mid = '에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.
(모두 해제 시 모든 대상에서 사용 가능합니다)'; + $lang->about_component = '컴포넌트 소개'; + $lang->about_component_grant = '기본 컴포넌트외의 확장 컴포넌트 기능을 사용할 수 있는 권한을 지정할 수 있습니다.
(모두 해제시 아무나 사용 가능합니다)'; + $lang->about_component_mid = '에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.
(모두 해제 시 모든 대상에서 사용 가능합니다)'; - $lang->msg_component_is_not_founded = '%s 에디터 컴포넌트를 찾을 수 없습니다.'; - $lang->msg_component_is_inserted = '선택하신 컴포넌트는 이미 입력되어 있습니다.'; - $lang->msg_component_is_first_order = '선택하신 컴포넌트는 첫번째에 위치하고 있습니다.'; - $lang->msg_component_is_last_order = '선택하신 컴포넌트는 마지막에 위치하고 있습니다.'; - $lang->msg_load_saved_doc = "자동 저장된 글이 있습니다. 복구하시겠습니까?\n글을 다 쓰신 후 저장하시면 자동 저장본은 사라집니다."; - $lang->msg_auto_saved = '자동 저장되었습니다.'; + $lang->msg_component_is_not_founded = '%s 에디터 컴포넌트를 찾을 수 없습니다.'; + $lang->msg_component_is_inserted = '선택하신 컴포넌트는 이미 입력되어 있습니다.'; + $lang->msg_component_is_first_order = '선택하신 컴포넌트는 첫번째에 위치하고 있습니다.'; + $lang->msg_component_is_last_order = '선택하신 컴포넌트는 마지막에 위치하고 있습니다.'; + $lang->msg_load_saved_doc = "자동 저장된 글이 있습니다. 복구하시겠습니까?\n글을 다 쓰신 후 저장하시면 자동 저장본은 사라집니다."; + $lang->msg_auto_saved = '자동 저장되었습니다.'; - $lang->cmd_disable = '비활성'; - $lang->cmd_enable = '활성'; + $lang->cmd_disable = '비활성'; + $lang->cmd_enable = '활성'; - $lang->editor_skin = '에디터 스킨'; - $lang->upload_file_grant = '파일 첨부 권한'; - $lang->enable_default_component_grant = '기본 컴포넌트 사용 권한'; - $lang->enable_component_grant = '컴포넌트 사용 권한'; - $lang->enable_html_grant = 'HTML편집 권한'; - $lang->enable_autosave = '자동저장 사용'; - $lang->height_resizable = '높이 조절 가능'; - $lang->editor_height = '에디터 높이'; + $lang->editor_skin = '에디터 스킨'; + $lang->upload_file_grant = '파일 첨부 권한'; + $lang->enable_default_component_grant = '기본 컴포넌트 사용 권한'; + $lang->enable_component_grant = '컴포넌트 사용 권한'; + $lang->enable_html_grant = 'HTML편집 권한'; + $lang->enable_autosave = '자동저장 사용'; + $lang->height_resizable = '높이 조절 가능'; + $lang->editor_height = '에디터 높이'; - $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; - $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; - $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; - $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다. (모두 해제 시 아무나 첨부 가능합니다)'; - $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제 시 아무나 사용 가능합니다)'; - $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다.'; - $lang->about_editor_height_resizable = '에디터의 높이를 직접 변경할 수 있도록 허용합니다.'; - $lang->about_enable_html_grant = 'HTML편집 권한을 부여할 수 있습니다.'; - $lang->about_enable_autosave = '글 작성시 자동 저장 기능을 활성화 시킬 수 있습니다.'; + $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; + $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; + $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다. (모두 해제 시 아무나 첨부 가능합니다)'; + $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제 시 아무나 사용 가능합니다)'; + $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다.'; + $lang->about_editor_height_resizable = '에디터의 높이를 직접 변경할 수 있도록 허용합니다.'; + $lang->about_enable_html_grant = 'HTML편집 권한을 부여할 수 있습니다.'; + $lang->about_enable_autosave = '글 작성시 자동 저장 기능을 활성화 시킬 수 있습니다.'; - $lang->edit->fontname = '글꼴'; - $lang->edit->fontsize = '크기'; - $lang->edit->use_paragraph = '문단기능'; - $lang->edit->fontlist = array( - 'Dotum' => '돋움', - 'Gulim' => '굴림', - 'Batang' => '바탕', - 'Arial' => 'Arial', - 'Arial Black' => 'Arial Black', - 'Tahoma' => 'Tahoma', - 'Verdana' => 'Verdana', - 'Sans-serif' => 'Sans-serif', - 'Serif' => 'Serif', - 'Monospace' => 'Monospace', - 'Cursive' => 'Cursive', - 'Fantasy' => 'Fantasy', - ); + $lang->edit->fontname = '글꼴'; + $lang->edit->fontsize = '크기'; + $lang->edit->use_paragraph = '문단기능'; + $lang->edit->fontlist = array( + 'Dotum' => '돋움', + 'Gulim' => '굴림', + 'Batang' => '바탕', + 'Arial' => 'Arial', + 'Arial Black' => 'Arial Black', + 'Tahoma' => 'Tahoma', + 'Verdana' => 'Verdana', + 'Sans-serif' => 'Sans-serif', + 'Serif' => 'Serif', + 'Monospace' => 'Monospace', + 'Cursive' => 'Cursive', + 'Fantasy' => 'Fantasy', + ); - $lang->edit->header = '형식'; - $lang->edit->header_list = array( - 'h1' => '제목 1', - 'h2' => '제목 2', - 'h3' => '제목 3', - 'h4' => '제목 4', - 'h5' => '제목 5', - 'h6' => '제목 6', - ); + $lang->edit->header = '형식'; + $lang->edit->header_list = array( + 'h1' => '제목 1', + 'h2' => '제목 2', + 'h3' => '제목 3', + 'h4' => '제목 4', + 'h5' => '제목 5', + 'h6' => '제목 6', + ); - $lang->edit->submit = '확인'; + $lang->edit->submit = '확인'; - $lang->edit->fontcolor = '글자 색'; - $lang->edit->fontbgcolor = '글자 배경색'; - $lang->edit->bold = '진하게'; - $lang->edit->italic = '기울임'; - $lang->edit->underline = '밑줄'; - $lang->edit->strike = '취소선'; - $lang->edit->sup = '위 첨자'; - $lang->edit->sub = '아래 첨자'; - $lang->edit->redo = '다시 실행'; - $lang->edit->undo = '되돌리기'; - $lang->edit->align_left = '왼쪽 정렬'; - $lang->edit->align_center = '가운데 정렬'; - $lang->edit->align_right = '오른쪽 정렬'; - $lang->edit->align_justify = '양쪽 정렬'; - $lang->edit->add_indent = '들여쓰기'; - $lang->edit->remove_indent = '내어쓰기'; - $lang->edit->list_number = '번호 매기기'; - $lang->edit->list_bullet = '목록'; - $lang->edit->remove_format = '글맵시 지우기'; + $lang->edit->fontcolor = '글자 색'; + $lang->edit->fontbgcolor = '글자 배경색'; + $lang->edit->bold = '진하게'; + $lang->edit->italic = '기울임'; + $lang->edit->underline = '밑줄'; + $lang->edit->strike = '취소선'; + $lang->edit->sup = '위 첨자'; + $lang->edit->sub = '아래 첨자'; + $lang->edit->redo = '다시 실행'; + $lang->edit->undo = '되돌리기'; + $lang->edit->align_left = '왼쪽 정렬'; + $lang->edit->align_center = '가운데 정렬'; + $lang->edit->align_right = '오른쪽 정렬'; + $lang->edit->align_justify = '양쪽 정렬'; + $lang->edit->add_indent = '들여쓰기'; + $lang->edit->remove_indent = '내어쓰기'; + $lang->edit->list_number = '번호 매기기'; + $lang->edit->list_bullet = '목록'; + $lang->edit->remove_format = '글맵시 지우기'; - $lang->edit->help_remove_format = '선택된 영역 내의 태그를 지웁니다.'; - $lang->edit->help_strike_through = '글자에 취소선을 표시합니다.'; - $lang->edit->help_align_full = '좌우 폭에 맞게 정렬을 합니다.'; + $lang->edit->help_remove_format = '선택된 영역 내의 태그를 지웁니다.'; + $lang->edit->help_strike_through = '글자에 취소선을 표시합니다.'; + $lang->edit->help_align_full = '좌우 폭에 맞게 정렬을 합니다.'; - $lang->edit->help_fontcolor = '글자의 색상을 지정합니다.'; - $lang->edit->help_fontbgcolor = '글자의 배경색상을 지정합니다.'; - $lang->edit->help_bold = '글자를 진하게 합니다.'; - $lang->edit->help_italic = '글자를 기울이게 합니다.'; - $lang->edit->help_underline = '밑줄을 긋습니다.'; - $lang->edit->help_strike = '취소선을 긋습니다.'; - $lang->edit->help_sup = '위 첨자를 입력합니다.'; - $lang->edit->help_sub = '아래 첨자를 입력합니다.'; - $lang->edit->help_redo = '다음 동작으로 돌아갑니다.'; - $lang->edit->help_undo = '이전 동작으로 돌아갑니다.'; - $lang->edit->help_align_left = '왼쪽 정렬을 합니다.'; - $lang->edit->help_align_center = '가운데 정렬을 합니다.'; - $lang->edit->help_align_right = '오른쪽 정렬을 합니다.'; - $lang->edit->help_add_indent = '단락의 들여쓰기 수준을 높입니다.'; - $lang->edit->help_remove_indent = '단락의 들여쓰기 수준을 낮춥니다.'; - $lang->edit->help_list_number = '숫자로된 목록을 적용합니다.'; - $lang->edit->help_list_bullet = '기호로된 목록을 적용합니다.'; - $lang->edit->help_use_paragraph = '문단 나누기를 하시려면 Ctrl+Enter를 누르시면 됩니다. (글 작성완료 후 Alt+S를 누르면 저장이 됩니다.)'; + $lang->edit->help_fontcolor = '글자의 색상을 지정합니다.'; + $lang->edit->help_fontbgcolor = '글자의 배경색상을 지정합니다.'; + $lang->edit->help_bold = '글자를 진하게 합니다.'; + $lang->edit->help_italic = '글자를 기울이게 합니다.'; + $lang->edit->help_underline = '밑줄을 긋습니다.'; + $lang->edit->help_strike = '취소선을 긋습니다.'; + $lang->edit->help_sup = '위 첨자를 입력합니다.'; + $lang->edit->help_sub = '아래 첨자를 입력합니다.'; + $lang->edit->help_redo = '다음 동작으로 돌아갑니다.'; + $lang->edit->help_undo = '이전 동작으로 돌아갑니다.'; + $lang->edit->help_align_left = '왼쪽 정렬을 합니다.'; + $lang->edit->help_align_center = '가운데 정렬을 합니다.'; + $lang->edit->help_align_right = '오른쪽 정렬을 합니다.'; + $lang->edit->help_add_indent = '단락의 들여쓰기 수준을 높입니다.'; + $lang->edit->help_remove_indent = '단락의 들여쓰기 수준을 낮춥니다.'; + $lang->edit->help_list_number = '숫자로된 목록을 적용합니다.'; + $lang->edit->help_list_bullet = '기호로된 목록을 적용합니다.'; + $lang->edit->help_use_paragraph = '문단 나누기를 하시려면 Ctrl+Enter를 누르시면 됩니다. (글 작성완료 후 Alt+S를 누르면 저장이 됩니다.)'; - $lang->edit->url = '링크'; - $lang->edit->blockquote = '인용문'; - $lang->edit->table = '표'; - $lang->edit->image = '그림'; - $lang->edit->multimedia = '동영상'; - $lang->edit->emoticon = '이모티콘'; + $lang->edit->url = '링크'; + $lang->edit->blockquote = '인용문'; + $lang->edit->table = '표'; + $lang->edit->image = '그림'; + $lang->edit->multimedia = '동영상'; + $lang->edit->emoticon = '이모티콘'; - $lang->edit->upload = '첨부'; - $lang->edit->upload_file = '파일 첨부'; - $lang->edit->link_file = '본문 삽입'; - $lang->edit->delete_selected = '선택 삭제'; + $lang->edit->upload = '첨부'; + $lang->edit->upload_file = '파일 첨부'; + $lang->edit->link_file = '본문 삽입'; + $lang->edit->delete_selected = '선택 삭제'; - $lang->edit->icon_align_article = '한 문단을 차지'; - $lang->edit->icon_align_left = '글의 왼쪽으로'; - $lang->edit->icon_align_middle = '가운데 정렬'; - $lang->edit->icon_align_right = '글의 우측으로'; + $lang->edit->icon_align_article = '한 문단을 차지'; + $lang->edit->icon_align_left = '글의 왼쪽으로'; + $lang->edit->icon_align_middle = '가운데 정렬'; + $lang->edit->icon_align_right = '글의 우측으로'; - $lang->about_dblclick_in_editor = '배경, 글자, 이미지, 인용문등에서 더블클릭을 하시면 상세한 컴포넌트 설정이 가능합니다.'; + $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 = '단축키 안내'; - $lang->edit->lineheight = '줄간격'; - $lang->edit->fontbgsampletext = '가나다'; + $lang->edit->lineheight = '줄간격'; + $lang->edit->fontbgsampletext = '가나다'; - $lang->edit->hyperlink = '하이퍼링크'; - $lang->edit->target_blank = '새창으로'; + $lang->edit->hyperlink = '하이퍼링크'; + $lang->edit->target_blank = '새창으로'; - $lang->edit->quotestyle1 = '왼쪽 실선'; - $lang->edit->quotestyle2 = '인용 부호'; - $lang->edit->quotestyle3 = '실선'; - $lang->edit->quotestyle4 = '실선 + 배경'; - $lang->edit->quotestyle5 = '굵은 실선'; - $lang->edit->quotestyle6 = '점선'; - $lang->edit->quotestyle7 = '점선 + 배경'; - $lang->edit->quotestyle8 = '적용 취소'; + $lang->edit->quotestyle1 = '왼쪽 실선'; + $lang->edit->quotestyle2 = '인용 부호'; + $lang->edit->quotestyle3 = '실선'; + $lang->edit->quotestyle4 = '실선 + 배경'; + $lang->edit->quotestyle5 = '굵은 실선'; + $lang->edit->quotestyle6 = '점선'; + $lang->edit->quotestyle7 = '점선 + 배경'; + $lang->edit->quotestyle8 = '적용 취소'; - $lang->edit->jumptoedit = '편집 도구모음 건너뛰기'; - $lang->edit->set_sel = '칸 수 지정'; - $lang->edit->row = '행'; - $lang->edit->col = '열'; - $lang->edit->add_one_row = '1행추가'; - $lang->edit->del_one_row = '1행삭제'; - $lang->edit->add_one_col = '1열추가'; - $lang->edit->del_one_col = '1열삭제'; + $lang->edit->jumptoedit = '편집 도구모음 건너뛰기'; + $lang->edit->set_sel = '칸 수 지정'; + $lang->edit->row = '행'; + $lang->edit->col = '열'; + $lang->edit->add_one_row = '1행추가'; + $lang->edit->del_one_row = '1행삭제'; + $lang->edit->add_one_col = '1열추가'; + $lang->edit->del_one_col = '1열삭제'; - $lang->edit->table_config = '표 속성 지정'; - $lang->edit->border_width = '테두리 굵기'; - $lang->edit->border_color = '테두리 색'; - $lang->edit->add = '더하기'; - $lang->edit->del = '빼기'; - $lang->edit->search_color = '색상찾기'; - $lang->edit->table_backgroundcolor = '표 배경색'; - $lang->edit->special_character = '특수문자'; - $lang->edit->insert_special_character = '특수문자 삽입'; - $lang->edit->close_special_character = '특수문자 레이어 닫기'; - $lang->edit->symbol = '일반기호'; - $lang->edit->number_unit = '숫자와 단위'; - $lang->edit->circle_bracket = '원,괄호'; - $lang->edit->korean = '한글'; - $lang->edit->greece = '그리스'; - $lang->edit->Latin = '라틴어'; - $lang->edit->japan = '일본어'; - $lang->edit->selected_symbol = '선택한 기호'; + $lang->edit->table_config = '표 속성 지정'; + $lang->edit->border_width = '테두리 굵기'; + $lang->edit->border_color = '테두리 색'; + $lang->edit->add = '더하기'; + $lang->edit->del = '빼기'; + $lang->edit->search_color = '색상찾기'; + $lang->edit->table_backgroundcolor = '표 배경색'; + $lang->edit->special_character = '특수문자'; + $lang->edit->insert_special_character = '특수문자 삽입'; + $lang->edit->close_special_character = '특수문자 레이어 닫기'; + $lang->edit->symbol = '일반기호'; + $lang->edit->number_unit = '숫자와 단위'; + $lang->edit->circle_bracket = '원,괄호'; + $lang->edit->korean = '한글'; + $lang->edit->greece = '그리스'; + $lang->edit->Latin = '라틴어'; + $lang->edit->japan = '일본어'; + $lang->edit->selected_symbol = '선택한 기호'; - $lang->edit->search_replace = '찾기/바꾸기'; - $lang->edit->close_search_replace = '찾기/바꾸기 레이어 닫기'; - $lang->edit->replace_all = '모두바꾸기'; - $lang->edit->search_words = '찾을단어'; - $lang->edit->replace_words = '바꿀단어'; - $lang->edit->next_search_words = '다음찾기'; - $lang->edit->edit_height_control = '입력창 크기 조절'; - - $lang->edit->merge_cells = '셀 병합'; - $lang->edit->split_row = '행 분할'; - $lang->edit->split_col = '열 분할'; - - $lang->edit->toggle_list = '목록 접기/펼치기'; - $lang->edit->minimize_list = '최소화'; - - $lang->edit->move = '이동'; - $lang->edit->materials = '글감보관함'; - $lang->edit->temporary_savings = '임시저장목록'; - - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->search_replace = '찾기/바꾸기'; + $lang->edit->close_search_replace = '찾기/바꾸기 레이어 닫기'; + $lang->edit->replace_all = '모두바꾸기'; + $lang->edit->search_words = '찾을단어'; + $lang->edit->replace_words = '바꿀단어'; + $lang->edit->next_search_words = '다음찾기'; + $lang->edit->edit_height_control = '입력창 크기 조절'; + + $lang->edit->merge_cells = '셀 병합'; + $lang->edit->split_row = '행 분할'; + $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/ru.lang.php b/modules/editor/lang/ru.lang.php index 31b0d24ef..b9af1f4cd 100644 --- a/modules/editor/lang/ru.lang.php +++ b/modules/editor/lang/ru.lang.php @@ -207,7 +207,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 81b4c7b46..2c075811b 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -213,7 +213,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; diff --git a/modules/editor/lang/zh-TW.lang.php b/modules/editor/lang/zh-TW.lang.php index 2393576ae..57fc6b05b 100644 --- a/modules/editor/lang/zh-TW.lang.php +++ b/modules/editor/lang/zh-TW.lang.php @@ -214,7 +214,7 @@ $lang->edit->materials = '글감보관함'; $lang->edit->temporary_savings = '임시저장목록'; - $lang->edit->drag_here = '글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; $lang->edit->paging_prev = '이전'; $lang->edit->paging_next = '다음'; From 6a9ee3ff45b1fcd2788152682b71d8be2f695015 Mon Sep 17 00:00:00 2001 From: royallin Date: Wed, 27 May 2009 09:52:23 +0000 Subject: [PATCH 003/243] Chinese traditional translation git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6426 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/mobile/lang/zh-TW.lang.php | 4 ++++ modules/file/lang/zh-TW.lang.php | 6 +++--- modules/point/lang/zh-TW.lang.php | 8 ++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/addons/mobile/lang/zh-TW.lang.php b/addons/mobile/lang/zh-TW.lang.php index fc321705e..13d8df620 100644 --- a/addons/mobile/lang/zh-TW.lang.php +++ b/addons/mobile/lang/zh-TW.lang.php @@ -4,6 +4,10 @@ * @author zero (zero@nzeo.com) 翻譯:royallin * @brief XE行動上網正體中文語言 **/ + // lang select by misol + $lang->president_lang = '已選擇語言'; + $lang->select_lang = '選擇語言'; + $lang->lang_return = '返回'; $lang->cmd_go_upper = '回上頁'; $lang->cmd_go_home = '回首頁'; diff --git a/modules/file/lang/zh-TW.lang.php b/modules/file/lang/zh-TW.lang.php index 2e7fd4aa9..96d7cd7cf 100644 --- a/modules/file/lang/zh-TW.lang.php +++ b/modules/file/lang/zh-TW.lang.php @@ -22,11 +22,11 @@ $lang->enable_download_group = '允許下載的群組'; $lang->about_allow_outlink = '是否允許連結外部檔案。(*.wmv, *.mp3等影音檔案除外)'; - $lang->about_allow_outlink_format = '파일 외부 링크 설정에 관계 없이 허용하는 파일 확장자입니다. 여러개 입력시에 쉼표(,)을 이용해서 구분해주세요.
例)hwp,doc,zip,pdf'; + $lang->about_allow_outlink_format = '設定允許外部連結的檔案格式。可以用(,)來區隔多個副檔名。
例)hwp,doc,zip,pdf'; $lang->about_allow_outlink_site = '可設置允許外部檔案連結的網站名單。當數量太多時,可換行輸入。
例)http://www.zeroboard.com'; $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 = '檢視原始主題'; @@ -36,7 +36,7 @@ $lang->msg_cart_is_null = ' 請選擇要刪除的檔案。'; $lang->msg_checked_file_is_deleted = '已刪除%d個檔案!'; $lang->msg_exceeds_limit_size = '已超過系統指定的檔案大小!'; - $lang->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; + $lang->msg_file_not_found = '找不到檔案。'; $lang->file_search_target_list = array( 'filename' => '檔案名稱', diff --git a/modules/point/lang/zh-TW.lang.php b/modules/point/lang/zh-TW.lang.php index 9b6694548..85aa2675b 100644 --- a/modules/point/lang/zh-TW.lang.php +++ b/modules/point/lang/zh-TW.lang.php @@ -25,8 +25,8 @@ $lang->disable_download = '禁止下載'; $lang->about_disable_download = '沒有點數時,將禁止下載。(圖片除外)'; - $lang->disable_read_document = '글 열람 금지'; - $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; + $lang->disable_read_document = '禁止閱讀文章'; + $lang->about_disable_read_document = '沒有點數時,將禁止閱讀文章。'; $lang->level_point_calc = '計算等級點數'; $lang->expression = '使用等級變數"i"輸入JS數學函數。例: Math.pow(i,2) * 90'; @@ -61,8 +61,8 @@ $lang->cmd_point_act_config = '功能act設置'; $lang->cmd_point_member_list = '會員點數列表'; - $lang->msg_cannot_download = '點數不夠無法下載!'; - $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; + $lang->msg_cannot_download = '點數不足無法下載!'; + $lang->msg_disallow_by_point = "點數不足無法閱讀文章 (需要 : %d, 目前 : %d)"; $lang->point_recal_message = '計算並套用中(%d / %d)。'; $lang->point_recal_finished = '點數重新計算並套用完畢。'; From 59314a901571097ada330de5c75507189900085d Mon Sep 17 00:00:00 2001 From: nicetwo Date: Wed, 27 May 2009 14:35:27 +0000 Subject: [PATCH 004/243] =?UTF-8?q?=EC=98=81=EC=96=B4=20-=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=20=EB=B2=88=EC=97=AD=EB=B3=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6427 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/homepage/conf/info.xml | 2 +- modules/member/lang/en.lang.php | 10 ++++---- modules/wiki/conf/info.xml | 4 ++-- modules/wiki/lang/en.lang.php | 6 ++--- modules/wiki/skins/xe_wiki/skin.xml | 37 ++++++++++++++++++++++------- 5 files changed, 39 insertions(+), 20 deletions(-) diff --git a/modules/homepage/conf/info.xml b/modules/homepage/conf/info.xml index 9f9582236..013d677f4 100644 --- a/modules/homepage/conf/info.xml +++ b/modules/homepage/conf/info.xml @@ -7,7 +7,7 @@ 虛擬網站 CafeXE XE 내에서 Cafe를 분양하고 관리할 수 있는 기능을 제공합니다 - XE 내에서 Cafe를 분양하고 관리할 수 있는 기능을 제공합니다 + Making and managing Cafes in XE is availabe via CafeXE XE 내에서 Cafe를 분양하고 관리할 수 있는 기능을 제공합니다 提供一种在XE内迅速建立子站点的功能。 提供XE運作及管理虛擬網站的功能。 diff --git a/modules/member/lang/en.lang.php b/modules/member/lang/en.lang.php index 355884efa..5c3b00f3c 100644 --- a/modules/member/lang/en.lang.php +++ b/modules/member/lang/en.lang.php @@ -39,7 +39,7 @@ $lang->group_image_mark = 'Group Image Mark'; $lang->group_image_mark_max_width = 'Max Width'; $lang->group_image_mark_max_height = 'Max Height'; - $lang->group_image_mark_order = '그룹 이미지 마크 순서'; + $lang->group_image_mark_order = 'Group Image Mark Order'; $lang->signature_max_height = 'Max Signature Height'; $lang->enable_openid = 'Enable OpenID'; $lang->enable_join = 'Allow Member Join'; @@ -78,11 +78,11 @@ 'nick_name' => 'Nickname', 'email_address' => 'Email Address', 'regdate' => 'Join Date', - 'regdate_more' => '가입일시(이상)', - 'regdate_less' => '가입일시(이하)', + 'regdate_more' => 'Join Date (more)', + 'regdate_less' => 'Join Date (less)', 'last_login' => 'Last Login Date', - 'last_login_more' => '최근로그인일시(이상)', - 'last_login_less' => '최근로그인일시(이하)', + 'last_login_more' => 'Last Login Date (more)', + 'last_login_less' => 'Last Login Date (less)', 'extra_vars' => 'Extra Vars', ); diff --git a/modules/wiki/conf/info.xml b/modules/wiki/conf/info.xml index 4a10b8f47..822d59900 100644 --- a/modules/wiki/conf/info.xml +++ b/modules/wiki/conf/info.xml @@ -1,12 +1,12 @@ 위키 - wiki + Wiki 维基系统 維基 wiki 위키모듈. - wiki module. + Wiki Module. 维基模块。 維基百科模組。 wikiモジュール diff --git a/modules/wiki/lang/en.lang.php b/modules/wiki/lang/en.lang.php index a50c93d0a..946b9d7fe 100644 --- a/modules/wiki/lang/en.lang.php +++ b/modules/wiki/lang/en.lang.php @@ -7,10 +7,10 @@ $lang->wiki = 'Wiki'; $lang->not_exist = 'There is no such document. If you have proper permission, you can create the document'; - $lang->cmd_create = 'Create document'; + $lang->cmd_create = 'Create Document'; $lang->cmd_wiki_list = 'List'; - $lang->cmd_view_info = 'Wiki information'; - $lang->use_comment = 'Use comment'; + $lang->cmd_view_info = 'Wiki Information'; + $lang->use_comment = 'Use Comments'; $lang->about_use_comment = 'You may configure to enable comments.'; $lang->contributors = 'Contributors'; $lang->notice_old_revision = 'This is an old revision'; diff --git a/modules/wiki/skins/xe_wiki/skin.xml b/modules/wiki/skins/xe_wiki/skin.xml index 6e2f12655..c2bc63a6b 100644 --- a/modules/wiki/skins/xe_wiki/skin.xml +++ b/modules/wiki/skins/xe_wiki/skin.xml @@ -1,11 +1,15 @@ XE Default Skin + XE Default Skin XE维基默认皮肤 XE維基預設面板 XEデフォルトスキン XE Default Skin + + + This is default skin of Wiki XE维基默认皮肤。 @@ -27,27 +31,42 @@ GPL - 제목 - 제목 + + 제목 + Title タイトル 제목 標題 - 제목을 적어주세요. Plase input the title. タイトルを入力して下さい。 + 제목을 적어주세요. + Plase input the title. + タイトルを入力して下さい。 제목을 적어주세요. 請輸入標題。 - 부제목 Subtitle サブタイトル + + + 부제목 + Subtitle + サブタイトル 부제목 副標題 - 제목 옆에 나타날 부제목을 적어주세요. Please input the subtitle which will be displayed beside title. タイトルの隣りに表示されるサブタイトルを入力して下さい。 + 제목 옆에 나타날 부제목을 적어주세요. + Please input the subtitle which will be displayed beside title. + タイトルの隣りに表示されるサブタイトルを入力して下さい。 제목 옆에 나타날 부제목을 적어주세요. 請輸入顯示在標題旁的副標題。 - 상세 설명 - Description 詳細 + + + 상세 설명 + Description + 詳細 상세 설명 說明 - 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. You may input description which will be displayed under the title. タイトルの下に表示される説明文を入力して下さい。 + 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. + You may input description which will be displayed under the title. + タイトルの下に表示される説明文を入力して下さい。 게시판 제목 아래 표시될 설명을 입력하실 수 있습니다. 請輸入顯示在標題下方的說明。 - + + From 900f6982a7e370d11e82b67c96f938c4c5dc4d74 Mon Sep 17 00:00:00 2001 From: nicetwo Date: Wed, 27 May 2009 15:04:21 +0000 Subject: [PATCH 005/243] =?UTF-8?q?=EC=98=81=EC=96=B4=20-=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=88=EC=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6428 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/file/lang/en.lang.php | 14 +++--- widgets/content/conf/info.xml | 84 +++++++++++++++++++---------------- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/modules/file/lang/en.lang.php b/modules/file/lang/en.lang.php index 8207ae6ca..994eb0088 100644 --- a/modules/file/lang/en.lang.php +++ b/modules/file/lang/en.lang.php @@ -13,17 +13,17 @@ $lang->is_valid = 'Valid'; $lang->is_stand_by = 'Stand by'; $lang->file_list = 'Attachments List'; - $lang->allow_outlink = '파일 외부 링크'; - $lang->allow_outlink_site = '파일 외부 허용 사이트'; - $lang->allow_outlink_format = '파일 외부 링크 허용 확장자'; + $lang->allow_outlink = 'External Link'; + $lang->allow_outlink_site = 'Allowed Websites'; + $lang->allow_outlink_format = 'Allowed Formats'; $lang->allowed_filesize = 'Maximum File Size'; $lang->allowed_attach_size = 'Maximum Attachments'; $lang->allowed_filetypes = 'Allowed Extensions'; $lang->enable_download_group = 'Download Allowed Groups'; - $lang->about_allow_outlink = '리퍼러에 따라 파일 외부 링크를 차단할 수 있습니다.(*.wmv, *.mp3등 미디어 파일 제외)'; - $lang->about_allow_outlink_format = '파일 외부 링크 설정에 관계 없이 허용하는 파일 확장자입니다. 여러개 입력시에 쉼표(,)을 이용해서 구분해주세요.
eg)hwp,doc,zip,pdf'; - $lang->about_allow_outlink_site = '파일 외부 링크 설정에 관계 없이 허용하는 사이트 주소입니다. 여러개 입력시에 줄을 바꿔서 구분해주세요.
ex)http://www.zeroboard.com'; + $lang->about_allow_outlink = 'You can shut external links according to referers. (except media files like *.wmv, *.mp3)'; + $lang->about_allow_outlink_format = 'These formats will always be allowed. Please use comma(,) for multiple input.
eg)hwp,doc,zip,pdf'; + $lang->about_allow_outlink_site = 'These websites will alyways be allowed. Please use new line for multiple input.
ex)http://www.zeroboard.com'; $lang->about_allowed_filesize = 'You can assign file size limit for each file. (Exclude administrators)'; $lang->about_allowed_attach_size = 'You can assign file size limit for each document. (Exclude administrators)'; $lang->about_allowed_filetypes = 'Only allowed extentsions can be attached. To allow an extension, use "*.[extention]". To allow multiple extensions, use ";" between each extension.
ex) *.* or *.jpg;*.gif;
(Exclude Administrators)'; @@ -36,7 +36,7 @@ $lang->msg_cart_is_null = 'Please select file(s) to delete'; $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->msg_file_not_found = '요청하신 파일을 찾을 수 없습니다.'; + $lang->msg_file_not_found = 'Could not find requested file.'; $lang->file_search_target_list = array( diff --git a/widgets/content/conf/info.xml b/widgets/content/conf/info.xml index 20c9e04f2..53a7401e5 100644 --- a/widgets/content/conf/info.xml +++ b/widgets/content/conf/info.xml @@ -1,12 +1,12 @@ Content 위젯 - Content widget + Content 全局内容控件 內容組件 コンテンツウィジェット 게시판, 코멘트, 첨부파일 등 Content를 출력하는 위젯입니다. - 게시판, 코멘트, 첨부파일 등 Content를 출력하는 위젯입니다. + This widget displays Content such as articles, comments, or attached files. 以各种样式显示主题,评论,附件等站内内容的全局控件。 是種可輸出討論板、評論,附加檔案等內容的組件。 掲示板の書き込み、コメント、添付ファイルなどコンテンツを出力するウィジェットです。 @@ -27,14 +27,14 @@ select 추출대상 - 추출대상 + Target 对象 目標 抽出対象 document 게시물 - 게시물 + Article 主题 主題 書き込み @@ -42,7 +42,7 @@ comment 댓글 - 댓글 + Comment 评论 評論 コメント @@ -50,7 +50,7 @@ image 첨부이미지 - 첨부이미지 + Attached Image 图片 圖片 添付イメージ @@ -58,7 +58,7 @@ trackback 트랙백 - 트랙백 + Trackback 引用 引用 トラックバック @@ -75,14 +75,14 @@ select 내용형태 - 내용형태 + Content Type 内容样式 內容樣式 内容のタイプ normal 제목 - 제목 + Title 标题 標題 タイトル @@ -90,7 +90,7 @@ image_title 이미지+제목 - 이미지+제목 + Image+Title 图片+标题 圖片+標題 画像+タイトル @@ -98,7 +98,7 @@ gallery 겔러리 - 겔러리 + Gallery 相册 相簿 ギャラリー @@ -106,7 +106,7 @@ image_title_content 이미지+제목+내용 - 이미지+제목+내용 + Image+Title+Content 图片+标题+内容 圖片+標題+內容 画像+タイトル+内容 @@ -115,14 +115,14 @@ select 탭형태 - 탭형태 + Tab Type 选项卡样式 分頁樣式 タブのスタイル none 없음 - 없음 + None なし @@ -130,7 +130,7 @@ tab_top 상단 탭형 - 상단 탭형 + Upper Tab Type 顶端选项卡 頂端分頁 上段配置型タブ @@ -138,7 +138,7 @@ tab_left 왼쪽 탭형 - 왼쪽 탭형 + Left Tab Type 左侧选项卡 左側分頁 左側の配置型タブ @@ -148,14 +148,14 @@ select-multi-order 표시항목 및 순서 - 표시항목 및 순서 + Display Target & Order 显示项及顺序 顯示項目順序 表示項目、および順番 title 제목 - 제목 + Title 标题 標題 タイトル @@ -163,7 +163,7 @@ thumbnail 섬네일 - 섬네일 + Thumbnail 缩略图 縮圖 サムネール @@ -171,7 +171,7 @@ regdate 등록일 - 등록일 + Regdate 发布日期 發表日期 登録日 @@ -179,7 +179,7 @@ nickname 글쓴이 - 글쓴이 + Author 发布者 作者 登録者 @@ -187,7 +187,7 @@ content 내용 - 내용 + Content 内容 內容 内容 @@ -197,14 +197,14 @@ select 게시판 이름 표시 - 게시판 이름 표시 + Display Article Name 显示版面名称 討論板名稱 掲示板名の表示 Y 출력 - 출력 + Dispaly 显示 顯示 表示 @@ -212,7 +212,7 @@ N 출력하지 않음 - 출력하지 않음 + No Display 不显示 不顯示 表示しない @@ -222,14 +222,14 @@ select 댓글수 표시 - 댓글수 표시 + Comment Count 显示评论数 評論數 コメント数 Y 출력 - 출력 + Display 显示 顯示 表示 @@ -237,7 +237,7 @@ N 출력하지 않음 - 출력하지 않음 + No Display 不显示 不顯示 表示しない @@ -247,14 +247,14 @@ select 엮인글수 표시 - 엮인글수 표시 + Trackback 显示引用数 引用數 トラックバック数の表示 Y 출력 - 출력 + Display 显示 顯示 表示 @@ -262,7 +262,7 @@ N 출력하지 않음 - 출력하지 않음 + No Display 不显示 不顯示 表示しない @@ -271,14 +271,14 @@ select 분류 표시 - 분류 표시 + Category 显示分类 分類 カテゴリ表示 Y 출력 - 출력 + Display 显示 顯示 表示 @@ -286,7 +286,7 @@ N 출력하지 않음 - 출력하지 않음 + No Display 不显示 不顯示 表示しない @@ -295,14 +295,14 @@ select 아이콘 표시 - 아이콘 표시 + Icon 显示图标 圖示 アイコン表示 Y 출력 - 출력 + Display 显示 顯示 表示 @@ -310,7 +310,7 @@ N 출력하지 않음 - 출력하지 않음 + No Display 不显示 不顯示 表示しない @@ -497,12 +497,14 @@ select 페이지수 + Page 分页 頁數 ページ数 1 1 + 1 1 1 1 @@ -510,6 +512,7 @@ 2 2 + 2 2 2 2 @@ -517,11 +520,13 @@ 3 3 + 3 3 3 3 페이지수 2이상일 경우 이전/다음 버튼이 나타납니다. + Prev/Next buttons will appear when there are more than 2 pages. 分页数在2以上时,将会出现上一页/下一页按钮。 頁數在2以上時,會出現上一頁/下一頁按鈕。 ページ数が2枚以上の場合、前へ/次へのボタンが現れます。 @@ -561,6 +566,7 @@ text 내용 글자수 + Content Length 内容の文字数 内容摘要字数 內容字數 @@ -638,13 +644,13 @@ HTML 출력 방식 HTML 출력 방식 HTML 출력 방식 - HTML 출력 방식 + HTML Display Type HTML 출력 방식 HTML 출력 방식 TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) - TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + You can choose TABLE tag or UL tag to display. (default is TABLE) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) From 9944e9e3674798b076dc964b63543b831ffed8ae Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 27 May 2009 23:06:17 +0000 Subject: [PATCH 006/243] =?UTF-8?q?safari,=20=ED=81=AC=EB=A1=AC=EB=93=B1?= =?UTF-8?q?=EC=97=90=EC=84=9C=20img=20=EC=9D=98=20width=EC=86=8D=EC=84=B1?= =?UTF-8?q?=EA=B0=92=EC=9D=B4=20=EC=97=86=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=ED=81=AC=EA=B8=B0=EB=A5=BC=20=EA=B5=AC=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EB=AA=BB=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=EB=A1=9C=20?= =?UTF-8?q?=ED=81=AC=EA=B8=B0=EB=A5=BC=20=EA=B5=AC=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EB=AA=BB=ED=95=98=EB=A9=B4=20resize=20=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20resize=5Fimage=20=EC=95=A0?= =?UTF-8?q?=EB=93=9C=EC=98=A8=EC=9D=98=20=EB=8F=99=EC=9E=91=EC=9D=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6429 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/resize_image/js/resize_image.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/addons/resize_image/js/resize_image.js b/addons/resize_image/js/resize_image.js index 9f8b5982e..bfee1e363 100644 --- a/addons/resize_image/js/resize_image.js +++ b/addons/resize_image/js/resize_image.js @@ -166,6 +166,7 @@ $(document).ready(function(){ var img = $(this); var width = img.attr("width"); if(!width) width = img.width(); + if(!width) return; img.attr("orig_width",width); img.attr("width",1); }); @@ -173,6 +174,7 @@ $(document).ready(function(){ $(this).find("img").each(function(){ var img = $(this); + if(!img.attr("orig_width")) return; var src = img.attr("src"); img.attr("width",img.attr("orig_width")); img.removeAttr("orig_width",''); From 56226fc83213cd76a2537b5937a739099536dc79 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 28 May 2009 00:31:19 +0000 Subject: [PATCH 007/243] =?UTF-8?q?safari/chrome=20=EB=B8=8C=EB=9D=BC?= =?UTF-8?q?=EC=9A=B0=EC=A0=80=EC=97=90=EC=84=9C=20document.ready=EC=97=90?= =?UTF-8?q?=20=EB=8C=80=ED=95=B4=20complete=20=ED=9B=84=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=A1=B0=EC=A0=88=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EB=8F=99=EC=9E=91=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6430 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/resize_image/js/resize_image.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/resize_image/js/resize_image.js b/addons/resize_image/js/resize_image.js index bfee1e363..1ccce692b 100644 --- a/addons/resize_image/js/resize_image.js +++ b/addons/resize_image/js/resize_image.js @@ -158,6 +158,11 @@ function slideshow(event) { } $(document).ready(function(){ + if (jQuery.browser.safari && document.readyState != "complete"){ + setTimeout( arguments.callee, 100 ); + return; + } + var regx_skip = /(?:modules|addons|classes|common|layouts|libs|widgets)/i; var regx_parent = /(?:document|comment)_[0-9]+_[0-9]+/i; From 152a5cb36290bb92894dafc44e58e74dcdc4bd42 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 28 May 2009 00:41:43 +0000 Subject: [PATCH 008/243] =?UTF-8?q?SSO=20=EC=9D=B4=EC=9A=A9=EC=8B=9C=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EC=82=AC=EC=9D=B4=ED=8A=B8=EB=A1=9C=20red?= =?UTF-8?q?irect=EB=90=98=EC=96=B4=20=EC=98=A4=EB=A9=B4=EC=84=9C=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=A3=BC=EC=86=8C=EA=B0=80=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C?= =?UTF-8?q?=EB=A5=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6431 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 1ccfc480d..de2b3d96a 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -359,8 +359,11 @@ } else { // SSO 결과를 받는 경우 session_name() 세팅 if(Context::get('SSOID')) { - setcookie(session_name(), Context::get('SSOID'), 0, '/'); - header("location:".str_replace('&','&',getUrl('SSOID',''))); + $session_name = Context::get('SSOID'); + setcookie(session_name(), $session_name); + + $url = preg_replace('/([\?\&])$/','',str_replace('SSOID='.$session_name,'',Context::getRequestUrl())); + header("location:".$url); return false; // SSO 결과를 요청 } else if($_COOKIE['sso']!=md5(Context::getRequestUri()) && !Context::get('SSOID')) { From 80da5e9f9ab17cd3470065eda2ca6c5f52dca85e Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 28 May 2009 03:14:42 +0000 Subject: [PATCH 009/243] =?UTF-8?q?=EC=BB=A8=ED=85=90=EC=B8=A0=20=EC=9C=84?= =?UTF-8?q?=EC=A0=AF=EC=9D=98=20=EC=9E=98=EB=AA=BB=EB=90=9C=20info.xml=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6432 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/content/conf/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/content/conf/info.xml b/widgets/content/conf/info.xml index 53a7401e5..998576c66 100644 --- a/widgets/content/conf/info.xml +++ b/widgets/content/conf/info.xml @@ -148,7 +148,7 @@ select-multi-order 표시항목 및 순서 - Display Target & Order + Display Target & Order 显示项及顺序 顯示項目順序 表示項目、および順番 From 33f6e8f75855dc9fb64f54fd7827be45bf25a144 Mon Sep 17 00:00:00 2001 From: taggon Date: Thu, 28 May 2009 07:04:23 +0000 Subject: [PATCH 010/243] =?UTF-8?q?=20'=EB=AA=A9=EC=B0=A8'=20=EC=96=B8?= =?UTF-8?q?=EC=96=B4=ED=8C=A9=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6433 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/lang/en.lang.php | 2 ++ modules/editor/lang/es.lang.php | 2 ++ modules/editor/lang/fr.lang.php | 2 ++ modules/editor/lang/jp.lang.php | 2 ++ modules/editor/lang/ko.lang.php | 2 ++ modules/editor/lang/ru.lang.php | 2 ++ modules/editor/lang/zh-CN.lang.php | 2 ++ modules/editor/lang/zh-TW.lang.php | 2 ++ 8 files changed, 16 insertions(+) diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index d33363f11..9cf1e47af 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -217,4 +217,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = 'Table of Contents'; ?> diff --git a/modules/editor/lang/es.lang.php b/modules/editor/lang/es.lang.php index 94547451e..d078af65c 100644 --- a/modules/editor/lang/es.lang.php +++ b/modules/editor/lang/es.lang.php @@ -213,4 +213,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index 9c583f3d5..5df9e6984 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -217,4 +217,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 5b9baaaa6..2b2551604 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -219,4 +219,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index 550030171..3c7451c12 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -219,4 +219,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/ru.lang.php b/modules/editor/lang/ru.lang.php index b9af1f4cd..62cb4c8a4 100644 --- a/modules/editor/lang/ru.lang.php +++ b/modules/editor/lang/ru.lang.php @@ -213,4 +213,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 2c075811b..195289fcd 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -219,4 +219,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> diff --git a/modules/editor/lang/zh-TW.lang.php b/modules/editor/lang/zh-TW.lang.php index 57fc6b05b..ba2a9856b 100644 --- a/modules/editor/lang/zh-TW.lang.php +++ b/modules/editor/lang/zh-TW.lang.php @@ -220,4 +220,6 @@ $lang->edit->paging_next = '다음'; $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; ?> From c922a2ae0790fe272f279df7b5e32fe1b00362f1 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 28 May 2009 08:08:42 +0000 Subject: [PATCH 011/243] =?UTF-8?q?rss/atom=20act=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=B4=EC=84=9C=20SSO=20=EB=8F=99=EC=9E=91=ED=95=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95=20(?= =?UTF-8?q?=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4=ED=8A=B8=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C=20redirect=EB=A1=9C=20=EC=9D=B8=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=ED=94=BC=EB=93=9C=EB=A6=AC=EB=8D=94=EA=B8=B0?= =?UTF-8?q?=EB=93=A4=EC=9D=B4=20=EC=98=A4=EB=8F=99=EC=9E=91=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EB=B0=9C=EC=83=9D)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6434 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index de2b3d96a..c8e2cf223 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -338,7 +338,7 @@ **/ function checkSSO() { // GET 접속이 아니거나 설치가 안되어 있으면 패스 - if(Context::getRequestMethod()!='GET' || !Context::isInstalled()) return true; + if(Context::getRequestMethod()!='GET' || !Context::isInstalled() || in_array(Context::get('act'),array('rss','atom'))) return true; // DB info에 설정된 Default URL이 없다면 무조건 무사통과 $default_url = trim($this->db_info->default_url); From a0a0bad46d8b539a3891a721c946e234edd563cc Mon Sep 17 00:00:00 2001 From: heemin Date: Thu, 28 May 2009 12:03:37 +0000 Subject: [PATCH 012/243] =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EC=9D=BC=EB=B3=B8?= =?UTF-8?q?=EC=96=B4=20=EB=B2=88=EC=97=AD=20=EB=88=84=EB=9D=BD=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EB=B3=B4=EC=B6=A9=20=EB=B0=8F=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6435 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/mobile/lang/jp.lang.php | 6 + common/lang/jp.lang.php | 22 +- modules/addon/lang/jp.lang.php | 2 +- modules/admin/lang/jp.lang.php | 66 +-- modules/board/lang/jp.lang.php | 2 +- modules/communication/lang/jp.lang.php | 2 +- modules/counter/lang/jp.lang.php | 2 +- modules/document/lang/jp.lang.php | 16 +- .../components/image_link/lang/jp.lang.php | 24 +- modules/editor/lang/jp.lang.php | 380 +++++++++--------- modules/homepage/lang/jp.lang.php | 92 ++--- modules/install/lang/jp.lang.php | 4 +- modules/integration_search/lang/jp.lang.php | 12 +- modules/krzip/lang/jp.lang.php | 18 +- modules/layout/lang/jp.lang.php | 12 +- modules/lifepod/lang/jp.lang.php | 6 +- modules/member/lang/jp.lang.php | 20 +- modules/menu/lang/jp.lang.php | 16 +- modules/module/lang/jp.lang.php | 82 ++-- modules/opage/lang/jp.lang.php | 12 +- modules/page/lang/jp.lang.php | 8 +- modules/planet/lang/jp.lang.php | 218 +++++----- modules/point/lang/jp.lang.php | 10 +- modules/wiki/lang/jp.lang.php | 2 +- widgets/content/conf/info.xml | 12 +- widgets/rss_reader/conf/info.xml | 6 +- widgets/webzine/conf/info.xml | 2 +- 27 files changed, 530 insertions(+), 524 deletions(-) diff --git a/addons/mobile/lang/jp.lang.php b/addons/mobile/lang/jp.lang.php index 697c560e6..3aa8e74e7 100644 --- a/addons/mobile/lang/jp.lang.php +++ b/addons/mobile/lang/jp.lang.php @@ -5,7 +5,13 @@ * @brief 日本語言語パッケージ **/ + // 言語選択部分 by misol + $lang->president_lang = '現在言語'; + $lang->select_lang = '言語選択'; + $lang->lang_return = '戻る'; + $lang->cmd_go_upper = '上位メニュー'; $lang->cmd_go_home = 'トップへ'; $lang->cmd_view_sitemap = 'サイトマップ'; + ?> diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index d8de2c85f..27691d1ae 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -45,7 +45,7 @@ $lang->cmd_select = '選択'; $lang->cmd_select_all = 'すべて選択'; $lang->cmd_unselect_all = 'すべて解除'; - $lang->cmd_reverse_all = "選択の反転"; + $lang->cmd_reverse_all = '選択の反転'; $lang->cmd_close_all = 'すべて閉じる'; $lang->cmd_open_all = 'すべて開く'; $lang->cmd_reload = 'リロード'; @@ -61,8 +61,8 @@ $lang->cmd_scrap = 'スクラップ'; $lang->cmd_preview = 'プレビュー'; $lang->cmd_reset = '初期化'; - $lang->cmd_remake_cache = "キャッシュファイル再生成"; - $lang->cmd_publish = "発行"; + $lang->cmd_remake_cache = 'キャッシュファイル再生成'; + $lang->cmd_publish = '発行'; $lang->cmd_layout_setup = 'レイアウト設定'; $lang->cmd_layout_edit = 'レイアウト編集'; $lang->cmd_search_by_ipaddress = 'IPアドレスで検索'; @@ -132,8 +132,8 @@ $lang->colorset = 'カラーセット'; $lang->extra_vars = '拡張変数'; - $lang->domain = "ドメイン"; - $lang->url = "URL"; + $lang->domain = 'ドメイン'; + $lang->url = 'URL'; $lang->document_url = '書き込みURL'; $lang->trackback_url = 'トラックバックURL'; $lang->blog_name = 'ブログ名'; @@ -291,12 +291,12 @@ また、XEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。(省略可能)
"; - $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接続に成功しました。"; + $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を入力して下さい。'; diff --git a/modules/addon/lang/jp.lang.php b/modules/addon/lang/jp.lang.php index 74e1fbfed..f7dd54ce0 100644 --- a/modules/addon/lang/jp.lang.php +++ b/modules/addon/lang/jp.lang.php @@ -12,6 +12,6 @@ $lang->addon_license = 'ライセンス'; $lang->addon_history = '変更履歴'; - $lang->about_addon_mid = "アドオンが使われる対象を指定します。
(選択なしの場合、全てのモジュールが利用可能対象)"; + $lang->about_addon_mid = 'アドオンが使われる対象を指定します。
(選択なしの場合、全てのモジュールが利用可能対象)'; $lang->about_addon = 'アドオンは、HTMLの出力をコントロールするというより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。'; ?> diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index 50fe3e8da..8e4e94997 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -24,32 +24,32 @@ 'system' => 'システム管理', ); - $lang->newest_news = "最新ニュース"; + $lang->newest_news = '最新ニュース'; - $lang->env_setup = "環境設定"; + $lang->env_setup = '環境設定'; $lang->default_url = '基本URL'; - $lang->about_sso_url = "複数のバーチャル(Virtual)サイトを運営する場合、どちらからログインしてもバーチャル(Virtual)サイトの間でログイン情報を維持出来るようにするためには、基本になるサイトでのXEをインストールしたurlを登録して下さい。 (例: http://ドメイン/インストールパス)"; - + $lang->about_default_url = '複数のバーチャル(Virtual)サイトを運営する場合、どちらからログインしてもバーチャル(Virtual)サイトの間でログイン情報を維持出来るようにするためには、基本になるサイトでのXEをインストールしたurlを登録して下さい。 (例: http://ドメイン/インストールパス)'; - $lang->env_information = "環境情報"; - $lang->current_version = "インストールバージョン"; - $lang->current_path = "インストールパス"; - $lang->released_version = "最新バージョン"; - $lang->about_download_link = "インストールされたバージョンより新しいバージョンが配布されています。\n「ダウンロード」リンクをクリックするとダウンロード出来ます。"; - $lang->item_module = "モジュールリスト"; - $lang->item_addon = "アドオンリスト"; - $lang->item_widget = "ウィジェットリスト"; - $lang->item_layout = "レイアウトリスト"; + $lang->env_information = '環境情報'; + $lang->current_version = 'インストールバージョン'; + $lang->current_path = 'インストールパス'; + $lang->released_version = '最新バージョン'; + $lang->about_download_link = 'インストールされたバージョンより新しいバージョンが配布されています。\n「ダウンロード」リンクをクリックするとダウンロード出来ます。'; - $lang->module_name = "モジュール名"; - $lang->addon_name = "アドオン名"; - $lang->version = "バージョン"; - $lang->author = "制作者"; - $lang->table_count = "テーブル数"; - $lang->installed_path = "インストールパス"; + $lang->item_module = 'モジュールリスト'; + $lang->item_addon = 'アドオンリスト'; + $lang->item_widget = 'ウィジェットリスト'; + $lang->item_layout = 'レイアウトリスト'; - $lang->cmd_shortcut_management = "メニューの編集"; + $lang->module_name = 'モジュール名'; + $lang->addon_name = 'アドオン名'; + $lang->version = 'バージョン'; + $lang->author = '制作者'; + $lang->table_count = 'テーブル数'; + $lang->installed_path = 'インストールパス'; + + $lang->cmd_shortcut_management = 'メニューの編集'; $lang->msg_is_not_administrator = '管理者だけアクセス出来ます'; $lang->msg_manage_module_cannot_delete = 'モジュール、アドオン、ウィジェットのショットカットは削除出来ません。'; @@ -57,26 +57,26 @@ $lang->welcome_to_xe = 'XEの管理者ページです。'; $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; - $lang->about_lang_env = "初めてサイトに訪問したユーザーに対し、上記の選択した言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用して下さい。"; + $lang->about_lang_env = '初めてサイトに訪問したユーザーに対し、上記の選択した言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用して下さい。'; $lang->xe_license = 'XEのライセンスはGPLです。'; $lang->about_shortcut = 'よく使用するモジュールに登録されたショートカットは削除出来ます。'; - $lang->yesterday = "昨日"; - $lang->today = "今日"; + $lang->yesterday = '昨日'; + $lang->today = '今日'; - $lang->cmd_lang_select = "言語選択"; - $lang->about_cmd_lang_select = "選択された言語だけでサービスを行います。"; - $lang->about_recompile_cache = "要らないかごみのキャッシューファイルを整理します。"; - $lang->use_ssl = "SSL環境設定"; + $lang->cmd_lang_select = '言語選択'; + $lang->about_cmd_lang_select = '選択された言語だけでサービスを行います。'; + $lang->about_recompile_cache = '要らないかごみのキャッシューファイルを整理します。'; + $lang->use_ssl = 'SSL環境設定'; $lang->ssl_options = array( - 'none' => "使わない", - 'optional' => "部分的に使う", - 'always' => "常に使う" + 'none' => '使わない', + 'optional' => '部分的に使う', + 'always' => '常に使う' ); - $lang->about_use_ssl = "「部分的に使う場合」は「会員登録/会員情報変更」など特定のactionでSSLを利用する場合、「常に使う」は全てのサービスがSSLを使う場合に選択します。"; - $lang->server_ports = "サーバーポート指定"; - $lang->about_server_ports = "一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。"; + $lang->about_use_ssl = '「部分的に使う場合」は「会員登録/会員情報変更」など特定のactionでSSLを利用する場合、「常に使う」は全てのサービスがSSLを使う場合に選択します。'; + $lang->server_ports = 'サーバーポート指定'; + $lang->about_server_ports = '一般的に使われているHTTPの80、HTTPSの443以外の他のポートを使うために、ポートを指定して下さい。'; $lang->use_db_session = 'DBで認証セッション管理'; $lang->about_db_session = '認証の時に使われるPHPセッションをDBで使う機能です。
ウェブサーバーの負荷が低いサイトではこの機能をオフにすることでむしろサイトのレスポンスが向上されることもあります。
また、この機能をオンにすると、「現在ログイン中の会員」の機能が不可になります。'; ?> diff --git a/modules/board/lang/jp.lang.php b/modules/board/lang/jp.lang.php index 30878581f..52659e6f8 100644 --- a/modules/board/lang/jp.lang.php +++ b/modules/board/lang/jp.lang.php @@ -29,7 +29,7 @@ // その他 $lang->about_layout_setup = 'ブログのレイアウトのコードを直接修正します。ウィジェットコードを好きなところに入力、又は管理して下さい。'; $lang->about_board_category = 'ブログのカテゴリを作成します。
ブログのカテゴリが誤作動する場合、「キャッシュファイルの再生性」を手動で行うことで解決出来ます。'; - $lang->about_except_notice = "リストの上段に常に表示されるお知らせの書き込みを一般リストからお知らせの書き込みが表示されないようにします。"; + $lang->about_except_notice = 'リストの上段に常に表示されるお知らせの書き込みを一般リストからお知らせの書き込みが表示されないようにします。'; $lang->about_use_anonymous = '匿名掲示板として活用出来ます。スキン設定で登録者の情報を表示しないに設定をお勧めします。'; $lang->about_board = '掲示板の生成、および管理するモジュールです。'; $lang->about_consultation = "相談機能とは、管理権限のない会員に本人の書き込みだけを表示する機能です。\n但し、相談機能を使用する際は、非会員の書き込みは自動的に禁止されます。"; diff --git a/modules/communication/lang/jp.lang.php b/modules/communication/lang/jp.lang.php index 1845587f1..6d391af38 100644 --- a/modules/communication/lang/jp.lang.php +++ b/modules/communication/lang/jp.lang.php @@ -21,7 +21,7 @@ 'T' => '保存箱', ); - $lang->readed_date = "開封時間"; + $lang->readed_date = '開封時間'; $lang->sender = '送信者'; $lang->receiver = '受信者'; diff --git a/modules/counter/lang/jp.lang.php b/modules/counter/lang/jp.lang.php index 7ab28400c..d722aff6d 100644 --- a/modules/counter/lang/jp.lang.php +++ b/modules/counter/lang/jp.lang.php @@ -5,7 +5,7 @@ * @brief 日本語言語パッケージ(基本的な内容のみ) **/ - $lang->counter = "カウンター"; + $lang->counter = 'カウンター'; $lang->cmd_select_date = '日付選択'; $lang->cmd_select_counter_type = array( 'hour' => '時間帯別', diff --git a/modules/document/lang/jp.lang.php b/modules/document/lang/jp.lang.php index 2b1292ef1..2f82f60bf 100644 --- a/modules/document/lang/jp.lang.php +++ b/modules/document/lang/jp.lang.php @@ -21,7 +21,7 @@ $lang->category_group_srls = 'グループ制限'; $lang->cmd_make_child = '下位カテゴリ追加'; - $lang->cmd_enable_move_category = "カテゴリ位置変更(選択後上のメニューをドラッグして下さい)"; + $lang->cmd_enable_move_category = 'カテゴリ位置変更(選択後上のメニューをドラッグして下さい)'; $lang->about_category_title = 'カテゴリ名を入力して下さい。'; $lang->about_expand = 'チェックすると常に展開された状態になります。'; @@ -41,7 +41,7 @@ $lang->msg_is_secret = '非公開設定の書き込みです。'; $lang->msg_checked_document_is_deleted = '%d個の書き込みが削除されました。'; - $lang->move_target_module = "移動対象モジュール"; + $lang->move_target_module = '移動対象モジュール'; // 管理者ページで検索する内容 $lang->search_target_list = array( @@ -66,14 +66,14 @@ 'ipaddress' => 'IPアドレス', ); - $lang->alias = "アリアス(Alias)"; - $lang->history = "履歴"; - $lang->about_use_history = "履歴機能を使用するかを設定します。履歴機能を使用すると文書修正のバージョンを管理し、過去のバージョンから復元することも可能です。"; - $lang->trace_only = "記録だけ残す"; + $lang->alias = 'アリアス(Alias)'; + $lang->history = '履歴'; + $lang->about_use_history = '履歴機能を使用するかを設定します。履歴機能を使用すると文書修正のバージョンを管理し、過去のバージョンから復元することも可能です。'; + $lang->trace_only = '記録だけ残す'; $lang->cmd_trash = "ごみ箱"; - $lang->cmd_restore = "復元"; - $lang->cmd_restore_all = "すべて復元"; + $lang->cmd_restore = "差し戻し"; + $lang->cmd_restore_all = "すべて差し戻し"; $lang->in_trash = "ごみ箱"; $lang->trash_nick_name = "削除者のニックネーム"; diff --git a/modules/editor/components/image_link/lang/jp.lang.php b/modules/editor/components/image_link/lang/jp.lang.php index 8fb6f5739..5cba9384a 100644 --- a/modules/editor/components/image_link/lang/jp.lang.php +++ b/modules/editor/components/image_link/lang/jp.lang.php @@ -5,19 +5,19 @@ * @brief ウィジウィグエディター(editor)モジュール > イメージリンク(image_link)コンポネント言語パッケージ **/ - $lang->image_url = "イメージパス"; - $lang->image_alt = "説明(Alt)入力"; - $lang->image_scale = "イメージサイズ"; - $lang->image_align = "アライン位置"; - $lang->image_align_normal = "一段落"; - $lang->image_align_left = "左揃え"; - $lang->image_align_middle = "中央揃え"; - $lang->image_align_right = "右揃え"; - $lang->image_border = "ボーダー"; + $lang->image_url = 'イメージパス'; + $lang->image_alt = '説明(Alt)入力'; + $lang->image_scale = 'イメージサイズ'; + $lang->image_align = 'アライン位置'; + $lang->image_align_normal = '一段落'; + $lang->image_align_left = '左揃え'; + $lang->image_align_middle = '中央揃え'; + $lang->image_align_right = '右揃え'; + $lang->image_border = 'ボーダー'; $lang->image_margin = '外側の空白(Margin)'; - $lang->urllink_open_window = "新しいウィンドウで開く"; - $lang->about_url_link_open_window = "チェックすると、リンクをクリックする際、新しいウィンドウで開きます。"; + $lang->urllink_open_window = '新しいウィンドウで開く'; + $lang->about_url_link_open_window = 'チェックすると、リンクをクリックする際、新しいウィンドウで開きます。'; - $lang->cmd_get_scale = "イメージサイズを計算"; + $lang->cmd_get_scale = 'イメージサイズを計算'; ?> diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 2b2551604..ad683eb3f 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -5,220 +5,220 @@ * @brief ウィジウィグエディター(editor)モジュールの基本言語パッケージ **/ - $lang->editor = 'ウイジウイグエディター'; - $lang->component_name = 'コンポーネント'; - $lang->component_version = 'バージョン'; - $lang->component_author = '作者'; - $lang->component_link = 'リンク'; - $lang->component_date = '作成日'; - $lang->component_license = 'ライセンス'; - $lang->component_history = '変更履歴'; - $lang->component_description = '説明'; - $lang->component_extra_vars = '設定変数'; - $lang->component_grant = '権限設定'; - $lang->content_style = 'コンテンツスタイル'; - $lang->content_font = 'コンテンツフォント'; + $lang->editor = 'ウイジウイグエディター'; + $lang->component_name = 'コンポーネント'; + $lang->component_version = 'バージョン'; + $lang->component_author = '作者'; + $lang->component_link = 'リンク'; + $lang->component_date = '作成日'; + $lang->component_license = 'ライセンス'; + $lang->component_history = '変更履歴'; + $lang->component_description = '説明'; + $lang->component_extra_vars = '設定変数'; + $lang->component_grant = '権限設定'; + $lang->content_style = 'コンテンツスタイル'; + $lang->content_font = 'コンテンツフォント'; - $lang->about_component = 'コンポーネント情報'; - $lang->about_component_grant = '基本コンポーネント以外の拡張コンポーネント機能が利用可能な権限の設定が出来ます。
(選択なしの場合、誰でも利用可能)'; - $lang->about_component_mid = 'エディターコンポーネントが使われる対象を指定します。
(選択なしの場合、全ての対象で利用可能)'; + $lang->about_component = 'コンポーネント情報'; + $lang->about_component_grant = '基本コンポーネント以外の拡張コンポーネント機能が利用可能な権限の設定が出来ます。
(選択なしの場合、誰でも利用可能)'; + $lang->about_component_mid = 'エディターコンポーネントが使われる対象を指定します。
(選択なしの場合、全ての対象で利用可能)'; - $lang->msg_component_is_not_founded = '%s エディターのコンポーネントが見つかりません。'; - $lang->msg_component_is_inserted = '選択されたコンポーネントは既に入力されています。'; - $lang->msg_component_is_first_order = '選択されたコンポーネントは最初に位置しています。'; - $lang->msg_component_is_last_order = '選択されたコンポーネントは最後に位置しています。'; - $lang->msg_load_saved_doc = "自動保存された書き込みがあります。復旧しますか?\n書き終わってから登録すると前の自動保存データは削除されます。"; - $lang->msg_auto_saved = '自動保存されました。'; + $lang->msg_component_is_not_founded = '%s エディターのコンポーネントが見つかりません。'; + $lang->msg_component_is_inserted = '選択されたコンポーネントは既に入力されています。'; + $lang->msg_component_is_first_order = '選択されたコンポーネントは最初に位置しています。'; + $lang->msg_component_is_last_order = '選択されたコンポーネントは最後に位置しています。'; + $lang->msg_load_saved_doc = "自動保存された書き込みがあります。復旧しますか?\n書き終わってから登録すると前の自動保存データは削除されます。"; + $lang->msg_auto_saved = '自動保存されました。'; - $lang->cmd_disable = '未使用'; - $lang->cmd_enable = '使用'; + $lang->cmd_disable = '未使用'; + $lang->cmd_enable = '使用'; - $lang->editor_skin = 'エディタースキン'; - $lang->upload_file_grant = 'ファイル添付権限'; - $lang->enable_default_component_grant = '基本コンポーネント使用権限'; - $lang->enable_component_grant = 'コンポーネント使用権限'; - $lang->enable_html_grant = 'HTML編集権限'; - $lang->enable_autosave = '自動保存使用'; - $lang->height_resizable = '高さの調整'; - $lang->editor_height = 'エディターの高さ'; + $lang->editor_skin = 'エディタースキン'; + $lang->upload_file_grant = 'ファイル添付権限'; + $lang->enable_default_component_grant = '基本コンポーネント使用権限'; + $lang->enable_component_grant = 'コンポーネント使用権限'; + $lang->enable_html_grant = 'HTML編集権限'; + $lang->enable_autosave = '自動保存使用'; + $lang->height_resizable = '高さの調整'; + $lang->editor_height = 'エディターの高さ'; - $lang->about_editor_skin = 'エディターのスキンの選択が出来ます。'; - $lang->about_content_style = 'コンテンツの編集、および内容表示の際のスタイルを指定します。'; - $lang->about_content_font = 'コンテンツの編集、および内容表示の際のフォントを指定します。
指定してない場合、ユーザーの設定を従います。
半角コンマ(,)区切りで複数フォントの登録が出来ます。'; - $lang->about_upload_file_grant = 'ファイル添付可能な権限の設定が出来ます。(選択なしの場合、誰でも添付が可能)'; - $lang->about_default_component_grant = 'エディターでの基本コンポーネントを使用可能な権限の設定が出来ます。(選択なしの場合、誰でも利用可能)'; - $lang->about_editor_height = 'エディターの基本高さを設定します。'; - $lang->about_editor_height_resizable = 'エディターの高さを変更出来るようにします。'; - $lang->about_enable_html_grant = 'HTML編集権限を設定します。'; - $lang->about_enable_autosave = '書き込みのとき、自動保存機能をオンにします。'; + $lang->about_editor_skin = 'エディターのスキンの選択が出来ます。'; + $lang->about_content_style = 'コンテンツの編集、および内容表示の際のスタイルを指定します。'; + $lang->about_content_font = 'コンテンツの編集、および内容表示の際のフォントを指定します。
指定してない場合、ユーザーの設定を従います。
半角コンマ(,)区切りで複数フォントの登録が出来ます。'; + $lang->about_upload_file_grant = 'ファイル添付可能な権限の設定が出来ます。(選択なしの場合、誰でも添付が可能)'; + $lang->about_default_component_grant = 'エディターでの基本コンポーネントを使用可能な権限の設定が出来ます。(選択なしの場合、誰でも利用可能)'; + $lang->about_editor_height = 'エディターの基本高さを設定します。'; + $lang->about_editor_height_resizable = 'エディターの高さを変更出来るようにします。'; + $lang->about_enable_html_grant = 'HTML編集権限を設定します。'; + $lang->about_enable_autosave = '書き込みのとき、自動保存機能をオンにします。'; - $lang->edit->fontname = 'フォント'; - $lang->edit->fontsize = 'フォントサイズ'; - $lang->edit->use_paragraph = '段落機能'; - $lang->edit->fontlist = array( - 'MS PGothic'=>'MS Pゴシック', - 'MS PMincho'=>'MS P明朝', - 'MS UI Gothic'=>'MS UI Gothic', - 'Arial'=>'Arial', - 'Arial Black'=>'Arial Black', - 'Tahoma'=>'Tahoma', - 'Verdana'=>'Verdana', - 'Sans-serif'=>'Sans-serif', - 'Serif'=>'Serif', - 'Monospace'=>'Monospace', - 'Cursive'=>'Cursive', - 'Fantasy'=>'Fantasy', - ); + $lang->edit->fontname = 'フォント'; + $lang->edit->fontsize = 'フォントサイズ'; + $lang->edit->use_paragraph = '段落機能'; + $lang->edit->fontlist = array( + 'MS PGothic'=>'MS Pゴシック', + 'MS PMincho'=>'MS P明朝', + 'MS UI Gothic'=>'MS UI Gothic', + 'Arial'=>'Arial', + 'Arial Black'=>'Arial Black', + 'Tahoma'=>'Tahoma', + 'Verdana'=>'Verdana', + 'Sans-serif'=>'Sans-serif', + 'Serif'=>'Serif', + 'Monospace'=>'Monospace', + 'Cursive'=>'Cursive', + 'Fantasy'=>'Fantasy', + ); - $lang->edit->header = '見出し'; - $lang->edit->header_list = array( - 'h1' => '見出し1', - 'h2' => '見出し2', - 'h3' => '見出し3', - 'h4' => '見出し4', - 'h5' => '見出し5', - 'h6' => '見出し6', - ); + $lang->edit->header = '見出し'; + $lang->edit->header_list = array( + 'h1' => '見出し1', + 'h2' => '見出し2', + 'h3' => '見出し3', + 'h4' => '見出し4', + 'h5' => '見出し5', + 'h6' => '見出し6', + ); - $lang->edit->submit = '送信'; + $lang->edit->submit = '送信'; - $lang->edit->fontcolor = 'テキストの色'; - $lang->edit->fontbgcolor = 'ハイライト カラー'; - $lang->edit->bold = '太字'; - $lang->edit->italic = '斜体'; - $lang->edit->underline = '下線'; - $lang->edit->strike = '取り消し線'; - $lang->edit->sup = '上付き文字'; - $lang->edit->sub = '下付き文字'; - $lang->edit->redo = '繰り返し'; - $lang->edit->undo = '元に戻す'; - $lang->edit->align_left = '左揃え'; - $lang->edit->align_center = '中央揃え'; - $lang->edit->align_right = '右揃え'; - $lang->edit->align_justify = '均等割付'; - $lang->edit->add_indent = 'インデント増'; - $lang->edit->remove_indent = 'インデント減'; - $lang->edit->list_number = '番号付リスト'; - $lang->edit->list_bullet = '箇条書き'; - $lang->edit->remove_format = '書式をクリア'; + $lang->edit->fontcolor = 'テキストの色'; + $lang->edit->fontbgcolor = 'ハイライト カラー'; + $lang->edit->bold = '太字'; + $lang->edit->italic = '斜体'; + $lang->edit->underline = '下線'; + $lang->edit->strike = '取り消し線'; + $lang->edit->sup = '上付き文字'; + $lang->edit->sub = '下付き文字'; + $lang->edit->redo = '繰り返し'; + $lang->edit->undo = '元に戻す'; + $lang->edit->align_left = '左揃え'; + $lang->edit->align_center = '中央揃え'; + $lang->edit->align_right = '右揃え'; + $lang->edit->align_justify = '均等割付'; + $lang->edit->add_indent = 'インデント増'; + $lang->edit->remove_indent = 'インデント減'; + $lang->edit->list_number = '番号付リスト'; + $lang->edit->list_bullet = '箇条書き'; + $lang->edit->remove_format = '書式をクリア'; - $lang->edit->help_remove_format = '選択領域の中のタグを消します。'; - $lang->edit->help_strike_through = 'テキストに取り消し線を表示します。'; - $lang->edit->help_align_full = '左右の余白に合わせて文字列を配置します。'; + $lang->edit->help_remove_format = '選択領域の中のタグを消します。'; + $lang->edit->help_strike_through = 'テキストに取り消し線を表示します。'; + $lang->edit->help_align_full = '左右の余白に合わせて文字列を配置します。'; - $lang->edit->help_fontcolor = 'テキストの色を指定します。'; - $lang->edit->help_fontbgcolor = 'テキストの背景色を指定します。'; - $lang->edit->help_bold = 'テキストを太字に指定します。'; - $lang->edit->help_italic = 'テキストを斜体にします。'; - $lang->edit->help_underline = 'テキストに下線(アンダーライン)を引きます。'; - $lang->edit->help_strike = '取り消し線を引きます。'; - $lang->edit->help_sup = '上付き文字'; - $lang->edit->help_sub = '下付き文字'; - $lang->edit->help_redo = '繰り返し'; - $lang->edit->help_undo = '元に戻す'; - $lang->edit->help_align_left = 'テキストを左揃えで表示します。'; - $lang->edit->help_align_center = 'テキストを中央揃えで表示します。'; - $lang->edit->help_align_right = 'テキストを右揃えで表示します。'; - $lang->edit->help_add_indent = 'インデントを増やします。'; - $lang->edit->help_remove_indent = 'インデントを減らします。'; - $lang->edit->help_list_number = '番号付リスト'; - $lang->edit->help_list_bullet = '箇条書き'; - $lang->edit->help_use_paragraph = '段落機能を使用する場合は、「Ctrl+Enter」を押します(書き終わった後、「Alt+S」を押すと保存されます)。'; + $lang->edit->help_fontcolor = 'テキストの色を指定します。'; + $lang->edit->help_fontbgcolor = 'テキストの背景色を指定します。'; + $lang->edit->help_bold = 'テキストを太字に指定します。'; + $lang->edit->help_italic = 'テキストを斜体にします。'; + $lang->edit->help_underline = 'テキストに下線(アンダーライン)を引きます。'; + $lang->edit->help_strike = '取り消し線を引きます。'; + $lang->edit->help_sup = '上付き文字'; + $lang->edit->help_sub = '下付き文字'; + $lang->edit->help_redo = '繰り返し'; + $lang->edit->help_undo = '元に戻す'; + $lang->edit->help_align_left = 'テキストを左揃えで表示します。'; + $lang->edit->help_align_center = 'テキストを中央揃えで表示します。'; + $lang->edit->help_align_right = 'テキストを右揃えで表示します。'; + $lang->edit->help_add_indent = 'インデントを増やします。'; + $lang->edit->help_remove_indent = 'インデントを減らします。'; + $lang->edit->help_list_number = '番号付リスト'; + $lang->edit->help_list_bullet = '箇条書き'; + $lang->edit->help_use_paragraph = '段落機能を使用する場合は、「Ctrl+Enter」を押します(書き終わった後、「Alt+S」を押すと保存されます)。'; - $lang->edit->url = 'リンク'; - $lang->edit->blockquote = '引用文'; - $lang->edit->table = '表'; - $lang->edit->image = 'イメージ'; - $lang->edit->multimedia = '動画'; - $lang->edit->emoticon = '絵文字'; + $lang->edit->url = 'リンク'; + $lang->edit->blockquote = '引用文'; + $lang->edit->table = '表'; + $lang->edit->image = 'イメージ'; + $lang->edit->multimedia = '動画'; + $lang->edit->emoticon = '絵文字'; - $lang->edit->upload = '添付'; - $lang->edit->upload_file = 'ファイル添付'; - $lang->edit->link_file = 'テキスト挿入'; - $lang->edit->delete_selected = '選択リスト削除'; + $lang->edit->upload = '添付'; + $lang->edit->upload_file = 'ファイル添付'; + $lang->edit->link_file = 'テキスト挿入'; + $lang->edit->delete_selected = '選択リスト削除'; - $lang->edit->icon_align_article = '一段落'; - $lang->edit->icon_align_left = '左揃え'; - $lang->edit->icon_align_middle = '中央揃え'; - $lang->edit->icon_align_right = '右揃え'; + $lang->edit->icon_align_article = '一段落'; + $lang->edit->icon_align_left = '左揃え'; + $lang->edit->icon_align_middle = '中央揃え'; + $lang->edit->icon_align_right = '右揃え'; - $lang->about_dblclick_in_editor = '背景、文字、イメージ、引用文の上にカーソルを合わせ、ダブルクリックすると詳細設定出来るコンポーネントを表示します。'; + $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 = 'ショートカット‐キーの説明'; - $lang->edit->lineheight = '行間'; - $lang->edit->fontbgsampletext = 'あいうえお'; + $lang->edit->lineheight = '行間'; + $lang->edit->fontbgsampletext = 'あいうえお'; - $lang->edit->hyperlink = 'ハイパーリンク'; - $lang->edit->target_blank = '別のウィンドウズで'; + $lang->edit->hyperlink = 'ハイパーリンク'; + $lang->edit->target_blank = '別のウィンドウズで'; - $lang->edit->quotestyle1 = '左側実線'; - $lang->edit->quotestyle2 = '引用記号'; - $lang->edit->quotestyle3 = '実線'; - $lang->edit->quotestyle4 = '実線 + 背景'; - $lang->edit->quotestyle5 = '太い実線'; - $lang->edit->quotestyle6 = '点線'; - $lang->edit->quotestyle7 = '点線 + 背景'; - $lang->edit->quotestyle8 = '適用取り消し'; + $lang->edit->quotestyle1 = '左側実線'; + $lang->edit->quotestyle2 = '引用記号'; + $lang->edit->quotestyle3 = '実線'; + $lang->edit->quotestyle4 = '実線 + 背景'; + $lang->edit->quotestyle5 = '太い実線'; + $lang->edit->quotestyle6 = '点線'; + $lang->edit->quotestyle7 = '点線 + 背景'; + $lang->edit->quotestyle8 = '適用取り消し'; - $lang->edit->jumptoedit = '編集ツール省略'; - $lang->edit->set_sel = 'マス数の指定'; - $lang->edit->row = '行'; - $lang->edit->col = '列'; - $lang->edit->add_one_row = '1行追加'; - $lang->edit->del_one_row = '1行削除'; - $lang->edit->add_one_col = '1列追加'; - $lang->edit->del_one_col = '1列削除'; + $lang->edit->jumptoedit = '編集ツール省略'; + $lang->edit->set_sel = 'マス数の指定'; + $lang->edit->row = '行'; + $lang->edit->col = '列'; + $lang->edit->add_one_row = '1行追加'; + $lang->edit->del_one_row = '1行削除'; + $lang->edit->add_one_col = '1列追加'; + $lang->edit->del_one_col = '1列削除'; - $lang->edit->table_config = '표属性の設定'; - $lang->edit->border_width = '外枠太さ'; - $lang->edit->border_color = '外枠色'; - $lang->edit->add = '挿入'; - $lang->edit->del = '削除'; - $lang->edit->search_color = 'その他の色'; - $lang->edit->table_backgroundcolor = '表の背景色'; - $lang->edit->special_character = '特殊文字'; - $lang->edit->insert_special_character = '特殊文字挿入'; - $lang->edit->close_special_character = '特殊文字レイヤーを閉じる'; - $lang->edit->symbol = '一般記号'; - $lang->edit->number_unit = '数字と単位'; - $lang->edit->circle_bracket = '円、括弧'; - $lang->edit->korean = '韓国語'; - $lang->edit->greece = 'ギリシャ語'; - $lang->edit->Latin = 'ラテン語'; - $lang->edit->japan = '日本語'; - $lang->edit->selected_symbol = '選択した記号'; + $lang->edit->table_config = '표属性の設定'; + $lang->edit->border_width = '外枠太さ'; + $lang->edit->border_color = '外枠色'; + $lang->edit->add = '挿入'; + $lang->edit->del = '削除'; + $lang->edit->search_color = 'その他の色'; + $lang->edit->table_backgroundcolor = '表の背景色'; + $lang->edit->special_character = '特殊文字'; + $lang->edit->insert_special_character = '特殊文字挿入'; + $lang->edit->close_special_character = '特殊文字レイヤーを閉じる'; + $lang->edit->symbol = '一般記号'; + $lang->edit->number_unit = '数字と単位'; + $lang->edit->circle_bracket = '円、括弧'; + $lang->edit->korean = '韓国語'; + $lang->edit->greece = 'ギリシャ語'; + $lang->edit->Latin = 'ラテン語'; + $lang->edit->japan = '日本語'; + $lang->edit->selected_symbol = '選択した記号'; - $lang->edit->search_replace = '検索/置換'; - $lang->edit->close_search_replace = '検索/置換レイヤーを閉じる'; - $lang->edit->replace_all = 'すべて置換'; - $lang->edit->search_words = '検索テキスト'; - $lang->edit->replace_words = '置換テキスト'; - $lang->edit->next_search_words = '次を検索'; - $lang->edit->edit_height_control = '入力サイズ調整'; - - $lang->edit->merge_cells = 'セルの結合'; - $lang->edit->split_row = '行の挿入'; - $lang->edit->split_col = '列の挿入'; + $lang->edit->search_replace = '検索/置換'; + $lang->edit->close_search_replace = '検索/置換レイヤーを閉じる'; + $lang->edit->replace_all = 'すべて置換'; + $lang->edit->search_words = '検索テキスト'; + $lang->edit->replace_words = '置換テキスト'; + $lang->edit->next_search_words = '次を検索'; + $lang->edit->edit_height_control = '入力サイズ調整'; + + $lang->edit->merge_cells = 'セルの結合'; + $lang->edit->split_row = '行の挿入'; + $lang->edit->split_col = '列の挿入'; + + $lang->edit->toggle_list = 'リストを折りたたむ/展開する'; + $lang->edit->minimize_list = '最小化'; + + $lang->edit->move = '移動'; + $lang->edit->materials = '文面テンプレート保存箱'; + $lang->edit->temporary_savings = '下書きリスト'; - $lang->edit->toggle_list = '목록 접기/펼치기'; - $lang->edit->minimize_list = '최소화'; - - $lang->edit->move = '이동'; - $lang->edit->materials = '글감보관함'; - $lang->edit->temporary_savings = '임시저장목록'; - - $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = '下の段落追加ツールバーから、好きなタイプの段落を追加してから書き込みを始めて下さい。
文面テンプレート保存箱の中からここにドラッグ・アンド・ドロップ出来ます。'; - $lang->edit->paging_prev = '이전'; - $lang->edit->paging_next = '다음'; - $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; - $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + $lang->edit->paging_prev = '前へ'; + $lang->edit->paging_next = '次へ'; + $lang->edit->paging_prev_help = '前のページへ移動します。'; + $lang->edit->paging_next_help = '次のページへ移動します。'; - $lang->edit->toc = '목차'; + $lang->edit->toc = 'リスト'; ?> diff --git a/modules/homepage/lang/jp.lang.php b/modules/homepage/lang/jp.lang.php index ab4d536a5..6800fa851 100644 --- a/modules/homepage/lang/jp.lang.php +++ b/modules/homepage/lang/jp.lang.php @@ -5,19 +5,19 @@ * @brief CafeXE(homepage)モジュールの日本語言語パッケージ(基本的な内容のみ) **/ - $lang->cafe = "CafeXE"; + $lang->cafe = 'CafeXE'; $lang->cafe_id = "CafeへのアクセスID"; - $lang->cafe_title = "Cafe名"; + $lang->cafe_title = 'Cafe名'; $lang->cafe_description = 'Cafeの説明'; $lang->cafe_banner = 'Cafeのバナーイメージ'; - $lang->module_type = "タイプ"; - $lang->board = "掲示板"; - $lang->page = "ページ"; - $lang->module_id = "モジュール ID"; - $lang->item_group_grant = "メニューを公開するグループ"; - $lang->cafe_info = "Cafeの情報"; - $lang->cafe_admin = "Cafe管理者"; - $lang->do_selected_member = "選択した会員を : "; + $lang->module_type = 'タイプ'; + $lang->board = '掲示板'; + $lang->page = 'ページ'; + $lang->module_id = 'モジュール ID'; + $lang->item_group_grant = 'メニューを公開するグループ'; + $lang->cafe_info = 'Cafeの情報'; + $lang->cafe_admin = 'Cafe管理者'; + $lang->do_selected_member = '選択した会員を : '; $lang->cafe_latest_documents = 'Cafeの新規書き込み'; $lang->cafe_latest_comments = 'Cafeの新規コメント'; $lang->mycafe_list = '登録したCafe'; @@ -55,49 +55,49 @@ ); $lang->cmd_admin_menus = array( - "dispHomepageManage" => "Cafe設定", - "dispHomepageMemberGroupManage" => "会員のグループ管理", - "dispHomepageMemberManage" => "会員リスト", - "dispHomepageTopMenu" => "基本メニュー 管理", - "dispHomepageComponent" => "機能設定", - "dispHomepageCounter" => "アクセス集計", - "dispHomepageMidSetup" => "モジュール詳細設定", + 'dispHomepageManage' => 'Cafe設定', + 'dispHomepageMemberGroupManage' => '会員のグループ管理', + 'dispHomepageMemberManage' => '会員リスト', + 'dispHomepageTopMenu' => '基本メニュー 管理', + 'dispHomepageComponent' => '機能設定', + 'dispHomepageCounter' => 'アクセス集計', + 'dispHomepageMidSetup' => 'モジュール詳細設定', ); - $lang->cmd_cafe_registration = "Cafe作成"; - $lang->cmd_cafe_setup = "Cafe設定"; - $lang->cmd_cafe_delete = "Cafe削除"; - $lang->cmd_go_home = "ホームへ移動"; + $lang->cmd_cafe_registration = 'Cafe作成'; + $lang->cmd_cafe_setup = 'Cafe設定'; + $lang->cmd_cafe_delete = 'Cafe削除'; + $lang->cmd_go_home = 'ホームへ移動'; $lang->cmd_go_cafe_admin = 'Cafe全体管理'; - $lang->cmd_change_layout = "変更"; - $lang->cmd_select_index = "初期ページ選択"; - $lang->cmd_add_new_menu = "新しいメニュー追加"; - $lang->default_language = "基本言語"; - $lang->about_default_language = "初めてアクセスするユーザーに見せるページの言語を指定します。"; + $lang->cmd_change_layout = '変更'; + $lang->cmd_select_index = '初期ページ選択'; + $lang->cmd_add_new_menu = '新しいメニュー追加'; + $lang->default_language = '基本言語'; + $lang->about_default_language = '初めてアクセスするユーザーに見せるページの言語を指定します。'; $lang->about_cafe_act = array( - "dispHomepageManage" => "Cafeのレイアウトを変更します。", - "dispHomepageMemberGroupManage" => "Cafe内のグループを管理します。", - "dispHomepageMemberManage" => "Cafeに登録されている会員を管理します。", - "dispHomepageTopMenu" => "Cafeのヘッダー(header、上段)や左側などのメニューを管理します。", + 'dispHomepageManage' => 'Cafeのレイアウトを変更します。', + 'dispHomepageMemberGroupManage' => 'Cafe内のグループを管理します。', + 'dispHomepageMemberManage' => 'Cafeに登録されている会員を管理します。', + 'dispHomepageTopMenu' => 'Cafeのヘッダー(header、上段)や左側などのメニューを管理します。', "dispHomepageComponent" => "エディターのコンポーネント/アドオンをオンにしたら、設定を変更します。", - "dispHomepageCounter" => "Cafeへのアクセス状況を確認できます。", - "dispHomepageMidSetup" => "Cafeの掲示板、ページなどのモジュールを管理します。", + 'dispHomepageCounter' => 'Cafeへのアクセス状況を確認できます。', + 'dispHomepageMidSetup' => 'Cafeの掲示板、ページなどのモジュールを管理します。', ); - $lang->about_cafe = "Cafeサービス管理者は複数のCafe作成、および各Cafeを簡単に管理が出来ます。"; - $lang->about_cafe_title = "Cafe名は管理をするためだけに使われ、実サービスには表示されません。"; - $lang->about_menu_names = "Cafeに使うメニュー名を言語別に指定出来ます。
一個だけ記入した場合、他言語に一括適用されます。"; - $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_cafe_delete = "Cafeを削除すると、リンクされている全てのモジュール(掲示板、ページなど)とそれに付随する書き込みが削除されます。
ご注意下さい。"; - $lang->about_cafe_admin = "Cafe管理者の設定が出来ます。
Cafe管理者は「http://ドメイン/?act=dispHomepageManage」にて管理者ページにアクセスが出来ます。
存在しない会員は管理者として登録出来ません。"; + $lang->about_cafe = 'Cafeサービス管理者は複数のCafe作成、および各Cafeを簡単に管理が出来ます。'; + $lang->about_cafe_title = 'Cafe名は管理をするためだけに使われ、実サービスには表示されません。'; + $lang->about_menu_names = 'Cafeに使うメニュー名を言語別に指定出来ます。
一個だけ記入した場合、他言語に一括適用されます。'; + $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_cafe_delete = 'Cafeを削除すると、リンクされている全てのモジュール(掲示板、ページなど)とそれに付随する書き込みが削除されます。
ご注意下さい。'; + $lang->about_cafe_admin = 'Cafe管理者の設定が出来ます。
Cafe管理者は「http://ドメイン/?act=dispHomepageManage」にて管理者ページにアクセスが出来ます。
存在しない会員は管理者として登録出来ません。'; - $lang->confirm_change_layout = "レイアウトの変更時、一部のレイアウト情報が失われる可能性があります。 変更しますか?"; - $lang->confirm_delete_menu_item = "メニューの削除時、リンクされている掲示板やページモジュールも一緒に削除されます。削除しますか?"; + $lang->confirm_change_layout = 'レイアウトの変更時、一部のレイアウト情報が失われる可能性があります。 変更しますか?'; + $lang->confirm_delete_menu_item = 'メニューの削除時、リンクされている掲示板やページモジュールも一緒に削除されます。削除しますか?'; $lang->msg_module_count_exceed = '許可されたモジュール数を超過したため、作成が出来ません。'; $lang->msg_not_enabled_id = '利用出来ないIDです。'; $lang->msg_same_site = '同一バーチャル(Virtual)サイトのモジュールは移動出来ません。'; diff --git a/modules/install/lang/jp.lang.php b/modules/install/lang/jp.lang.php index 24488076b..4735b5605 100644 --- a/modules/install/lang/jp.lang.php +++ b/modules/install/lang/jp.lang.php @@ -228,13 +228,13 @@ EndOfLicense; $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ファイルはウェブからアクセス出来ない場所に作成して下さい。', 'cubrid' => 'CUBRID DBを利用します。 manual', 'postgresql' => 'PostgreSql DBを利用します。', - 'firebird' => 'Firebird DBを利用します。', + 'firebird' => 'Firebird DBを利用します。
DB生成方法 (create database "/path/dbname.fdb" page_size=8192 default character set UTF8;)', ); $lang->form_title = 'データベース & 管理者情報入力'; diff --git a/modules/integration_search/lang/jp.lang.php b/modules/integration_search/lang/jp.lang.php index 5d6cb9eae..6694ffcf9 100644 --- a/modules/integration_search/lang/jp.lang.php +++ b/modules/integration_search/lang/jp.lang.php @@ -5,16 +5,16 @@ * @brief 日本語言語パッケージ(基本的な内容のみう) **/ - $lang->integration_search = "統合検索"; + $lang->integration_search = '統合検索'; - $lang->sample_code = "サンプルコード"; - $lang->about_target_module = "選択されたモジュールだけを検索対象とします。各モジュールの権限設定にも注意して下さい。"; - $lang->about_sample_code = "上のコードをレイアウトなどに挿入すると統合検索が可能になります。"; - $lang->msg_no_keyword = "検索語を入力して下さい。"; + $lang->sample_code = 'サンプルコード'; + $lang->about_target_module = '選択されたモジュールだけを検索対象とします。各モジュールの権限設定にも注意して下さい。'; + $lang->about_sample_code = '上のコードをレイアウトなどに挿入すると統合検索が可能になります。'; + $lang->msg_no_keyword = '検索語を入力して下さい。'; $lang->msg_document_more_search = '継続サーチボタンを選択すると、まだ検索結果として引っかからなかった箇所を引き続き検索を行います。'; $lang->is_result_text = "'%s'に対する検索結果%d件"; - $lang->multimedia = "画像/動画"; + $lang->multimedia = '画像/動画'; $lang->is_search_option = array( 'document' => array( diff --git a/modules/krzip/lang/jp.lang.php b/modules/krzip/lang/jp.lang.php index ed8fe1939..2ec5ac56f 100644 --- a/modules/krzip/lang/jp.lang.php +++ b/modules/krzip/lang/jp.lang.php @@ -6,17 +6,17 @@ **/ // 一般用語 - $lang->krzip = "韓国郵便番号"; - $lang->krzip_server_hostname = "郵便番号検索サーバ名"; - $lang->krzip_server_port = "郵便番号検索サーバのポート"; - $lang->krzip_server_query = "郵便番号検索サーバのクエリ"; + $lang->krzip = '韓国郵便番号'; + $lang->krzip_server_hostname = '郵便番号検索サーバ名'; + $lang->krzip_server_port = '郵便番号検索サーバのポート'; + $lang->krzip_server_query = '郵便番号検索サーバのクエリ'; // 説明 - $lang->about_krzip_server_hostname = "郵便番号を検索して結果を取り寄せるサーバのドメインを入力して下さい。"; - $lang->about_krzip_server_port = "郵便番号検索サーバのポート番号を入力して下さい。"; - $lang->about_krzip_server_query = "郵便番号検索サーバに問い合わせるクエリのURLを入力して下さい。"; + $lang->about_krzip_server_hostname = '郵便番号を検索して結果を取り寄せるサーバのドメインを入力して下さい。'; + $lang->about_krzip_server_port = '郵便番号検索サーバのポート番号を入力して下さい。'; + $lang->about_krzip_server_query = '郵便番号検索サーバに問い合わせるクエリのURLを入力して下さい。'; // エラーメッセージ - $lang->msg_not_exists_addr = "入力された文字列では郵便番号が見つかりませんでした"; - $lang->msg_fail_to_socket_open = "郵便番号サーバとの接続に失敗しました"; + $lang->msg_not_exists_addr = '入力された文字列では郵便番号が見つかりませんでした'; + $lang->msg_fail_to_socket_open = '郵便番号サーバとの接続に失敗しました'; ?> diff --git a/modules/layout/lang/jp.lang.php b/modules/layout/lang/jp.lang.php index f0b47862d..089fc52cd 100644 --- a/modules/layout/lang/jp.lang.php +++ b/modules/layout/lang/jp.lang.php @@ -9,23 +9,23 @@ $lang->cmd_layout_edit = 'レイアウト編集'; $lang->layout_name = 'レイアウト名'; - $lang->layout_maker = "レイアウト作者"; + $lang->layout_maker = 'レイアウト作者'; $lang->layout_license = 'ライセンス'; - $lang->layout_history = "変更内容 "; - $lang->layout_info = "レイアウト情報"; + $lang->layout_history = '変更内容 '; + $lang->layout_info = 'レイアウト情報'; $lang->layout_list = 'レイアウトリスト'; $lang->menu_count = 'メニュー数'; $lang->downloaded_list = 'ダウンロードリスト'; $lang->layout_preview_content = '内容が出力される部分です。'; $lang->not_apply_menu = 'レイアウトの一括適用'; - $lang->cmd_move_to_installed_list = "作成されたリスト表示"; + $lang->cmd_move_to_installed_list = '作成されたリスト表示'; - $lang->about_downloaded_layouts = "ダウンロードのレイアウトリスト"; + $lang->about_downloaded_layouts = 'ダウンロードのレイアウトリスト'; $lang->about_title = 'モジュールとの連動をわかりやすく区分するためのタイトルを入力して下さい。'; $lang->about_not_apply_menu = 'チェックを入れると連動するすべてのメニューのモジュールのレイアウトを一括変更します。'; - $lang->about_layout = "レイアウトのモジュールはサイトのレイアウトを分かりやすく作成出来るようにします。
レイアウトの設定とメニューのリンクで様々なモジュールで完成されたサイト構築が出来ます。
※ ブログまたは他のモジュールのレイアウトなどの削除・修正が出来ないレイアウトは、該当モジュールにて設定を行って下さい。"; + $lang->about_layout = 'レイアウトのモジュールはサイトのレイアウトを分かりやすく作成出来るようにします。
レイアウトの設定とメニューのリンクで様々なモジュールで完成されたサイト構築が出来ます。
※ ブログまたは他のモジュールのレイアウトなどの削除・修正が出来ないレイアウトは、該当モジュールにて設定を行って下さい。'; $lang->about_layout_code = "下のレイアウトコードを修正し、保存するとサービスに反映されます。 必ずプレビューで確認してから保存して下さい。 diff --git a/modules/lifepod/lang/jp.lang.php b/modules/lifepod/lang/jp.lang.php index 30b6c911b..5e6055061 100644 --- a/modules/lifepod/lang/jp.lang.php +++ b/modules/lifepod/lang/jp.lang.php @@ -5,11 +5,11 @@ * @brief ライフポッド(lifepod) モジュールの日本語言語パッケージ **/ - $lang->lifepod = "ライフポッド"; + $lang->lifepod = 'ライフポッド'; - $lang->calendar_address = "カレンダーxmlのURL"; + $lang->calendar_address = 'カレンダーxmlのURL'; $lang->cmd_lifepod_list = 'ライフポッドリスト'; $lang->cmd_view_info = 'ライフポッド情報'; - $lang->about_lifepod = "ライフポッド(Lifepod)はOpenmaru社が提供しているカレンダーサービスです。
ライフポッドXEモジュールでライフポッドの特定カレンダーを内部ページのように閲覧が出来るようにします。"; + $lang->about_lifepod = 'ライフポッド(Lifepod)はOpenmaru社が提供しているカレンダーサービスです。
ライフポッドXEモジュールでライフポッドの特定カレンダーを内部ページのように閲覧が出来るようにします。'; ?> diff --git a/modules/member/lang/jp.lang.php b/modules/member/lang/jp.lang.php index fefc56945..7f17a5ff3 100644 --- a/modules/member/lang/jp.lang.php +++ b/modules/member/lang/jp.lang.php @@ -8,9 +8,9 @@ $lang->member = '会員'; $lang->member_default_info = '基本情報'; $lang->member_extend_info = '追加情報'; - $lang->default_group_1 = "準会員"; - $lang->default_group_2 = "正会員"; - $lang->admin_group = "管理グループ"; + $lang->default_group_1 = '準会員'; + $lang->default_group_2 = '正会員'; + $lang->admin_group = '管理グループ'; $lang->keep_signed = '次回からID入力を省略'; $lang->remember_user_id = 'ID保存'; $lang->already_logged = '既にログインされています。'; @@ -110,24 +110,24 @@ $lang->cmd_view_saved_document = '保存ドキュメント'; $lang->cmd_send_email = 'メール送信'; - $lang->msg_email_not_exists = "登録されたメールアドレスがありません。"; + $lang->msg_email_not_exists = '登録されたメールアドレスがありません。'; $lang->msg_alreay_scrapped = '既にスクラップされたコンテンツです。'; $lang->msg_cart_is_null = '対象を選択して下さい。'; - $lang->msg_checked_file_is_deleted = '%d個の添付ファイルが削除されました。'; + $lang->msg_checked_file_is_deleted = "%d個の添付ファイルが削除されました。"; $lang->msg_find_account_title = '会員IDどパスワードの情報'; $lang->msg_find_account_info = '登録された会員情報は下記の通りです。'; $lang->msg_find_account_comment = '下のリンクをクリックすると上のパスワードに変更されます。
ログインしてからパスワードを変更して下さい。'; $lang->msg_confirm_account_title = '確認メールです。'; $lang->msg_confirm_account_info = '作成した会員の情報'; - $lang->msg_confirm_account_comment = '下記のURLをクリックして会員登録を完了して下さい。'; - $lang->msg_auth_mail_sent = '%s メールでは認証情報を含んだ内容が送信されました。 メールを確認して下さい。'; - $lang->msg_confirm_mail_sent = '%s 宛に確認メールを送信しました。メールをご確認下さい。'; + $lang->msg_confirm_account_comment = '下記のURLをクリックして会員登録手続きを完了して下さい。'; + $lang->msg_auth_mail_sent = "%s 宛に認証情報内容が送信されました。メールを確認して下さい。"; + $lang->msg_confirm_mail_sent = "%s 宛に確認メールを送信しました。メールをご確認下さい。"; $lang->msg_invalid_auth_key = '正しくないアカウントの認証要求です。
IDとパスワードの検索を行うか、サイト管理者にアカウント情報をお問い合わせ下さい。'; - $lang->msg_success_authed = '認証が正常に行われ、ログインできました。\n必ず確認メールに記載されたパスワードを利用してお好みのパスワードに変更して下さい。.'; - $lang->msg_success_confirmed = '会員登録いただきましてありがとうございます。'; + $lang->msg_success_authed = '認証が正常に行われ、ログイン出来ました。\n必ず確認メールに記載されたパスワードを利用してお好みのパスワードに変更して下さい。.'; + $lang->msg_success_confirmed = '会員登録、有難うございます。'; $lang->msg_new_member = '会員追加'; $lang->msg_update_member = '会員情報修正'; diff --git a/modules/menu/lang/jp.lang.php b/modules/menu/lang/jp.lang.php index d07ae7dbd..92fdc4a01 100644 --- a/modules/menu/lang/jp.lang.php +++ b/modules/menu/lang/jp.lang.php @@ -24,24 +24,24 @@ $lang->menu_hover_btn = 'マウスオーバー'; $lang->menu_active_btn = '選択時のボタン'; $lang->menu_group_srls = 'グループ制限'; - $lang->layout_maker = "レイアウト作者"; - $lang->layout_history = "変更内容"; - $lang->layout_info = "レイアウト情報"; + $lang->layout_maker = 'レイアウト作者'; + $lang->layout_history = '変更内容'; + $lang->layout_info = 'レイアウト情報'; $lang->layout_list = 'レイアウトリスト'; $lang->downloaded_list = 'ダウンロードリスト'; $lang->limit_menu_depth = '表示スレッド'; $lang->cmd_make_child = '下位メニュー追加'; - $lang->cmd_move_to_installed_list = "生成されたリスト表示"; - $lang->cmd_enable_move_menu = "メニュー移動(選択後メニューをドラッグして下さい)"; - $lang->cmd_search_mid = "mid 検索"; + $lang->cmd_move_to_installed_list = '生成されたリスト表示'; + $lang->cmd_enable_move_menu = 'メニュー移動(選択後メニューをドラッグして下さい)'; + $lang->cmd_search_mid = 'mid 検索'; $lang->msg_cannot_delete_for_child = '下位メニューが存在するメニューは削除出来ません。'; $lang->about_title = 'モジュールをリンクする際に分かりやすいタイトルを入力して下さい。'; $lang->about_menu_management = "メニュー管理は、選択されたレイアウトで使用するメニューを構成出来るようにします。
一定レベルまでメニューの構成が出来、入力したメニューをクリックすると詳細情報が入力出来ます。
フォルダーのイメージをクリックするとメニューを拡張することが出来ます。
もしメニューが正常に表示されない場合は、 「キャッシュファイル再生成」ボタンをクリックして情報を更新して下さい。
* 一定レベル以上のメニューは正しく表示されない場合があります。"; $lang->about_menu_name = '管理及びイメージボタンではない場合、メニュー名として表示されるタイトルです。'; - $lang->about_menu_url = "メニュー選択時、移動するURLです。
他のモジュールとリンクを張る場合はIDの値のみ入力して下さい。
内容がない場合は、メニューを選択しても何の動作もありません。"; + $lang->about_menu_url = 'メニュー選択時、移動するURLです。
他のモジュールとリンクを張る場合はIDの値のみ入力して下さい。
内容がない場合は、メニューを選択しても何の動作もありません。'; $lang->about_menu_open_window = 'メニュー選択時、新しいウィンドウで開くかを指定することが出来ます。'; $lang->about_menu_expand = 'ツリーメニュー(tree_menu.js)を利用すると常に拡張表示(すべて表示)の状態にすることが出来ます。'; $lang->about_menu_img_btn = 'イメージボタンを登録するとレイアウトで自動的にイメージボタンに入れ替わって表示されます。'; @@ -49,5 +49,5 @@ $lang->about_menu = "メニューモジュールは、メニュー管理機能にて生成モジュールの整理やレイアウトとのリンクを設定し、簡単に管理者画面上でサイトを構築出来るようにします。\nメニューはサイトを管理するというより、モジュールとレイアウトをリンクし、様々なメニューを表示させる情報だけ持っています。"; - $lang->alert_image_only = "イメージ(画像)ファイルのみ登録出来ます。"; + $lang->alert_image_only = 'イメージ(画像)ファイルのみ登録出来ます。'; ?> diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index 851ce21e2..df8b21ef0 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -5,17 +5,17 @@ * @brief 日本語言語パッケージ **/ - $lang->virtual_site = "バーチャル(Virtual)サイト"; - $lang->module_list = "モジュールリスト"; - $lang->module_index = "モジュールインデックス"; - $lang->module_category = "モジュールカテゴリ"; - $lang->module_info = "詳細"; - $lang->add_shortcut = "管理者メニューに追加する"; - $lang->module_action = "動作"; - $lang->module_maker = "モジュール作者"; + $lang->virtual_site = 'バーチャル(Virtual)サイト'; + $lang->module_list = 'モジュールリスト'; + $lang->module_index = 'モジュールインデックス'; + $lang->module_category = 'モジュールカテゴリ'; + $lang->module_info = '詳細'; + $lang->add_shortcut = '管理者メニューに追加する'; + $lang->module_action = '動作'; + $lang->module_maker = 'モジュール作者'; $lang->module_license = 'ライセンス'; - $lang->module_history = "変更内容 "; - $lang->category_title = "カテゴリ名"; + $lang->module_history = '変更内容 '; + $lang->category_title = 'カテゴリ名'; $lang->header_text = 'ヘッダー内容'; $lang->footer_text = 'フッター内容'; $lang->use_category = 'カテゴリ使用'; @@ -25,37 +25,37 @@ $lang->skin_author = 'スキン作者'; $lang->skin_license = 'ライセンス'; $lang->skin_history = '変更内容'; - $lang->module_copy = "モジュールコピー"; - $lang->module_selector = "モジュールセレクター"; - $lang->do_selected = "選択したものを..."; - $lang->bundle_setup = "一括基本設定"; - $lang->bundle_addition_setup = "一括追加設定"; - $lang->bundle_grant_setup = "一括権限設定"; - $lang->lang_code = "言語コード"; - $lang->filebox = "ファイルボックス"; + $lang->module_copy = 'モジュールコピー'; + $lang->module_selector = 'モジュールセレクター'; + $lang->do_selected = '選択したものを...'; + $lang->bundle_setup = '一括基本設定'; + $lang->bundle_addition_setup = '一括追加設定'; + $lang->bundle_grant_setup = '一括権限設定'; + $lang->lang_code = '言語コード'; + $lang->filebox = 'ファイルボックス'; $lang->access_type = 'アクセスタイプ'; $lang->access_domain = 'Doaminアクセス'; $lang->access_vid = 'Site IDアクセス'; - $lang->about_domain = "複数のホームページを作成するためには、「オリジナルドメイン」や「サブ ドメイン」のような専用のドメインが必要です。
また、 XEのインストールパスも一緒に記入して下さい。
ex) www.xpressengine.com/xe"; + $lang->about_domain = '複数のホームページを作成するためには、「オリジナルドメイン」や「サブ ドメイン」のような専用のドメインが必要です。
また、 XEのインストールパスも一緒に記入して下さい。
ex) www.xpressengine.com/xe'; $lang->about_vid = '別の違うドメインではなく、「http://XEアドレス/ID」へのアクセスが可能です。この際、モジュール名(mid)と重複しないように登録して下さい。
必ず、頭文字は半角英文字にし、「(すべて半角の)英数字・_ 」 だけの組み合わせで入力して下さい。'; $lang->msg_already_registed_vid = '既に登録されたサイトIDです。掲示板などのmidと重複は不可です。異なるIDを入力して下さい。'; - $lang->msg_already_registed_domain = "既に登録されているドメインです。異なるドメインを利用して下さい。"; + $lang->msg_already_registed_domain = '既に登録されているドメインです。異なるドメインを利用して下さい。'; - $lang->header_script = "ヘッダースクリプト"; - $lang->about_header_script = "HTMLの<header>と</header>の間に入れるコードを直接入力出来ます。
<script、<styleまたは<metaタグなどが利用出来ます。"; + $lang->header_script = 'ヘッダースクリプト'; + $lang->about_header_script = 'HTMLの<header>と</header>の間に入れるコードを直接入力出来ます。
<script、<styleまたは<metaタグなどが利用出来ます。'; - $lang->grant_access = "アクセス権限"; - $lang->grant_manager = "管理権限"; + $lang->grant_access = 'アクセス権限'; + $lang->grant_manager = '管理権限'; - $lang->grant_to_all = "すべてのユーザー"; - $lang->grant_to_login_user = "ログインユーザー"; - $lang->grant_to_site_user = "登録ユーザー"; - $lang->grant_to_group = "特定グループのユーザー"; + $lang->grant_to_all = 'すべてのユーザー'; + $lang->grant_to_login_user = 'ログインユーザー'; + $lang->grant_to_site_user = '登録ユーザー'; + $lang->grant_to_group = '特定グループのユーザー'; - $lang->cmd_add_shortcut = "ショットカット追加"; - $lang->cmd_install = "インストール"; - $lang->cmd_update = "アップデート"; + $lang->cmd_add_shortcut = 'ショットカット追加'; + $lang->cmd_install = 'インストール'; + $lang->cmd_update = 'アップデート'; $lang->cmd_manage_category = 'カテゴリ管理'; $lang->cmd_manage_grant = '権限管理'; $lang->cmd_manage_skin = 'スキン管理'; @@ -63,21 +63,21 @@ $lang->cmd_find_module = 'モジュール検索'; $lang->cmd_find_langcode = '言語コード検索'; - $lang->msg_new_module = "モジュール作成"; - $lang->msg_update_module = "モジュール修正"; - $lang->msg_module_name_exists = "既に存在するモジュール名です。他の名前を入力して下さい。"; + $lang->msg_new_module = 'モジュール作成'; + $lang->msg_update_module = 'モジュール修正'; + $lang->msg_module_name_exists = '既に存在するモジュール名です。他の名前を入力して下さい。'; $lang->msg_category_is_null = '登録されているカテゴリがありません。'; $lang->msg_grant_is_null = '登録された権限がありません。'; $lang->msg_no_checked_document = '選択された書き込みがありません。'; $lang->msg_move_failed = '移動することが出来ませんでした。'; $lang->msg_cannot_delete_for_child = '下位カテゴリのカテゴリは削除することが出来ません。'; - $lang->msg_limit_mid ="モジュール名は「 半角英小文字+[半角英小文字+半角数字+_] 」のみ出来ます。"; + $lang->msg_limit_mid ='モジュール名は「 半角英小文字+[半角英小文字+半角数字+_] 」のみ出来ます。'; $lang->msg_extra_name_exists = '既に存在する拡張変数名です。他の拡張変数名を入力して下さい。'; - $lang->about_browser_title = "ブラウザのタイトルバーに表示される内容です。RSS/Trackbackでも使用します。"; - $lang->about_mid = "モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。
※英数の頭文字と[英数と_のみ]の組み合わせ (すべて半角) The maximum length is 40."; - $lang->about_default = "チェックすると、サイトに「mid値」なしでアクセスした場合、デフォルトで表示します。"; - $lang->about_module_category = "カテゴリで管理出来るようにします。モジュールのカテゴリの管理は、「モジュール管理 > モジュールカテゴリ」にて行います。"; + $lang->about_browser_title = 'ブラウザのタイトルバーに表示される内容です。RSS/Trackbackでも使用します。'; + $lang->about_mid = 'モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。
※英数の頭文字と[英数と_のみ]の組み合わせ (すべて半角) The maximum length is 40.'; + $lang->about_default = 'チェックすると、サイトに「mid値」なしでアクセスした場合、デフォルトで表示します。'; + $lang->about_module_category = 'カテゴリで管理出来るようにします。モジュールのカテゴリの管理は、「モジュール管理 > モジュールカテゴリ」にて行います。"; $lang->about_description= '管理用として用いられる説明です。'; $lang->about_header_text = 'モジュールのヘッダーに表示される内容です。(HTMLタグの使用可能)'; $lang->about_footer_text = 'モジュールのフッターに表示される内容です。(HTMLタグの使用可能)'; @@ -91,8 +91,8 @@ $lang->about_grant_deatil = '登録ユーザーとはcafeXEなど分譲型バーチャル(Virtual)サイトに登録した、ログインユーザーを意味します。'; $lang->about_module = "XEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理出来るようにします。"; $lang->about_extra_vars_default_value = '多重・単一選択などのデフォルト値が、複数必要な場合は、「, (コンマ)」で区切って追加することが出来ます。'; - $lang->about_search_virtual_site = "バーチャル(Virtual)サイト(:cafeXEなど)のドメインを入力して検索して下さい。
バーチャル(Virtual)サイト以外のモジュールは内容を空にしてから検索します。(http://は省く)"; + $lang->about_search_virtual_site = 'バーチャル(Virtual)サイト(:cafeXEなど)のドメインを入力して検索して下さい。
バーチャル(Virtual)サイト以外のモジュールは内容を空にしてから検索します。(http://は省く)'; $lang->about_extra_vars_eid_value = '拡張変数名を入力して下さい。 (英字+[英字+数字+_]のみ可能(全て半角))'; - $lang->about_langcode = "言語ごとに異なる設定をする場合、言語コード検索を利用して下さい。"; + $lang->about_langcode = '言語ごとに異なる設定をする場合、言語コード検索を利用して下さい。'; $lang->about_file_extension= "%s ファイルのみ可能です。"; ?> diff --git a/modules/opage/lang/jp.lang.php b/modules/opage/lang/jp.lang.php index aa813a6c2..a7bee04ad 100644 --- a/modules/opage/lang/jp.lang.php +++ b/modules/opage/lang/jp.lang.php @@ -5,11 +5,11 @@ * @brief 外部ページ(opage)モジュールの基本言語パッケージ **/ - $lang->opage = "外部ページ"; - $lang->opage_path = "外部ドキュメントの場所"; - $lang->opage_caching_interval = "キャッシング時間設定"; + $lang->opage = '外部ページ'; + $lang->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_caching_interval = "分単位で指定出来、設定された時間の間は、臨時保存されたデータを出力します。
他のサーバの情報を出力したり、データを出力する際、リソースが多く使われるため、数分単位でキャッシングすることをお勧めします。
「0」に指定するとキャッシングされません。"; + $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/page/lang/jp.lang.php b/modules/page/lang/jp.lang.php index 6fcf88dd9..08b143e3e 100644 --- a/modules/page/lang/jp.lang.php +++ b/modules/page/lang/jp.lang.php @@ -5,9 +5,9 @@ * @brief ページ(page)モジュールの基本言語パッケージ **/ - $lang->page = "ページ"; + $lang->page = 'ページ'; $lang->about_page = "一枚のページを作成出来るモジュールです。\n最新書き込みウィジェットや他のウィジェットを用いて動的なページが作成が出来、さらにエディターのコンポネントで様々なデザインも出来ます。\n接続URLは、他のモジュールと同様に、「mid=モジュール名」でアクセスし、デフォルトとして指定するとサイトにアクセスする際、メインページとして使われます。"; - $lang->cmd_page_modify = "ページ修正"; - $lang->page_caching_interval = "キャッシング時間設定"; - $lang->about_page_caching_interval = "分単位で指定出来、設定された時間の間は、臨時保存されたデータを出力します。
他のサーバの情報を出力したり、データを出力する際、リソースが多く使われるため、数分単位でキャッシングすることをお勧めします。
「0」に指定するとキャッシングされません。"; + $lang->cmd_page_modify = 'ページ修正'; + $lang->page_caching_interval = 'キャッシング時間設定'; + $lang->about_page_caching_interval = '分単位で指定出来、設定された時間の間は、臨時保存されたデータを出力します。
他のサーバの情報を出力したり、データを出力する際、リソースが多く使われるため、数分単位でキャッシングすることをお勧めします。
「0」に指定するとキャッシングされません。'; ?> diff --git a/modules/planet/lang/jp.lang.php b/modules/planet/lang/jp.lang.php index f9ee93353..4db6e3b14 100644 --- a/modules/planet/lang/jp.lang.php +++ b/modules/planet/lang/jp.lang.php @@ -5,123 +5,123 @@ * @brief プラネット(planet)モジュールの日本語パック **/ - $lang->planet = "プラネット"; - $lang->planet_title = "プラネットタイトル"; - $lang->planet_url = "プラネットURL"; - $lang->planet_myplanet = "マイプラネット"; - $lang->planet_whos_planet = "%s さんのプラネット"; - $lang->planet_whos_favorite = "%s さんのお気に入り"; - $lang->planet_whos_favorite_list = "'%s'さんがよく訪れるプラネット"; - $lang->planet_favorite = "お気に入り"; + $lang->planet = 'プラネット'; + $lang->planet_title = 'プラネットタイトル'; + $lang->planet_url = 'プラネットURL'; + $lang->planet_myplanet = 'マイプラネット'; + $lang->planet_whos_planet = '%s さんのプラネット'; + $lang->planet_whos_favorite = '%s さんのお気に入り'; + $lang->planet_whos_favorite_list = ''%s'さんがよく訪れるプラネット'; + $lang->planet_favorite = 'お気に入り'; - $lang->planet_welcome = "ようこそ!"; + $lang->planet_welcome = 'ようこそ!'; - $lang->planet_reply_content = "プラネットのコメント内容"; + $lang->planet_reply_content = 'プラネットのコメント内容'; $lang->about_planet = "microBlogのXEモジュールです。会員別のプラネットを作成して運営することが出来ます。 ホームページパッケージで登録されているドメインからプラネットへアクセス出来ない場合もあります。 プラネットを初期ページとして利用する場合は、ホームページパッケージで登録されているドメインと異なるドメインを登録して下さい。"; - $lang->planet_mid = "プラネットアクセスアドレス"; - $lang->about_planet_mid = "プラネットアクセスアドレスは「http://XEアドレス/プラネットアクセスアドレス」のようにダイレクトで接続出来るアドレスを指します。"; + $lang->planet_mid = 'プラネットアクセスアドレス"; + $lang->about_planet_mid = "プラネットアクセスアドレスは「http://XEアドレス/プラネットアクセスアドレス」のようにダイレクトで接続出来るアドレスを指します。'; - $lang->planet_default_skin = "プラネット基本スキン"; - $lang->about_planet_default_skin = "プラネットメインページ及び作成されたプラネットの基本スキンに設定されます。"; + $lang->planet_default_skin = 'プラネット基本スキン'; + $lang->about_planet_default_skin = 'プラネットメインページ及び作成されたプラネットの基本スキンに設定されます。'; - $lang->planet_comment = "プラネット簡単紹介"; - $lang->about_planet_comment = "プラネット簡単紹介はプラネットに接続した時ブラウザのタイトル及びプラネットの簡単紹介欄に表示される内容です。"; + $lang->planet_comment = 'プラネット簡単紹介'; + $lang->about_planet_comment = 'プラネット簡単紹介はプラネットに接続した時ブラウザのタイトル及びプラネットの簡単紹介欄に表示される内容です。'; - $lang->use_signup = "会員登録ボタン表示"; - $lang->about_use_signup = "会員登録ボタン表示を選択するとプラネットの上段メニュに会員登録が出来るボタンが表示されます。"; + $lang->use_signup = '会員登録ボタン表示'; + $lang->about_use_signup = '会員登録ボタン表示を選択するとプラネットの上段メニュに会員登録が出来るボタンが表示されます。'; - $lang->cmd_create_planet = "マイプラネット作成"; - $lang->create_message = "マイプラネット作成案内文"; - $lang->about_create_message = "プラネット作成時に表示される案内文が入力出来ます。"; + $lang->cmd_create_planet = 'マイプラネット作成'; + $lang->create_message = 'マイプラネット作成案内文'; + $lang->about_create_message = 'プラネット作成時に表示される案内文が入力出来ます。'; - $lang->cmd_planet_setup = "基本設定"; - $lang->cmd_planet_list = "プラネットリスト"; + $lang->cmd_planet_setup = '基本設定'; + $lang->cmd_planet_list = 'プラネットリスト'; - $lang->msg_not_logged = "ログインしていません。"; - $lang->msg_planet_exists = "既に作成したプラネットがありますので、新しく作成することが出来ません。"; - $lang->msg_denied_planet_title = 'Denied planet title'; + $lang->msg_not_logged = 'ログインしていません。'; + $lang->msg_planet_exists = '既に作成したプラネットがありますので、新しく作成することが出来ません。'; + $lang->msg_denied_planet_title = '禁止されたプラネットタイトルです。'; - $lang->planet_userinfo = "個人情報"; - $lang->planet_change_userinfo = "個人情報変更"; + $lang->planet_userinfo = '個人情報'; + $lang->planet_change_userinfo = '個人情報変更'; - $lang->planet_change_photo = "写真変更"; - $lang->about_planet_change_photo = "画像サイズは96×96pxに設定されます。"; - $lang->cmd_planet_image_upload = "画像アップロード"; + $lang->planet_change_photo = '写真変更'; + $lang->about_planet_change_photo = '画像サイズは96×96pxに設定されます。'; + $lang->cmd_planet_image_upload = '画像アップロード'; - $lang->cmd_planet_good = "お勧め"; - $lang->cmd_planet_addfavorite = "お気に入り追加"; + $lang->cmd_planet_good = 'お勧め'; + $lang->cmd_planet_addfavorite = 'お気に入り追加'; - $lang->planet_hot_tag = "リアルタイム人気タグ"; - $lang->planet_home = "Planet TOP"; - $lang->cmd_planet_more_tag = "タグをもっと見る"; + $lang->planet_hot_tag = 'リアルタイム人気タグ'; + $lang->planet_home = 'Planet TOP'; + $lang->cmd_planet_more_tag = 'タグをもっと見る'; - $lang->planet_memo = "メモ"; - $lang->cmd_planet_show_memo_write_form = "メモ作成"; - $lang->cmd_planet_delete_memo = "メモ削除"; - $lang->cmd_planet_memo_write_ok = "入力完了"; + $lang->planet_memo = 'メモ'; + $lang->cmd_planet_show_memo_write_form = 'メモ作成'; + $lang->cmd_planet_delete_memo = 'メモ削除'; + $lang->cmd_planet_memo_write_ok = '入力完了'; - $lang->planet_interest_tag = "関心タグ"; - $lang->planet_interest_content = "関心記事"; - $lang->cmd_planet_show_interest_tag = "関心タグを見る"; - $lang->cmd_planet_close_interest_tag = "関心タグを閉じる"; - $lang->msg_planet_already_added_interest_tag = "既に登録されている関心タグです。"; + $lang->planet_interest_tag = '関心タグ'; + $lang->planet_interest_content = '関心記事'; + $lang->cmd_planet_show_interest_tag = '関心タグを見る'; + $lang->cmd_planet_close_interest_tag = '関心タグを閉じる'; + $lang->msg_planet_already_added_interest_tag = '既に登録されている関心タグです。'; - $lang->cmd_planet_edit_subject = "タイトル編集"; - $lang->cmd_planet_edit_intro = "簡単紹介編集"; - $lang->cmd_planet_edit_tag = "タグ編集"; + $lang->cmd_planet_edit_subject = 'タイトル編集'; + $lang->cmd_planet_edit_intro = '簡単紹介編集'; + $lang->cmd_planet_edit_tag = 'タグ編集'; - $lang->cmd_planet_openclose_memo = "メモを開く/閉じる"; - $lang->cmd_planet_del_tag = "タグ削除"; + $lang->cmd_planet_openclose_memo = 'メモを開く/閉じる'; + $lang->cmd_planet_del_tag = 'タグ削除'; - $lang->cmd_planet_openclose_recommend_search = "お勧め検索を開く/閉じる"; - $lang->about_planet_input_search_text = "検索語入力"; + $lang->cmd_planet_openclose_recommend_search = 'お勧め検索を開く/閉じる'; + $lang->about_planet_input_search_text = '検索語入力'; - $lang->about_planet_make_planet = "マイプラネットを作成しましょう。プラネットの上段に表示される「マイインフォ」を入力して下さい。"; - $lang->about_planet_make_planet_info = "マイプラネットの上段に表示されるマイインフォです。各項目を入力して設定を変更して下さい。"; - $lang->planet_input_personalinfo = "個人情報入力"; - $lang->planet_photo = "写真"; - $lang->planet_myintro = "自己紹介"; + $lang->about_planet_make_planet = 'マイプラネットを作成しましょう。プラネットの上段に表示される「マイインフォ」を入力して下さい。'; + $lang->about_planet_make_planet_info = 'マイプラネットの上段に表示されるマイインフォです。各項目を入力して設定を変更して下さい。'; + $lang->planet_input_personalinfo = '個人情報入力'; + $lang->planet_photo = '写真'; + $lang->planet_myintro = '自己紹介'; - $lang->about_planet_url = "一度設定すると変更が出来ませんので、慎重に決めて下さい。"; - $lang->planet_mytag = "人物タグ"; - $lang->about_planet_mytag = "自分を表現するタグです。複数のタグは半角「,(コンマ)」で区切って入力して下さい。"; + $lang->about_planet_url = '一度設定すると変更が出来ませんので、慎重に決めて下さい。'; + $lang->planet_mytag = '人物タグ'; + $lang->about_planet_mytag = '自分を表現するタグです。複数のタグは半角「,(コンマ)」で区切って入力して下さい。'; - $lang->about_planet_tag = "複数のタグは「,」で区別されます。"; + $lang->about_planet_tag = '複数のタグは「,」で区別されます。'; - $lang->cmd_planet_makeOk_move_myplanet = "確認 : 作成されたマイプラネットに移動します。"; - $lang->cmd_planet_ok_move_myplanet = "確認 : マイプラネットに移動します。"; + $lang->cmd_planet_makeOk_move_myplanet = '確認 : 作成されたマイプラネットに移動します。'; + $lang->cmd_planet_ok_move_myplanet = '確認 : マイプラネットに移動します。'; - $lang->about_planet_login = "IDとPasswordを入力してログインボタンをクリックして下さい。"; + $lang->about_planet_login = 'IDとPasswordを入力してログインボタンをクリックして下さい。'; - $lang->cmd_planet_login = "ログイン"; + $lang->cmd_planet_login = 'ログイン'; - $lang->planet_nowhot_tag = "プラネット人気タグ"; - $lang->cmd_planet_close_nowhot_tag = "人気タグを閉じる"; + $lang->planet_nowhot_tag = 'プラネット人気タグ'; + $lang->cmd_planet_close_nowhot_tag = '人気タグを閉じる'; - $lang->about_planet_whats_textSearch_in_planet = "%sさんのプラネットから検索した'%s'の検索結果です。"; - $lang->about_planet_whats_textSearch = "'%s'の全体検索結果です。"; + $lang->about_planet_whats_textSearch_in_planet = '%sさんのプラネットから検索した'%s'の検索結果です。'; + $lang->about_planet_whats_textSearch = ''%s'の全体検索結果です。'; - $lang->planet_acticle = "記事"; - $lang->planet_persontag = "人物タグ"; + $lang->planet_acticle = '記事'; + $lang->planet_persontag = '人物タグ'; - $lang->planet_recent_acticle = "最新記事"; + $lang->planet_recent_acticle = '最新記事'; - $lang->cmd_planet_add_tag = "関心タグ追加"; - $lang->cmd_planet_add_article = "新規投稿"; - $lang->cmd_planet_post_article = "登録"; - $lang->planet_postscript = "P.S"; - $lang->planet_article_preview = "プレビュー"; + $lang->cmd_planet_add_tag = '関心タグ追加'; + $lang->cmd_planet_add_article = '新規投稿'; + $lang->cmd_planet_post_article = '登録'; + $lang->planet_postscript = 'P.S.'; + $lang->planet_article_preview = 'プレビュー'; $lang->planet_notice_title = "%sさん、プラネットにようこそ!
%sさんの考え、意見、情報、知識などを自由にたくさんの人々と共有出来るプラネットです。簡単な使い方を案内します。"; @@ -133,51 +133,51 @@ "他のプラネットが気になりますか?「リアルタイム人気タグ」または「検索」を利用してみて下さい。", "その他、気になる部分は「質問」タグを検索してみて下さい。他の方から答えてもらえます。", ); - $lang->planet_notice_disable = "今後このメッセージを表示しません。"; + $lang->planet_notice_disable = '今後このメッセージを表示しません。'; - $lang->msg_planet_about_postscript = "追加で書きたいことがありましたら作成して下さい。"; - $lang->msg_planet_about_tag = "タグを書いて下さい。(半角コンマ「,」で区別)"; - $lang->msg_planet_already_added_favorite = "既に登録されたお気に入りです。"; - $lang->msg_planet_no_memo = "登録されたメモがありません。"; + $lang->msg_planet_about_postscript = '追加で書きたいことがありましたら作成して下さい。'; + $lang->msg_planet_about_tag = 'タグを書いて下さい。(半角コンマ「,」で区別)'; + $lang->msg_planet_already_added_favorite = '既に登録されたお気に入りです。'; + $lang->msg_planet_no_memo = '登録されたメモがありません。'; - $lang->msg_planet_rss_enabled = "RSS配布機能を使用中です。"; - $lang->msg_planet_rss_disabled = "RSS配布機能を使用していません。"; + $lang->msg_planet_rss_enabled = 'RSS配布機能を使用中です。'; + $lang->msg_planet_rss_disabled = 'RSS配布機能を使用していません。'; - $lang->msg_me2day_sync = "me2dayに書き込みを送る"; - $lang->msg_me2day_sync_q = "me2dayに書き込みを送信しますか?"; - $lang->me2day_id = "me2dayアドレス"; - $lang->me2day_ukey = "ユーザーキー"; - $lang->msg_me2day_activate = "自動送信設定されました。"; - $lang->msg_fail_auth_me2day = "me2dayの認証に失敗しました。"; - $lang->msg_success_auth_me2day = "me2day認証に成功しました。"; + $lang->msg_me2day_sync = 'me2dayに書き込みを送る'; + $lang->msg_me2day_sync_q = 'me2dayに書き込みを送信しますか?'; + $lang->me2day_id = 'me2dayアドレス'; + $lang->me2day_ukey = 'ユーザーキー'; + $lang->msg_me2day_activate = '自動送信設定されました。'; + $lang->msg_fail_auth_me2day = 'me2dayの認証に失敗しました。'; + $lang->msg_success_auth_me2day = 'me2day認証に成功しました。'; - $lang->planet_total_articles = "全て"; - $lang->planet_wantyou = "お勧め"; - $lang->planet_best = "ベスト"; - $lang->planet_catch = "選んだ記事"; - $lang->planet_fish = "選ばれた記事"; - $lang->planet_bigfish = "ベスト"; - $lang->cmd_send_me2day = "me2day送信"; + $lang->planet_total_articles = '全て'; + $lang->planet_wantyou = 'お勧め'; + $lang->planet_best = 'ベスト'; + $lang->planet_catch = '選んだ記事'; + $lang->planet_fish = '選ばれた記事'; + $lang->planet_bigfish = 'ベスト'; + $lang->cmd_send_me2day = 'me2day送信'; $lang->msg_already_have_phone_number = '既に登録されている電話番号です。'; $lang->planet_mobile_receive = '携帯連動'; $lang->planet_mobile_number = '携帯電話番号'; $lang->msg_success_set_phone_number = '電話番号を登録しました。'; - $lang->planet_tagtab = "基本タグタブ"; - $lang->about_planet_tagtab = "半角コンマ(,)区切りで複数タグの登録が出来ます。 登録したタグはメインページにタブとして出力されます。"; - $lang->planet_tagtab_after = "追加タグタブ"; - $lang->about_planet_tagtab_after = "基本タグタブの後ろに、複数のタグタブの追加が出来ます。半角コンマ(,)区切りで複数登録出来ます。"; - $lang->planet_smstag = "SMS登録タグ"; - $lang->about_planet_smstag = "SMSで登録されるタグです。半角コンマ(,)区切りで複数のタグ指定が出来ます。"; + $lang->planet_tagtab = '基本タグタブ'; + $lang->about_planet_tagtab = '半角コンマ(,)区切りで複数タグの登録が出来ます。 登録したタグはメインページにタブとして出力されます。'; + $lang->planet_tagtab_after = '追加タグタブ'; + $lang->about_planet_tagtab_after = '基本タグタブの後ろに、複数のタグタブの追加が出来ます。半角コンマ(,)区切りで複数登録出来ます。'; + $lang->planet_smstag = 'SMS登録タグ'; + $lang->about_planet_smstag = 'SMSで登録されるタグです。半角コンマ(,)区切りで複数のタグ指定が出来ます。'; - $lang->planet_use_mobile = "SMS連動"; - $lang->about_use_mobile = "携帯SMSにて書き込みが出来ます。(日本国内は未対応)"; - $lang->planet_use_me2day = "mw2day連動"; - $lang->about_use_me2day = "書き込みの内容がme2dayへ送信されます。"; + $lang->planet_use_mobile = 'SMS連動'; + $lang->about_use_mobile = '携帯SMSにて書き込みが出来ます。(日本国内は未対応)'; + $lang->planet_use_me2day = 'mw2day連動'; + $lang->about_use_me2day = '書き込みの内容がme2dayへ送信されます。'; - $lang->msg_search_thisplanet = "このプラネットで検索"; + $lang->msg_search_thisplanet = 'このプラネットで検索'; $lang->msg_welcome_planet = 'プラネットの開設、有難う御座います。これから宜しくお願します'; ?> diff --git a/modules/point/lang/jp.lang.php b/modules/point/lang/jp.lang.php index 4da6cbcdd..0783cb7c6 100644 --- a/modules/point/lang/jp.lang.php +++ b/modules/point/lang/jp.lang.php @@ -25,8 +25,8 @@ $lang->disable_download = 'ダウンロード禁止'; $lang->about_disable_download = 'チェックするとポイントがない場合、ダウンロードを禁止します(イメージファイル除外)。'; - $lang->disable_read_document = '글 열람 금지'; - $lang->about_disable_read_document = '포인트가 없을 경우 글 열람을 금지하게 됩니다'; + $lang->disable_read_document = '閲覧禁止'; + $lang->about_disable_read_document = 'ポイントがない場合、閲覧を禁止します。'; $lang->level_point_calc = 'レベル別ポイント計算'; $lang->expression = 'レベル変数iを使用してJavaスクリプト数式を入力して下さい(例: Math.pow(i, 2) * 90)。'; @@ -37,8 +37,8 @@ $lang->about_cmd_point_recal = '書き込み/コメント/添付ファイル/会員登録のポイントのみ取り、全ての他のポイントを初期化します。
但し、会員登録ポイントは初期化後、該当会員の活動がスタートしたら付与されます。
データ移管などによるポイントを完全に初期化する必要がある場合など、利用は慎重に行なって下さい。'; $lang->point_link_group = 'グループ連動'; - $lang->point_group_reset_and_add = '설정된 그룹 초기화 후 새 그룹 부여'; - $lang->point_group_add_only = '새 그룹만 부여'; + $lang->point_group_reset_and_add = '設定されたグループの初期化後、新規グループに付与'; + $lang->point_group_add_only = '新規グループのみ付与'; $lang->about_point_link_group = 'グループにレベルを指定すると、該当レベルになったらグループが変更されます。'; $lang->about_module_point = 'モジュール別にポイントを指定することが出来ますが、指定されていないモジュールでは、デフォルトポイントが使用されます。すべてのポイント数は、反対のアクションを行った際には原状復帰されます。'; @@ -61,7 +61,7 @@ $lang->cmd_point_member_list = '会員ポイントリスト'; $lang->msg_cannot_download = 'ポイントが不足しているため、ダウンロード出来ません。'; - $lang->msg_disallow_by_point = "포인트가 부족하여 글을 읽을 수 없습니다 (필요포인트 : %d, 현재포인트 : %d)"; + $lang->msg_disallow_by_point = "ポイントが不足しているため、閲覧が出来ません。(必要ポイント : %d, 保有ポイント : %d)"; $lang->point_recal_message = 'ただ今ポイントを適用しています。 (%d / %d)'; $lang->point_recal_finished = 'ポイント再計算が完了しました。'; diff --git a/modules/wiki/lang/jp.lang.php b/modules/wiki/lang/jp.lang.php index 0c7bf6018..99f817913 100644 --- a/modules/wiki/lang/jp.lang.php +++ b/modules/wiki/lang/jp.lang.php @@ -14,5 +14,5 @@ $lang->about_use_comment = 'コメント機能をオン・オフを設定します。'; $lang->contributors = '投稿者'; $lang->notice_old_revision = '過去のバージョンです。'; - $lang->restore = '復元'; + $lang->restore = '差し戻し'; ?> diff --git a/widgets/content/conf/info.xml b/widgets/content/conf/info.xml index 998576c66..93d0f9ec0 100644 --- a/widgets/content/conf/info.xml +++ b/widgets/content/conf/info.xml @@ -575,14 +575,14 @@ module_srl_list 대상 모듈 对象模块 - ターゲットモジュール + モジュール Target Module Módulo Objetivo Модуль назначения 目標模組 선택하신 모듈에 등록된 글을 대상으로 합니다. - 将把所选模块当中的主题作为对象。 チェックされたモジュールに登録されたコンテンツ(書き込み)を対象とします。 + 将把所选模块当中的主题作为对象。 The target articles to be sorted will be the ones submitted in the selected module. El objetivo de los documentos agregados serán los del módulo selccionado. Статьи назначения для сортировки будут теми, что были размещены в выбранном модуле. @@ -598,10 +598,10 @@ Feed(RSS/ATOM) URL 피드 주소는 타입이 지원하는 문서 형식일 경우에만 등록 됩니다. (지원 문서 형식 : RSS 2.0, RSS 1.0, ATOM 1.0) - 피드 주소는 타입이 지원하는 문서 형식일 경우에만 등록 됩니다. - (지원 문서 형식 : RSS 2.0, RSS 1.0, ATOM 1.0) RSS URLはタイプが RSSの時だけ登録出来ます。 (サポートする文書形式 : RSS 2.0, RSS 1.0, ATOM 1.0) + 피드 주소는 타입이 지원하는 문서 형식일 경우에만 등록 됩니다. + (지원 문서 형식 : RSS 2.0, RSS 1.0, ATOM 1.0)
text @@ -642,13 +642,13 @@ select HTML 출력 방식 - HTML 출력 방식 + HTML表示タイプ HTML 출력 방식 HTML Display Type HTML 출력 방식 HTML 출력 방식 TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) - TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) + TABLE(表)タグとUL(リスト型)タグを選択して表示します。(デフォールトはTABLE) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) You can choose TABLE tag or UL tag to display. (default is TABLE) TABLE(표)태그와 UL(목록형) 태그를 선택하여 출력하게 할 수 있습니다. (기본은 TABLE입니다) diff --git a/widgets/rss_reader/conf/info.xml b/widgets/rss_reader/conf/info.xml index 57e798234..d9c06d8f7 100644 --- a/widgets/rss_reader/conf/info.xml +++ b/widgets/rss_reader/conf/info.xml @@ -1,13 +1,13 @@ RSS 리더 - RSS リーダー + RSSリーダー RSS阅读器 RSS Reader RSS-ридер RSS閱讀器 RSS 리더입니다. - RSS リーダーです。 + RSSリーダーです。 RSS阅读器控件。 This widget displays data retrieved from RSS feed. Этот виджет отображает данные, полученные посредством RSS. @@ -96,7 +96,7 @@ Ширина 高度 select 스킨에서 본문 높이 (기본값 200px) - select スキンから本文の高さ(デフォルト値 200px) + selectスキンから本文の高さ(デフォルト値 200px) 选择select皮肤时的文本高度。(默认为200px) Height of select skin (default: 200px) Ширина скина (стандарт: 200px) diff --git a/widgets/webzine/conf/info.xml b/widgets/webzine/conf/info.xml index ef4637073..4c0774f65 100644 --- a/widgets/webzine/conf/info.xml +++ b/widgets/webzine/conf/info.xml @@ -233,7 +233,7 @@ Число изображений (колонка) 橫向圖片數 출력될 가로 이미지의 수를 정하실 수 있습니다. (기본 1개) - 表示する横並びびのイメージ数を指定します(デフォルト1個)。 + 表示する横並びのイメージ数を指定します(デフォルト1個)。 可以指定要显示的横向图片个数。(默认为1个) You can set the number of images to display. (1 as default) Usted puede definir el múmero de imágenes a mostrar. (predefinido: 1) From 4ba43cc5d0100fbedc082726621c6968cc72dd88 Mon Sep 17 00:00:00 2001 From: misol Date: Thu, 28 May 2009 16:13:53 +0000 Subject: [PATCH 013/243] =?UTF-8?q?=ED=95=9C=20=EA=B8=80=EC=97=90=20?= =?UTF-8?q?=EA=B0=99=EC=9D=80=20=EC=A0=9C=EB=AA=A9=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=ED=8C=8C=EC=9D=BC=EB=8F=84=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=ED=95=A0=20=EC=88=98=20=EC=9E=88=EA=B2=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95(=EC=9D=B4=EC=A0=84=EC=97=90=EB=8A=94=20=EA=B0=99?= =?UTF-8?q?=EC=9D=80=20=EC=9D=B4=EB=A6=84=EC=9C=BC=EB=A1=9C=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=ED=8C=8C=EC=9D=BC=EC=9D=80=20=EB=93=B1=EB=A1=9D?= =?UTF-8?q?=EC=9D=B4=20=EB=90=98=EC=96=B4=EB=8F=84=20=EC=8B=A4=EC=A7=88?= =?UTF-8?q?=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EB=93=B1=EB=A1=9D=EC=9D=B4=20?= =?UTF-8?q?=EC=95=88=EB=90=98=EC=97=88=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6436 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/file/file.controller.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php index f32218de1..5db836553 100644 --- a/modules/file/file.controller.php +++ b/modules/file/file.controller.php @@ -60,9 +60,9 @@ $file_info = Context::get('Filedata'); // 정상적으로 업로드된 파일이 아니면 오류 출력 if(is_uploaded_file($file_info['tmp_name'])){ - $output = $this->insertFile($file_info, $module_srl, $upload_target_srl); - Context::set('uploaded_fileinfo',$output); - } + $output = $this->insertFile($file_info, $module_srl, $upload_target_srl); + Context::set('uploaded_fileinfo',$output); + } $this->setTemplatePath($this->module_path.'tpl'); $this->setTemplateFile('iframe'); @@ -350,7 +350,7 @@ // direct 파일에 해킹을 의심할 수 있는 확장자가 포함되어 있으면 바로 삭제함 $file_info['name'] = preg_replace('/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']); - $path = sprintf("./files/attach/images/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3)); + $path = sprintf("./files/attach/images/%s/%s%s/", $module_srl,getNumberingPath($upload_target_srl,3),md5(crypt(rand(1000000,900000), rand(0,100)))); $filename = $path.$file_info['name']; $direct_download = 'Y'; } else { From ff5039f7016655334ffbb74485f98ad44805ae7d Mon Sep 17 00:00:00 2001 From: zero Date: Fri, 29 May 2009 05:24:06 +0000 Subject: [PATCH 014/243] =?UTF-8?q?=ED=94=8C=EB=9E=98=EB=8B=9B=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EC=8A=A4=ED=82=A8=EC=97=90=EC=84=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=9E=90=20=EC=9D=B4=EB=A6=84=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=EC=8B=9C=20=EC=8A=A4=ED=81=AC=EB=A1=A4=EC=9D=B4=20=EC=9C=84?= =?UTF-8?q?=EB=A1=9C=20=EC=98=AC=EB=9D=BC=EA=B0=80=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6437 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/planet/skins/xe_planet/content_list.html | 2 +- modules/planet/skins/xe_planet/reply_list.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/planet/skins/xe_planet/content_list.html b/modules/planet/skins/xe_planet/content_list.html index b90aa1ded..18c95a34b 100644 --- a/modules/planet/skins/xe_planet/content_list.html +++ b/modules/planet/skins/xe_planet/content_list.html @@ -48,7 +48,7 @@
-

{htmlspecialchars($item->nick_name)}{$item->getNickName()}

+

{htmlspecialchars($item->nick_name)}{$item->getNickName()}

diff --git a/modules/planet/skins/xe_planet/reply_list.html b/modules/planet/skins/xe_planet/reply_list.html index bc1cb0d5d..62fb80d5d 100644 --- a/modules/planet/skins/xe_planet/reply_list.html +++ b/modules/planet/skins/xe_planet/reply_list.html @@ -1,7 +1,7 @@
-
{$reply->nick_name}
+
{$reply->nick_name}
{$reply->content} {getTimeGap($reply->regdate, 'Y/m/d')} From 93ceea706e6609f6bfafd3e0e4513b13dfc289c5 Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Fri, 29 May 2009 05:54:30 +0000 Subject: [PATCH 015/243] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6438 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/category/skins/default/category.html | 1 + widgets/category/skins/default/css/widget.css | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/widgets/category/skins/default/category.html b/widgets/category/skins/default/category.html index a7749648b..619173d19 100644 --- a/widgets/category/skins/default/category.html +++ b/widgets/category/skins/default/category.html @@ -44,6 +44,7 @@ +
diff --git a/widgets/category/skins/default/css/widget.css b/widgets/category/skins/default/css/widget.css index f5c916f1b..f757e9764 100644 --- a/widgets/category/skins/default/css/widget.css +++ b/widgets/category/skins/default/css/widget.css @@ -10,8 +10,8 @@ .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetTree ul li a, -.widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} +.widgetTree ul li .nav_tree_label, +.widgetTree ul li .sum{ position:relative; left:16px; _left /**/:0; top:0; font-style:normal;} .widgetTree ul li a {text-decoration:none; } .widgetTree ul li a.selected {font-weight:bold;} .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} @@ -43,8 +43,8 @@ .widgetContainer.black .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} .widgetContainer.black .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1; margin-left:8px;} .widgetContainer.black .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetContainer.black .widgetTree ul li a, -.widgetContainer.black .widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} +.widgetContainer.black .widgetTree ul li .nav_tree_label, +.widgetContainer.black .widgetTree ul li .sum{ position:relative; left:16px; _left /**/:0; top:0; font-style:normal;} .widgetContainer.black .widgetTree ul li a {text-decoration:none; } .widgetContainer.black .widgetTree ul li a.selected {font-weight:bold;} .widgetContainer.black .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} From 890f8287210cb417bec4b2b9ac12a4b05b6a33f7 Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Fri, 29 May 2009 05:54:44 +0000 Subject: [PATCH 016/243] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6439 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/navigator/skins/tree/css/widget.css | 128 ++++++++++---------- widgets/navigator/skins/tree/navigator.html | 82 ++++++------- 2 files changed, 103 insertions(+), 107 deletions(-) diff --git a/widgets/navigator/skins/tree/css/widget.css b/widgets/navigator/skins/tree/css/widget.css index 73892282f..32d47b83c 100644 --- a/widgets/navigator/skins/tree/css/widget.css +++ b/widgets/navigator/skins/tree/css/widget.css @@ -1,64 +1,64 @@ -@charset "utf-8"; - -/* Widget Tree */ -.widgetTree { margin-top:10px;} -.widgetTree *{ margin:0; padding:0; font-size:12px;} -.widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} -.widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1;} -.widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetTree ul li a, -.widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} -.widgetTree ul li a {text-decoration:none; } -.widgetTree ul li a.selected {font-weight:bold;} -.widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} -.widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} -.widgetTree ul li ul li{ display:none;} -.widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} -.widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} -.widgetTree ul li.nav_tree_on ul{ display:block;} -.widgetTree ul li.nav_tree_on ul li{ display:block;} -.widgetTree ul li.nav_tree_off ul{ display:none;} -.widgetTree ul li.nav_tree_off ul li{ display:none;} -.widgetTree .icon{ position:relative; left:16px;} - -/* widgetTree */ -.widgetTree{ color:#333;} -.widgetTree a{ color:#333;} - -/* Widget Tree */ -.widgetTree ul{ background:url(../img/white/lineTreeVr.gif) repeat-y 0 -1px;} -.widgetTree ul li{ background:url(../img/white/lineTreeHr.gif) no-repeat 1px 5px !important;} -.widgetTree ul li button{ background:url(../img/white/buttonTreeCollapse.gif) no-repeat;} -.widgetTree ul li.nav_tree_last{ background:url(../img/white/lineTreeLastHr.gif) no-repeat 0 5px !important;} - -/* Widget Tree */ -.widgetContainer.black .widgetTree { margin-top:10px;} -.widgetContainer.black .widgetTree *{ margin:0; padding:0; font-size:12px;} -.widgetContainer.black .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} -.widgetContainer.black .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1;} -.widgetContainer.black .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetContainer.black .widgetTree ul li a, -.widgetContainer.black .widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} -.widgetContainer.black .widgetTree ul li a {text-decoration:none; } -.widgetContainer.black .widgetTree ul li a.selected {font-weight:bold;} -.widgetContainer.black .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} -.widgetContainer.black .widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} -.widgetContainer.black .widgetTree ul li ul li{ display:none;} -.widgetContainer.black .widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} -.widgetContainer.black .widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} -.widgetContainer.black .widgetTree ul li.nav_tree_on ul{ display:block;} -.widgetContainer.black .widgetTree ul li.nav_tree_on ul li{ display:block;} -.widgetContainer.black .widgetTree ul li.nav_tree_off ul{ display:none;} -.widgetContainer.black .widgetTree ul li.nav_tree_off ul li{ display:none;} -.widgetContainer.black .widgetTree .icon{ position:relative; left:16px;} - -/* widgetTree */ -.widgetContainer.black .widgetTree{ color:#999;} -.widgetContainer.black .widgetTree a { color:#999;} - -/* Widget Tree */ -.widgetContainer.black .widgetTree ul{ background:url(../img/black/lineTreeVr.gif) repeat-y 0 -1px;} -.widgetContainer.black .widgetTree ul li{ background:url(../img/black/lineTreeHr.gif) no-repeat 1px 5px !important;} -.widgetContainer.black .widgetTree ul li button{ background:url(../img/black/buttonTreeCollapse.gif) no-repeat;} -.widgetContainer.black .widgetTree ul li.nav_tree_last{ background:url(../img/black/lineTreeLastHr.gif) no-repeat 0 5px !important;} - +@charset "utf-8"; + +/* Widget Tree */ +.widgetTree { margin-top:10px;} +.widgetTree *{ margin:0; padding:0; font-size:12px;} +.widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} +.widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1;} +.widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} +.widgetTree ul li .nav_tree_label, +.widgetTree ul li .sum{ position:relative; left:16px; _left /**/:0; top:0; font-style:normal;} +.widgetTree ul li a {text-decoration:none; } +.widgetTree ul li a.selected {font-weight:bold;} +.widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} +.widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} +.widgetTree ul li ul li{ display:none;} +.widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} +.widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} +.widgetTree ul li.nav_tree_on ul{ display:block;} +.widgetTree ul li.nav_tree_on ul li{ display:block;} +.widgetTree ul li.nav_tree_off ul{ display:none;} +.widgetTree ul li.nav_tree_off ul li{ display:none;} +.widgetTree .icon{ position:relative; left:16px;} + +/* widgetTree */ +.widgetTree{ color:#333;} +.widgetTree a{ color:#333;} + +/* Widget Tree */ +.widgetTree ul{ background:url(../img/white/lineTreeVr.gif) repeat-y 0 -1px;} +.widgetTree ul li{ background:url(../img/white/lineTreeHr.gif) no-repeat 1px 5px !important;} +.widgetTree ul li button{ background:url(../img/white/buttonTreeCollapse.gif) no-repeat;} +.widgetTree ul li.nav_tree_last{ background:url(../img/white/lineTreeLastHr.gif) no-repeat 0 5px !important;} + +/* Widget Tree */ +.widgetContainer.black .widgetTree { margin-top:10px;} +.widgetContainer.black .widgetTree *{ margin:0; padding:0; font-size:12px;} +.widgetContainer.black .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} +.widgetContainer.black .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1;} +.widgetContainer.black .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} +.widgetContainer.black .widgetTree ul li .nav_tree_label, +.widgetContainer.black .widgetTree ul li .sum{ position:relative; left:16px; _left /**/:0; top:0; font-style:normal;} +.widgetContainer.black .widgetTree ul li a {text-decoration:none; } +.widgetContainer.black .widgetTree ul li a.selected {font-weight:bold;} +.widgetContainer.black .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -2px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} +.widgetContainer.black .widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} +.widgetContainer.black .widgetTree ul li ul li{ display:none;} +.widgetContainer.black .widgetTree ul li.nav_tree_on button{ background-position:0 -13px; *background-position:2px -11px;} +.widgetContainer.black .widgetTree ul li.nav_tree_off button{ background-position:0 0; *background-position:2px 2px;} +.widgetContainer.black .widgetTree ul li.nav_tree_on ul{ display:block;} +.widgetContainer.black .widgetTree ul li.nav_tree_on ul li{ display:block;} +.widgetContainer.black .widgetTree ul li.nav_tree_off ul{ display:none;} +.widgetContainer.black .widgetTree ul li.nav_tree_off ul li{ display:none;} +.widgetContainer.black .widgetTree .icon{ position:relative; left:16px;} + +/* widgetTree */ +.widgetContainer.black .widgetTree{ color:#999;} +.widgetContainer.black .widgetTree a { color:#999;} + +/* Widget Tree */ +.widgetContainer.black .widgetTree ul{ background:url(../img/black/lineTreeVr.gif) repeat-y 0 -1px;} +.widgetContainer.black .widgetTree ul li{ background:url(../img/black/lineTreeHr.gif) no-repeat 1px 5px !important;} +.widgetContainer.black .widgetTree ul li button{ background:url(../img/black/buttonTreeCollapse.gif) no-repeat;} +.widgetContainer.black .widgetTree ul li.nav_tree_last{ background:url(../img/black/lineTreeLastHr.gif) no-repeat 0 5px !important;} + diff --git a/widgets/navigator/skins/tree/navigator.html b/widgets/navigator/skins/tree/navigator.html index da62b475c..43df39232 100644 --- a/widgets/navigator/skins/tree/navigator.html +++ b/widgets/navigator/skins/tree/navigator.html @@ -1,43 +1,39 @@ - - -{@ $_pDepth = 0;} - - - - - -
black"> -
-
    - - - - - -
- - - {@ $_pDepth = $val->depth} - - -
-
+ + +{@ $_pDepth = 0;} + + + +
black"> +
+
    + + + + +
+ + + {@ $_pDepth = $val->depth} + +
+
From 125d8f829c177b25364b947ff4d7c7d27346c8ad Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Fri, 29 May 2009 05:55:45 +0000 Subject: [PATCH 017/243] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6440 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- layouts/cafeXE/css/widget.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/layouts/cafeXE/css/widget.css b/layouts/cafeXE/css/widget.css index a31eac229..f955bc098 100755 --- a/layouts/cafeXE/css/widget.css +++ b/layouts/cafeXE/css/widget.css @@ -174,8 +174,8 @@ dl.widgetDivider dd{ display:none; margin:0;} .widgetTree a strong{ letter-spacing:-1px; cursor:pointer; _cursor /**/:hand;} .widgetTree ul{ position:relative; display:block; padding:3px 0 0 0 !important; zoom:1;} .widgetTree ul li{ list-style:none; position:relative; padding:3px 0 2px 8px; white-space:nowrap;} -.widgetTree ul li a, -.widgetTree ul li span.nav_tree_label{ position:relative; left:16px; _left /**/:0; top:0;} +.widgetTree ul li .nav_tree_label, +.widgetTree ul li .sum{ position:relative; left:16px; _left /**/:0; top:0; font-style:normal;} .widgetTree ul li a.selected {font-weight:bold;} .widgetTree ul li button{ display:inline-block; position:relative; _left /**/:-16px; *top:-2px; width:13px; height:13px; *width:17px; *height:17px; margin:0 -13px 0 0; *margin:0 -17px -1px -2px; text-indent:-10000px; *text-indent:0; *font:0/0 Sans-serif; border:none; cursor:pointer; _cursor /**/:hand;} .widgetTree ul li ul{ display:none; padding:2px 0 0 0 !important; margin:0 0 -2px 6px; background-position:left top;} From 83b406492ebde14872b9ac0944a719772ea703f3 Mon Sep 17 00:00:00 2001 From: zero Date: Fri, 29 May 2009 06:45:36 +0000 Subject: [PATCH 018/243] =?UTF-8?q?planet,=20cafeXE=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=82=AC=EC=9D=B4=ED=8A=B8=EB=93=A4=EC=97=90=20=EB=8C=80?= =?UTF-8?q?=ED=95=B4=EC=84=9C=EB=8F=84=20RSS=EB=A5=BC=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=ED=95=A0=20=EC=88=98=20=EC=9E=88=EA=B2=8C?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6441 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/homepage/conf/module.xml | 1 + .../homepage/homepage.admin.controller.php | 1 + modules/homepage/homepage.view.php | 33 +++- modules/homepage/queries/getRssList.xml | 21 +++ modules/homepage/tpl/index.html | 8 + modules/planet/conf/module.xml | 2 + modules/planet/planet.admin.controller.php | 1 + modules/planet/planet.view.php | 40 ++++- modules/planet/queries/getRssList.xml | 20 +++ modules/planet/tpl/filter/insert_config.xml | 1 + modules/planet/tpl/setup.html | 9 +- modules/rss/rss.view.php | 154 +++++++++--------- 12 files changed, 204 insertions(+), 87 deletions(-) create mode 100644 modules/homepage/queries/getRssList.xml create mode 100644 modules/planet/queries/getRssList.xml diff --git a/modules/homepage/conf/module.xml b/modules/homepage/conf/module.xml index fcef201a7..15601ecbb 100644 --- a/modules/homepage/conf/module.xml +++ b/modules/homepage/conf/module.xml @@ -37,6 +37,7 @@ + diff --git a/modules/homepage/homepage.admin.controller.php b/modules/homepage/homepage.admin.controller.php index 73541f723..69aec14fa 100644 --- a/modules/homepage/homepage.admin.controller.php +++ b/modules/homepage/homepage.admin.controller.php @@ -24,6 +24,7 @@ $args->default_layout = $vars->default_layout; $args->enable_change_layout = $vars->enable_change_layout; + $args->use_rss = $vars->use_rss; foreach($vars as $key => $val) { if(strpos($key,'allow_service_')===false) continue; $args->allow_service[substr($key, strlen('allow_service_'))] = $val; diff --git a/modules/homepage/homepage.view.php b/modules/homepage/homepage.view.php index 26e428008..e4beb2ba9 100644 --- a/modules/homepage/homepage.view.php +++ b/modules/homepage/homepage.view.php @@ -17,7 +17,6 @@ function init() { $oModuleModel = &getModel('module'); - if($this->act != 'dispHomepageIndex' && strpos($this->act,'Homepage')!==false) { // 현재 접속 권한 체크하여 사이트 관리자가 아니면 접근 금지 $logged_info = Context::get('logged_info'); @@ -54,6 +53,7 @@ function dispHomepageIndex() { $oHomepageAdminModel = &getAdminModel('homepage'); $oHomepageModel = &getModel('homepage'); + $oModuleModel = &getModel('module'); $template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin); if(!is_dir($template_path)||!$this->module_info->skin) { @@ -98,6 +98,9 @@ Context::set('my_cafes', $output->data); } + $homepage_info = $oModuleModel->getModuleConfig('homepage'); + if($homepage_info->use_rss == 'Y') Context::set('rss_url',getUrl('','mid',$this->module_info->mid,'act','rss')); + $this->setTemplateFile('index'); } @@ -280,8 +283,6 @@ $this->setTemplateFile('category_list'); } - - /** * @brief 홈페이지 게시판 추가 설정 **/ @@ -403,5 +404,31 @@ // 표시 $this->setTemplateFile('components'); } + + /** + * @brief rss + **/ + function rss() { + $oRss = &getView('rss'); + $oDocumentModel = &getModel('document'); + $oModuleModel = &getModel('module'); + + $homepage_info = $oModuleModel->getModuleConfig('homepage'); + if($homepage_info->use_rss != 'Y') return new Object(-1,'msg_rss_is_disabled'); + + $output = executeQueryArray('homepage.getRssList', $args); + if($output->data) { + foreach($output->data as $key => $val) { + unset($obj); + $obj = new DocumentItem(0); + $obj->setAttribute($val); + $document_list[] = $obj; + } + } + + $oRss->rss($document_list, $homepage_info->browser_title); + $this->setTemplatePath($oRss->getTemplatePath()); + $this->setTemplateFile($oRss->getTemplateFile()); + } } ?> diff --git a/modules/homepage/queries/getRssList.xml b/modules/homepage/queries/getRssList.xml new file mode 100644 index 000000000..f18c3e614 --- /dev/null +++ b/modules/homepage/queries/getRssList.xml @@ -0,0 +1,21 @@ + + + +
+
+ + + + + + + + + + + + + + + + diff --git a/modules/homepage/tpl/index.html b/modules/homepage/tpl/index.html index 0bed6d271..78ddf8d6b 100644 --- a/modules/homepage/tpl/index.html +++ b/modules/homepage/tpl/index.html @@ -196,6 +196,14 @@

{$lang->about_allow_service}

+ + + + + + diff --git a/modules/planet/conf/module.xml b/modules/planet/conf/module.xml index bee5d4757..a4c5d3bfc 100644 --- a/modules/planet/conf/module.xml +++ b/modules/planet/conf/module.xml @@ -35,6 +35,8 @@ + + diff --git a/modules/planet/planet.admin.controller.php b/modules/planet/planet.admin.controller.php index ea8c6a126..578edbd1c 100644 --- a/modules/planet/planet.admin.controller.php +++ b/modules/planet/planet.admin.controller.php @@ -54,6 +54,7 @@ $module_info->planet_default_skin = Context::get('planet_default_skin'); $module_info->use_mobile = Context::get('use_mobile'); $module_info->use_me2day = Context::get('use_me2day'); + $module_info->use_rss = Context::get('use_rss'); $tagtab = explode(',',Context::get('planet_tagtab')); for($i=0,$c=count($tagtab);$i<$c;$i++){ diff --git a/modules/planet/planet.view.php b/modules/planet/planet.view.php index dde9c725f..4025b8afb 100644 --- a/modules/planet/planet.view.php +++ b/modules/planet/planet.view.php @@ -11,7 +11,7 @@ * @brief 초기화 **/ function init() { - if(!preg_match('/planet/i', $this->act) && !in_array($this->act, array('favorite','countContentTagSearch','dispReplyList'))) return; + if(!preg_match('/planet/i', $this->act) && !in_array($this->act, array('favorite','countContentTagSearch','dispReplyList','rss'))) return; /** * @brief 플래닛 모듈의 기본 설정은 view에서는 언제든지 사용하도록 load하여 Context setting @@ -44,12 +44,11 @@ Context::set('planet', $this->planet = $oPlanetModel->getPlanet($this->module_srl)); // 메인 페이지 일 경우 특정 액션이 아니라면 무조건 메인 화면 뿌려줌 - if($this->planet->isHome() && !in_array($this->act, array('dispPlanetCreate','dispPlanetLogin','dispPlanetTagSearch','dispPlanetContentSearch','dispPlanetContentTagSearch')) ) { + if($this->planet->isHome() && !in_array($this->act, array('dispPlanetCreate','dispPlanetLogin','dispPlanetTagSearch','dispPlanetContentSearch','dispPlanetContentTagSearch','rss')) ) { Context::set('act',$this->act = 'dispPlanetHome'); } // 플래닛은 별도 레이아웃 동작하지 않도록 변경 - //Context::set('layout', 'none'); if(!Context::get('mid')) Context::set('mid', $this->module_info->mid, true); } @@ -169,6 +168,9 @@ Context::set('tagtab_after_list', $tagtab_after_list); } + // RSS 링크 + if($this->module_info->use_rss=='Y') Context::set('rss_url', getUrl('','mid',$this->module_info->mid,'act','rss')); + // 템플릿 지정 $this->setTemplateFile('main'); } @@ -383,6 +385,36 @@ $this->setTemplateFile('message'); } - } + /** + * @brief rss + **/ + function rss() { + $oRss = &getView('rss'); + $oRssModel = &getModel('rss'); + $oDocumentModel = &getModel('document'); + if($this->planet->isHome()) { + if($this->module_info->use_rss!='Y') return new Object(-1,'msg_rss_is_disabled'); + } else { + $rss_config = $oRssModel->getRssModuleConfig($this->module_srl); + if($rss_config->open_rss != 'Y') return new Object(-1,'msg_rss_is_disabled'); + $args->module_srl = $this->module_srl; + } + + $output = executeQueryArray('planet.getRssList', $args); + if($output->data) { + foreach($output->data as $key => $val) { + unset($obj); + $obj = new DocumentItem(0); + $obj->setAttribute($val); + $document_list[] = $obj; + } + } + + $oRss->rss($document_list, $this->planet->getBrowserTitle()); + $this->setTemplatePath($oRss->getTemplatePath()); + $this->setTemplateFile($oRss->getTemplateFile()); + } + + } ?> diff --git a/modules/planet/queries/getRssList.xml b/modules/planet/queries/getRssList.xml new file mode 100644 index 000000000..901e2a558 --- /dev/null +++ b/modules/planet/queries/getRssList.xml @@ -0,0 +1,20 @@ + + +
RSS
+ use_rss=='Y')-->checked="checked"/> +
+
+ + + + + + + + + + + + + + + + diff --git a/modules/planet/tpl/filter/insert_config.xml b/modules/planet/tpl/filter/insert_config.xml index 0c997fa5a..3ffc3199e 100644 --- a/modules/planet/tpl/filter/insert_config.xml +++ b/modules/planet/tpl/filter/insert_config.xml @@ -21,6 +21,7 @@ + diff --git a/modules/planet/tpl/setup.html b/modules/planet/tpl/setup.html index 6e315eb44..db64a1dfe 100644 --- a/modules/planet/tpl/setup.html +++ b/modules/planet/tpl/setup.html @@ -82,8 +82,6 @@ - - - + + + + + + + + + + + From d4c3fe90e32201ad85debe38aa55bee7bacb57ef Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 2 Jun 2009 09:16:33 +0000 Subject: [PATCH 037/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6460 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/editor.controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index 821be0f3d..5bb665fb9 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -177,7 +177,7 @@ $buff = ''; + $buff .= ' }; '; Context::addHtmlHeader($buff); } } From 5a5c5b0f2515af478cccf552bb71941d52b2d4f5 Mon Sep 17 00:00:00 2001 From: nicetwo Date: Tue, 2 Jun 2009 09:28:42 +0000 Subject: [PATCH 038/243] =?UTF-8?q?=EC=98=81=EC=96=B4=20-=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=88=EC=97=AD=20=ED=95=9C=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?-=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EC=96=B4=EC=83=89=ED=95=9C=20=EB=AC=B8=EC=9E=A5=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6461 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/lang/en.lang.php | 2 +- modules/layout/lang/en.lang.php | 142 ++++++++++++++++---------------- modules/layout/lang/ko.lang.php | 4 +- modules/ldap/conf/info.xml | 7 ++ 4 files changed, 81 insertions(+), 74 deletions(-) diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index bcdcb354d..00508c8a0 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -46,7 +46,7 @@ $lang->about_editor_skin = 'You may select the skin of editor.'; $lang->about_content_style = 'You may select style for editting article or displaying content'; $lang->about_content_font = 'You may select font for editting article or displaying content.
Default font is your own font
Please use comma(,) for multiple input.'; - $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; + $lang->about_content_font_size = 'You may select font size for editting article or displaying content.
Please input units such as px or em.'; $lang->about_upload_file_grant = 'Selected group(s) will be able to upload files. (Leave them blank if you want all groups to have permission)'; $lang->about_default_component_grant = 'Selected group(s) will be able to use default components of editor. (Leave them blank if you want all groups to have permission)'; $lang->about_editor_height = 'You may set the height of editor.'; diff --git a/modules/layout/lang/en.lang.php b/modules/layout/lang/en.lang.php index 5aa636891..53c8f0c00 100644 --- a/modules/layout/lang/en.lang.php +++ b/modules/layout/lang/en.lang.php @@ -31,83 +31,83 @@ Please first preview your code and then save it. You can refer grammar of XE's template from XE Template."; - $lang->layout_export = '내보내기'; - $lang->layout_btn_export = '내 레이아웃 다운로드'; - $lang->about_layout_export = '현재 수정된 레이아웃을 내보내기를 합니다.'; - $lang->layout_import = '가져오기'; - $lang->about_layout_import = '가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하시기 바랍니다.'; + $lang->layout_export = 'Export'; + $lang->layout_btn_export = 'Download My Layout'; + $lang->about_layout_export = 'Export currently editted layout.'; + $lang->layout_import = 'Import'; + $lang->about_layout_import = 'Original layout will be deleted when you import. Please export current layout before importing.'; $lang->layout_manager = array( - 0 => '레이아웃 매니저', - 1 => '저장', - 2 => '취소', - 3 => '형태', - 4 => '배열', - 5 => '정렬', - 6 => '고정 레이아웃', - 7 => '가변 레이아웃', - 8 => '고정+가변(내용)', - 9 => '1칸', - 10 => '2칸 (내용 왼쪽)', - 11 => '2칸 (내용 오른쪽)', - 12 => '3칸 (내용 왼쪽)', - 13 => '3칸 (내용 가운데)', - 14 => '3칸 (내용 오른쪽)', - 15 => '왼쪽', - 16 => '가운데', - 17 => '오른쪽', - 18 => '전체', - 19 => '레이아웃', - 20 => '위젯 추가', - 21 => '내용 위젯 추가', - 22 => '속성', - 23 => '위젯 스타일', - 24 => '수정', - 25 => '삭제', - 26 => '정렬', - 27 => '한줄 차지', - 28 => '왼쪽', - 29 => '오른쪽', - 30 => '가로 너비', - 31 => '높이', - 32 => '바깥 여백', - 33 => '안쪽 여백', - 34 => '위', - 35 => '왼', - 36 => '오른', - 37 => '아래', - 38 => '테두리', - 39 => '없음', - 40 => '배경', - 41 => '색상', - 42 => '그림', - 43 => '선택', - 44 => '배경 그림 반복', - 45 => '반복', - 46 => '반복 안함', - 47 => '가로 반복', - 48 => '세로 반복', - 49 => '적용', - 50 => '취소', - 51 => '초기화', - 52 => '글자', - 53 => '글자 폰트', - 54 => '글자 색', + 0 => 'Layout Manager', + 1 => 'Save', + 2 => 'Cancel', + 3 => 'Form', + 4 => 'Array', + 5 => 'Arrange', + 6 => 'Fixed Layout', + 7 => 'Variable Layout', + 8 => 'Fixed+Variable (Content)', + 9 => '1 Cell', + 10 => '2 Cells (left of content)', + 11 => '2 Cells (right of content)', + 12 => '3 Cells (left of content)', + 13 => '3 Cells (center of content)', + 14 => '3 Cells (right of content)', + 15 => 'Left', + 16 => 'Center', + 17 => 'Right', + 18 => 'All', + 19 => 'Layout', + 20 => 'Add Widget', + 21 => 'Add Content Widget', + 22 => 'Attribute', + 23 => 'Widget Style', + 24 => 'Modify', + 25 => 'Delete', + 26 => 'Align', + 27 => 'Occupy a Line', + 28 => 'Left', + 29 => 'Right', + 30 => 'Width', + 31 => 'Height', + 32 => 'Margin', + 33 => 'Padding', + 34 => 'Top', + 35 => 'Left', + 36 => 'Right', + 37 => 'Bottom', + 38 => 'Border', + 39 => 'None', + 40 => 'Background', + 41 => 'Color', + 42 => 'Image', + 43 => 'Select', + 44 => 'Repeat Background', + 45 => 'Repeat', + 46 => 'No Repeat', + 47 => 'Repeat Width', + 48 => 'Repeat Height', + 49 => 'Apply', + 50 => 'Cancel', + 51 => 'Reset', + 52 => 'Text', + 53 => 'Font', + 54 => 'Font Color', ); - $lang->layout_image_repository = '레이아웃 파일 저장소'; - $lang->about_layout_image_repository = '선택된 레이아웃에 사용될 이미지/플래시파일등을 올릴 수 있습니다. 내보내기에 같이 포함이 됩니다'; - $lang->msg_layout_image_target = 'gif, png, jpg, swf, flv파일만 가능합니다'; - $lang->layout_migration = '레이아웃 내보내기/ 들이기'; - $lang->about_layout_migration = '수정된 레이아웃을 tar 파일로 내보내거나 tar 파일로 저장된 것을 불러올 수 있습니다'."\n".'(아직은 faceOff레이아웃만 내보내기/들이기가 됩니다'; + $lang->layout_image_repository = 'Layout Repository'; + $lang->about_layout_image_repository = 'You can upload images/flash files for selected layout. They will be included in exports'; + $lang->msg_layout_image_target = 'Only gif, png, jpg, swf, flv files are allowed'; + $lang->layout_migration = 'Layout Migration'; + $lang->about_layout_migration = 'You can export or import editted layout as tar file'."\n".'(So far only FaceOff supports exports/imports)'; $lang->about_faceoff = array( - 'title' => 'XpressEngine FaceOff Layout 관리자', - 'description' => 'FaceOff Layout관리자는 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.
아래 그림을 보시고 구성요소와 기능을 이용하여 원하시는 레이아웃을 만드세요', - 'layout' => 'FaceOff는 위와 같은 HTML 구조로 되어 있습니다.
이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.
위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.
이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 모듈의 내용이 출력됩니다.', - 'setting' => '좌측 상단의 메뉴에 대해 설명 드립니다.
  • 저장 : 설정된 내용을 저장합니다.
  • 취소 : 설정한 내용을 저장하지 않고 돌아갑니다.
  • 초기화 : 아무 설정도 되어 있지 않은 백지 상태로 돌립니다
  • 형태 : 고정/ 가변/ 고정+가변(내용)의 형태를 지정합니다.
  • 배열 : Extension 2개와 Content를 배열합니다.
  • 정렬 : 레이아웃의 위치를 정렬시킬 수 있습니다.
', - 'hotkey' => '마우스로 각 영역을 선택하면서 Hot Key를 이용하시면 더 쉽게 꾸미실 수 있습니다.
  • tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.
  • Shift + tab키 : tab키와 반대 역할을 합니다.
  • Esc : 아무것도 선택되어 있지 않을때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.
  • 방향키 : 위젯이 선택되어 있을때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.
', - 'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.', + 'title' => 'XpressEngine FaceOff Layout Manager', + 'description' => 'FaceOff Layout Manager willl help you design layout on the web easily.
Please design your own layout with components and functions as shown below.', + 'layout' => 'FaceOff has HTML structure as above.
You can arrange/align with CSS, or use Style to design.
You can add widget from Extension(e1, e2), Neck and Knee.
Also Body, Layout, Header, Body, Footer can designed by Style, and Content will display content.', + 'setting' => 'Let me explain you the upper menu on left.
  • Save : Save current settings.
  • Cancel : Discard current settings and go back.
  • Reset : Clear current settings
  • Form : Set form as Fixed/ Variable/ Fixed+Variable(Content).
  • Arrange : Arrange 2 Extensions and Content.
  • Align : Align the position of layout.
', + 'hotkey' => 'You can design your layout more easily with Hot Keys.
  • tab : Unless a widget is selected, Header, Body, Footer will be selected in order. If not, next widget will be selected.
  • Shift + tab : It does the opposite function to tab key.
  • Esc : If nothing is selected, Neck, Extension(e1,e2),Knee will be selected in order, if a widget is selected, area of the widget will be selected.
  • Arrow Key : If a widget is selected, arrow key will move the widget to other areas.
', + 'attribute' => 'You can set background color/image to every area except widget, and font color(include tag).', ); ?> diff --git a/modules/layout/lang/ko.lang.php b/modules/layout/lang/ko.lang.php index ab27d806c..e7e50eeaf 100644 --- a/modules/layout/lang/ko.lang.php +++ b/modules/layout/lang/ko.lang.php @@ -35,7 +35,7 @@ $lang->layout_btn_export = '내 레이아웃 다운로드'; $lang->about_layout_export = '현재 수정된 레이아웃을 내보내기를 합니다.'; $lang->layout_import = '가져오기'; - $lang->about_layout_import = '가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하시기 바랍니다.'; + $lang->about_layout_import = '가져오기를 할 경우 기존 수정된 레이아웃은 삭제됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하시기 바랍니다.'; $lang->layout_manager = array( 0 => '레이아웃 매니저', @@ -99,7 +99,7 @@ $lang->about_layout_image_repository = '선택된 레이아웃에 사용될 이미지/플래시파일등을 올릴 수 있습니다. 내보내기에 같이 포함이 됩니다'; $lang->msg_layout_image_target = 'gif, png, jpg, swf, flv파일만 가능합니다'; $lang->layout_migration = '레이아웃 내보내기/ 들이기'; - $lang->about_layout_migration = '수정된 레이아웃을 tar 파일로 내보내거나 tar 파일로 저장된 것을 불러올 수 있습니다'."\n".'(아직은 faceOff레이아웃만 내보내기/들이기가 됩니다'; + $lang->about_layout_migration = '수정된 레이아웃을 tar 파일로 내보내거나 tar 파일로 저장된 것을 불러올 수 있습니다'."\n".'(아직은 faceOff레이아웃만 내보내기/들이기가 됩니다.)'; $lang->about_faceoff = array( 'title' => 'XpressEngine FaceOff Layout 관리자', diff --git a/modules/ldap/conf/info.xml b/modules/ldap/conf/info.xml index 4b77e490e..684e535ff 100644 --- a/modules/ldap/conf/info.xml +++ b/modules/ldap/conf/info.xml @@ -1,11 +1,13 @@ LDAP 인증 연동 모듈 + LDAP Authentication Módulo de autenticación LDAP obras LDAP认证 LDAP認證模組 LDAP認証連動モジュール zero + zero zero zero zero @@ -13,6 +15,10 @@ LDAP 인증 연동하는 모듈입니다. 적수님(http://ggang.net)님이 매우 큰 도움 주셨습니다. + + + This module provide LDAP Authentication service. + Jeok Su(http://ggang.net) helped a lot. Autenticación LDAP módulo es el trabajo. @@ -35,6 +41,7 @@ interlock zero + zero zero zero zero From e25f2ca1198b5ba1c16350f531ef4d1178653fbf Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 01:08:31 +0000 Subject: [PATCH 039/243] =?UTF-8?q?=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=EC=84=9C=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=EC=8B=9C=20=ED=95=B4=EB=8B=B9=20=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=EC=9D=98=20=EA=B8=B0=EB=B3=B8=20=ED=9A=8C=EC=9B=90?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B0=80=EC=9E=85=EC=8B=9C=ED=82=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6462 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/member.controller.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index acc91a565..fc95e26d7 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -540,9 +540,20 @@ $output = $this->insertMember($args); if(!$output->toBool()) return $output; + // 가상사이트일 경우 사이트 가입 + $site_module_info = Context::get('site_module_info'); + if($site_module_info->site_srl > 0) { + $default_group = $oMemberModel->getDefaultGroup($site_module_info->site_srl); + if($default_group->group_srl) { + $this->addMemberToGroup($args->member_srl, $default_group->group_srl, $site_module_info->site_srl); + } + + } + // 로그인 시킴 if ($config->enable_confirm != 'Y') $this->doLogin($args->user_id); + // 결과 정리 $this->add('member_srl', $args->member_srl); if($config->redirect_url) $this->add('redirect_url', $config->redirect_url); if ($config->enable_confirm == 'Y') { From 2a3549798ef741b92cb234a5f557418b93def057 Mon Sep 17 00:00:00 2001 From: haneul Date: Wed, 3 Jun 2009 03:06:06 +0000 Subject: [PATCH 040/243] for doxygen git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6463 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.php b/index.php index d665ba38f..f91b7124e 100644 --- a/index.php +++ b/index.php @@ -7,7 +7,7 @@ * Request Argument에서 mid, act로 module 객체를 찾아서 생성하고 \n * 모듈 정보를 세팅함 * - * @mainpage 첫페이지 + * @mainpage XpressEngine * @section intro 소개 * XE 는 오픈 프로젝트로 개발되는 오픈 소스입니다.\n * 자세한 내용은 아래 링크를 참조하세요. @@ -25,6 +25,7 @@ * GNU 일반 공중 사용 허가서는 이 프로그램과 함께 제공됩니다. 만약, 이 문서가 누락되어 있다면 자유 소프트웨어\n * 재단으로 문의하시기 바랍니다. \n * (자유 소프트웨어 재단: Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA) + * **/ /** @@ -49,8 +50,7 @@ **/ if($oContext->checkSSO()) { /** - * @brief ModuleHandler 객체를 생성/ 실행 - * + * ModuleHandler 객체를 생성/ 실행 * 모듈 핸들러는 Request Argument를 바탕으로 모듈을 찾아서\n * 객체를 생성하고 기본 정보를 setting 해준다.\n * ModuleHandler는 이 외에도 설치가 되어 있는지에 대한 체크를\n From 354bf541f2b6adc7343b82f42ab33d7371ef72e2 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 04:52:29 +0000 Subject: [PATCH 041/243] =?UTF-8?q?1.=20Context::getUrl()=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=82=AC=EC=9A=A9=EC=8B=9C=20=ED=8A=B9=EB=B3=84?= =?UTF-8?q?=ED=95=9C=20=EA=B2=BD=EC=9A=B0(SSL=20=EC=A0=84=ED=99=98)?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EC=99=B8=ED=95=98=EA=B3=A0=EB=8A=94=20htt?= =?UTF-8?q?p://...=20=EA=B2=BD=EB=A1=9C=EA=B0=80=20=EC=95=84=EB=8B=8C=20/?= =?UTF-8?q?=20=EB=A1=9C=20=EC=8B=9C=EC=9E=91=ED=95=98=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=EB=A1=9C=20url=EC=9D=84=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD=202.=2080=EB=B2=88=20?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=EA=B0=80=20=EC=95=84=EB=8B=8C=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20Context::getRequestUri()=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=8F=AC=ED=8A=B8=EB=B2=88=ED=98=B8=EB=A5=BC=20=EC=A0=9C?= =?UTF-8?q?=EB=8C=80=EB=A1=9C=20=EC=9D=B8=EC=8B=9D=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EB=AA=BB=ED=95=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=203.=20=EC=B2=98=EC=9D=8C=20=EC=84=A4=EC=B9=98?= =?UTF-8?q?=EC=8B=9C=EC=97=90=20default=20site=20info=EB=A5=BC=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=ED=95=98=EA=B3=A0=20=EA=B8=B0=EB=B3=B8=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=ED=8C=90=EC=9D=84=20=EC=A0=95=EC=83=81=EC=A0=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6464 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 170 ++++++++++++++++-------------- modules/board/board.class.php | 15 +-- modules/module/module.class.php | 18 +++- 3 files changed, 112 insertions(+), 91 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index c8e2cf223..e6dbdd286 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -771,128 +771,138 @@ **/ function _getUrl($num_args=0, $args_list=array(), $domain = null) { static $site_module_info = null; - if($domain) $is_site = true; - else $is_site = false; - if(is_null($site_module_info)) { - $site_module_info = Context::get('site_module_info'); - } + // 가상 사이트 정보를 구함 + if(is_null($site_module_info)) $site_module_info = Context::get('site_module_info'); - // SiteID 요청시 전처리 + // SiteID 요청시 전처리 ($domain이 vid 형식일 경우 $domain값을 없애고 vid로 처리하도록 함) if($domain && isSiteID($domain)) { $vid = $domain; $domain = ''; } - // SiteID가 요청되지 않았다면 현재 site_module_info에서 SiteID 판별 - if(!$vid && $site_module_info->domain && isSiteID($site_module_info->domain)) { - $vid = $site_module_info->domain; + // $domain, $vid값이 없을 경우(= 현재 사이트 정보를 이용함) + if(!$domain && !$vid) { + if($site_module_info->domain && isSiteID($site_module_info->domain)) $vid = $site_module_info->domain; + else $domain = $site_module_info->domain; } - if(!$domain) { - if($site_module_info->domain && !isSiteID($site_module_info->domain)) $domain = $site_module_info->domain; + // $domain값이 있을 경우 현재 요청된 도메인과 비교해서 동일할 경우 제거 그렇지 않으면 http 프로토콜을 제거하고 제일 뒤에 / 를 붙임 + if($domain) { + $domain_info = parse_url($domain); + $current_info = parse_url($_SERVER['HTTP_HOST'].getScriptPath()); + if($domain_info['host'].$domain_info['path']==$current_info['host'].$current_info['path']) unset($domain); else { - if($this->db_info->default_url) $domain = $this->db_info->default_url; - else if(!$domain) $domain = Context::getRequestUri(); + $domain = preg_replace('/^(http|https):\/\//i','', trim($domain)); + if(substr($domain,-1) != '/') $domain .= '/'; } } - $domain = preg_replace('/^(http|https):\/\//i','', trim($domain)); - if(substr($domain,-1) != '/') $domain .= '/'; + // 변수 정리 + $get_vars = null; + + // GET 변수가 없거나 변수 초기화 지정이 되었을 경우 if(!$this->get_vars || $args_list[0]=='') { - $get_vars = null; - if(is_array($args_list) && $args_list[0]=='') { - array_shift($args_list); - $num_args = count($args_list); - } + // 요청받은 변수가 있고 첫번째 인자가 '' 라서 초기화를 해야 할 경우 요청받은 변수를 정리 + if(is_array($args_list) && $args_list[0]=='') array_shift($args_list); + // 초기화를 원하지 않을 경우 GET 변수를 배열로 처리 } else { $get_vars = get_object_vars($this->get_vars); } - for($i=0;$i<$num_args;$i=$i+2) { + // 새로 꾸미기를 원하는 변수를 정리 + for($i=0,$c=count($args_list);$i<$c;$i=$i+2) { $key = $args_list[$i]; $val = trim($args_list[$i+1]); + + // 값이 없으면 GET변수에서 해당 키를 제거 if(!isset($val)) { unset($get_vars[$key]); continue; } + // 새로운 변수를 정리 $get_vars[$key] = $val; } - unset($get_vars['vid']); + + // 변수중 vid, rnd값 제거 unset($get_vars['rnd']); - if(isset($get_vars['page'])&&$get_vars['page']<2) unset($get_vars['page']); + if($vid) $get_vars['vid'] = $vid; + else unset($get_vars['vid']); - /* member module중의 쪽지함/친구 관리 기능이 communication 모듈로 이전하여 하위 호환성을 위한 act값 변경 */ - if($get_vars['act'] == 'dispMemberFriend') $get_vars['act'] = 'dispCommunicationFriend'; - elseif($get_vars['act'] == 'dispMemberMessages') $get_vars['act'] = 'dispCommunicationMessages'; - /* 기존의 action의 값이 바뀌어서 이를 강제 변경 */ - elseif($get_vars['act'] == 'dispDocumentAdminManageDocument') $get_vars['act'] = 'dispDocumentManageDocument'; - elseif($get_vars['act'] == 'dispModuleAdminSelectList') $get_vars['act'] = 'dispModuleSelectList'; - - if($get_vars['act'] && $this->isExistsSSLAction($get_vars['act'])) $path = $this->getRequestUri(ENFORCE_SSL, $domain); - else $path = $this->getRequestUri(RELEASE_SSL, $domain); - - $var_count = count($get_vars); - if(!$var_count) { - if(!$is_site) return $path; - if($vid) { - if($this->allow_rewrite) $path .= $vid; - else $path .= '?vid='.$vid; - } - return $path; - } - - // rewrite모듈을 사용할때 getUrl()을 이용한 url 생성 - // 2009. 4. 8 mid, document_srl, site id, entry 를 제외하고는 rewrite rule 사용하지 않도록 변경 - if($this->allow_rewrite) { - if(count($get_vars)) foreach($get_vars as $key => $value) if(!isset($value) || $value === '') unset($get_vars[$key]); - - $var_keys = array_keys($get_vars); - asort($var_keys); - $target = implode('.',$var_keys); - - if($vid) $rpath = $path.$vid .'/'; - else $rpath = $path; - - switch($target) { - case 'mid' : - return $rpath.$get_vars['mid']; - case 'document_srl' : - return $rpath.$get_vars['document_srl']; - case 'document_srl.mid' : - return sprintf('%s%s/%s',$rpath,$get_vars['mid'],$get_vars['document_srl']); - case 'entry.mid' : - return sprintf('%s%s/entry/%s',$rpath,$get_vars['mid'],$get_vars['entry']); - case 'act.document_srl.key' : - if($get_vars['act']=='trackback') return sprintf('%s%s/%s/%s', $rpath,$get_vars['document_srl'],$get_vars['key'],$get_vars['act']); - break; - + if(count($get_vars)) { + foreach($get_vars as $key => $val) { + if(!trim($val)) unset($get_vars[$key]); } } - // rewrite 모듈을 사용하지 않고 인자의 값이 2개 이상이거나 rewrite모듈을 위한 인자로 적당하지 않을 경우 - if($vid) $url = 'vid='.$vid; - foreach($get_vars as $key => $val) { - if(!isset($val)) continue; - if(is_array($val) && count($val)) { - foreach($val as $k => $v) { - $url .= ($url?'&':'').$key.'['.$k.']='.urlencode($v); + // action명이 변경되었던 것에 대해 호환성을 유지하기 위한 강제 값 변경 + switch($get_vars['act']) { + case 'dispMemberFriend' : $get_vars['act'] = 'dispCommunicationFriend'; break; + case 'dispMemberMessages' : $get_vars['act'] = 'dispCommunicationMessages'; break; + case 'dispDocumentAdminManageDocument' : $get_vars['act'] = 'dispDocumentManageDocument'; break; + case 'dispModuleAdminSelectList' : $get_vars['act'] = 'dispModuleSelectList'; break; + } + + // URL 구성 + $query = null; + if($var_count = count($get_vars)) { + // rewrite mod 사용시 + if($this->allow_rewrite) { + $var_keys = array_keys($get_vars); + asort($var_keys); + $target = implode('.',$var_keys); + switch($target) { + case 'mid' : $query = $get_vars['mid']; break; + case 'document_srl' : $query = $get_vars['document_srl']; break; + case 'document_srl.mid' : $query = $get_vars['mid'].'/'.$get_vars['document_srl']; break; + case 'entry.mid' : $query = $get_vars['mid'].'/'.$get_vars['entry']; break; + case 'act.document_srl.key' : $query = $get_vars['act']=='trackback'?$get_vars['document_srl'].'/'.$get_vars['key'].'/'.$get_vars['act']:''; break; + case 'mid.vid' : $query = $get_vars['vid'].'/'.$get_vars['mid']; break; + case 'document_srl.vid' : $query = $get_vars['vid'].'/'.$get_vars['document_srl']; break; + case 'document_srl.mid.vid' : $query = $get_vars['vid'].'/'.$get_vars['mid'].'/'.$get_vars['document_srl']; break; + case 'entry.mid.vid' : $query = $get_vars['vid'].'/'.$get_vars['mid'].'/'.$get_vars['entry']; break; + case 'act.document_srl.key.vid' : $query = $get_vars['vid'].'/'.$get_vars['act']=='trackback'?$get_vars['document_srl'].'/'.$get_vars['key'].'/'.$get_vars['act']:''; break; } - } else { - $url .= ($url?'&':'').$key.'='.urlencode($val); + } + + // rewrite mod 미사용 또는 query값이 생성되지 않았을 경우 get argument로 생성 + if(!$query) { + foreach($get_vars as $key => $val) { + if(is_array($val) && count($val)) { + foreach($val as $k => $v) $query .= ($query?'&':'').$key.'['.$k.']='.urlencode($v); + } else { + $query .= ($query?'&':'').$key.'='.urlencode($val); + } + } + if($query) $query = '?'.$query; } } - return $path.'?'.htmlspecialchars($url); + + // XE가 설치된 절대 경로를 구해서 query를 완성 + $query = getScriptPath().$query; + + // 항상 SSL을 이용하고 현재 SSL이 아닌 경우 https에 대한 prefix를 붙임 + if(Context::get('_use_ssl')=='always') { + if($_SERVER['HTTPS']!='on') $query = substr($this->getRequestUri(ENFORCE_SSL, $domain),0,-1).$query; + // 상황에 따라 혹은 지정된 대상만 SSL 취급될 경우 + } else { + // SSL상태인데 대상이 SSL이 아닌 경우 + if($_SERVER['HTTPS']=='on') $query = substr($this->getRequestUri(ENFORCE_SSL, $domain),0,-1).$query; + // SSL 상태가 아니면 domain값에 따라 query 완성 + else if($domain) $query = substr($this->getRequestUri(FOLLOW_REQUEST_SSL, $domain),0,-1).$query; + } + return htmlspecialchars($query); } /** * @brief 요청이 들어온 URL에서 argument를 제거하여 return **/ function getRequestUri($ssl_mode = FOLLOW_REQUEST_SSL, $domain = null) { + static $url = array(); + // HTTP Request가 아니면 패스 if(!isset($_SERVER['SERVER_PROTOCOL'])) return ; - static $url = array(); if(Context::get('_use_ssl') == "always") $ssl_mode = ENFORCE_SSL; if($domain) $domain_key = md5($domain); @@ -933,7 +943,7 @@ if(Context::get("_http_port") && Context::get("_http_port") != 80) { $url_info['port'] = Context::get("_http_port"); } - else + elseif($url_info['port']==80) { unset($url_info['port']); } diff --git a/modules/board/board.class.php b/modules/board/board.class.php index d58d83cb1..b6d953350 100644 --- a/modules/board/board.class.php +++ b/modules/board/board.class.php @@ -23,27 +23,22 @@ function moduleInstall() { // action forward에 등록 (관리자 모드에서 사용하기 위함) $oModuleController = &getController('module'); + $oModuleModel = &getModel('module'); // 2007. 10. 17 아이디 클릭시 나타나는 팝업메뉴에 작성글 보기 기능 추가 $oModuleController->insertTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after'); // 기본 게시판 생성 - $output = executeQuery('module.getDefaultMidInfo'); - if($output->data) return new Object(); - - // 기본 모듈을 찾음 - $oModuleModel = &getModel('module'); - $site_args->site_srl = 0; - $mid_list = $oModuleModel->getMidList($site_args); - if(!count($mid_list)) { + $args->site_srl = 0; + $output = executeQuery('module.getSite', $args); + if(!$output->data->index_module_srl) { $args->mid = 'board'; $args->module = 'board'; - $args->browser_title = 'test module'; + $args->browser_title = 'XpressEngine'; $args->skin = 'xe_default'; $args->site_srl = 0; $output = $oModuleController->insertModule($args); $module_srl = $output->get('module_srl'); - $site_args->site_srl = 0; $site_args->index_module_srl = $module_srl; $oModuleController = &getController('module'); diff --git a/modules/module/module.class.php b/modules/module/module.class.php index 7a4353f21..430ce1e56 100644 --- a/modules/module/module.class.php +++ b/modules/module/module.class.php @@ -15,13 +15,29 @@ $oModuleController = &getController('module'); $oDB = &DB::getInstance(); - $oDB->addIndex("modules","idx_site_mid", array("site_srl","mid"), true); // module 모듈에서 사용할 디렉토리 생성 FileHandler::makeDir('./files/cache/module_info'); FileHandler::makeDir('./files/cache/triggers'); + // sites 테이블에 기본 사이트 정보 입력 + $args->site_srl = 0; + $output = $oDB->executeQuery('module.getSite', $args); + if(!$output->data || !$output->data->index_module_srl) { + $db_info = Context::getDBInfo(); + $domain = Context::getDefaultUrl(); + $url_info = parse_url($domain); + $domain = $url_info['host'].( (!empty($url_info['port'])&&$url_info['port']!=80)?':'.$url_info['port']:'').$url_info['path']; + $site_args->site_srl = 0; + $site_args->index_module_srl = 0; + $site_args->domain = $domain; + $site_args->default_language = $db_info->lang_type; + + $output = executeQuery('module.insertSite', $site_args); + if(!$output->toBool()) return $output; + } + return new Object(); } From 4be13cc2fd1a2be7fba70efde6ba2a0a78ab5b2c Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 05:12:41 +0000 Subject: [PATCH 042/243] =?UTF-8?q?1.=20=EA=B2=8C=EC=8B=9C=ED=8C=90/?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=AA=A8=EB=93=88=EC=9D=98=20?= =?UTF-8?q?=EA=B0=9C=EB=B3=84=20=EB=AA=A8=EB=93=88=20=EB=B3=B5=EC=82=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=98=20=EC=9E=98=EB=AA=BB=EB=90=9C=20URL?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=202.=20module=5Fsrl=20=EA=B0=92=EB=A7=8C?= =?UTF-8?q?=20=EC=9E=88=EC=9D=84=EB=95=8C=20=EA=B6=8C=ED=95=9C=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=EB=A5=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6465 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/module/ModuleHandler.class.php | 7 ------- classes/module/ModuleObject.class.php | 9 ++++++++- modules/board/tpl/index.html | 2 +- modules/page/tpl/index.html | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 1c96a7952..575d8ca39 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -110,13 +110,6 @@ //if($this->module && $module_info->module != $this->module) unset($module_info); } - // 모듈을 여전히(;;) 못 찾고 모듈번호(module_srl)가 있으면 해당 모듈을 구함 - // module_srl로 대상 모듈을 찾는 것을 주석 처리함. - if((!$this->module || $this->module != 'admin') && !$module_info && $this->module_srl) { - $module_info = $oModuleModel->getModuleInfoByModuleSrl($this->module_srl); - //if($this->module && $module_info->module != $this->module) unset($module_info); - } - // 역시 모듈을 못 찾았고 $module이 없다면 기본 모듈을 찾아봄 if(!$module_info && !$this->module) $module_info = $site_module_info; diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index f0014af7d..e095c9a02 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -90,7 +90,14 @@ //if($oModuleModel->isSiteAdmin($logged_info)) $logged_info->is_admin = 'Y'; // XE에서 access, manager (== is_admin) 는 고정된 권한명이며 이와 관련된 권한 설정 - $grant = $oModuleModel->getGrant($module_info, $logged_info, $xml_info); + if(!$module_info->mid && Context::get('module_srl')) { + $request_module = $oModuleModel->getModuleInfoByModuleSrl(Context::get('module_srl')); + if($request_module->module_srl == Context::get('module_srl')) { + $grant = $oModuleModel->getGrant($request_module, $logged_info); + } + } else { + $grant = $oModuleModel->getGrant($module_info, $logged_info, $xml_info); + } // 현재 모듈의 access 권한이 없으면 권한 없음 표시 //if(!$grant->access) return $this->stop("msg_not_permitted"); diff --git a/modules/board/tpl/index.html b/modules/board/tpl/index.html index cf0feb5df..779753635 100644 --- a/modules/board/tpl/index.html +++ b/modules/board/tpl/index.html @@ -53,7 +53,7 @@
- + diff --git a/modules/page/tpl/index.html b/modules/page/tpl/index.html index 788a2ce2b..1c23ca687 100644 --- a/modules/page/tpl/index.html +++ b/modules/page/tpl/index.html @@ -53,7 +53,7 @@ - + From b204a5b2bd7139a562f7155f1a725c0713da07ab Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 05:16:30 +0000 Subject: [PATCH 043/243] =?UTF-8?q?vid=EA=B0=92=EB=A7=8C=20=EC=9E=88?= =?UTF-8?q?=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20rewrite=20rule=EC=97=90=20?= =?UTF-8?q?=EC=9D=98=ED=95=9C=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=EA=B0=80=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6466 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index e6dbdd286..99ff1d1d1 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -852,6 +852,7 @@ asort($var_keys); $target = implode('.',$var_keys); switch($target) { + case 'vid' : $query = $get_vars['mid']; break; case 'mid' : $query = $get_vars['mid']; break; case 'document_srl' : $query = $get_vars['document_srl']; break; case 'document_srl.mid' : $query = $get_vars['mid'].'/'.$get_vars['document_srl']; break; From 4fccef5401ceb96816a9951bda2bce17ab02a83a Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 05:17:00 +0000 Subject: [PATCH 044/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6467 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 99ff1d1d1..631cd83bc 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -852,7 +852,7 @@ asort($var_keys); $target = implode('.',$var_keys); switch($target) { - case 'vid' : $query = $get_vars['mid']; break; + case 'vid' : $query = $get_vars['vid']; break; case 'mid' : $query = $get_vars['mid']; break; case 'document_srl' : $query = $get_vars['document_srl']; break; case 'document_srl.mid' : $query = $get_vars['mid'].'/'.$get_vars['document_srl']; break; From b05a9f5431d77f2f73ec3ccc9470363ccabb1c3d Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 05:37:54 +0000 Subject: [PATCH 045/243] =?UTF-8?q?Context::getUrl()=EC=9D=98=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EA=B8=80/=EB=8C=93?= =?UTF-8?q?=EA=B8=80/=EC=97=AE=EC=9D=B8=EA=B8=80=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B9=B4=ED=8E=98=20=EC=A3=BC=EC=86=8C=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=B4=20http=EB=A1=9C=20=EC=8B=9C=EC=9E=91?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EA=B0=92=EC=9D=84=20=EA=B5=AC=ED=95=B4?= =?UTF-8?q?=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6468 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/comment/comment.item.php | 4 +++- modules/document/document.item.php | 4 +++- modules/homepage/homepage.view.php | 4 ++++ modules/homepage/skins/xe_default/index.html | 2 +- modules/trackback/trackback.model.php | 4 +++- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/comment/comment.item.php b/modules/comment/comment.item.php index 943393f48..8c3b599c0 100644 --- a/modules/comment/comment.item.php +++ b/modules/comment/comment.item.php @@ -255,7 +255,9 @@ } function getPermanentUrl() { - return getUrl('','document_srl',$this->get('document_srl')).'#comment_'.$this->get('comment_srl'); + $url = getUrl('','document_srl',$this->get('document_srl')).'#comment_'.$this->get('comment_srl'); + if(substr($url,0,1)=='/') $url = substr(Context::getRequestUri(),0,-1).$url; + return $url; } diff --git a/modules/document/document.item.php b/modules/document/document.item.php index d0aa3c783..4bb4c01b9 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -376,7 +376,9 @@ } function getPermanentUrl() { - return getUrl('','document_srl',$this->document_srl); + $url = getUrl('','document_srl',$this->get('document_srl')); + if(substr($url,0,1)=='/') $url = substr(Context::getRequestUri(),0,-1).$url; + return $url; } function getTrackbackUrl() { diff --git a/modules/homepage/homepage.view.php b/modules/homepage/homepage.view.php index e4beb2ba9..23eabb343 100644 --- a/modules/homepage/homepage.view.php +++ b/modules/homepage/homepage.view.php @@ -69,6 +69,10 @@ foreach($output->data as $key => $val) { $banner_src = 'files/attach/cafe_banner/'.$val->site_srl.'.jpg'; if(file_exists(_XE_PATH_.$banner_src)) $output->data[$key]->cafe_banner = $banner_src.'?rnd='.filemtime(_XE_PATH_.$banner_src); + + $url = getSiteUrl($val->domain,''); + if(substr($url,0,1)=='/') $url = substr(Context::getRequestUri(),0,-1).$url; + $output->data[$key]->url = $url; } } Context::set('total_count', $output->total_count); diff --git a/modules/homepage/skins/xe_default/index.html b/modules/homepage/skins/xe_default/index.html index 693cf24d1..1721fd226 100644 --- a/modules/homepage/skins/xe_default/index.html +++ b/modules/homepage/skins/xe_default/index.html @@ -34,7 +34,7 @@ {preg_replace('/<([^>]+)>/i','',$val->cafe_description)} - {getSiteUrl($val->domain)} + {$val->url} diff --git a/modules/trackback/trackback.model.php b/modules/trackback/trackback.model.php index ce32bf0d6..562122771 100644 --- a/modules/trackback/trackback.model.php +++ b/modules/trackback/trackback.model.php @@ -132,7 +132,9 @@ * trackback url에 key값을 추가함. **/ function getTrackbackUrl($document_srl) { - return getUrl('','document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl)); + $url = getUrl('','document_srl',$document_srl,'act','trackback','key',$this->getTrackbackKey($document_srl)); + if(substr($url,0,1)=='/') $url = substr(Context::getRequestUri(),0,-1).$url; + return $url; } /** From 92163eff646ebb7039cdc75e5f692123a6d0fc09 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 06:11:23 +0000 Subject: [PATCH 046/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6469 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- index.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/index.php b/index.php index f91b7124e..9542647c6 100644 --- a/index.php +++ b/index.php @@ -46,17 +46,9 @@ $oContext->init(); /** - * @brief SSO 인증 확인이 불필요할때 모듈 동작 + * @brief default_url 이 설정되어 있고 현재 url이 default_url과 다르면 SSO인증을 위한 rediret 시도 후 모듈 동작 **/ if($oContext->checkSSO()) { - /** - * ModuleHandler 객체를 생성/ 실행 - * 모듈 핸들러는 Request Argument를 바탕으로 모듈을 찾아서\n - * 객체를 생성하고 기본 정보를 setting 해준다.\n - * ModuleHandler는 이 외에도 설치가 되어 있는지에 대한 체크를\n - * 하여 미설치시 Install 모듈을 실행하도록 한다\n - * 그리고 해당 모듈을 실행후 컨텐츠를 출력한다\n - **/ $oModuleHandler = new ModuleHandler(); if($oModuleHandler->init()) { $oModule = &$oModuleHandler->procModule(); From a8c8fcad5693261eb2a431401b85057b63df3709 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 07:24:02 +0000 Subject: [PATCH 047/243] =?UTF-8?q?XE=EB=A5=BC=20/=20=EA=B0=80=20=EC=95=84?= =?UTF-8?q?=EB=8B=8C=20/xe=20=EB=93=B1=EC=9C=BC=EB=A1=9C=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98=ED=95=98=EC=98=80=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20url?= =?UTF-8?q?=EC=9D=84=20=EC=9E=98=EB=AA=BB=20=EC=9D=B8=EC=A7=80=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6470 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 631cd83bc..9922d3f17 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -862,7 +862,7 @@ case 'document_srl.vid' : $query = $get_vars['vid'].'/'.$get_vars['document_srl']; break; case 'document_srl.mid.vid' : $query = $get_vars['vid'].'/'.$get_vars['mid'].'/'.$get_vars['document_srl']; break; case 'entry.mid.vid' : $query = $get_vars['vid'].'/'.$get_vars['mid'].'/'.$get_vars['entry']; break; - case 'act.document_srl.key.vid' : $query = $get_vars['vid'].'/'.$get_vars['act']=='trackback'?$get_vars['document_srl'].'/'.$get_vars['key'].'/'.$get_vars['act']:''; break; + case 'act.document_srl.key.vid' : $query = $get_vars['act']=='trackback'?$get_vars['vid'].'/'.$get_vars['document_srl'].'/'.$get_vars['key'].'/'.$get_vars['act']:''; break; } } @@ -880,7 +880,6 @@ } // XE가 설치된 절대 경로를 구해서 query를 완성 - $query = getScriptPath().$query; // 항상 SSL을 이용하고 현재 SSL이 아닌 경우 https에 대한 prefix를 붙임 if(Context::get('_use_ssl')=='always') { @@ -891,6 +890,7 @@ if($_SERVER['HTTPS']=='on') $query = substr($this->getRequestUri(ENFORCE_SSL, $domain),0,-1).$query; // SSL 상태가 아니면 domain값에 따라 query 완성 else if($domain) $query = substr($this->getRequestUri(FOLLOW_REQUEST_SSL, $domain),0,-1).$query; + else $query = getScriptPath().$query; } return htmlspecialchars($query); } From 2bcc8886d26e0b6b30da04f8a6699eaacf2c93df Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 07:25:52 +0000 Subject: [PATCH 048/243] =?UTF-8?q?r6470=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6471 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/context/Context.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 9922d3f17..5b69f1e06 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -883,13 +883,13 @@ // 항상 SSL을 이용하고 현재 SSL이 아닌 경우 https에 대한 prefix를 붙임 if(Context::get('_use_ssl')=='always') { - if($_SERVER['HTTPS']!='on') $query = substr($this->getRequestUri(ENFORCE_SSL, $domain),0,-1).$query; + if($_SERVER['HTTPS']!='on') $query = $this->getRequestUri(ENFORCE_SSL, $domain).$query; // 상황에 따라 혹은 지정된 대상만 SSL 취급될 경우 } else { // SSL상태인데 대상이 SSL이 아닌 경우 - if($_SERVER['HTTPS']=='on') $query = substr($this->getRequestUri(ENFORCE_SSL, $domain),0,-1).$query; + if($_SERVER['HTTPS']=='on') $query = $this->getRequestUri(ENFORCE_SSL, $domain).$query; // SSL 상태가 아니면 domain값에 따라 query 완성 - else if($domain) $query = substr($this->getRequestUri(FOLLOW_REQUEST_SSL, $domain),0,-1).$query; + else if($domain) $query = $this->getRequestUri(FOLLOW_REQUEST_SSL, $domain).$query; else $query = getScriptPath().$query; } return htmlspecialchars($query); From 51e6084b9c74dd20bfc97861734e6cd0422f4af6 Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 09:18:34 +0000 Subject: [PATCH 049/243] =?UTF-8?q?=EB=84=A4=EB=B9=84=EA=B2=8C=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EC=9C=84=EC=A0=AF=EC=9D=98=20xml=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=A7=80=EC=A0=95=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6472 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/navigator/navigator.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/widgets/navigator/navigator.class.php b/widgets/navigator/navigator.class.php index e6b006f69..fb096af98 100644 --- a/widgets/navigator/navigator.class.php +++ b/widgets/navigator/navigator.class.php @@ -65,7 +65,7 @@ $widget_info->arranged_menu = $arranged_list; // men XML 파일 - $widget_info->xml_file = sprintf('%sfiles/cache/menu/%d.xml.php',getUrl(''), $args->menu_srl); + $widget_info->xml_file = sprintf('%sfiles/cache/menu/%d.xml.php',Context::getRequestUri(), $args->menu_srl); $widget_info->menu_srl = $args->menu_srl; if($this->selected_node_srl) $widget_info->selected_node_srl = $this->selected_node_srl; From 386ba71385333454ca80498b98a2c5901031ceaa Mon Sep 17 00:00:00 2001 From: zero Date: Wed, 3 Jun 2009 10:09:05 +0000 Subject: [PATCH 050/243] =?UTF-8?q?vid=20=EA=B8=B0=EB=B0=98=EC=9D=98=20?= =?UTF-8?q?=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4=ED=8A=B8=EC=97=90=EC=84=9C?= =?UTF-8?q?=20/vid=3F...=20=EC=99=80=20=EA=B0=99=EC=9D=80=20=EC=9E=98?= =?UTF-8?q?=EB=AA=BB=EB=90=9C=20=EA=B2=BD=EB=A1=9C=EB=A5=BC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=ED=95=98=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6473 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- classes/display/DisplayHandler.class.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index 8b386f4eb..e4f351137 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -110,6 +110,11 @@ $pattern = '/src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/s'; $output = preg_replace($pattern, 'src=$1'.$real_path.'$3/$4.$5$6', $output); + + if(Context::get('vid')) { + $pattern = '/\/'.Context::get('vid').'\?(.+)/is'; + $output = preg_replace($pattern, '/?$1', $output); + } } // 간혹 background-image에 url(none) 때문에 request가 한번 더 일어나는 경우가 생기는 것을 방지 From a3aff7708da345d8df21f7658f252ecc6d188d9d Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jun 2009 01:39:16 +0000 Subject: [PATCH 051/243] =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=B0=BE=EA=B8=B0=20=EB=A9=94=EC=9D=BC=EC=97=90=EC=84=9C=20htt?= =?UTF-8?q?p=20=ED=98=B8=EC=8A=A4=ED=8A=B8=EC=A0=95=EB=B3=B4=EA=B0=80=20?= =?UTF-8?q?=EB=88=84=EB=9D=BD=EB=90=9C=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6474 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/member.controller.php | 6 +++++- modules/member/skins/default/find_member_account_mail.html | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index fc95e26d7..ad3f49936 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -965,9 +965,13 @@ $tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin); if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default'); + + Context::set('find_url',substr(Context::getRequestUri(),0,-1).getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key)); + $oTemplate = &TemplateHandler::getInstance(); $content = $oTemplate->compile($tpl_path, 'find_member_account_mail'); + debugPrint($content); // 사이트 웹마스터 정보를 구함 $oModuleModel = &getModel('module'); @@ -983,7 +987,7 @@ // 메세지 return $msg = sprintf(Context::getLang('msg_auth_mail_sent'), $member_info->email_address); - $this->setMessage($msg); + return new Object(0,$msg); } /** diff --git a/modules/member/skins/default/find_member_account_mail.html b/modules/member/skins/default/find_member_account_mail.html index 2927e2548..ca9bed876 100644 --- a/modules/member/skins/default/find_member_account_mail.html +++ b/modules/member/skins/default/find_member_account_mail.html @@ -10,4 +10,4 @@
{$lang->msg_find_account_comment}
-{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl,'auth_key',$auth_args->auth_key)} +{$find_url} From be23c0bb287b9b025a8cec1e9e85b03145b13f35 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jun 2009 01:51:51 +0000 Subject: [PATCH 052/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6475 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/member.controller.php | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index ad3f49936..8e002f13e 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -971,7 +971,6 @@ $oTemplate = &TemplateHandler::getInstance(); $content = $oTemplate->compile($tpl_path, 'find_member_account_mail'); - debugPrint($content); // 사이트 웹마스터 정보를 구함 $oModuleModel = &getModel('module'); From 58941cbbe179f0536b1dfa3278ff188f4fe1814f Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jun 2009 07:35:20 +0000 Subject: [PATCH 053/243] =?UTF-8?q?=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=EC=8B=9C?= =?UTF-8?q?=EC=97=90=20=EB=8F=84=EB=A9=94=EC=9D=B8=EA=B3=BC=20vid=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EB=8C=80=EB=A1=9C=20=ED=8C=90=EB=B3=84?= =?UTF-8?q?=ED=95=98=EC=97=AC=20=EC=A4=91=EB=B3=B5=EB=90=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6476 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/module/module.controller.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index 08d4f9169..96a226553 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -132,6 +132,13 @@ * @brief virtual site 수정 **/ function updateSite($args) { + $oModuleModel = &getModel('module'); + $site_info = $oModuleModel->getSiteInfo($args->site_srl); + if($site_info->domain != $args->domain) { + $info = $oModuleModel->getSiteInfoByDomain($args->domain); + if($info->site_srl && $info->site_srl != $args->site_srl) return new Object(-1,'msg_already_registed_domain'); + if(isSiteID($args->domain) && $oModuleModel->isIDExists($args->domain)) return new Object(-1,'msg_already_registed_vid'); + } $output = executeQuery('module.updateSite', $args); return $output; } From 8fa085f00d59e728bc97dd0c76928ed6ba876275 Mon Sep 17 00:00:00 2001 From: ngleader Date: Thu, 4 Jun 2009 07:54:45 +0000 Subject: [PATCH 054/243] update category count, when move to trash git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6477 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.controller.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index aeb7362f5..6c4fb2d90 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -501,6 +501,9 @@ return $output; } + // update category + if($oDocument->get('category_srl')) $this->updateCategoryCount($oDocument->get('module_srl'),$oDocument->get('category_srl')); + // commit $oDB->commit(); From 4bc67896ed69faab8f22a03b53e8888273562054 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jun 2009 08:32:40 +0000 Subject: [PATCH 055/243] =?UTF-8?q?=EC=B9=B4=ED=8E=98XE=EC=9D=98=20?= =?UTF-8?q?=EC=B9=B4=ED=8E=98=EA=B4=80=EB=A6=AC=EC=9E=90=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=9C=84?= =?UTF-8?q?=EC=A0=AF=EC=97=90=20=EB=82=98=ED=83=80=EB=82=A0=EB=95=8C=20?= =?UTF-8?q?=EC=B9=B4=ED=8E=98=EA=B0=80=20=EC=95=84=EB=8B=8C=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=EC=82=AC=EC=9D=B4=ED=8A=B8=EC=97=90=EC=84=9C?= =?UTF-8?q?=EB=8F=84=20=EB=82=98=ED=83=80=EB=82=98=EB=8A=94=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=EB=A5=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6478 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/homepage/homepage.controller.php | 4 +++- modules/homepage/tpl/delete.html | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/homepage/homepage.controller.php b/modules/homepage/homepage.controller.php index ec39efa5f..cd2ed0c41 100644 --- a/modules/homepage/homepage.controller.php +++ b/modules/homepage/homepage.controller.php @@ -438,8 +438,10 @@ if(!$site_module_info->site_srl || !$logged_info->member_srl) return new Object(); if($logged_info->is_admin == 'Y' || $logged_info->is_site_admin) { + $oHomepageModel = &getModel('homepage'); $oMemberController = &getController('member'); - $oMemberController->addMemberMenu('dispHomepageManage','cmd_cafe_setup'); + $homepage_info = $oHomepageModel->getHomepageInfo($site_module_info->site_srl); + if($homepage_info->site_srl) $oMemberController->addMemberMenu('dispHomepageManage','cmd_cafe_setup'); } return new Object(); } diff --git a/modules/homepage/tpl/delete.html b/modules/homepage/tpl/delete.html index ac4394c9f..4c97838d0 100644 --- a/modules/homepage/tpl/delete.html +++ b/modules/homepage/tpl/delete.html @@ -17,7 +17,7 @@
- + From b69ed0849e99a91ec62582141ef4cf974f391be5 Mon Sep 17 00:00:00 2001 From: zero Date: Thu, 4 Jun 2009 09:05:33 +0000 Subject: [PATCH 056/243] =?UTF-8?q?cafeXE=20=EA=B8=B0=EB=B3=B8=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A8=20=EB=A9=94=EC=9D=B8=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EC=9D=98=20=EC=9E=98=EB=AA=BB=EB=90=9C=20html=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6479 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/homepage/skins/xe_default/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/homepage/skins/xe_default/index.html b/modules/homepage/skins/xe_default/index.html index 1721fd226..56a2934d3 100644 --- a/modules/homepage/skins/xe_default/index.html +++ b/modules/homepage/skins/xe_default/index.html @@ -5,10 +5,10 @@ -

{$module_info->comment}

+ From 25d4403c2d60fe6fe061b7df3f2796d2f9b7693c Mon Sep 17 00:00:00 2001 From: misol Date: Thu, 4 Jun 2009 12:48:28 +0000 Subject: [PATCH 057/243] =?UTF-8?q?#18036113=20=EC=84=B8=EC=85=98=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=EA=B0=80=20=EC=97=86=EC=9D=84=20=EB=95=8C,?= =?UTF-8?q?=20=ED=83=80=EA=B2=9F=EC=9D=84=20=EC=A7=81=EC=A0=91=20=EC=95=8C?= =?UTF-8?q?=EB=A0=A4=EC=A4=80=20=ED=83=80=EA=B2=9Fsrl=EC=9C=BC=EB=A1=9C...?= =?UTF-8?q?=20(=EB=AC=B8=EC=A0=9C=EA=B0=80=20=EB=90=A0=EC=A7=80=20?= =?UTF-8?q?=EC=9E=98=20=EB=AA=A8=EB=A5=B4=EA=B2=A0=EC=9D=8C...)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6480 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/tpl/js/uploader.js | 9 +++++---- modules/file/file.controller.php | 6 ++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index 38e9b3eb8..2ec2160f9 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -43,7 +43,8 @@ function XEUploaderStart(obj) { post_params: { "mid" : current_mid, "act" : "procFileUpload", - "editor_sequence" : obj["editorSequence"] + "editor_sequence" : obj["editorSequence"], + "uploadTargetSrl" : editorRelKeys[obj["editorSequence"]]["primary"].value }, file_size_limit : parseInt(parseInt(obj["allowedFileSize"],10)/1024,10), file_queue_limit : 0, @@ -313,15 +314,15 @@ function previewFiles(evt, given_file_srl) { // 플래쉬 동영상의 경우 if(/\.flv$/i.test(uploaded_filename)) { - html = ""; + html = ""; // 플래쉬 파일의 경우 } else if(/\.swf$/i.test(uploaded_filename)) { - html = ""; + html = ""; // wmv, avi, mpg, mpeg등의 동영상 파일의 경우 } else if(/\.(wmv|avi|mpg|mpeg|asx|asf|mp3)$/i.test(uploaded_filename)) { - html = ""; + html = ""; // 이미지 파일의 경우 } else if(/\.(jpg|jpeg|png|gif)$/i.test(uploaded_filename)) { diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php index 47cb18fd3..ee6e04feb 100644 --- a/modules/file/file.controller.php +++ b/modules/file/file.controller.php @@ -27,6 +27,9 @@ // upload_target_srl 구함 $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; + if(!$upload_target_srl) { + $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = Context::get('uploadTargetSrl'); + } if(!$upload_target_srl) { $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = getNextSequence(); } @@ -53,6 +56,9 @@ // upload_target_srl 구함 $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; + if(!$upload_target_srl) { + $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = Context::get('uploadTargetSrl'); + } if(!$upload_target_srl) { $_SESSION['upload_info'][$editor_sequence]->upload_target_srl = $upload_target_srl = getNextSequence(); } From c98a7ba9fa6d28a84545d639e6f7a5db9861fbcc Mon Sep 17 00:00:00 2001 From: misol Date: Thu, 4 Jun 2009 13:30:20 +0000 Subject: [PATCH 058/243] =?UTF-8?q?&=EA=B0=80=20=EB=93=A4=EC=96=B4?= =?UTF-8?q?=EA=B0=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80,=20=EB=8F=99=EC=98=81?= =?UTF-8?q?=EC=83=81=EB=93=B1=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6481 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/tpl/js/uploader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index 2ec2160f9..05c9cb02d 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -271,6 +271,7 @@ function completeReloadFileList(ret_obj, response_tags, settings) { loadingImage.src = item[i].download_url; loaded_images[file_srl] = loadingImage; } + item[i].download_url = item[i].download_url.replace(/&/g, "&"); } previewFiles('', item[item.length-1].file_srl); } From e0036cc41e246c23f770ebbb340e1a6944a34975 Mon Sep 17 00:00:00 2001 From: haneul Date: Fri, 5 Jun 2009 06:15:05 +0000 Subject: [PATCH 059/243] #17965684 : add not_exist option for selecting module category git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6482 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/board/tpl/index.html | 1 + modules/issuetracker/tpl/index.html | 1 + modules/lifepod/tpl/index.html | 1 + modules/opage/tpl/index.html | 1 + modules/page/tpl/index.html | 1 + modules/springnote/tpl/index.html | 1 + modules/wiki/tpl/index.html | 1 + 7 files changed, 7 insertions(+) diff --git a/modules/board/tpl/index.html b/modules/board/tpl/index.html index 779753635..977417d5d 100644 --- a/modules/board/tpl/index.html +++ b/modules/board/tpl/index.html @@ -18,6 +18,7 @@ @@ -95,6 +96,7 @@
+ @@ -197,7 +198,8 @@ -
+ + From 6322c88e2ac5f3e3ab0b5a334e94e97fae1affe8 Mon Sep 17 00:00:00 2001 From: misol Date: Sat, 6 Jun 2009 04:24:52 +0000 Subject: [PATCH 061/243] =?UTF-8?q?Bradly1=20=EB=8B=98=20=EC=84=A4?= =?UTF-8?q?=EC=B9=98=20=EB=AA=A8=EB=93=88=20=EC=8A=A4=ED=8E=98=EC=9D=B8?= =?UTF-8?q?=EC=96=B4=20=EC=96=B8=EC=96=B4=ED=8C=8C=EC=9D=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=88=EC=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6484 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/install/lang/es.lang.php | 558 +++++++++++++++---------------- 1 file changed, 279 insertions(+), 279 deletions(-) diff --git a/modules/install/lang/es.lang.php b/modules/install/lang/es.lang.php index 1c294a0e6..19c5cebed 100644 --- a/modules/install/lang/es.lang.php +++ b/modules/install/lang/es.lang.php @@ -1,279 +1,279 @@ -introduce_title = 'Instalación de XE '; - $lang->license = <<GPL version 2 oficial en Ingles - - -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - - - - - -EndOfLicense; - - $lang->install_condition_title = "Por favor chequee los requerimientos de la instalación."; - - $lang->install_checklist_title = array( - 'php_version' => 'Versión PHP', - 'permission' => 'Atribución', - 'xml' => 'Librería XML', - 'iconv' => 'Librería ICONV', - 'gd' => 'Librería GD', - 'session' => 'Configuración Session.auto_start', - ); - - $lang->install_checklist_desc = array( - 'php_version' => '[Requerido] Si la versión de PHP es 5.2.2, XE no sera instalado por errores', - 'permission' => '[Requerido] La ruta de la instalación de XE o el directorio de ./archivos deberia tener la atribución 707', - 'xml' => '[Requerido] Libreria XML es necesario para la comunicación de XML', - 'session' => '[Requerido] Para el uso de la sesion de XE, el archivo php.ini deberia estar configurada session.auto_start=0', - 'iconv' => 'Para transformar UTF-8 y otra paquete del idioma deberia estar instalado el Iconv.', - 'gd' => 'Libreria GD deberia estar instalado para utilizar la funcion de convertir la imagen', - ); - - $lang->install_checklist_xml = 'Instalar Librería XML '; - $lang->install_without_xml = 'Librería XML no esta instalado'; - $lang->install_checklist_gd = 'Instalar Librería GD'; - $lang->install_without_gd = 'Libreria GD no esta instalado para la conversión de la imagen'; - $lang->install_checklist_gd = 'Intalar Librería GD'; - $lang->install_without_iconv = 'Libreria Iconv no esta instalado para procesar las fuentes'; - $lang->install_session_auto_start = 'Puede provocar errores si en la configuración de php esta configurada "session.auto_start=1"'; - $lang->install_permission_denied = 'La atribución de la ruta de instalacion no es igual a 707'; - - $lang->cmd_agree_license = 'Yo accepto la licencia'; - $lang->cmd_install_fix_checklist = 'Yo he configurado las condiciones necesarias para la instalación.'; - $lang->cmd_install_next = 'Continuar la instalación'; - $lang->cmd_ignore = 'Ignore'; - - $lang->db_desc = array( - 'mysql' => 'Utilizando las funciones mysql*() de PHP usar DB mysql.
La transacción es desabilitado ya que DB(Bases de Datos) está creado por myisam.', - 'mysql_innodb' => 'Utilizando innodb usar BD mysql.
La transacción es hablilitado para innodb', - 'sqlite2' => 'Soporta sqlite2, el cual almacena los datos en archivos
En la instalacion, es necesario crear archivo de BD en un lugar inaccesible de la web.
(Testeo de la estabilización no realizada)', - 'sqlite3_pdo' => 'A través de PDO de PHP soporta sqlite2
En la instalación, es necesario crear archivo de BD en un lugar inaccesible de la web.', - 'cubrid' => 'Usar BD CUBRID. manual', - 'postgresql' => 'Usar BD PostgreSql.', - 'firebird' => 'Usar BD firebird.', - ); - - $lang->form_title = 'Ingresar BD & Información del Administrador;'; - $lang->db_title = 'Por favor escribir información de BD'; - $lang->db_type = 'Tipo de BD'; - $lang->select_db_type = 'Seleccione el tipo de BD que desea usar.'; - $lang->db_hostname = 'Hostname de BD'; - $lang->db_port = 'Port de BD'; - $lang->db_userid = 'ID de BD'; - $lang->db_password = 'Contraseña de BD'; - $lang->db_database = 'Base de datos BD'; - $lang->db_database_file = 'Archivo de base de datos BD'; - $lang->db_table_prefix = 'Encabezado de la tabla'; - - $lang->admin_title = 'Información del Administrator'; - - $lang->env_title = 'Configuración'; - $lang->use_optimizer = 'Habilitar el optimizador'; - $lang->about_optimizer = 'Si optimizador está habilitado, los usuarios pueden acceder rápidamente a este sitio, ya que hay múltiples CSS / JS archivos son comprimidos juntos y antes de la transmisión.
No obstante, esta optimización podría ser problemáticas de acuerdo con CSS o JS. Si inhabilitarlo, que funciona correctamente a pesar de que sería más lento el trabajo.'; - $lang->use_rewrite = 'Usar rewrite mod'; - $lang->about_rewrite = "Si el servidor de la web soporte rewrite mod, URL largas como http://bla/?documento_srl=123 puede abreviarse como http://bla/123"; - $lang->time_zone = 'La Hora por Zona'; - $lang->about_time_zone = "Si la hora del servidor y la hora de su ubicación es diferente, Usted puede elegir la hora por zona para corregir"; - $lang->qmail_compatibility = 'Qmail 호환'; - $lang->about_qmail_compatibility = 'Qmail등 CRLF를 줄 구분자로 인식하지 못하는 MTA에서 메일이 발송되도록 합니다.'; - - $lang->about_database_file = 'Sqlite guarda el dato en el archivo. Es necesario crear archivo de BD en un lugar inaccesible de la web.
El archivo de dato debe estar ubicado en un lugar con la atribución 707.'; - - $lang->success_installed = 'Instalación finalizada'; - $lang->success_updated = 'Actualización finalizada'; - - $lang->msg_cannot_proc = 'No puede ser ejecutado lo requerido por no disponer del ambiente de instalación.'; - $lang->msg_already_installed = 'Instalación de XE ya existe.'; - $lang->msg_dbconnect_failed = "Ha ocurrido un error en la conección de BD.\n Por favor chequee la información de BD nuevamente"; - $lang->msg_table_is_exists = "La tabla ya ha sido creado en BD.\n Creado nuevamente el archivo de configuración."; - $lang->msg_install_completed = "Instalación finalizada.\n Muchas gracias."; - $lang->msg_install_failed = "Ha ocurrido un error al crear el archivo de instalación."; -?> +introduce_title = 'Instalación de XE '; + $lang->license = <<GPL version 2 oficial en Ingles - + +GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + + + + + +EndOfLicense; + + $lang->install_condition_title = "Por favor chequee los requerimientos de la instalación."; + + $lang->install_checklist_title = array( + 'php_version' => 'Versión PHP', + 'permission' => 'Atribución', + 'xml' => 'Librería XML', + 'iconv' => 'Librería ICONV', + 'gd' => 'Librería GD', + 'session' => 'Configuración Session.auto_start', + ); + + $lang->install_checklist_desc = array( + 'php_version' => '[Requerido] Si la versión de PHP es 5.2.2, XE no sera instalado por errores', + 'permission' => '[Requerido] La ruta de la instalación de XE o el directorio de ./archivos deberia tener la atribución 707', + 'xml' => '[Requerido] Libreria XML es necesario para la comunicación de XML', + 'session' => '[Requerido] Para el uso de la sesion de XE, el archivo php.ini deberia estar configurada session.auto_start=0', + 'iconv' => 'Para transformar UTF-8 y otra paquete del idioma deberia estar instalado el Iconv.', + 'gd' => 'Libreria GD deberia estar instalado para utilizar la funcion de convertir la imagen', + ); + + $lang->install_checklist_xml = 'Instalar Librería XML '; + $lang->install_without_xml = 'Librería XML no esta instalado'; + $lang->install_checklist_gd = 'Instalar Librería GD'; + $lang->install_without_gd = 'Libreria GD no esta instalado para la conversión de la imagen'; + $lang->install_checklist_gd = 'Intalar Librería GD'; + $lang->install_without_iconv = 'Libreria Iconv no esta instalado para procesar las fuentes'; + $lang->install_session_auto_start = 'Puede provocar errores si en la configuración de php esta configurada "session.auto_start=1"'; + $lang->install_permission_denied = 'La atribución de la ruta de instalacion no es igual a 707'; + + $lang->cmd_agree_license = 'Yo accepto la licencia'; + $lang->cmd_install_fix_checklist = 'Yo he configurado las condiciones necesarias para la instalación.'; + $lang->cmd_install_next = 'Continuar la instalación'; + $lang->cmd_ignore = 'Ignore'; + + $lang->db_desc = array( + 'mysql' => 'Utilizando las funciones mysql*() de PHP usar DB mysql.
La transacción es desabilitado ya que DB(Bases de Datos) está creado por myisam.', + 'mysql_innodb' => 'Utilizando innodb usar BD mysql.
La transacción es hablilitado para innodb', + 'sqlite2' => 'Soporta sqlite2, el cual almacena los datos en archivos
En la instalacion, es necesario crear archivo de BD en un lugar inaccesible de la web.
(Testeo de la estabilización no realizada)', + 'sqlite3_pdo' => 'A través de PDO de PHP soporta sqlite2
En la instalación, es necesario crear archivo de BD en un lugar inaccesible de la web.', + 'cubrid' => 'Usar BD CUBRID. manual', + 'postgresql' => 'Usar BD PostgreSql.', + 'firebird' => 'Usar BD firebird. Cómo crear
PP (crear base de datos "/ path / dbname.fdb" page_size = 8192 el conjunto de caracteres UTF8 por defecto;)', + ); + + $lang->form_title = 'Ingresar BD & Información del Administrador;'; + $lang->db_title = 'Por favor escribir información de BD'; + $lang->db_type = 'Tipo de BD'; + $lang->select_db_type = 'Seleccione el tipo de BD que desea usar.'; + $lang->db_hostname = 'Hostname de BD'; + $lang->db_port = 'Port de BD'; + $lang->db_userid = 'ID de BD'; + $lang->db_password = 'Contraseña de BD'; + $lang->db_database = 'Base de datos BD'; + $lang->db_database_file = 'Archivo de base de datos BD'; + $lang->db_table_prefix = 'Encabezado de la tabla'; + + $lang->admin_title = 'Información del Administrator'; + + $lang->env_title = 'Configuración'; + $lang->use_optimizer = 'Habilitar el optimizador'; + $lang->about_optimizer = 'Si optimizador está habilitado, los usuarios pueden acceder rápidamente a este sitio, ya que hay múltiples CSS / JS archivos son comprimidos juntos y antes de la transmisión.
No obstante, esta optimización podría ser problemáticas de acuerdo con CSS o JS. Si inhabilitarlo, que funciona correctamente a pesar de que sería más lento el trabajo.'; + $lang->use_rewrite = 'Usar rewrite mod'; + $lang->about_rewrite = "Si el servidor de la web soporte rewrite mod, URL largas como http://bla/?documento_srl=123 puede abreviarse como http://bla/123"; + $lang->time_zone = 'La Hora por Zona'; + $lang->about_time_zone = "Si la hora del servidor y la hora de su ubicación es diferente, Usted puede elegir la hora por zona para corregir"; + $lang->qmail_compatibility = 'Compatible con Qmail'; + $lang->about_qmail_compatibility = 'Qmail como MTA no reconoce CRLF como la línea de separación que se enviará por correo.'; + + $lang->about_database_file = 'Sqlite guarda el dato en el archivo. Es necesario crear archivo de BD en un lugar inaccesible de la web.
El archivo de dato debe estar ubicado en un lugar con la atribución 707.'; + + $lang->success_installed = 'Instalación finalizada'; + $lang->success_updated = 'Actualización finalizada'; + + $lang->msg_cannot_proc = 'No puede ser ejecutado lo requerido por no disponer del ambiente de instalación.'; + $lang->msg_already_installed = 'Instalación de XE ya existe.'; + $lang->msg_dbconnect_failed = "Ha ocurrido un error en la conección de BD.\n Por favor chequee la información de BD nuevamente"; + $lang->msg_table_is_exists = "La tabla ya ha sido creado en BD.\n Creado nuevamente el archivo de configuración."; + $lang->msg_install_completed = "Instalación finalizada.\n Muchas gracias."; + $lang->msg_install_failed = "Ha ocurrido un error al crear el archivo de instalación."; +?> From 9da646c2b23fe441ddd531b9d5b692030ce094db Mon Sep 17 00:00:00 2001 From: misol Date: Sat, 6 Jun 2009 07:02:38 +0000 Subject: [PATCH 062/243] =?UTF-8?q?RSS=20=EC=A3=BC=EC=86=8C=20=EB=A7=81?= =?UTF-8?q?=ED=81=AC=20=EC=95=88=EB=9C=A8=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20RSS=20=EB=A7=81=ED=81=AC-=EB=A6=AC?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=ED=8A=B8=20=EB=AA=A8=EB=93=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C=20=EA=B7=9C=EC=B9=99=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EA=B0=84=EB=8B=A8=ED=95=9C=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6485 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- common/tpl/common_layout.html | 3 --- modules/module/queries/deleteTrigger.xml | 12 +++++++++ modules/rss/rss.class.php | 12 ++++++--- modules/rss/rss.controller.php | 32 ++++++++++++++++++++++-- 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 modules/module/queries/deleteTrigger.xml diff --git a/common/tpl/common_layout.html b/common/tpl/common_layout.html index 5174c9bd1..58f6fffbb 100644 --- a/common/tpl/common_layout.html +++ b/common/tpl/common_layout.html @@ -43,9 +43,6 @@ - - - {@ $ssl_actions = Context::getSSLActions() } diff --git a/modules/module/queries/deleteTrigger.xml b/modules/module/queries/deleteTrigger.xml new file mode 100644 index 000000000..99b733b06 --- /dev/null +++ b/modules/module/queries/deleteTrigger.xml @@ -0,0 +1,12 @@ + + +
{$lang->planet_use_mobile}
@@ -91,7 +89,6 @@
{$lang->planet_use_me2day}
@@ -99,6 +96,12 @@
RSS
+ use_rss=='Y')-->checked="checked" /> +
diff --git a/modules/rss/rss.view.php b/modules/rss/rss.view.php index 8ff51e31b..f4aec9b71 100644 --- a/modules/rss/rss.view.php +++ b/modules/rss/rss.view.php @@ -18,92 +18,94 @@ /** * @brief 피드 출력 + * 직접 RSS를 출력하려고 할때에는 $oRssView->rss($document_list)를 통해서 결과값을 직접 지정 가능 **/ - function rss() { - /** - * 피드 출력을 위한 변수 설정 - **/ - $site_module_info = Context::get('site_module_info'); - $site_srl = $site_module_info->site_srl; - $mid = Context::get('mid'); ///< 대상 모듈 id, 없으면 전체로 - $start_date = (int)Context::get('start_date'); - $end_date = (int)Context::get('end_date'); - + function rss($document_list = null, $rss_title = null) { + $oDocumentModel = &getModel('document'); $oModuleModel = &getModel('module'); + $oModuleController = &getController('module'); - $module_srls = array(); - $rss_config = array(); - $total_config = ''; - $total_config = $oModuleModel->getModuleConfig('rss'); + // 다른 모듈에서 method로 호출되는 것이 아니라면 현재 요청된 모듈을 대상으로 글과 정보를 구함 + if(!$document_list) { + $site_module_info = Context::get('site_module_info'); + $site_srl = $site_module_info->site_srl; + $mid = Context::get('mid'); ///< 대상 모듈 id, 없으면 전체로 + $start_date = (int)Context::get('start_date'); + $end_date = (int)Context::get('end_date'); - // 하나의 mid가 지정되어 있으면 그 mid에 대한 것만 추출 - if($mid) { - $module_srl = $this->module_info->module_srl; - $config = $oModuleModel->getModulePartConfig('rss', $module_srl); - if($config->open_rss && $config->open_rss != 'N') { - $module_srls[] = $module_srl; - $open_rss_config[$module_srl] = $config->open_rss; - } + $module_srls = array(); + $rss_config = array(); + $total_config = ''; + $total_config = $oModuleModel->getModuleConfig('rss'); - // mid 가 선택되어 있지 않으면 전체 - } else { - if($total_config->use_total_feed != 'N') { - $rss_config = $oModuleModel->getModulePartConfigs('rss', $site_srl); - if($rss_config) { - foreach($rss_config as $module_srl => $config) { - if($config && $config->open_rss != 'N' && $config->open_total_feed != 'T_N') { - $module_srls[] = $module_srl; - $open_rss_config[$module_srl] = $config->open_rss; + // 하나의 mid가 지정되어 있으면 그 mid에 대한 것만 추출 + if($mid) { + $module_srl = $this->module_info->module_srl; + $config = $oModuleModel->getModulePartConfig('rss', $module_srl); + if($config->open_rss && $config->open_rss != 'N') { + $module_srls[] = $module_srl; + $open_rss_config[$module_srl] = $config->open_rss; + } + + // mid 가 선택되어 있지 않으면 전체 + } else { + if($total_config->use_total_feed != 'N') { + $rss_config = $oModuleModel->getModulePartConfigs('rss', $site_srl); + if($rss_config) { + foreach($rss_config as $module_srl => $config) { + if($config && $config->open_rss != 'N' && $config->open_total_feed != 'T_N') { + $module_srls[] = $module_srl; + $open_rss_config[$module_srl] = $config->open_rss; + } } } } } + + if(!count($module_srls)) return $this->dispError(); + + $args->module_srl = implode(',',$module_srls); + $module_list = $oModuleModel->getMidList($args); + + $args->search_target = 'is_secret'; + $args->search_keyword = 'N'; + $args->page = (int)Context::get('page'); + $args->list_count = 15; + if($total_config->feed_document_count) $args->list_count = $total_config->feed_document_count; + if(!$args->page || $args->page < 1) $args->page = 1; + if($start_date || $start_date != 0) $args->start_date = $start_date; + if($end_date || $end_date != 0) $args->end_date = $end_date; + if($start_date == 0) unset($start_date); + if($end_date == 0) unset($end_date); + + $args->sort_index = 'list_order'; + $args->order_type = 'asc'; + $output = $oDocumentModel->getDocumentList($args); + $document_list = $output->data; + + // 피드 제목 및 정보등을 추출 Context::getBrowserTitle + if($mid) { + $info->title = Context::getBrowserTitle(); + $oModuleController->replaceDefinedLangCode($info->title); + + $info->title = str_replace('\'', ''',$info->title); + if($config->feed_description) { + $info->description = str_replace('\'', ''', htmlspecialchars($config->feed_description)); + } + else { + $info->description = str_replace('\'', ''', htmlspecialchars($this->module_info->description)); + } + $info->link = getUrl('','mid',$mid); + $info->feed_copyright = str_replace('\'', ''', htmlspecialchars($feed_config->feed_copyright)); + if(!$info->feed_copyright) { + $info->feed_copyright = str_replace('\'', ''', htmlspecialchars($total_config->feed_copyright)); + } + } } - if(!count($module_srls)) return $this->dispError(); - - $args->module_srl = implode(',',$module_srls); - $module_list = $oModuleModel->getMidList($args); - - $args->search_target = 'is_secret'; - $args->search_keyword = 'N'; - $args->page = (int)Context::get('page'); - $args->list_count = 15; - if($total_config->feed_document_count) $args->list_count = $total_config->feed_document_count; - if(!$args->page || $args->page < 1) $args->page = 1; - if($start_date || $start_date != 0) $args->start_date = $start_date; - if($end_date || $end_date != 0) $args->end_date = $end_date; - if($start_date == 0) unset($start_date); - if($end_date == 0) unset($end_date); - - $args->sort_index = 'list_order'; - $args->order_type = 'asc'; - - // 대상 문서들을 가져옴 - $oDocumentModel = &getModel('document'); - $output = $oDocumentModel->getDocumentList($args); - $document_list = $output->data; - $oModuleController = &getController('module'); - - // 피드 제목 및 정보등을 추출 Context::getBrowserTitle - if($mid) { - $info->title = Context::getBrowserTitle(); - $oModuleController->replaceDefinedLangCode($info->title); - - $info->title = str_replace('\'', ''',$info->title); - if($config->feed_description) { - $info->description = str_replace('\'', ''', htmlspecialchars($config->feed_description)); - } - else { - $info->description = str_replace('\'', ''', htmlspecialchars($this->module_info->description)); - } - $info->link = getUrl('','mid',$mid); - $info->feed_copyright = str_replace('\'', ''', htmlspecialchars($feed_config->feed_copyright)); - if(!$info->feed_copyright) { - $info->feed_copyright = str_replace('\'', ''', htmlspecialchars($total_config->feed_copyright)); - } - } else { - if($total_config->feed_title) $info->title = $total_config->feed_title; + if(!$info->title) { + if($rss_title) $info->title = $rss_title; + else if($total_config->feed_title) $info->title = $total_config->feed_title; else { $site_module_info = Context::get('site_module_info'); $info->title = $site_module_info->browser_title; @@ -117,8 +119,6 @@ } if($total_config->image) $info->image = Context::getRequestUri().str_replace('\'', ''', htmlspecialchars($total_config->image)); - $info->total_count = $output->total_count; - $info->total_page = $output->total_page; switch (Context::get('format')) { case 'atom': $info->date = date('Y-m-d\TH:i:sP'); From dfb21918d3b9617bfe89c05d484e0fa89b5ed416 Mon Sep 17 00:00:00 2001 From: zero Date: Fri, 29 May 2009 07:57:59 +0000 Subject: [PATCH 019/243] =?UTF-8?q?#18037725=20RSS=EC=9D=98=20atom=20?= =?UTF-8?q?=ED=94=BC=EB=93=9C=EC=97=90=20=EB=8C=80=ED=95=B4=20conf/module.?= =?UTF-8?q?xml=EC=97=90=20atom=20action=EC=9D=B4=20=EC=A0=95=EC=9D=98?= =?UTF-8?q?=EB=90=98=EC=96=B4=20=EC=9E=88=EC=A7=80=20=EC=95=8A=EC=95=84?= =?UTF-8?q?=EC=84=9C=20=EC=98=A4=EB=8F=99=EC=9E=91=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6442 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/rss/conf/module.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/rss/conf/module.xml b/modules/rss/conf/module.xml index ad3b2c720..8fa1bba28 100644 --- a/modules/rss/conf/module.xml +++ b/modules/rss/conf/module.xml @@ -5,6 +5,7 @@ + From b8bcbf2552ea3f5dbd5ebdb79a371131c90fbf6b Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Fri, 29 May 2009 08:03:13 +0000 Subject: [PATCH 020/243] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6443 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/category/skins/default/category.html | 1 - 1 file changed, 1 deletion(-) diff --git a/widgets/category/skins/default/category.html b/widgets/category/skins/default/category.html index 619173d19..a7749648b 100644 --- a/widgets/category/skins/default/category.html +++ b/widgets/category/skins/default/category.html @@ -44,7 +44,6 @@ - From 099386656050c3554f113ef3e437d6a2f936467e Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Fri, 29 May 2009 08:03:24 +0000 Subject: [PATCH 021/243] =?UTF-8?q?=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=B6=9C=EB=A0=A5=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6444 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/navigator/skins/tree/navigator.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/widgets/navigator/skins/tree/navigator.html b/widgets/navigator/skins/tree/navigator.html index 43df39232..d43433755 100644 --- a/widgets/navigator/skins/tree/navigator.html +++ b/widgets/navigator/skins/tree/navigator.html @@ -4,7 +4,7 @@ -
black"> +
black">
    @@ -33,7 +33,6 @@ -
From e6b13910c66b058211e96222ada488812e09c01f Mon Sep 17 00:00:00 2001 From: nicetwo Date: Fri, 29 May 2009 09:48:05 +0000 Subject: [PATCH 022/243] =?UTF-8?q?=EC=98=81=EC=96=B4=20-=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=88=EC=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6445 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/lang/en.lang.php | 98 ++++++++++++++++----------------- modules/module/lang/en.lang.php | 2 +- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index 9cf1e47af..edd94ca04 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -43,8 +43,8 @@ $lang->editor_height = 'Height of Editor'; $lang->about_editor_skin = 'You may select the skin of editor.'; - $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; - $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_style = 'You may select style for editting article or displaying content'; + $lang->about_content_font = 'You may select font for editting article or displaying content.
Default font is your own font
Please use comma(,) for multiple input.'; $lang->about_upload_file_grant = 'Selected group(s) will be able to upload files. (Leave them blank if you want all groups to have permission)'; $lang->about_default_component_grant = 'Selected group(s) will be able to use default components of editor. (Leave them blank if you want all groups to have permission)'; $lang->about_editor_height = 'You may set the height of editor.'; @@ -154,69 +154,69 @@ $lang->edit->hyperlink = 'Hyperlink'; $lang->edit->target_blank = 'New Window'; - $lang->edit->quotestyle1 = '왼쪽 실선'; - $lang->edit->quotestyle2 = '인용부호'; - $lang->edit->quotestyle3 = '실선'; - $lang->edit->quotestyle4 = '실선 + 배경'; - $lang->edit->quotestyle5 = '굵은 실선'; - $lang->edit->quotestyle6 = '점선'; - $lang->edit->quotestyle7 = '점선 + 배경'; - $lang->edit->quotestyle8 = '적용 취소'; + $lang->edit->quotestyle1 = 'Left Solid'; + $lang->edit->quotestyle2 = 'Quote'; + $lang->edit->quotestyle3 = 'Solid'; + $lang->edit->quotestyle4 = 'Solid + Background'; + $lang->edit->quotestyle5 = 'Bold Solid'; + $lang->edit->quotestyle6 = 'Dotted'; + $lang->edit->quotestyle7 = 'Dotted + Background'; + $lang->edit->quotestyle8 = 'Cancel'; - $lang->edit->jumptoedit = '편집 도구모음 건너뛰기'; - $lang->edit->set_sel = '칸 수 지정'; - $lang->edit->row = '행'; - $lang->edit->col = '열'; - $lang->edit->add_one_row = '1행추가'; - $lang->edit->del_one_row = '1행삭제'; - $lang->edit->add_one_col = '1열추가'; - $lang->edit->del_one_col = '1열삭제'; + $lang->edit->jumptoedit = 'Skip Edit Toolbox'; + $lang->edit->set_sel = 'Set Cell Count'; + $lang->edit->row = 'Row'; + $lang->edit->col = 'Column'; + $lang->edit->add_one_row = 'Add 1 Row'; + $lang->edit->del_one_row = 'Remove 1 Row'; + $lang->edit->add_one_col = 'Add 1 Column'; + $lang->edit->del_one_col = 'Remove 1 Column'; - $lang->edit->table_config = '표 속성 지정'; - $lang->edit->border_width = '테두리 굵기'; - $lang->edit->border_color = '테두리 색'; - $lang->edit->add = '더하기'; - $lang->edit->del = '빼기'; - $lang->edit->search_color = '색상찾기'; - $lang->edit->table_backgroundcolor = '표 배경색'; - $lang->edit->special_character = '특수문자'; - $lang->edit->insert_special_character = '특수문자 삽입'; - $lang->edit->close_special_character = '특수문자 레이어 닫기'; - $lang->edit->symbol = '일반기호'; - $lang->edit->number_unit = '숫자와 단위'; - $lang->edit->circle_bracket = '원,괄호'; + $lang->edit->table_config = 'Table Config'; + $lang->edit->border_width = 'Border Width'; + $lang->edit->border_color = 'Border Color'; + $lang->edit->add = 'Add'; + $lang->edit->del = 'Sub'; + $lang->edit->search_color = 'Search Colors'; + $lang->edit->table_backgroundcolor = 'Table Background Color'; + $lang->edit->special_character = 'Special Characters'; + $lang->edit->insert_special_character = 'Insert Special Characters'; + $lang->edit->close_special_character = 'Close Special Characters Layer'; + $lang->edit->symbol = 'Symbols'; + $lang->edit->number_unit = 'Numbers and Units'; + $lang->edit->circle_bracket = 'Circles, Brackets'; $lang->edit->korean = 'Korean'; $lang->edit->greece = 'Greek'; $lang->edit->Latin = 'Latin'; $lang->edit->japan = 'Japanese'; - $lang->edit->selected_symbol = '선택한 기호'; + $lang->edit->selected_symbol = 'Selected Symbols'; $lang->edit->search_replace = 'Find/Replace'; - $lang->edit->close_search_replace = '찾기/바꾸기 레이어 닫기'; + $lang->edit->close_search_replace = 'Close Find/Replace Layer'; $lang->edit->replace_all = 'Replace All'; - $lang->edit->search_words = '찾을단어'; - $lang->edit->replace_words = '바꿀단어'; - $lang->edit->next_search_words = '다음찾기'; - $lang->edit->edit_height_control = '입력창 크기 조절'; + $lang->edit->search_words = 'Words to Find'; + $lang->edit->replace_words = 'Words to Replace'; + $lang->edit->next_search_words = 'Find Next'; + $lang->edit->edit_height_control = 'Set Edit Form Size'; $lang->edit->merge_cells = 'Merge Table Cells'; - $lang->edit->split_row = '행 분할'; - $lang->edit->split_col = '열 분할'; + $lang->edit->split_row = 'Split Row'; + $lang->edit->split_col = 'Split Column'; - $lang->edit->toggle_list = '목록 접기/펼치기'; - $lang->edit->minimize_list = '최소화'; + $lang->edit->toggle_list = 'Fold/Unfold'; + $lang->edit->minimize_list = 'Minimize'; - $lang->edit->move = '이동'; - $lang->edit->materials = '글감보관함'; - $lang->edit->temporary_savings = '임시저장목록'; + $lang->edit->move = 'Move'; + $lang->edit->materials = 'Materials'; + $lang->edit->temporary_savings = 'Temporary Saved List'; - $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + $lang->edit->drag_here = 'You can start writting with a selected paragraph from paragraph toolbar below.
If there is an article in temporary saved list, you can drag it to edit form.'; - $lang->edit->paging_prev = '이전'; - $lang->edit->paging_next = '다음'; - $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; - $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + $lang->edit->paging_prev = 'Prev'; + $lang->edit->paging_next = 'Next'; + $lang->edit->paging_prev_help = 'Move to previous page.'; + $lang->edit->paging_next_help = 'Move to next page.'; $lang->edit->toc = 'Table of Contents'; ?> diff --git a/modules/module/lang/en.lang.php b/modules/module/lang/en.lang.php index 3e5e5754d..2d8cf72e3 100644 --- a/modules/module/lang/en.lang.php +++ b/modules/module/lang/en.lang.php @@ -27,7 +27,7 @@ $lang->skin_history = 'Update history'; $lang->module_copy = "Duplicate Module"; $lang->module_selector = "Module Selector"; - $lang->do_selected = "선택된 것들을..."; + $lang->do_selected = "You would..."; $lang->bundle_setup = "Bundle Setup"; $lang->bundle_addition_setup = "Bundle Additional Setup"; $lang->bundle_grant_setup = "Bundle Permission Setup"; From 38e771324c09888533f53539d096b178f116d92d Mon Sep 17 00:00:00 2001 From: zero Date: Fri, 29 May 2009 10:10:24 +0000 Subject: [PATCH 023/243] =?UTF-8?q?navigator=20=EC=9C=84=EC=A0=AF=EC=9D=98?= =?UTF-8?q?=20horiNavigator(=EA=B0=80=EB=A1=9C=EB=84=A4=EB=B9=84)=20?= =?UTF-8?q?=EC=9D=98=20=EC=84=9C=EB=B8=8C=20=EB=A9=94=EB=89=B4=EB=93=A4?= =?UTF-8?q?=EC=9D=98=20=EA=B0=80=EC=83=81=EC=82=AC=EC=9D=B4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20url=EC=98=A4=EB=A5=98=20=EB=B0=9C=EC=83=9D?= =?UTF-8?q?=EB=90=98=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6446 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- widgets/navigator/skins/horiNavigator/js/navigator.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/widgets/navigator/skins/horiNavigator/js/navigator.js b/widgets/navigator/skins/horiNavigator/js/navigator.js index b6a0abc39..a7be38d44 100755 --- a/widgets/navigator/skins/horiNavigator/js/navigator.js +++ b/widgets/navigator/skins/horiNavigator/js/navigator.js @@ -97,7 +97,9 @@ WidgetNavigator.prototype.drawMenu = function(parent_srl){ if(/^http\:\/\//.test(t.attr('url'))){ u = t.attr('url'); }else{ - u = request_uri.setQuery('mid',t.attr('url')); + u = request_uri; + if(typeof(xeVid)!='undefined') u = u.setQuery('vid',xeVid); + u = u.setQuery('mid',t.attr('url')); } } m = ''+m+''; From 1f79e6c37d16ba5d60b6d30d6348076f258521ba Mon Sep 17 00:00:00 2001 From: heemin Date: Sat, 30 May 2009 08:14:29 +0000 Subject: [PATCH 024/243] =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EC=9D=BC=EB=B3=B8?= =?UTF-8?q?=EC=96=B4=20=EB=B2=88=EC=97=AD=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6447 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- common/lang/jp.lang.php | 9 ++++----- modules/admin/lang/jp.lang.php | 2 +- modules/editor/lang/jp.lang.php | 28 ++++++++++++++-------------- modules/member/lang/jp.lang.php | 2 +- modules/module/lang/jp.lang.php | 4 ++-- modules/planet/lang/jp.lang.php | 14 +++++++------- modules/point/lang/jp.lang.php | 10 +++++----- 7 files changed, 34 insertions(+), 35 deletions(-) diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index 27691d1ae..a0532ec3d 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -53,9 +53,9 @@ $lang->cmd_open = '開く'; $lang->cmd_setup = '設定'; $lang->cmd_addition_setup = '追加設定'; - $lang->cmd_option = 'オプション'; + $lang->cmd_option = 'オプション'; $lang->cmd_apply = '適用'; - $lang->cmd_open_calendar = 'カレンダーを開く'; + $lang->cmd_open_calendar = 'カレンダーを開く'; $lang->cmd_send = '送信'; $lang->cmd_print = '印刷'; $lang->cmd_scrap = 'スクラップ'; @@ -284,10 +284,9 @@ $lang->cmd_check_ftp_connect = 'FTP接続をテストする'; $lang->about_ftp_info = " FTP情報は次の場合、利用されます。
- 1. サーバー側のPHPの設定中、「safe_mode=On」になった際、FTP情報を用いてXEが正常に働くようにします。 -
+ 1. サーバー側のPHPの設定中、「safe_mode=On」になった際、FTP情報を用いてXEが正常に働くようにします。
2. FTP経由でXEの自動アップデート等に使われます。
- FTP情報は「files/config/ftp.config.php」の中に保存されます。
+ FTP情報は「files/config/ftp.config.php」の中に保存されます。
また、XEのインストールの後、管理者画面からFTP情報の変更・削除が可能です。(省略可能)
"; diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index 8e4e94997..3482360f9 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -35,7 +35,7 @@ $lang->current_version = 'インストールバージョン'; $lang->current_path = 'インストールパス'; $lang->released_version = '最新バージョン'; - $lang->about_download_link = 'インストールされたバージョンより新しいバージョンが配布されています。\n「ダウンロード」リンクをクリックするとダウンロード出来ます。'; + $lang->about_download_link = "インストールされたバージョンより新しいバージョンが配布されています。\n「ダウンロード」リンクをクリックするとダウンロード出来ます。"; $lang->item_module = 'モジュールリスト'; $lang->item_addon = 'アドオンリスト'; diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index ad683eb3f..8efe3f4a7 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -56,18 +56,18 @@ $lang->edit->fontsize = 'フォントサイズ'; $lang->edit->use_paragraph = '段落機能'; $lang->edit->fontlist = array( - 'MS PGothic'=>'MS Pゴシック', - 'MS PMincho'=>'MS P明朝', - 'MS UI Gothic'=>'MS UI Gothic', - 'Arial'=>'Arial', - 'Arial Black'=>'Arial Black', - 'Tahoma'=>'Tahoma', - 'Verdana'=>'Verdana', - 'Sans-serif'=>'Sans-serif', - 'Serif'=>'Serif', - 'Monospace'=>'Monospace', - 'Cursive'=>'Cursive', - 'Fantasy'=>'Fantasy', + 'MS PGothic' => 'MS Pゴシック', + 'MS PMincho' => 'MS P明朝', + 'MS UI Gothic' => 'MS UI Gothic', + 'Arial' => 'Arial', + 'Arial Black' => 'Arial Black', + 'Tahoma' => 'Tahoma', + 'Verdana' => 'Verdana', + 'Sans-serif' => 'Sans-serif', + 'Serif' => 'Serif', + 'Monospace' => 'Monospace', + 'Cursive' => 'Cursive', + 'Fantasy' => 'Fantasy', ); $lang->edit->header = '見出し'; @@ -83,7 +83,7 @@ $lang->edit->submit = '送信'; $lang->edit->fontcolor = 'テキストの色'; - $lang->edit->fontbgcolor = 'ハイライト カラー'; + $lang->edit->fontbgcolor = 'テキストの背景色'; $lang->edit->bold = '太字'; $lang->edit->italic = '斜体'; $lang->edit->underline = '下線'; @@ -175,7 +175,7 @@ $lang->edit->add_one_col = '1列追加'; $lang->edit->del_one_col = '1列削除'; - $lang->edit->table_config = '표属性の設定'; + $lang->edit->table_config = 'テーブル属性の設定'; $lang->edit->border_width = '外枠太さ'; $lang->edit->border_color = '外枠色'; $lang->edit->add = '挿入'; diff --git a/modules/member/lang/jp.lang.php b/modules/member/lang/jp.lang.php index 7f17a5ff3..5757a323b 100644 --- a/modules/member/lang/jp.lang.php +++ b/modules/member/lang/jp.lang.php @@ -126,7 +126,7 @@ $lang->msg_auth_mail_sent = "%s 宛に認証情報内容が送信されました。メールを確認して下さい。"; $lang->msg_confirm_mail_sent = "%s 宛に確認メールを送信しました。メールをご確認下さい。"; $lang->msg_invalid_auth_key = '正しくないアカウントの認証要求です。
IDとパスワードの検索を行うか、サイト管理者にアカウント情報をお問い合わせ下さい。'; - $lang->msg_success_authed = '認証が正常に行われ、ログイン出来ました。\n必ず確認メールに記載されたパスワードを利用してお好みのパスワードに変更して下さい。.'; + $lang->msg_success_authed = '認証が正常に行われ、ログイン出来ました。\n必ず確認メールに記載されたパスワードを利用してお好みのパスワードに変更して下さい。'; $lang->msg_success_confirmed = '会員登録、有難うございます。'; $lang->msg_new_member = '会員追加'; diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index df8b21ef0..ae7d35035 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -75,9 +75,9 @@ $lang->msg_extra_name_exists = '既に存在する拡張変数名です。他の拡張変数名を入力して下さい。'; $lang->about_browser_title = 'ブラウザのタイトルバーに表示される内容です。RSS/Trackbackでも使用します。'; - $lang->about_mid = 'モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。
※英数の頭文字と[英数と_のみ]の組み合わせ (すべて半角) The maximum length is 40.'; + $lang->about_mid = 'モジュール名は「http://アドレス/?mid=モジュール名」のように直接呼び出せるパラメーター値です。
※英数の頭文字と[英数と_のみ]の組み合わせ (すべて半角、最大40文字) '; $lang->about_default = 'チェックすると、サイトに「mid値」なしでアクセスした場合、デフォルトで表示します。'; - $lang->about_module_category = 'カテゴリで管理出来るようにします。モジュールのカテゴリの管理は、「モジュール管理 > モジュールカテゴリ」にて行います。"; + $lang->about_module_category = "カテゴリで管理出来るようにします。モジュールのカテゴリの管理は、「モジュール管理 > モジュールカテゴリ」にて行います。"; $lang->about_description= '管理用として用いられる説明です。'; $lang->about_header_text = 'モジュールのヘッダーに表示される内容です。(HTMLタグの使用可能)'; $lang->about_footer_text = 'モジュールのフッターに表示される内容です。(HTMLタグの使用可能)'; diff --git a/modules/planet/lang/jp.lang.php b/modules/planet/lang/jp.lang.php index 4db6e3b14..748316bed 100644 --- a/modules/planet/lang/jp.lang.php +++ b/modules/planet/lang/jp.lang.php @@ -1,6 +1,6 @@ planet_title = 'プラネットタイトル'; $lang->planet_url = 'プラネットURL'; $lang->planet_myplanet = 'マイプラネット'; - $lang->planet_whos_planet = '%s さんのプラネット'; - $lang->planet_whos_favorite = '%s さんのお気に入り'; - $lang->planet_whos_favorite_list = ''%s'さんがよく訪れるプラネット'; + $lang->planet_whos_planet = "%s さんのプラネット"; + $lang->planet_whos_favorite = "%s さんのお気に入り"; + $lang->planet_whos_favorite_list = "'%s'さんがよく訪れるプラネット"; $lang->planet_favorite = 'お気に入り'; $lang->planet_welcome = 'ようこそ!'; @@ -24,7 +24,7 @@ プラネットを初期ページとして利用する場合は、ホームページパッケージで登録されているドメインと異なるドメインを登録して下さい。"; $lang->planet_mid = 'プラネットアクセスアドレス"; - $lang->about_planet_mid = "プラネットアクセスアドレスは「http://XEアドレス/プラネットアクセスアドレス」のようにダイレクトで接続出来るアドレスを指します。'; + $lang->about_planet_mid = 'プラネットアクセスアドレスは「http://XEアドレス/プラネットアクセスアドレス」のようにダイレクトで接続出来るアドレスを指します。'; $lang->planet_default_skin = 'プラネット基本スキン'; $lang->about_planet_default_skin = 'プラネットメインページ及び作成されたプラネットの基本スキンに設定されます。'; @@ -108,8 +108,8 @@ $lang->planet_nowhot_tag = 'プラネット人気タグ'; $lang->cmd_planet_close_nowhot_tag = '人気タグを閉じる'; - $lang->about_planet_whats_textSearch_in_planet = '%sさんのプラネットから検索した'%s'の検索結果です。'; - $lang->about_planet_whats_textSearch = ''%s'の全体検索結果です。'; + $lang->about_planet_whats_textSearch_in_planet = "%sさんのプラネットから検索した'%s'の検索結果です。"; + $lang->about_planet_whats_textSearch = "'%s'の全体検索結果です。"; $lang->planet_acticle = '記事'; $lang->planet_persontag = '人物タグ'; diff --git a/modules/point/lang/jp.lang.php b/modules/point/lang/jp.lang.php index 0783cb7c6..b9e148dde 100644 --- a/modules/point/lang/jp.lang.php +++ b/modules/point/lang/jp.lang.php @@ -5,11 +5,11 @@ * @brief ポイント(point)モジュールの基本言語パッケージ **/ - $lang->point = "ポイント"; - $lang->level = "レベル"; + $lang->point = 'ポイント'; + $lang->level = 'レベル'; - $lang->about_point_module = "ポイントモジュールでは、書き込み作成/コメント作成/アップロード/ダウンロードなどのユーザの活動に対してポイントの計算を行います。但し、ポイントモジュールでは設定のみを行い、アドオンでポイントシステムを「使用」に設定しなければポイントは累積されません。"; - $lang->about_act_config = "掲示板、ブログなどのモジュールごとに「書き込み作成・削除/コメント作成・削除」などのアクションがあります。掲示板/ブログ以外のモジュールにポイントシステムを連動させたい場合は、各機能のアクションの「act値」を追加します。連動は半角「,(コンマ)」で区切って追加します。"; + $lang->about_point_module = 'ポイントモジュールでは、書き込み作成/コメント作成/アップロード/ダウンロードなどのユーザの活動に対してポイントの計算を行います。但し、ポイントモジュールでは設定のみを行い、アドオンでポイントシステムを「使用」に設定しなければポイントは累積されません。'; + $lang->about_act_config = '掲示板、ブログなどのモジュールごとに「書き込み作成・削除/コメント作成・削除」などのアクションがあります。掲示板/ブログ以外のモジュールにポイントシステムを連動させたい場合は、各機能のアクションの「act値」を追加します。連動は半角「,(コンマ)」で区切って追加します。'; $lang->max_level = '最高レベル'; $lang->about_max_level = '最高レベルを指定することが出来ます。最高レベルは「1000」がマクシマムなので、レベルアイコンに注意が必要です。'; @@ -61,7 +61,7 @@ $lang->cmd_point_member_list = '会員ポイントリスト'; $lang->msg_cannot_download = 'ポイントが不足しているため、ダウンロード出来ません。'; - $lang->msg_disallow_by_point = "ポイントが不足しているため、閲覧が出来ません。(必要ポイント : %d, 保有ポイント : %d)"; + $lang->msg_disallow_by_point = "ポイントが不足しているため、閲覧が出来ません。(必要ポイント : %d、 保有ポイント : %d)"; $lang->point_recal_message = 'ただ今ポイントを適用しています。 (%d / %d)'; $lang->point_recal_finished = 'ポイント再計算が完了しました。'; From dde195e3dff4502b511ea8c60abc2ae22a348ee0 Mon Sep 17 00:00:00 2001 From: heemin Date: Sat, 30 May 2009 09:44:14 +0000 Subject: [PATCH 025/243] =?UTF-8?q?=EC=9D=BC=EB=B6=80=20=EC=9D=BC=EB=B3=B8?= =?UTF-8?q?=EC=96=B4=20=EB=B2=88=EC=97=AD=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6448 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/rainbow_link/conf/info.xml | 2 +- common/lang/jp.lang.php | 2 +- modules/addon/lang/jp.lang.php | 2 +- modules/admin/lang/jp.lang.php | 2 +- .../code_highlighter/lang/jp.lang.php | 2 +- .../components/image_gallery/lang/jp.lang.php | 2 +- modules/homepage/lang/jp.lang.php | 5 +-- modules/install/lang/jp.lang.php | 14 +++---- modules/message/lang/jp.lang.php | 2 +- modules/module/lang/jp.lang.php | 2 +- modules/planet/lang/jp.lang.php | 10 ++--- modules/poll/lang/jp.lang.php | 10 ++--- modules/referer/lang/jp.lang.php | 4 +- modules/rss/lang/jp.lang.php | 6 +-- modules/spamfilter/lang/jp.lang.php | 26 ++++++------ modules/springnote/lang/jp.lang.php | 20 +++++----- modules/trackback/lang/jp.lang.php | 4 +- modules/widget/lang/jp.lang.php | 40 +++++++++---------- 18 files changed, 77 insertions(+), 78 deletions(-) diff --git a/addons/rainbow_link/conf/info.xml b/addons/rainbow_link/conf/info.xml index 01c984779..334c6ce4e 100644 --- a/addons/rainbow_link/conf/info.xml +++ b/addons/rainbow_link/conf/info.xml @@ -29,7 +29,7 @@ <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a> tiene derecho de autor sobre rainbow.js - 「rainbow.js」をヘッダーに追加し、リンクが張られている文字列の色を虹色で表示します。この機能拡張の「 rainbow.js」は「<a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>」に著作権があります。 + 「rainbow.js」をヘッダーに追加し、リンクが張られている文字列の色を虹色で表示します。この機能拡張の「rainbow.js」は「<a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>」に著作権があります。 Этот аддон добавляет файл с именем "rainbow.js" в заголовки HTML, и тогда связанный текс приобретает эффект смены цвета, подобно радуге или хамелеону. diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index a0532ec3d..02a2a8a5b 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -124,7 +124,7 @@ $lang->file = 'ファイル'; $lang->mid = 'モジュール名'; - $lang->sid = 'Site Name'; + $lang->sid = 'バーチャル(Virtual)サイト名'; $lang->layout = 'レイアウト'; $lang->widget = 'ウィジェット'; $lang->module = 'モジュール'; diff --git a/modules/addon/lang/jp.lang.php b/modules/addon/lang/jp.lang.php index f7dd54ce0..217ce6f27 100644 --- a/modules/addon/lang/jp.lang.php +++ b/modules/addon/lang/jp.lang.php @@ -13,5 +13,5 @@ $lang->addon_history = '変更履歴'; $lang->about_addon_mid = 'アドオンが使われる対象を指定します。
(選択なしの場合、全てのモジュールが利用可能対象)'; - $lang->about_addon = 'アドオンは、HTMLの出力をコントロールするというより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。'; + $lang->about_addon = 'アドオンは、HTMLの出力をコントロールすると言うより、動作を制御する役割をします。お好みのアドオンを「使用/未使用」に設定するだけで、サイトの運営に有用な機能が利用出来ます。'; ?> diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index 3482360f9..387e1ca58 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -56,7 +56,7 @@ $lang->msg_default_act_is_null = 'デフォルトの管理者のアクションが指定されていないため、ショットカットを登録することが出来ません。'; $lang->welcome_to_xe = 'XEの管理者ページです。'; - $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; + $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず完成したいと思います。"; $lang->about_lang_env = '初めてサイトに訪問したユーザーに対し、上記の選択した言語でサイトを表示させるためには、必ず下記の「保存」ボタンをクリックして適用して下さい。'; $lang->xe_license = 'XEのライセンスはGPLです。'; diff --git a/modules/editor/components/code_highlighter/lang/jp.lang.php b/modules/editor/components/code_highlighter/lang/jp.lang.php index 324694df5..bc3cff24d 100644 --- a/modules/editor/components/code_highlighter/lang/jp.lang.php +++ b/modules/editor/components/code_highlighter/lang/jp.lang.php @@ -9,6 +9,6 @@ $lang->used_collapse = '折りたたみ機能を使う'; $lang->hidden_linenumber = '行番号を隠す'; $lang->hidden_controls = 'ツールバーを隠す'; -$lang->file_path = 'ファイルパス'; +$lang->file_path = 'ファイルのパス'; $lang->description = '説明'; $lang->first_line = '開始する行番号'; diff --git a/modules/editor/components/image_gallery/lang/jp.lang.php b/modules/editor/components/image_gallery/lang/jp.lang.php index d07ae739c..1405c6c9e 100644 --- a/modules/editor/components/image_gallery/lang/jp.lang.php +++ b/modules/editor/components/image_gallery/lang/jp.lang.php @@ -21,7 +21,7 @@ $lang->gallery_bg_color = "背景色"; $lang->about_image_list = "イメージギャラリーに追加するファイルを選択して下さい。選択した後、ドラッグまたは「Shift+クリック(範囲選択)、Ctrl+クリック(個別選択)」が出来ます。"; - $lang->cmd_gallery_prev = "前のイメージ表示"; + $lang->cmd_gallery_prev = "前のイメージ表示"; $lang->cmd_gallery_next = "次のイメージ表示"; $lang->cmd_gallery_thumbnail = "サムネール表示"; ?> diff --git a/modules/homepage/lang/jp.lang.php b/modules/homepage/lang/jp.lang.php index 6800fa851..37acefee7 100644 --- a/modules/homepage/lang/jp.lang.php +++ b/modules/homepage/lang/jp.lang.php @@ -59,7 +59,7 @@ 'dispHomepageMemberGroupManage' => '会員のグループ管理', 'dispHomepageMemberManage' => '会員リスト', 'dispHomepageTopMenu' => '基本メニュー 管理', - 'dispHomepageComponent' => '機能設定', + "dispHomepageComponent" => '機能設定', 'dispHomepageCounter' => 'アクセス集計', 'dispHomepageMidSetup' => 'モジュール詳細設定', ); @@ -101,6 +101,5 @@ $lang->msg_module_count_exceed = '許可されたモジュール数を超過したため、作成が出来ません。'; $lang->msg_not_enabled_id = '利用出来ないIDです。'; $lang->msg_same_site = '同一バーチャル(Virtual)サイトのモジュールは移動出来ません。'; - $lang->about_move_module = 'バーチャル(Virtual)サイトと基本サイト間でのモジュール移動が出来ます。
ただし、他のバーチャル(Virtual)サイトへのモジュールを移動したり、同名のmidがある場合、予測が出来ない不具合が有り得るので、必ずバーチャル(Virtual)サイトと基本サイト間で異なる名前のモジュールを移動してください。 -'; + $lang->about_move_module = 'バーチャル(Virtual)サイトと基本サイト間でのモジュール移動が出来ます。
ただし、他のバーチャル(Virtual)サイトへのモジュールを移動したり、同名のmidがある場合、予測が出来ない不具合が有り得るので、必ずバーチャル(Virtual)サイトと基本サイト間で異なる名前のモジュールを移動してください。'; ?> diff --git a/modules/install/lang/jp.lang.php b/modules/install/lang/jp.lang.php index 4735b5605..ad4b8d778 100644 --- a/modules/install/lang/jp.lang.php +++ b/modules/install/lang/jp.lang.php @@ -138,9 +138,9 @@ You may charge a fee for the physical act of transferring a copy, and you may at 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. @@ -150,9 +150,9 @@ In addition, mere aggregation of another work not based on the Program with the 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. @@ -271,5 +271,5 @@ EndOfLicense; $lang->msg_dbconnect_failed = "データベースアクセスにエラーが発生しました。\nデータベースの情報をもう一度確認して下さい。"; $lang->msg_table_is_exists = "既にデータベースにデーブルが作成されています。\nconfigファイルを再作成しました。"; $lang->msg_install_completed = "インストールが完了しました。\nありがとうございます。"; - $lang->msg_install_failed = "インストールファイルを作成する際にエラーが発生しました。"; + $lang->msg_install_failed = 'インストールファイルを作成する際にエラーが発生しました。'; ?> diff --git a/modules/message/lang/jp.lang.php b/modules/message/lang/jp.lang.php index 60e7fdc88..bfd5c6eba 100644 --- a/modules/message/lang/jp.lang.php +++ b/modules/message/lang/jp.lang.php @@ -6,5 +6,5 @@ **/ $lang->message = 'エラー表示'; - $lang->about_skin = "メッセージを表示する際のスキンが指定出来ます。"; + $lang->about_skin = 'メッセージを表示する際のスキンが指定出来ます。'; ?> diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index ae7d35035..38df27081 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -14,7 +14,7 @@ $lang->module_action = '動作'; $lang->module_maker = 'モジュール作者'; $lang->module_license = 'ライセンス'; - $lang->module_history = '変更内容 '; + $lang->module_history = '変更履歴 '; $lang->category_title = 'カテゴリ名'; $lang->header_text = 'ヘッダー内容'; $lang->footer_text = 'フッター内容'; diff --git a/modules/planet/lang/jp.lang.php b/modules/planet/lang/jp.lang.php index 748316bed..b89cb9c20 100644 --- a/modules/planet/lang/jp.lang.php +++ b/modules/planet/lang/jp.lang.php @@ -1,6 +1,6 @@ planet_mid = 'プラネットアクセスアドレス"; + $lang->planet_mid = 'プラネットアクセスアドレス'; $lang->about_planet_mid = 'プラネットアクセスアドレスは「http://XEアドレス/プラネットアクセスアドレス」のようにダイレクトで接続出来るアドレスを指します。'; $lang->planet_default_skin = 'プラネット基本スキン'; @@ -58,7 +58,7 @@ $lang->cmd_planet_addfavorite = 'お気に入り追加'; $lang->planet_hot_tag = 'リアルタイム人気タグ'; - $lang->planet_home = 'Planet TOP'; + $lang->planet_home = 'プラネットトップ'; $lang->cmd_planet_more_tag = 'タグをもっと見る'; $lang->planet_memo = 'メモ'; @@ -100,7 +100,7 @@ $lang->cmd_planet_ok_move_myplanet = '確認 : マイプラネットに移動します。'; - $lang->about_planet_login = 'IDとPasswordを入力してログインボタンをクリックして下さい。'; + $lang->about_planet_login = 'IDとパスワードを入力してログインボタンをクリックして下さい。'; $lang->cmd_planet_login = 'ログイン'; @@ -120,7 +120,7 @@ $lang->cmd_planet_add_tag = '関心タグ追加'; $lang->cmd_planet_add_article = '新規投稿'; $lang->cmd_planet_post_article = '登録'; - $lang->planet_postscript = 'P.S.'; + $lang->planet_postscript = '追記'; $lang->planet_article_preview = 'プレビュー'; diff --git a/modules/poll/lang/jp.lang.php b/modules/poll/lang/jp.lang.php index 632af44e2..aa3bea360 100644 --- a/modules/poll/lang/jp.lang.php +++ b/modules/poll/lang/jp.lang.php @@ -5,10 +5,10 @@ * @brief アンケート(poll)モジュールの基本言語パッケージ **/ - $lang->poll = "アンケート調査"; - $lang->poll_stop_date = "アンケート調査の終了日"; - $lang->poll_join_count = "参加者"; - $lang->poll_checkcount = "必須選択項目数"; + $lang->poll = 'アンケート調査'; + $lang->poll_stop_date = 'アンケート調査の終了日'; + $lang->poll_join_count = '参加者'; + $lang->poll_checkcount = '必須選択項目数'; $lang->cmd_poll_list = 'アンケートのリスト表示'; $lang->cmd_delete_checked_poll = '選択項目削除'; @@ -28,7 +28,7 @@ $lang->cmd_null_item = "アンケート調査に登録する項目がありません。\nもう一度設定して下さい。"; - $lang->confirm_poll_submit = "アンケート調査にご応募しますか?"; + $lang->confirm_poll_submit = 'アンケート調査にご応募しますか?'; $lang->search_target_list = array( 'title' => 'タイトル', diff --git a/modules/referer/lang/jp.lang.php b/modules/referer/lang/jp.lang.php index a1593194d..f652df777 100644 --- a/modules/referer/lang/jp.lang.php +++ b/modules/referer/lang/jp.lang.php @@ -5,6 +5,6 @@ * @brief 日本語言語パッケージ 翻訳:RisaPapa */ - $lang->referer = "レファラー"; - $lang->ranking = "順位"; + $lang->referer = 'レファラー'; + $lang->ranking = '順位'; ?> diff --git a/modules/rss/lang/jp.lang.php b/modules/rss/lang/jp.lang.php index 48999f3d7..a77b56def 100644 --- a/modules/rss/lang/jp.lang.php +++ b/modules/rss/lang/jp.lang.php @@ -22,8 +22,8 @@ $lang->open_feed_to_total = '統合RSSに含む'; // 説明文 - $lang->about_rss_disable = "チェックするとRSSの出力を行いません。"; - $lang->about_rss_type = "出力するRSSタイプを指定することが出来ます。"; + $lang->about_rss_disable = 'チェックするとRSSの出力を行いません。'; + $lang->about_rss_type = '出力するRSSタイプを指定することが出来ます。'; $lang->about_open_rss = '現在のモジュールに対して「RSS配信」を選択することが出来ます。書き込みの内容が読める権限とは関係なくオプションによってRSSが配信されます。'; $lang->about_feed_description = '発行するRSSに関する説明を入力します。未入力した場合は該当モジュールで設定された管理用説明が含まれます。'; $lang->about_feed_copyright = '発行するRSSのコンテンツに対する著作権情報です。'; @@ -31,6 +31,6 @@ $lang->about_feed_document_count = 'RSSに配信するコンテンツの数 (デフォルト : 15)'; // エラーメッセージ - $lang->msg_rss_is_disabled = "RSS機能がロックされています。"; + $lang->msg_rss_is_disabled = 'RSS機能がロックされています。'; $lang->msg_rss_invalid_image_format = 'サポートしないイメージファイルです。\nJPEG, GIF, PNGファイルのみサポートします。'; ?> diff --git a/modules/spamfilter/lang/jp.lang.php b/modules/spamfilter/lang/jp.lang.php index 270ecd867..f77b802a8 100644 --- a/modules/spamfilter/lang/jp.lang.php +++ b/modules/spamfilter/lang/jp.lang.php @@ -6,25 +6,25 @@ **/ // action関連 - $lang->cmd_denied_ip = "禁止IPリスト"; - $lang->cmd_denied_word = "禁止ワードリスト"; + $lang->cmd_denied_ip = '禁止IPリスト'; + $lang->cmd_denied_word = '禁止ワードリスト'; // 一般用語 - $lang->spamfilter = "スパムフィルター"; - $lang->denied_ip = "禁止IP"; - $lang->interval = "スパム処理間隔"; - $lang->limit_count = "制限数"; - $lang->check_trackback = "トラックバック検査"; - $lang->word = "ワード"; + $lang->spamfilter = 'スパムフィルター'; + $lang->denied_ip = '禁止IP'; + $lang->interval = 'スパム処理間隔'; + $lang->limit_count = '制限数'; + $lang->check_trackback = 'トラックバック検査'; + $lang->word = 'ワード'; $lang->hit = 'ヒット'; $lang->latest_hit = '最近ヒット'; // 説明文 - $lang->about_interval = "指定された時間内の書き込みが行えないようにします。"; - $lang->about_limit_count = "指定された時間内に制限数を超える書き込みが行われるとスパムとして認識し、該当するIPを禁止します。"; - $lang->about_denied_ip = "「127.0.0.* 」のように「*」で、「127.0.0」以下ののIP帯域をすべて禁止することが出来ます。"; - $lang->about_denied_word = "禁止ワードとして登録されると該当するワードが存在する書き込みを禁することが出来ます。"; - $lang->about_check_trackback = "一つのIPからのみトラックバックを受信するようにします。"; + $lang->about_interval = '指定された時間内の書き込みが行えないようにします。'; + $lang->about_limit_count = '指定された時間内に制限数を超える書き込みが行われるとスパムとして認識し、該当するIPを禁止します。'; + $lang->about_denied_ip = '「127.0.0.* 」のように「*」で、「127.0.0」以下ののIP帯域をすべて禁止することが出来ます。'; + $lang->about_denied_word = '禁止ワードとして登録されると該当するワードが存在する書き込みを禁することが出来ます。'; + $lang->about_check_trackback = '一つのIPからのみトラックバックを受信するようにします。'; // メッセージ出力用 $lang->msg_alert_limited_by_config = '%s秒以内の書き込みは禁止されます。続けて行うとスパムとして認識され、禁止IPに登録されます。'; diff --git a/modules/springnote/lang/jp.lang.php b/modules/springnote/lang/jp.lang.php index 9f033a8f9..aa24c4b87 100644 --- a/modules/springnote/lang/jp.lang.php +++ b/modules/springnote/lang/jp.lang.php @@ -5,24 +5,24 @@ * @brief スプリングノート(springnote) モジュールの基本言語パッケージ 日本語翻訳:RisaPapa **/ - $lang->springnote = "スプリングノート"; - $lang->springnote_openid = "オープンID"; - $lang->springnote_userkey = "ユーザーKey"; - $lang->springnote_pageid = "ページ番号"; + $lang->springnote = 'スプリングノート'; + $lang->springnote_openid = 'オープンID'; + $lang->springnote_userkey = 'ユーザーKey'; + $lang->springnote_pageid = 'ページ番号'; $lang->springnote_pageid_setup = 'ページ番号設定'; $lang->springnote_pageid_option_only = '指定ページのみ表示(リスト非表示)'; $lang->springnote_pageid_option_list = '指定ページから表示(リスト表示)'; - $lang->springnote_domain = "ドメイン指定"; + $lang->springnote_domain = 'ドメイン指定'; - $lang->page_url = "元のURL"; - $lang->page_modified = "最終修正"; - $lang->page_modifier = "最終修正者"; + $lang->page_url = '元のURL'; + $lang->page_modified = '最終修正'; + $lang->page_modifier = '最終修正者'; $lang->cmd_springnote_list = 'スプリングノートリスト'; $lang->cmd_view_info = 'スプリングノート情報'; - $lang->about_springnote = "スプリングノート(srpingnote)とは、「Openmaru Studio」が提供しているwikiサービスです。
スプリングノート連動モジュールは、スプリングノートの特定のページを自分のコンテンツとして閲覧出来るようにするモジュールです。"; - $lang->about_springnote_openid = "スプリングノートでページを作成したオープンIDを入力して下さい。"; + $lang->about_springnote = 'スプリングノート(srpingnote)とは、「Openmaru Studio」が提供しているwikiサービスです。
スプリングノート連動モジュールは、スプリングノートの特定のページを自分のコンテンツとして閲覧出来るようにするモジュールです。'; + $lang->about_springnote_openid = 'スプリングノートでページを作成したオープンIDを入力して下さい。'; $lang->about_springnote_userkey = 'スプリングノートと連動させるためのユーザKeyを入力して下さい。
[ユーザーキー受信]をクリックして入力して生成されたキーの値を入力して下さい。'; $lang->about_springnote_pageid = '使用するスプリングノートの特定ページを出力させたい場合、「pageid」の値を入力して下さい。'; $lang->about_springnote_pageid_setup = 'ページ番号を指定する際に、該当ページのみ表示(リストを含まない)、該当ページから表示(リストを含む)などを指定することが出来ます。'; diff --git a/modules/trackback/lang/jp.lang.php b/modules/trackback/lang/jp.lang.php index eeff0af3b..dd67ad380 100644 --- a/modules/trackback/lang/jp.lang.php +++ b/modules/trackback/lang/jp.lang.php @@ -23,6 +23,6 @@ 'ipaddress' => 'IPアドレス', ); - $lang->enable_trackback = "トラックバックを可能にする"; - $lang->about_enable_trackback = "チェックを外すと、すべてのコンテンツに対し、トラックバックの受信を中止します。"; + $lang->enable_trackback = 'トラックバックを可能にする'; + $lang->about_enable_trackback = 'チェックを外すと、すべてのコンテンツに対し、トラックバックの受信を中止します。'; ?> diff --git a/modules/widget/lang/jp.lang.php b/modules/widget/lang/jp.lang.php index 7b74c4921..856ffd270 100644 --- a/modules/widget/lang/jp.lang.php +++ b/modules/widget/lang/jp.lang.php @@ -44,25 +44,25 @@ $lang->about_widget_code_in_page = '下に必要な値を入力した後、追加ボタンをクリックするとページ内にウィジェットが挿入されます。'; $lang->about_widget = "ウィジェットまたはページモジュールに用いられる単体の構成要素です。内部モジュールまたは外部のOPEN API と連動が出来、設定によって様々な応用が可能です。XEのページモジュールまたはレイアウトモジュールを使用しなくても、「コード生成」機能で直接ウィジェットも追加出来ます。"; - $lang->cmd_content_insert = "内容直接追加"; - $lang->cmd_box_widget_insert = "ボックスウィジェット追加"; - $lang->cmd_remove_all_widgets = "すべての内容削除"; + $lang->cmd_content_insert = '内容直接追加'; + $lang->cmd_box_widget_insert = 'ボックスウィジェット追加'; + $lang->cmd_remove_all_widgets = 'すべての内容削除'; - $lang->cmd_widget_size = "ウィジェットの大きさ"; - $lang->cmd_widget_align = "ウィジェット整列"; - $lang->cmd_widget_align_left = "左へ"; - $lang->cmd_widget_align_right = "右へ"; - $lang->cmd_widget_margin = "外部余白"; - $lang->cmd_widget_padding = "内部余白"; - $lang->cmd_widget_border = "ウィジェットボーダー"; - $lang->cmd_widget_border_solid = "実線"; - $lang->cmd_widget_border_dotted = "点線"; - $lang->cmd_widget_background_color = "背景色"; - $lang->cmd_widget_background_image_url = "背景イメージ"; - $lang->cmd_widget_background_image_repeat = "繰り返す"; - $lang->cmd_widget_background_image_no_repeat = "固定"; - $lang->cmd_widget_background_image_x_repeat = "横の繰り返し"; - $lang->cmd_widget_background_image_y_repeat = "縦の繰り返し"; - $lang->cmd_widget_background_image_x = "横の位置"; - $lang->cmd_widget_background_image_y = "縦の位置"; + $lang->cmd_widget_size = 'ウィジェットの大きさ'; + $lang->cmd_widget_align = 'ウィジェット整列'; + $lang->cmd_widget_align_left = '左へ'; + $lang->cmd_widget_align_right = '右へ'; + $lang->cmd_widget_margin = '外部余白'; + $lang->cmd_widget_padding = '内部余白'; + $lang->cmd_widget_border = 'ウィジェットボーダー'; + $lang->cmd_widget_border_solid = '実線'; + $lang->cmd_widget_border_dotted = '点線'; + $lang->cmd_widget_background_color = '背景色'; + $lang->cmd_widget_background_image_url = '背景イメージ'; + $lang->cmd_widget_background_image_repeat = '繰り返す'; + $lang->cmd_widget_background_image_no_repeat = '固定'; + $lang->cmd_widget_background_image_x_repeat = '横の繰り返し'; + $lang->cmd_widget_background_image_y_repeat = '縦の繰り返し'; + $lang->cmd_widget_background_image_x = '横の位置'; + $lang->cmd_widget_background_image_y = '縦の位置'; ?> From 9902df607d0426cc12a1af06dec8106349448332 Mon Sep 17 00:00:00 2001 From: ngleader Date: Mon, 1 Jun 2009 06:15:48 +0000 Subject: [PATCH 026/243] fix bug for iframe file upload git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6449 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/file/file.controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/file/file.controller.php b/modules/file/file.controller.php index 5db836553..47cb18fd3 100644 --- a/modules/file/file.controller.php +++ b/modules/file/file.controller.php @@ -49,7 +49,7 @@ $callback = Context::get('callback'); $module_srl = $this->module_srl; // 업로드 권한이 없거나 정보가 없을시 종료 - //if(!$_SESSION['upload_info'][$editor_sequence]->enabled) exit(); + if(!$_SESSION['upload_info'][$editor_sequence]->enabled) exit(); // upload_target_srl 구함 $upload_target_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; From 25ac4e1ab94d9eb489f6ceb84ec727e2cb256d7f Mon Sep 17 00:00:00 2001 From: zero Date: Mon, 1 Jun 2009 09:36:17 +0000 Subject: [PATCH 027/243] =?UTF-8?q?resize=20=EC=95=A0=EB=93=9C=EC=98=A8?= =?UTF-8?q?=EC=9D=98=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20resize=20=EC=8B=9C?= =?UTF-8?q?=EC=A0=90=EC=9D=84=20load=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6450 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/resize_image/js/resize_image.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/resize_image/js/resize_image.js b/addons/resize_image/js/resize_image.js index 1ccce692b..0ad52e9b5 100644 --- a/addons/resize_image/js/resize_image.js +++ b/addons/resize_image/js/resize_image.js @@ -157,11 +157,11 @@ function slideshow(event) { xScreen.xeShow(); } -$(document).ready(function(){ - if (jQuery.browser.safari && document.readyState != "complete"){ - setTimeout( arguments.callee, 100 ); - return; - } +$(window).load(function(){ + //if (jQuery.browser.safari && document.readyState != "complete"){ + //setTimeout( arguments.callee, 100 ); + //return; + //} var regx_skip = /(?:modules|addons|classes|common|layouts|libs|widgets)/i; var regx_parent = /(?:document|comment)_[0-9]+_[0-9]+/i; From e75304d5efa188ce6e4bd33f9ee9bb147921badb Mon Sep 17 00:00:00 2001 From: ngleader Date: Mon, 1 Jun 2009 09:53:10 +0000 Subject: [PATCH 028/243] add document category by mid git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6451 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.controller.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index b84bbf438..a37de6b7c 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -998,8 +998,14 @@ **/ function procDocumentInsertCategory($args = null) { // 입력할 변수 정리 - if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','title','expand','group_srls','color'); - + if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','title','expand','group_srls','color','mid'); + + if(!$args->module_srl && $args->mid){ + $mid = $args->mid; + unset($args->mid); + $args->module_srl = $this->module_srl; + } + // 권한 체크 $oModuleModel = &getModel('module'); $module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl); From be768bffd1ff519f35a5a144b9cf0f2cde9c227f Mon Sep 17 00:00:00 2001 From: FruitsHake Date: Mon, 1 Jun 2009 20:57:02 +0000 Subject: [PATCH 029/243] Refined git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6452 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/lang/en.lang.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/member/lang/en.lang.php b/modules/member/lang/en.lang.php index 5c3b00f3c..b7cf8d281 100644 --- a/modules/member/lang/en.lang.php +++ b/modules/member/lang/en.lang.php @@ -68,7 +68,7 @@ $lang->webmaster_name = "Webmaster's Name"; $lang->webmaster_email = "Webmaster's Email"; - $lang->about_keep_signed = 'Though the browser is closed, you might be kept signed.\n\nIf you use this feature at the shared computer, your personal information might be accessed by others, thus do not use this feature at the shared computer. '; + $lang->about_keep_signed = 'You might be kept signed on even when the browser is closed,\n\nIf you use this feature at a shared computer, your personal information might be accessed by others, thus do not use this feature at a shared computer. '; $lang->about_webmaster_name = "Please input webmaster's name which will be used for certification mails or other site administration. (default : webmaster)"; $lang->about_webmaster_email = "Please input webmaster's email address."; From ab30fc5c061cc122477c0f5e10bec123a0b6fc47 Mon Sep 17 00:00:00 2001 From: FruitsHake Date: Mon, 1 Jun 2009 20:59:36 +0000 Subject: [PATCH 030/243] More refining git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6453 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/lang/en.lang.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/member/lang/en.lang.php b/modules/member/lang/en.lang.php index b7cf8d281..6759f0a26 100644 --- a/modules/member/lang/en.lang.php +++ b/modules/member/lang/en.lang.php @@ -69,7 +69,7 @@ $lang->webmaster_email = "Webmaster's Email"; $lang->about_keep_signed = 'You might be kept signed on even when the browser is closed,\n\nIf you use this feature at a shared computer, your personal information might be accessed by others, thus do not use this feature at a shared computer. '; - $lang->about_webmaster_name = "Please input webmaster's name which will be used for certification mails or other site administration. (default : webmaster)"; + $lang->about_webmaster_name = "Please input webmaster's name which will be used for verification mails or other site administration. (default : webmaster)"; $lang->about_webmaster_email = "Please input webmaster's email address."; $lang->search_target_list = array( @@ -123,7 +123,7 @@ $lang->msg_confirm_account_title = 'Authentication confirmation mail'; $lang->msg_confirm_account_info = 'This is the registered account information:'; $lang->msg_confirm_account_comment = 'Click the following confirmation link to complete your sign up.'; - $lang->msg_auth_mail_sent = 'The certification mail has been sent to %s. Please check your mail.'; + $lang->msg_auth_mail_sent = 'The verification mail has been sent to %s. Please check your mail.'; $lang->msg_confirm_mail_sent = 'We just sent you a confirmation email to %s. Click on the confirmation link in the email to complete your sign up.'; $lang->msg_invalid_auth_key = 'This is an invalid request of certification.
Please retry finding account info or contact to administrator.'; $lang->msg_success_authed = 'Your account has been successfully certificated and logged on.\n Please modify the password to your own one with the password in the mail.'; From de50806edd0607412cb83a1df864e65662c133e4 Mon Sep 17 00:00:00 2001 From: FruitsHake Date: Mon, 1 Jun 2009 22:53:12 +0000 Subject: [PATCH 031/243] on -> in git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6454 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/point_level_icon/conf/info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/point_level_icon/conf/info.xml b/addons/point_level_icon/conf/info.xml index 68d8dafe2..c96dc5821 100644 --- a/addons/point_level_icon/conf/info.xml +++ b/addons/point_level_icon/conf/info.xml @@ -22,7 +22,7 @@
This addon displays level icon in front of the user name when you are using the point system. - You can choose the level icon on Module > Point System. + You can choose the level icon in Module > Point System. Dieses Addon zeigt Level Icon vor dem Benutzernamen, wenn Sie die Punkte-System. From 36ba2a60409426f239c00c1514a2f7e643a6da47 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 2 Jun 2009 03:31:35 +0000 Subject: [PATCH 032/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6455 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/resize_image/js/resize_image.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/resize_image/js/resize_image.js b/addons/resize_image/js/resize_image.js index 0ad52e9b5..105285eaf 100644 --- a/addons/resize_image/js/resize_image.js +++ b/addons/resize_image/js/resize_image.js @@ -157,7 +157,7 @@ function slideshow(event) { xScreen.xeShow(); } -$(window).load(function(){ +$(document).ready(function(){ //if (jQuery.browser.safari && document.readyState != "complete"){ //setTimeout( arguments.callee, 100 ); //return; From cfc6abb0df8200954d91db9c31af56f549b50009 Mon Sep 17 00:00:00 2001 From: haneul Date: Tue, 2 Jun 2009 06:18:46 +0000 Subject: [PATCH 033/243] #18045862 : me2day openapi. changed POST => GET git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6456 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/planet/libs/me2day.api.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/planet/libs/me2day.api.php b/modules/planet/libs/me2day.api.php index a6389a4d2..85c2f6937 100644 --- a/modules/planet/libs/me2day.api.php +++ b/modules/planet/libs/me2day.api.php @@ -38,7 +38,7 @@ $body = implode('&',$arr_content); } - $buff = FileHandler::getRemoteResource($url, $body, 3, 'POST', 'application/x-www-form-urlencoded', + $buff = FileHandler::getRemoteResource($url, $body, 3, 'GET', 'application/x-www-form-urlencoded', array( 'me2_application_key'=>$this->application_key, 'Authorization'=>'Basic '.$auth, From 4ea7afde5c58a831be0bc52dcb85ad4ed985f654 Mon Sep 17 00:00:00 2001 From: ngleader Date: Tue, 2 Jun 2009 06:59:43 +0000 Subject: [PATCH 034/243] updateCategoryDocumentCount by CategorySrl and ModuleSrl git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6457 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.controller.php | 2 +- modules/document/document.model.php | 4 +++- modules/document/queries/getCategoryDocumentCount.xml | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index a37de6b7c..aeb7362f5 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -824,7 +824,7 @@ function updateCategoryCount($module_srl, $category_srl, $document_count = 0) { // document model 객체 생성 $oDocumentModel = &getModel('document'); - if(!$document_count) $document_count = $oDocumentModel->getCategoryDocumentCount($category_srl); + if(!$document_count) $document_count = $oDocumentModel->getCategoryDocumentCount($module_srl,$category_srl); $args->category_srl = $category_srl; $args->document_count = $document_count; diff --git a/modules/document/document.model.php b/modules/document/document.model.php index 124cb7564..1e58baa3e 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -703,9 +703,11 @@ /** * @brief 카테고리에 속한 문서의 갯수를 구함 **/ - function getCategoryDocumentCount($category_srl) { + function getCategoryDocumentCount($module_srl, $category_srl) { + $args->module_srl = $module_srl; $args->category_srl = $category_srl; $output = executeQuery('document.getCategoryDocumentCount', $args); + debugPrint($output); return (int)$output->data->count; } diff --git a/modules/document/queries/getCategoryDocumentCount.xml b/modules/document/queries/getCategoryDocumentCount.xml index 877a2d809..7c7a8e921 100644 --- a/modules/document/queries/getCategoryDocumentCount.xml +++ b/modules/document/queries/getCategoryDocumentCount.xml @@ -7,5 +7,6 @@ + From c052eebd279244b5cf8cf8ecdeb9ca0ba0beef5f Mon Sep 17 00:00:00 2001 From: ngleader Date: Tue, 2 Jun 2009 07:12:25 +0000 Subject: [PATCH 035/243] fix git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6458 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/document/document.model.php b/modules/document/document.model.php index 1e58baa3e..17c299ecd 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -707,7 +707,6 @@ $args->module_srl = $module_srl; $args->category_srl = $category_srl; $output = executeQuery('document.getCategoryDocumentCount', $args); - debugPrint($output); return (int)$output->data->count; } From 7d0352479ae535fd2fdd9ff21d96e1bedc4c344b Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 2 Jun 2009 07:53:07 +0000 Subject: [PATCH 036/243] =?UTF-8?q?=EC=97=90=EB=94=94=ED=84=B0=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=EB=B3=84=20=EC=84=A4=EC=A0=95=EC=8B=9C=20=ED=8E=B8?= =?UTF-8?q?=EC=A7=91/=EB=B3=B4=EC=97=AC=EC=A3=BC=EA=B8=B0=EB=95=8C?= =?UTF-8?q?=EC=9D=98=20=EA=B8=80=EA=BC=B4=20=EB=BF=90=20=EC=95=84=EB=8B=88?= =?UTF-8?q?=EB=9D=BC=20=EA=B8=80=EA=BC=B4=20=ED=81=AC=EA=B8=B0=EB=8F=84=20?= =?UTF-8?q?=EC=A7=80=EC=A0=95=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6459 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/editor.controller.php | 10 +++++++++- modules/editor/editor.model.php | 4 ++++ modules/editor/lang/en.lang.php | 2 ++ modules/editor/lang/es.lang.php | 2 ++ modules/editor/lang/fr.lang.php | 2 ++ modules/editor/lang/jp.lang.php | 2 ++ modules/editor/lang/ko.lang.php | 2 ++ modules/editor/lang/ru.lang.php | 2 ++ modules/editor/lang/zh-CN.lang.php | 2 ++ modules/editor/lang/zh-TW.lang.php | 2 ++ modules/editor/skins/xpresseditor/editor.html | 2 +- modules/editor/skins/xpresseditor/js/xe_interface.js | 6 +++++- modules/editor/tpl/editor_module_config.html | 9 +++++++++ 13 files changed, 44 insertions(+), 3 deletions(-) diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index ea45e5f2a..821be0f3d 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -92,6 +92,7 @@ } if(count($font_list)) $editor_config->content_font = '"'.implode('","',$font_list).'"'; } + $editor_config->content_font_size = Context::get('content_font_size'); $editor_config->sel_editor_colorset = Context::get('sel_editor_colorset'); $editor_config->sel_comment_editor_colorset = Context::get('sel_comment_editor_colorset'); @@ -171,7 +172,14 @@ } } $content_font = $editor_config->content_font; - if($content_font) Context::addHtmlHeader(''); + $content_font_size = $editor_config->content_font_size; + if($content_font || $content_font_size) { + $buff = ''; + Context::addHtmlHeader($buff); + } } $content = $this->transComponent($content); diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index 9b9da8e8f..dfda27fad 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -72,6 +72,7 @@ // 기본 글꼴 지정 Context::set('content_font', $option->content_font); + Context::set('content_font_size', $option->content_font_size); // 자동 저장 유무 옵션 설정 if(!$option->enable_autosave) $enable_autosave = false; @@ -224,6 +225,7 @@ $config->editor_skin = $editor_config->editor_skin; $config->content_style = $editor_config->content_style; $config->content_font = $editor_config->content_font; + $config->content_font_size = $editor_config->content_font_size; $config->sel_editor_colorset = $editor_config->sel_editor_colorset; $config->upload_file_grant = $editor_config->upload_file_grant; $config->enable_default_component_grant = $editor_config->enable_default_component_grant; @@ -235,6 +237,7 @@ $config->editor_skin = $editor_config->comment_editor_skin; $config->content_style = $editor_config->content_style; $config->content_font = $editor_config->content_font; + $config->content_font_size = $editor_config->content_font_size; $config->sel_editor_colorset = $editor_config->sel_comment_editor_colorset; $config->upload_file_grant = $editor_config->comment_upload_file_grant; $config->enable_default_component_grant = $editor_config->enable_comment_default_component_grant; @@ -256,6 +259,7 @@ $option->skin = $config->editor_skin; $option->content_style = $config->content_style; $option->content_font = $config->content_font; + $option->content_font_size = $config->content_font_size; $option->colorset = $config->sel_editor_colorset; // 파일 업로드 권한 체크 diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index edd94ca04..bcdcb354d 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = 'Permission Setting'; $lang->content_style = 'Content Style'; $lang->content_font = 'Content Font'; + $lang->content_font_size = 'Content Font Size'; $lang->about_component = 'About component'; $lang->about_component_grant = 'Selected group(s) will be able to use expanded components of editor.
(Leave them blank if you want all groups to have permission)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = 'You may select the skin of editor.'; $lang->about_content_style = 'You may select style for editting article or displaying content'; $lang->about_content_font = 'You may select font for editting article or displaying content.
Default font is your own font
Please use comma(,) for multiple input.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = 'Selected group(s) will be able to upload files. (Leave them blank if you want all groups to have permission)'; $lang->about_default_component_grant = 'Selected group(s) will be able to use default components of editor. (Leave them blank if you want all groups to have permission)'; $lang->about_editor_height = 'You may set the height of editor.'; diff --git a/modules/editor/lang/es.lang.php b/modules/editor/lang/es.lang.php index d078af65c..a63168858 100644 --- a/modules/editor/lang/es.lang.php +++ b/modules/editor/lang/es.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = 'Ajuste de las atribuciones'; $lang->content_style = 'Content Style'; $lang->content_font = 'Content Font'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = 'Presentación del componente'; $lang->about_component_grant = 'Usted puede configurar el permiso de utilizar la ampliación de los componentes de editor.
(Todo el mundo tendría permiso si no comprobado)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = 'Usted puede seleccionar la piel del editor.'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = 'Usted puede configurar el permiso de archivo adjunto. (Todo el mundo tendría permiso si no comprobado)'; $lang->about_default_component_grant = 'Usted puede configurar el permiso de uso de los componentes de editor por defecto. (Todo el mundo tendría permiso si no comprobado)'; $lang->about_editor_height = 'Usted puede configurar la altura del editor.'; diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index 5df9e6984..7486c20e5 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = 'Configuration de la Permission'; $lang->content_style = 'Content Style'; $lang->content_font = 'Content Font'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = 'Sur le Composant'; $lang->about_component_grant = 'Vous pouvez configurer la Permission d\'utiliser des composants additionnels de l\'Editeur.
(Tout le monde aura la Permission si vous ne cochez rien)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = 'Vous pouvez choisir l\'habillage de l\'Editeur.'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = 'Vous pouvez configurer la permission d\'attacher les fichiers. (Tout le monde aura la permission si vous ne cochez rien)'; $lang->about_default_component_grant = 'Vous pouvez configurer la permission d\'utiliser les Composants Par Défaut de l\'Editeur. (Tout le monde aura la permission si vous ne cochez rien)'; $lang->about_editor_height = 'Vous pouvez configurer l\'hauteur de l\'Editeur.'; diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index 8efe3f4a7..8f3b98005 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = '権限設定'; $lang->content_style = 'コンテンツスタイル'; $lang->content_font = 'コンテンツフォント'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = 'コンポーネント情報'; $lang->about_component_grant = '基本コンポーネント以外の拡張コンポーネント機能が利用可能な権限の設定が出来ます。
(選択なしの場合、誰でも利用可能)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = 'エディターのスキンの選択が出来ます。'; $lang->about_content_style = 'コンテンツの編集、および内容表示の際のスタイルを指定します。'; $lang->about_content_font = 'コンテンツの編集、および内容表示の際のフォントを指定します。
指定してない場合、ユーザーの設定を従います。
半角コンマ(,)区切りで複数フォントの登録が出来ます。'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = 'ファイル添付可能な権限の設定が出来ます。(選択なしの場合、誰でも添付が可能)'; $lang->about_default_component_grant = 'エディターでの基本コンポーネントを使用可能な権限の設定が出来ます。(選択なしの場合、誰でも利用可能)'; $lang->about_editor_height = 'エディターの基本高さを設定します。'; diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index 3c7451c12..1237f38ff 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = '권한설정'; $lang->content_style = '문서 서식'; $lang->content_font = '문서 폰트'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = '컴포넌트 소개'; $lang->about_component_grant = '기본 컴포넌트외의 확장 컴포넌트 기능을 사용할 수 있는 권한을 지정할 수 있습니다.
(모두 해제시 아무나 사용 가능합니다)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다. (모두 해제 시 아무나 첨부 가능합니다)'; $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제 시 아무나 사용 가능합니다)'; $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다.'; diff --git a/modules/editor/lang/ru.lang.php b/modules/editor/lang/ru.lang.php index 62cb4c8a4..0dfd4c5c2 100644 --- a/modules/editor/lang/ru.lang.php +++ b/modules/editor/lang/ru.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = 'Настройки прав доступа'; $lang->content_style = 'Content Style'; $lang->content_font = 'Content Font'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = 'О компоненте'; $lang->about_component_grant = 'Только выбранным группам позволено использование.
(Каждый может использовать его, если режим выключен)'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다 (모두 해제시 아무나 첨부 가능합니다)'; $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제시 아무나 사용 가능합니다)'; $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다'; diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 195289fcd..1c39a264b 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = '权限设置'; $lang->content_style = 'Content Style'; $lang->content_font = 'Content Font'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = '组件简介'; $lang->about_component_grant = '可以设置除默认组件外的扩展组件使用权限
(全部解除时任何用户都可以使用)。'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = '可以选择编辑器皮肤。'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = '可以设置上传文件的权限(全部解除为无限制)。'; $lang->about_default_component_grant = '可以设置编辑器默认组件的使用权限(全部解除为无限制)。'; $lang->about_editor_height = '可以指定编辑器的默认高度。'; diff --git a/modules/editor/lang/zh-TW.lang.php b/modules/editor/lang/zh-TW.lang.php index ba2a9856b..1045a8549 100644 --- a/modules/editor/lang/zh-TW.lang.php +++ b/modules/editor/lang/zh-TW.lang.php @@ -18,6 +18,7 @@ $lang->component_grant = '權限設置'; $lang->content_style = '內容樣式'; $lang->content_font = '內容字體'; + $lang->content_font_size = '문서 폰트 크기'; $lang->about_component = '組件簡介'; $lang->about_component_grant = '除預設組件外,可設置延伸組件的使用權限
(全部解除時,任何用戶都可使用)。'; @@ -45,6 +46,7 @@ $lang->about_editor_skin = '選擇編輯器面板。'; $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; $lang->about_upload_file_grant = '設置上傳檔案的權限(全部解除為無限制)。'; $lang->about_default_component_grant = '設置編輯器預設組件的使用權限(全部解除為無限制)。'; $lang->about_editor_height = '指定編輯器的預設高度。'; diff --git a/modules/editor/skins/xpresseditor/editor.html b/modules/editor/skins/xpresseditor/editor.html index 76eb90478..0273d2330 100644 --- a/modules/editor/skins/xpresseditor/editor.html +++ b/modules/editor/skins/xpresseditor/editor.html @@ -517,7 +517,7 @@ diff --git a/modules/editor/skins/xpresseditor/js/xe_interface.js b/modules/editor/skins/xpresseditor/js/xe_interface.js index 07948db08..ed3ed5fcc 100644 --- a/modules/editor/skins/xpresseditor/js/xe_interface.js +++ b/modules/editor/skins/xpresseditor/js/xe_interface.js @@ -2,10 +2,11 @@ if (!window.xe) xe = {}; xe.Editors = []; -function editorStart_xe(editor_sequence, primary_key, content_key, editor_height, colorset, content_style, content_font) { +function editorStart_xe(editor_sequence, primary_key, content_key, editor_height, colorset, content_style, content_font, content_font_size) { if(typeof(colorset)=='undefined') colorset = 'white'; if(typeof(content_style)=='undefined') content_style = 'xeStyle'; if(typeof(content_font)=='undefined') content_font= ''; + if(typeof(content_font_size)=='undefined') content_font_size= ''; var target_src = request_uri+'modules/editor/styles/'+content_style+'/editor.html'; @@ -150,6 +151,9 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height if(content_font && !doc.body.style.fontFamily) { doc.body.style.fontFamily = content_font; } + if(content_font_size && !doc.body.style.fontSize) { + doc.body.style.fontSize = content_font_size; + } // run oEditor.run(); diff --git a/modules/editor/tpl/editor_module_config.html b/modules/editor/tpl/editor_module_config.html index c91f0d984..fe7ec69fa 100644 --- a/modules/editor/tpl/editor_module_config.html +++ b/modules/editor/tpl/editor_module_config.html @@ -65,6 +65,15 @@ content_font)}" class="inputTypeText w400" />
{$lang->content_font_size}

{$lang->about_content_font_size}

+ +
{$lang->editor_height}

{$lang->about_editor_height}

{$val->browser_title} {zdate($val->regdate,"Y-m-d")} {$lang->cmd_setup}{$lang->cmd_copy}{$lang->cmd_copy} {$lang->cmd_delete}
{$val->browser_title} {zdate($val->regdate,"Y-m-d")} {$lang->cmd_setup}{$lang->cmd_copy}{$lang->cmd_copy} {$lang->cmd_delete}
{$lang->domain}
http://{$homepage_info->domain}{$homepage_info->domain}
{$lang->cafe_admin}
+ + + + + + + + + \ No newline at end of file diff --git a/modules/rss/rss.class.php b/modules/rss/rss.class.php index 2230f8ac9..4065d52e7 100644 --- a/modules/rss/rss.class.php +++ b/modules/rss/rss.class.php @@ -21,7 +21,7 @@ $oModuleController->insertTrigger('module.dispAdditionSetup', 'rss', 'view', 'triggerDispRssAdditionSetup', 'before'); // 2007. 10. 19 출력하기 전에 rss url을 세팅하는 트리거 호출 - $oModuleController->insertTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before'); + $oModuleController->insertTrigger('moduleHandler.proc', 'rss', 'controller', 'triggerRssUrlInsert', 'after'); return new Object(); } @@ -39,7 +39,9 @@ if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'rss', 'view', 'triggerDispRssAdditionSetup', 'before')) return true; // 2007. 10. 19 출력하기 전에 rss url을 세팅하는 트리거 호출 - if(!$oModuleModel->getTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before')) return true; + if(!$oModuleModel->getTrigger('moduleHandler.proc', 'rss', 'controller', 'triggerRssUrlInsert', 'after')) return true; + + if($oModuleModel->getTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before')) return true; return false; } @@ -60,8 +62,10 @@ $oModuleController->insertTrigger('module.dispAdditionSetup', 'rss', 'view', 'triggerDispRssAdditionSetup', 'before'); // 2007. 10. 19 출력하기 전에 rss url을 세팅하는 트리거 호출 - if(!$oModuleModel->getTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before')) - $oModuleController->insertTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before'); + if(!$oModuleModel->getTrigger('moduleHandler.proc', 'rss', 'controller', 'triggerRssUrlInsert', 'after')) + $oModuleController->insertTrigger('moduleHandler.proc', 'rss', 'controller', 'triggerRssUrlInsert', 'after'); + if($oModuleModel->getTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before')) + $oModuleController->deleteTrigger('display', 'rss', 'controller', 'triggerRssUrlInsert', 'before'); return new Object(0, 'success_updated'); } diff --git a/modules/rss/rss.controller.php b/modules/rss/rss.controller.php index b7c186dcd..9ca5efb86 100644 --- a/modules/rss/rss.controller.php +++ b/modules/rss/rss.controller.php @@ -21,6 +21,7 @@ **/ function triggerRssUrlInsert() { $current_module_srl = Context::get('module_srl'); + $site_module_info = Context::get('site_module_info'); if(!$current_module_srl) { $current_module_info = Context::get('current_module_info'); @@ -33,8 +34,35 @@ $oRssModel = &getModel('rss'); $rss_config = $oRssModel->getRssModuleConfig($current_module_srl); - if($rss_config->open_rss != 'N') Context::set('rss_url', getUrl('','mid',Context::get('mid'),'act','rss')); - if($rss_config->open_rss != 'N') Context::set('atom_url', getUrl('','mid',Context::get('mid'),'act','atom')); + if($rss_config->open_rss != 'N') { + if(Context::isAllowRewrite()) { + $request_uri = Context::getRequestUri(); + if(Context::get('vid')) { + Context::set('rss_url', Context::getRequestUri().Context::get('vid').'/'.Context::get('mid').'/rss'); + Context::set('atom_url', Context::getRequestUri().Context::get('vid').'/'.Context::get('mid').'/atom'); + } + else { + Context::set('rss_url', $request_uri.Context::get('mid').'/rss'); + Context::set('atom_url', $request_uri.Context::get('mid').'/atom'); + } + } + else { + Context::set('rss_url', getUrl('','mid',Context::get('mid'),'act','rss')); + Context::set('atom_url', getUrl('','mid',Context::get('mid'),'act','atom')); + } + } + + if(Context::isInstalled() && $site_module_info->mid == Context::get('mid')) { + if(Context::isAllowRewrite() && !Context::get('vid')) { + $request_uri = Context::getRequestUri(); + Context::set('rss_url', $request_uri.'rss'); + Context::set('atom_url', $request_uri.'atom'); + } + else { + Context::set('rss_url', getUrl('','module','rss','act','rss')); + Context::set('atom_url', getUrl('','module','rss','act','atom')); + } + } return new Object(); } From 99206c238c36aa018fe34b9c933b6ec906c8c34a Mon Sep 17 00:00:00 2001 From: misol Date: Sat, 6 Jun 2009 07:14:49 +0000 Subject: [PATCH 063/243] =?UTF-8?q?deleteTrigger=EA=B0=80=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EC=97=90=EC=84=9C=EB=A7=8C=20=EC=A0=95=EC=9D=98=20?= =?UTF-8?q?=EB=90=98=EC=96=B4=EC=9E=88=EA=B3=A0=20XML=EC=9D=B4=20=EC=97=86?= =?UTF-8?q?=EC=96=B4=EC=84=9C..=20=EC=B6=94=EA=B0=80=ED=95=9C=20=EA=B2=83/?= =?UTF-8?q?=20id=EC=9E=98=20=EB=AA=BB=20=EC=8D=A8=EC=84=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6486 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/module/queries/deleteTrigger.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/module/queries/deleteTrigger.xml b/modules/module/queries/deleteTrigger.xml index 99b733b06..9327799b7 100644 --- a/modules/module/queries/deleteTrigger.xml +++ b/modules/module/queries/deleteTrigger.xml @@ -1,4 +1,4 @@ - +
From e701ba5337e05cfd03605ecd9d2c0343aea479aa Mon Sep 17 00:00:00 2001 From: misol Date: Sat, 6 Jun 2009 07:31:53 +0000 Subject: [PATCH 064/243] =?UTF-8?q?=EC=97=90=EB=94=94=ED=84=B0=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B9=98=ED=99=98=EB=90=9C=20rss=EC=9A=A9=20docume?= =?UTF-8?q?nt=20=ED=95=A8=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6487 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.item.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/document/document.item.php b/modules/document/document.item.php index 4bb4c01b9..636412d07 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -301,9 +301,10 @@ * 에디터 코드가 변환된 내용 반환 **/ function getTransContent($add_popup_menu = true, $add_content_info = true, $resource_realpath = false, $add_xe_content_class = true) { - $oContext = &Context::getInstance(); + $oEditorController = &getController('editor'); $content = $this->getContent($add_popup_menu, $add_content_info, $resource_realpath, $add_xe_content_class); + $content = $oEditorController->transComponent($content); return $content; } From 3983c160789bd8bbefd48e61b484756163c88fa8 Mon Sep 17 00:00:00 2001 From: nicetwo Date: Sun, 7 Jun 2009 09:30:15 +0000 Subject: [PATCH 065/243] =?UTF-8?q?=EC=98=81=EC=96=B4=20-=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B2=88=EC=97=AD=20=EB=B0=8F=20=EA=B8=B0=EC=A1=B4?= =?UTF-8?q?=20=EB=B2=88=EC=97=AD=EB=B3=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6488 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- addons/captcha/lang/en.lang.php | 2 +- addons/smartphone/conf/info.xml | 11 ++++++++--- addons/wiki_link/conf/info.xml | 5 +++++ widgets/navigator/conf/info.xml | 9 +++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/addons/captcha/lang/en.lang.php b/addons/captcha/lang/en.lang.php index c46b9ce65..31858ba45 100644 --- a/addons/captcha/lang/en.lang.php +++ b/addons/captcha/lang/en.lang.php @@ -5,7 +5,7 @@ * @brief English Language Pack **/ - $lang->about_captcha = "Choose an image whose name is listed below"; + $lang->about_captcha = "Please choose an image whose name is listed below"; $lang->target_captcha = array( "airplane" => "airplane", "apple" => "apple", diff --git a/addons/smartphone/conf/info.xml b/addons/smartphone/conf/info.xml index 55552e395..065e59a3b 100644 --- a/addons/smartphone/conf/info.xml +++ b/addons/smartphone/conf/info.xml @@ -1,10 +1,14 @@ - SmartphonePhone XE 애드온 - SmartphonePhone XE - SmartphonePhone XE アドオン + SmartPhone XE 애드온 + SmartPhone XE + SmartPhone XE + SmartPhone XE アドオン IPhone (touch) 등, smartphone 에서 접속시 최적화된 화면을 보여줍니다. + + + This addon displays the best screen for users who use smartphones like IPhone (touch). 以 IPhone (touch) 和 smartphone 瀏覽時會以最適當的畫面顯示。 @@ -16,6 +20,7 @@ 2009-04-20 haneul + haneul haneul haneul diff --git a/addons/wiki_link/conf/info.xml b/addons/wiki_link/conf/info.xml index 2a22f9e3e..296bef0b2 100644 --- a/addons/wiki_link/conf/info.xml +++ b/addons/wiki_link/conf/info.xml @@ -1,11 +1,15 @@ 위키 링크 애드온 + Wiki Linker 维基链接插件 維基百科 wikiリンクアドオン 위키 링크를 추가해주는 애드온. + + + This addon adds wiki link. 给维基模块添加链接的插件。 @@ -21,6 +25,7 @@ haneul + haneul haneul haneul haneul diff --git a/widgets/navigator/conf/info.xml b/widgets/navigator/conf/info.xml index 04bd03fc3..d0e29ede6 100644 --- a/widgets/navigator/conf/info.xml +++ b/widgets/navigator/conf/info.xml @@ -1,10 +1,12 @@ 메뉴 출력기 + Navigator 菜单显示器 導覽列 メニュー表示機 메뉴 모듈에서 생성된 메뉴를 출력하는 위젯입니다. + This widget displays menu from menu module. 此控件可以在任意位置显示菜单模块中的菜单。 可在任何地方顯示選單。 メニューモジュールで作成したメニューを表示するウィジェットです。 @@ -13,6 +15,7 @@ zero + zero zero zero zero @@ -22,10 +25,12 @@ menu 메뉴 + Menu 菜单 選單 メニュー 선택하신 메뉴를 출력합니다. 선택하지 않으면 호출된 레이아웃의 첫번째 메뉴를 자동으로 지정합니다. + Selected menu will be displayed. The first menu of current layout is default menu. 请选择要显示的菜单。 請選擇要顯示的選單。假如不選擇則自動指定為使用中的版面選單。 選択したメニューを表示します。選択しない場合、適用中のレイアウトの最初のメニューが自動に指定されます。 @@ -33,16 +38,19 @@ select 시작 깊이 + Depth 开始深度 階層數 開始階層 출력될 메뉴의 시작 깊이(depth)를 지정할 수 있습니다. 1이 최상단이고 2부터는 선택된 상위 메뉴가 있으면 출력하게 됩니다 + You can set the depth of menu. 1 is the toppest. 请指定要显示的菜单开始深度(1为完整菜单,2开始只显示该处一级菜单下的2级菜单)。 請設定要顯示的選單階層數。一層是最上層,選擇二層則會顯示子選單。 表示するメニューの開始階層(depth)を設定します。1が最上位階層で、2からは選択した上位メニューがある場合表示します。 1 1 depth + 1 1 depth 一層 1階層 @@ -50,6 +58,7 @@ 2 2 depth + 2 2 depth 二層 2階層 From 53ca39ddfb9e82fc775378d5c32712cf70bd79fb Mon Sep 17 00:00:00 2001 From: misol Date: Sun, 7 Jun 2009 11:54:38 +0000 Subject: [PATCH 066/243] =?UTF-8?q?#18033904=20=EA=B4=80=EB=A0=A8/=20?= =?UTF-8?q?=EB=A9=80=ED=8B=B0=EB=AF=B8=EB=94=94=EC=96=B4=20=EB=B0=B0?= =?UTF-8?q?=EA=B2=BD=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6489 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- .../components/multimedia_link/lang/ko.lang.php | 5 +++++ .../multimedia_link/multimedia_link.class.php | 8 +++++++- .../editor/components/multimedia_link/tpl/popup.html | 10 ++++++++++ .../editor/components/multimedia_link/tpl/popup.js | 11 ++++++++++- modules/editor/tpl/js/uploader.js | 2 +- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/modules/editor/components/multimedia_link/lang/ko.lang.php b/modules/editor/components/multimedia_link/lang/ko.lang.php index 2bf1c4399..c260527c6 100644 --- a/modules/editor/components/multimedia_link/lang/ko.lang.php +++ b/modules/editor/components/multimedia_link/lang/ko.lang.php @@ -10,4 +10,9 @@ $lang->multimedia_width = "가로크기"; $lang->multimedia_height = "세로크기"; $lang->multimedia_auto_start = "자동시작"; + $lang->multimedia_wmode = '위치'; + + $lang->multimedia_wmode_window = '항상 위'; + $lang->multimedia_wmode_opaque = '배경 불투명'; + $lang->multimedia_wmode_transparent = '배경 투명'; ?> diff --git a/modules/editor/components/multimedia_link/multimedia_link.class.php b/modules/editor/components/multimedia_link/multimedia_link.class.php index 4b6ef0b25..f7f7b1cc4 100644 --- a/modules/editor/components/multimedia_link/multimedia_link.class.php +++ b/modules/editor/components/multimedia_link/multimedia_link.class.php @@ -53,12 +53,18 @@ if($auto_start!="true") $auto_start = "false"; else $auto_start = "true"; + $wmode = $xml_obj->attrs->wmode; + if($wmode == 'window') $wmode = 'window'; + elseif($wmode == 'opaque') $wmode = 'opaque'; + else $wmode = 'transparent'; + + $caption = $xml_obj->body; $src = str_replace(array('&','"'), array('&','&qout;'), $src); $src = str_replace('&amp;', '&', $src); - return sprintf("
", $src, $width, $height, $auto_start); + return sprintf("
", $src, $width, $height, $auto_start, $wmode); } } ?> diff --git a/modules/editor/components/multimedia_link/tpl/popup.html b/modules/editor/components/multimedia_link/tpl/popup.html index 269435a03..88241b5d2 100644 --- a/modules/editor/components/multimedia_link/tpl/popup.html +++ b/modules/editor/components/multimedia_link/tpl/popup.html @@ -31,6 +31,16 @@
+ + +
{$lang->multimedia_auto_start}
{$lang->multimedia_wmode}
+ +

{$lang->about_ccl_allow_modification}

+
diff --git a/modules/editor/components/multimedia_link/tpl/popup.js b/modules/editor/components/multimedia_link/tpl/popup.js index 9184b3a8c..f1802e7d7 100644 --- a/modules/editor/components/multimedia_link/tpl/popup.js +++ b/modules/editor/components/multimedia_link/tpl/popup.js @@ -14,6 +14,9 @@ function getMultimedia() { var width = xWidth(node); var height = xHeight(node); var auto_start = node.getAttribute("auto_start"); + var wmode = node.getAttribute("wmode"); + + var fo_obj = xGetElementById('fo'); xGetElementById("multimedia_url").value = url; xGetElementById("multimedia_caption").value = caption; @@ -21,6 +24,9 @@ function getMultimedia() { xGetElementById("multimedia_height").value = height-4; if(auto_start=="true") xGetElementById("multimedia_auto_start").checked = true; + if(wmode == 'window') fo_obj.multimedia_wmode.selectedIndex = 0; + else if(wmode == 'opaque') fo_obj.multimedia_wmode.selectedIndex = 1; + else fo_obj.multimedia_wmode.selectedIndex = 2; } function insertMultimedia(obj) { @@ -29,6 +35,9 @@ function insertMultimedia(obj) { var url = xGetElementById("multimedia_url").value; url = url.replace(request_uri,''); // url = encodeURI(url); + var fo_obj = xGetElementById('fo'); + + var wmode = fo_obj.multimedia_wmode.options[fo_obj.multimedia_wmode.selectedIndex].value; var caption = xGetElementById("multimedia_caption").value; @@ -46,7 +55,7 @@ function insertMultimedia(obj) { return; } - var text = "\""+caption+"\""; + var text = "\""+caption+"\""; opener.editorFocus(opener.editorPrevSrl); diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index 05c9cb02d..dfb444b27 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -395,7 +395,7 @@ function insertUploadedFile(editorSequence) { text.push(temp_code); // 이미지외의 경우는 multimedia_link 컴포넌트 연결 } else { - text.push("\"\""); + text.push("\"\""); } // binary파일의 경우 url_link 컴포넌트 연결 From 3cbd3035b797e2cbe5fbc57d1c486dd3acc9c240 Mon Sep 17 00:00:00 2001 From: misol Date: Mon, 8 Jun 2009 01:02:12 +0000 Subject: [PATCH 067/243] =?UTF-8?q?#18057838=20&=EA=B0=80=20=EB=93=A4?= =?UTF-8?q?=EC=96=B4=EA=B0=84=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?-=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=ED=8C=8C=EC=9D=BC=EC=97=90?= =?UTF-8?q?=20=EB=8C=80=ED=95=B4=EC=84=9C=EB=A7=8C=20=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6490 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/tpl/js/uploader.js | 834 +++++++++++++++--------------- 1 file changed, 417 insertions(+), 417 deletions(-) diff --git a/modules/editor/tpl/js/uploader.js b/modules/editor/tpl/js/uploader.js index dfb444b27..fa34f0cfb 100755 --- a/modules/editor/tpl/js/uploader.js +++ b/modules/editor/tpl/js/uploader.js @@ -1,417 +1,417 @@ -/** - * @author zero (zero@nzeo.com) - * @version 0.1.1 - * @brief 파일 업로드 관련 - **/ -var uploadedFiles = new Array(); -var uploaderSettings = new Array(); -var loaded_images = new Array(); -var swfUploadObjs = new Array(); - -/** - * 업로드를 하기 위한 준비 시작 - * 이 함수는 editor.html 에서 파일 업로드 가능할 경우 호출됨 - **/ -// window.load 이벤트일 경우 && 문서 번호가 가상의 번호가 아니면 기존에 저장되어 있을지도 모르는 파일 목록을 가져옴 -function editorUploadInit(obj) { - if(typeof(obj["editorSequence"])=="undefined") return; - if(typeof(obj["sessionName"])=="undefined") obj["sessionName"]= "PHPSESSID"; - if(typeof(obj["allowedFileSize"])=="undefined") obj["allowedFileSize"]= 2*1024*1024; - if(typeof(obj["allowedFileTypes"])=="undefined") obj["allowedFileTypes"]= "*.*"; - if(typeof(obj["allowedFileTypesDescription"])=="undefined") obj["allowedFileTypesDescription"]= "All Files"; - if(typeof(obj["replaceButtonID"])=="undefined") obj["replaceButtonID"] = "swfUploadButton"+obj["editorSequence"]; - if(typeof(obj["insertedFiles"])=="undefined") obj["insertedFiles"] = 0; - xAddEventListener(window,"load",function() { XEUploaderStart(obj) }); -} - -// 파일 업로드를 위한 기본 준비를 함 -function XEUploaderStart(obj) { - try { document.execCommand('BackgroundImageCache',false,true); } catch(e) { } - - var btnObj = xGetElementById(obj["replaceButtonID"]); - var btnWidth = xWidth(btnObj); - var btnHeight = xHeight(btnObj); - btnObj.style.position = "relative"; - - var dummy = xCreateElement("span"); - dummy.id = "dummy"+obj["replaceButtonID"]; - btnObj.appendChild(dummy); - - var settings = { - flash_url : request_uri+"modules/editor/tpl/images/SWFUpload.swf", - upload_url: request_uri, - post_params: { - "mid" : current_mid, - "act" : "procFileUpload", - "editor_sequence" : obj["editorSequence"], - "uploadTargetSrl" : editorRelKeys[obj["editorSequence"]]["primary"].value - }, - file_size_limit : parseInt(parseInt(obj["allowedFileSize"],10)/1024,10), - file_queue_limit : 0, - file_upload_limit : 0, - file_types : obj["allowedFileTypes"], - file_types_description : obj["allowedFileTypesDescription"], - custom_settings : { - progressTarget : null, - cancelButtonId : null - }, - debug: false, - - // Button settings - button_window_mode: 'transparent', - button_placeholder_id: dummy.id, - button_text: null, - button_image_url: "", - button_width: btnWidth, - button_height: btnHeight, - button_text_style: null, - button_text_left_padding: 0, - button_text_top_padding: 0, - - // The event handler functions are defined in handlers.js - file_queued_handler : fileQueued, - file_queue_error_handler : fileQueueError, - file_dialog_complete_handler : fileDialogComplete, - upload_start_handler : uploadStart, - upload_progress_handler : uploadProgress, - upload_error_handler : uploadError, - upload_success_handler : uploadSuccess, - upload_complete_handler : uploadComplete, - queue_complete_handler :queueComplete - }; - if(typeof(xeVid)!='undefined') settings["post_params"]["vid"] = xeVid; - settings["post_params"][obj["sessionName"]] = xGetCookie(obj["sessionName"]); - settings["editorSequence"] = obj["editorSequence"]; - settings["uploadTargetSrl"] = editorRelKeys[obj["editorSequence"]]["primary"].value; - settings["fileListAreaID"] = obj["fileListAreaID"]; - settings["previewAreaID"] = obj["previewAreaID"]; - settings["uploaderStatusID"] = obj["uploaderStatusID"]; - - uploaderSettings[obj["editorSequence"]] = settings; - - var swfu = new SWFUpload(settings); - var swfObj = xGetElementById(swfu.movieName); - swfUploadObjs[obj["editorSequence"]] = swfu.movieName; - if(!swfObj) return; - - swfObj.style.display = "block"; - swfObj.style.cursor = "pointer"; - swfObj.style.position = "absolute"; - swfObj.style.left = 0; - swfObj.style.top = "-3px"; - swfObj.style.width = btnWidth+"px"; - swfObj.style.height = btnHeight+"px"; - - if(obj["insertedFiles"]>0) reloadFileList(settings); -} - -function fileQueued(file) { -} - -function fileQueueError(file, errorCode, message) { - try { - switch(errorCode) { - case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED : - alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file."))); - break; - case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: - alert("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: - alert("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: - alert("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - default: - alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - } - } catch(ex) { - this.debug(ex); - } -} - -function fileDialogComplete(numFilesSelected, numFilesQueued) { - try { - this.startUpload(); - } catch (ex) { - this.debug(ex); - } -} - -function uploadStart(file) { - return true; -} - -function uploadProgress(file, bytesLoaded, bytesTotal) { - try { - var obj = xGetElementById(this.settings["fileListAreaID"]); - - var percent = Math.ceil((bytesLoaded / bytesTotal) * 100); - var filename = file.name; - if(filename.length>20) filename = filename.substr(0,20)+'...'; - - var text = filename + ' ('+percent+'%)'; - if(!obj.options.length || obj.options[obj.options.length-1].value != file.id) { - var opt_obj = new Option(text, file.id, true, true); - obj.options[obj.options.length] = opt_obj; - } else { - obj.options[obj.options.length-1].text = text; - } - } catch (ex) { - this.debug(ex); - } -} - -function uploadSuccess(file, serverData) { - try { - if(this.getStats().files_queued !== 0) this.startUpload(); - } catch (ex) { - this.debug(ex); - } -} - -function uploadError(file, errorCode, message) { - try { - switch (errorCode) { - case SWFUpload.UPLOAD_ERROR.HTTP_ERROR: - alert("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: - alert("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.IO_ERROR: - alert("Error Code: IO Error, File name: " + file.name + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: - alert("Error Code: Security Error, File name: " + file.name + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: - alert("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: - alert("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: - // If there aren't any files left (they were all cancelled) disable the cancel button - if (this.getStats().files_queued === 0) { - document.getElementById(this.customSettings.cancelButtonId).disabled = true; - } - break; - case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: - break; - default: - alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message); - break; - } - } catch (ex) { - this.debug(ex); - } -} - -function uploadComplete(file) { - try { - var fileListAreaID = this.settings["fileListAreaID"]; - var uploadTargetSrl = this.settings["uploadTargetSrl"]; - reloadFileList(this.settings); - } catch(e) { - this.debug(ex); - } -} - -function queueComplete(numFilesUploaded) { -} - -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","left_size"); - exec_xml("file","getFileList", params, completeReloadFileList, response_tags, settings); -} - -function completeReloadFileList(ret_obj, response_tags, settings) { - var upload_target_srl = ret_obj['upload_target_srl']; - var editor_sequence = ret_obj['editor_sequence']; - var upload_status = ret_obj['upload_status']; - var files = ret_obj['files']; - var file_list_area_id = settings["fileListAreaID"]; - var listObj = xGetElementById(file_list_area_id); - var left_size = parseInt(parseInt(ret_obj["left_size"],10)/1024,10); - while(listObj.options.length) { - listObj.remove(0); - } - - if(upload_target_srl && upload_target_srl != 0) { - editorRelKeys[editor_sequence]["primary"].value = upload_target_srl; - settings["uploadTargetSrl"] = upload_target_srl; - } - - var statusObj = xGetElementById(settings["uploaderStatusID"]); - if(statusObj) xInnerHtml(statusObj, upload_status); - - var previewObj = xGetElementById(settings["previewAreaID"]); - if(previewObj) xInnerHtml(previewObj,""); - - if(files && typeof(files['item'])!='undefined') { - var item = files['item']; - if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item); - if(item.length) { - for(var i=0;i"; - xInnerHtml(previewAreaID, html); - return; - } - - var html = ""; - var uploaded_filename = file_info.download_url; - - // 플래쉬 동영상의 경우 - if(/\.flv$/i.test(uploaded_filename)) { - html = ""; - - // 플래쉬 파일의 경우 - } else if(/\.swf$/i.test(uploaded_filename)) { - html = ""; - - // wmv, avi, mpg, mpeg등의 동영상 파일의 경우 - } else if(/\.(wmv|avi|mpg|mpeg|asx|asf|mp3)$/i.test(uploaded_filename)) { - html = ""; - - // 이미지 파일의 경우 - } else if(/\.(jpg|jpeg|png|gif)$/i.test(uploaded_filename)) { - html = ""; - } else if(uploaded_filename) { - html = ""; - } - xInnerHtml(previewAreaID, html); -} - -function removeUploadedFile(editorSequence) { - var settings = uploaderSettings[editorSequence]; - var fileListAreaID = settings["fileListAreaID"]; - var fileListObj = xGetElementById(fileListAreaID); - if(!fileListObj) return; - - if(fileListObj.selectedIndex<0) return; - - var file_srls = new Array(); - for(var i=0;i"); - } - - // binary파일의 경우 url_link 컴포넌트 연결 - } else { - text.push(""+file.source_filename+"\n"); - } - } - - // html 모드 - if(editorMode[editorSequence]=='html'){ - if(text.length>0) xGetElementById('editor_textarea_'+editorSequence).value += text.join(''); - - // 위지윅 모드 - }else{ - var iframe_obj = editorGetIFrame(editorSequence); - if(!iframe_obj) return; - if(text.length>0) editorReplaceHTML(iframe_obj, text.join('')); - } -} +/** + * @author zero (zero@nzeo.com) + * @version 0.1.1 + * @brief 파일 업로드 관련 + **/ +var uploadedFiles = new Array(); +var uploaderSettings = new Array(); +var loaded_images = new Array(); +var swfUploadObjs = new Array(); + +/** + * 업로드를 하기 위한 준비 시작 + * 이 함수는 editor.html 에서 파일 업로드 가능할 경우 호출됨 + **/ +// window.load 이벤트일 경우 && 문서 번호가 가상의 번호가 아니면 기존에 저장되어 있을지도 모르는 파일 목록을 가져옴 +function editorUploadInit(obj) { + if(typeof(obj["editorSequence"])=="undefined") return; + if(typeof(obj["sessionName"])=="undefined") obj["sessionName"]= "PHPSESSID"; + if(typeof(obj["allowedFileSize"])=="undefined") obj["allowedFileSize"]= 2*1024*1024; + if(typeof(obj["allowedFileTypes"])=="undefined") obj["allowedFileTypes"]= "*.*"; + if(typeof(obj["allowedFileTypesDescription"])=="undefined") obj["allowedFileTypesDescription"]= "All Files"; + if(typeof(obj["replaceButtonID"])=="undefined") obj["replaceButtonID"] = "swfUploadButton"+obj["editorSequence"]; + if(typeof(obj["insertedFiles"])=="undefined") obj["insertedFiles"] = 0; + xAddEventListener(window,"load",function() { XEUploaderStart(obj) }); +} + +// 파일 업로드를 위한 기본 준비를 함 +function XEUploaderStart(obj) { + try { document.execCommand('BackgroundImageCache',false,true); } catch(e) { } + + var btnObj = xGetElementById(obj["replaceButtonID"]); + var btnWidth = xWidth(btnObj); + var btnHeight = xHeight(btnObj); + btnObj.style.position = "relative"; + + var dummy = xCreateElement("span"); + dummy.id = "dummy"+obj["replaceButtonID"]; + btnObj.appendChild(dummy); + + var settings = { + flash_url : request_uri+"modules/editor/tpl/images/SWFUpload.swf", + upload_url: request_uri, + post_params: { + "mid" : current_mid, + "act" : "procFileUpload", + "editor_sequence" : obj["editorSequence"], + "uploadTargetSrl" : editorRelKeys[obj["editorSequence"]]["primary"].value + }, + file_size_limit : parseInt(parseInt(obj["allowedFileSize"],10)/1024,10), + file_queue_limit : 0, + file_upload_limit : 0, + file_types : obj["allowedFileTypes"], + file_types_description : obj["allowedFileTypesDescription"], + custom_settings : { + progressTarget : null, + cancelButtonId : null + }, + debug: false, + + // Button settings + button_window_mode: 'transparent', + button_placeholder_id: dummy.id, + button_text: null, + button_image_url: "", + button_width: btnWidth, + button_height: btnHeight, + button_text_style: null, + button_text_left_padding: 0, + button_text_top_padding: 0, + + // The event handler functions are defined in handlers.js + file_queued_handler : fileQueued, + file_queue_error_handler : fileQueueError, + file_dialog_complete_handler : fileDialogComplete, + upload_start_handler : uploadStart, + upload_progress_handler : uploadProgress, + upload_error_handler : uploadError, + upload_success_handler : uploadSuccess, + upload_complete_handler : uploadComplete, + queue_complete_handler :queueComplete + }; + if(typeof(xeVid)!='undefined') settings["post_params"]["vid"] = xeVid; + settings["post_params"][obj["sessionName"]] = xGetCookie(obj["sessionName"]); + settings["editorSequence"] = obj["editorSequence"]; + settings["uploadTargetSrl"] = editorRelKeys[obj["editorSequence"]]["primary"].value; + settings["fileListAreaID"] = obj["fileListAreaID"]; + settings["previewAreaID"] = obj["previewAreaID"]; + settings["uploaderStatusID"] = obj["uploaderStatusID"]; + + uploaderSettings[obj["editorSequence"]] = settings; + + var swfu = new SWFUpload(settings); + var swfObj = xGetElementById(swfu.movieName); + swfUploadObjs[obj["editorSequence"]] = swfu.movieName; + if(!swfObj) return; + + swfObj.style.display = "block"; + swfObj.style.cursor = "pointer"; + swfObj.style.position = "absolute"; + swfObj.style.left = 0; + swfObj.style.top = "-3px"; + swfObj.style.width = btnWidth+"px"; + swfObj.style.height = btnHeight+"px"; + + if(obj["insertedFiles"]>0) reloadFileList(settings); +} + +function fileQueued(file) { +} + +function fileQueueError(file, errorCode, message) { + try { + switch(errorCode) { + case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED : + alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file."))); + break; + case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: + alert("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: + alert("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: + alert("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + default: + alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + } + } catch(ex) { + this.debug(ex); + } +} + +function fileDialogComplete(numFilesSelected, numFilesQueued) { + try { + this.startUpload(); + } catch (ex) { + this.debug(ex); + } +} + +function uploadStart(file) { + return true; +} + +function uploadProgress(file, bytesLoaded, bytesTotal) { + try { + var obj = xGetElementById(this.settings["fileListAreaID"]); + + var percent = Math.ceil((bytesLoaded / bytesTotal) * 100); + var filename = file.name; + if(filename.length>20) filename = filename.substr(0,20)+'...'; + + var text = filename + ' ('+percent+'%)'; + if(!obj.options.length || obj.options[obj.options.length-1].value != file.id) { + var opt_obj = new Option(text, file.id, true, true); + obj.options[obj.options.length] = opt_obj; + } else { + obj.options[obj.options.length-1].text = text; + } + } catch (ex) { + this.debug(ex); + } +} + +function uploadSuccess(file, serverData) { + try { + if(this.getStats().files_queued !== 0) this.startUpload(); + } catch (ex) { + this.debug(ex); + } +} + +function uploadError(file, errorCode, message) { + try { + switch (errorCode) { + case SWFUpload.UPLOAD_ERROR.HTTP_ERROR: + alert("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: + alert("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.IO_ERROR: + alert("Error Code: IO Error, File name: " + file.name + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: + alert("Error Code: Security Error, File name: " + file.name + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: + alert("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: + alert("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: + // If there aren't any files left (they were all cancelled) disable the cancel button + if (this.getStats().files_queued === 0) { + document.getElementById(this.customSettings.cancelButtonId).disabled = true; + } + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: + break; + default: + alert("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message); + break; + } + } catch (ex) { + this.debug(ex); + } +} + +function uploadComplete(file) { + try { + var fileListAreaID = this.settings["fileListAreaID"]; + var uploadTargetSrl = this.settings["uploadTargetSrl"]; + reloadFileList(this.settings); + } catch(e) { + this.debug(ex); + } +} + +function queueComplete(numFilesUploaded) { +} + +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","left_size"); + exec_xml("file","getFileList", params, completeReloadFileList, response_tags, settings); +} + +function completeReloadFileList(ret_obj, response_tags, settings) { + var upload_target_srl = ret_obj['upload_target_srl']; + var editor_sequence = ret_obj['editor_sequence']; + var upload_status = ret_obj['upload_status']; + var files = ret_obj['files']; + var file_list_area_id = settings["fileListAreaID"]; + var listObj = xGetElementById(file_list_area_id); + var left_size = parseInt(parseInt(ret_obj["left_size"],10)/1024,10); + while(listObj.options.length) { + listObj.remove(0); + } + + if(upload_target_srl && upload_target_srl != 0) { + editorRelKeys[editor_sequence]["primary"].value = upload_target_srl; + settings["uploadTargetSrl"] = upload_target_srl; + } + + var statusObj = xGetElementById(settings["uploaderStatusID"]); + if(statusObj) xInnerHtml(statusObj, upload_status); + + var previewObj = xGetElementById(settings["previewAreaID"]); + if(previewObj) xInnerHtml(previewObj,""); + + if(files && typeof(files['item'])!='undefined') { + var item = files['item']; + if(typeof(item.length)=='undefined' || item.length<1) item = new Array(item); + if(item.length) { + for(var i=0;i"; + xInnerHtml(previewAreaID, html); + return; + } + + var html = ""; + var uploaded_filename = file_info.download_url; + + // 플래쉬 동영상의 경우 + if(/\.flv$/i.test(uploaded_filename)) { + html = ""; + + // 플래쉬 파일의 경우 + } else if(/\.swf$/i.test(uploaded_filename)) { + html = ""; + + // wmv, avi, mpg, mpeg등의 동영상 파일의 경우 + } else if(/\.(wmv|avi|mpg|mpeg|asx|asf|mp3)$/i.test(uploaded_filename)) { + html = ""; + + // 이미지 파일의 경우 + } else if(/\.(jpg|jpeg|png|gif)$/i.test(uploaded_filename)) { + html = ""; + } else if(uploaded_filename) { + html = ""; + } + xInnerHtml(previewAreaID, html); +} + +function removeUploadedFile(editorSequence) { + var settings = uploaderSettings[editorSequence]; + var fileListAreaID = settings["fileListAreaID"]; + var fileListObj = xGetElementById(fileListAreaID); + if(!fileListObj) return; + + if(fileListObj.selectedIndex<0) return; + + var file_srls = new Array(); + for(var i=0;i"); + } + + // binary파일의 경우 url_link 컴포넌트 연결 + } else { + text.push(""+file.source_filename+"\n"); + } + } + + // html 모드 + if(editorMode[editorSequence]=='html'){ + if(text.length>0) xGetElementById('editor_textarea_'+editorSequence).value += text.join(''); + + // 위지윅 모드 + }else{ + var iframe_obj = editorGetIFrame(editorSequence); + if(!iframe_obj) return; + if(text.length>0) editorReplaceHTML(iframe_obj, text.join('')); + } +} From c4cab9bb7eafbabebfd4ce1d15a359289b4507d4 Mon Sep 17 00:00:00 2001 From: ChanMyeong Date: Mon, 8 Jun 2009 03:25:28 +0000 Subject: [PATCH 068/243] =?UTF-8?q?=EC=83=88=EB=A1=9C=EA=B3=A0=EC=B9=A8=20?= =?UTF-8?q?=ED=95=9C=EA=B5=AD=EC=96=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6491 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/lang/ko.lang.php | 453 ++++++++++++++++---------------- 1 file changed, 227 insertions(+), 226 deletions(-) diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index 1237f38ff..8735b17f6 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -1,226 +1,227 @@ - - * @brief 위지윅에디터(editor) 모듈의 기본 언어팩 - **/ - - $lang->editor = '위지윅 에디터'; - $lang->component_name = '컴포넌트'; - $lang->component_version = '버전'; - $lang->component_author = '제작자 '; - $lang->component_link = '링크'; - $lang->component_date = '제작일'; - $lang->component_license = '라이선스'; - $lang->component_history = '변경 이력'; - $lang->component_description = '설명'; - $lang->component_extra_vars = '설정 변수'; - $lang->component_grant = '권한설정'; - $lang->content_style = '문서 서식'; - $lang->content_font = '문서 폰트'; - $lang->content_font_size = '문서 폰트 크기'; - - $lang->about_component = '컴포넌트 소개'; - $lang->about_component_grant = '기본 컴포넌트외의 확장 컴포넌트 기능을 사용할 수 있는 권한을 지정할 수 있습니다.
(모두 해제시 아무나 사용 가능합니다)'; - $lang->about_component_mid = '에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.
(모두 해제 시 모든 대상에서 사용 가능합니다)'; - - $lang->msg_component_is_not_founded = '%s 에디터 컴포넌트를 찾을 수 없습니다.'; - $lang->msg_component_is_inserted = '선택하신 컴포넌트는 이미 입력되어 있습니다.'; - $lang->msg_component_is_first_order = '선택하신 컴포넌트는 첫번째에 위치하고 있습니다.'; - $lang->msg_component_is_last_order = '선택하신 컴포넌트는 마지막에 위치하고 있습니다.'; - $lang->msg_load_saved_doc = "자동 저장된 글이 있습니다. 복구하시겠습니까?\n글을 다 쓰신 후 저장하시면 자동 저장본은 사라집니다."; - $lang->msg_auto_saved = '자동 저장되었습니다.'; - - $lang->cmd_disable = '비활성'; - $lang->cmd_enable = '활성'; - - $lang->editor_skin = '에디터 스킨'; - $lang->upload_file_grant = '파일 첨부 권한'; - $lang->enable_default_component_grant = '기본 컴포넌트 사용 권한'; - $lang->enable_component_grant = '컴포넌트 사용 권한'; - $lang->enable_html_grant = 'HTML편집 권한'; - $lang->enable_autosave = '자동저장 사용'; - $lang->height_resizable = '높이 조절 가능'; - $lang->editor_height = '에디터 높이'; - - $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; - $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; - $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; - $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; - $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다. (모두 해제 시 아무나 첨부 가능합니다)'; - $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제 시 아무나 사용 가능합니다)'; - $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다.'; - $lang->about_editor_height_resizable = '에디터의 높이를 직접 변경할 수 있도록 허용합니다.'; - $lang->about_enable_html_grant = 'HTML편집 권한을 부여할 수 있습니다.'; - $lang->about_enable_autosave = '글 작성시 자동 저장 기능을 활성화 시킬 수 있습니다.'; - - $lang->edit->fontname = '글꼴'; - $lang->edit->fontsize = '크기'; - $lang->edit->use_paragraph = '문단기능'; - $lang->edit->fontlist = array( - 'Dotum' => '돋움', - 'Gulim' => '굴림', - 'Batang' => '바탕', - 'Arial' => 'Arial', - 'Arial Black' => 'Arial Black', - 'Tahoma' => 'Tahoma', - 'Verdana' => 'Verdana', - 'Sans-serif' => 'Sans-serif', - 'Serif' => 'Serif', - 'Monospace' => 'Monospace', - 'Cursive' => 'Cursive', - 'Fantasy' => 'Fantasy', - ); - - $lang->edit->header = '형식'; - $lang->edit->header_list = array( - 'h1' => '제목 1', - 'h2' => '제목 2', - 'h3' => '제목 3', - 'h4' => '제목 4', - 'h5' => '제목 5', - 'h6' => '제목 6', - ); - - $lang->edit->submit = '확인'; - - $lang->edit->fontcolor = '글자 색'; - $lang->edit->fontbgcolor = '글자 배경색'; - $lang->edit->bold = '진하게'; - $lang->edit->italic = '기울임'; - $lang->edit->underline = '밑줄'; - $lang->edit->strike = '취소선'; - $lang->edit->sup = '위 첨자'; - $lang->edit->sub = '아래 첨자'; - $lang->edit->redo = '다시 실행'; - $lang->edit->undo = '되돌리기'; - $lang->edit->align_left = '왼쪽 정렬'; - $lang->edit->align_center = '가운데 정렬'; - $lang->edit->align_right = '오른쪽 정렬'; - $lang->edit->align_justify = '양쪽 정렬'; - $lang->edit->add_indent = '들여쓰기'; - $lang->edit->remove_indent = '내어쓰기'; - $lang->edit->list_number = '번호 매기기'; - $lang->edit->list_bullet = '목록'; - $lang->edit->remove_format = '글맵시 지우기'; - - $lang->edit->help_remove_format = '선택된 영역 내의 태그를 지웁니다.'; - $lang->edit->help_strike_through = '글자에 취소선을 표시합니다.'; - $lang->edit->help_align_full = '좌우 폭에 맞게 정렬을 합니다.'; - - $lang->edit->help_fontcolor = '글자의 색상을 지정합니다.'; - $lang->edit->help_fontbgcolor = '글자의 배경색상을 지정합니다.'; - $lang->edit->help_bold = '글자를 진하게 합니다.'; - $lang->edit->help_italic = '글자를 기울이게 합니다.'; - $lang->edit->help_underline = '밑줄을 긋습니다.'; - $lang->edit->help_strike = '취소선을 긋습니다.'; - $lang->edit->help_sup = '위 첨자를 입력합니다.'; - $lang->edit->help_sub = '아래 첨자를 입력합니다.'; - $lang->edit->help_redo = '다음 동작으로 돌아갑니다.'; - $lang->edit->help_undo = '이전 동작으로 돌아갑니다.'; - $lang->edit->help_align_left = '왼쪽 정렬을 합니다.'; - $lang->edit->help_align_center = '가운데 정렬을 합니다.'; - $lang->edit->help_align_right = '오른쪽 정렬을 합니다.'; - $lang->edit->help_add_indent = '단락의 들여쓰기 수준을 높입니다.'; - $lang->edit->help_remove_indent = '단락의 들여쓰기 수준을 낮춥니다.'; - $lang->edit->help_list_number = '숫자로된 목록을 적용합니다.'; - $lang->edit->help_list_bullet = '기호로된 목록을 적용합니다.'; - $lang->edit->help_use_paragraph = '문단 나누기를 하시려면 Ctrl+Enter를 누르시면 됩니다. (글 작성완료 후 Alt+S를 누르면 저장이 됩니다.)'; - - $lang->edit->url = '링크'; - $lang->edit->blockquote = '인용문'; - $lang->edit->table = '표'; - $lang->edit->image = '그림'; - $lang->edit->multimedia = '동영상'; - $lang->edit->emoticon = '이모티콘'; - - $lang->edit->upload = '첨부'; - $lang->edit->upload_file = '파일 첨부'; - $lang->edit->link_file = '본문 삽입'; - $lang->edit->delete_selected = '선택 삭제'; - - $lang->edit->icon_align_article = '한 문단을 차지'; - $lang->edit->icon_align_left = '글의 왼쪽으로'; - $lang->edit->icon_align_middle = '가운데 정렬'; - $lang->edit->icon_align_right = '글의 우측으로'; - - $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->lineheight = '줄간격'; - $lang->edit->fontbgsampletext = '가나다'; - - $lang->edit->hyperlink = '하이퍼링크'; - $lang->edit->target_blank = '새창으로'; - - $lang->edit->quotestyle1 = '왼쪽 실선'; - $lang->edit->quotestyle2 = '인용 부호'; - $lang->edit->quotestyle3 = '실선'; - $lang->edit->quotestyle4 = '실선 + 배경'; - $lang->edit->quotestyle5 = '굵은 실선'; - $lang->edit->quotestyle6 = '점선'; - $lang->edit->quotestyle7 = '점선 + 배경'; - $lang->edit->quotestyle8 = '적용 취소'; - - - $lang->edit->jumptoedit = '편집 도구모음 건너뛰기'; - $lang->edit->set_sel = '칸 수 지정'; - $lang->edit->row = '행'; - $lang->edit->col = '열'; - $lang->edit->add_one_row = '1행추가'; - $lang->edit->del_one_row = '1행삭제'; - $lang->edit->add_one_col = '1열추가'; - $lang->edit->del_one_col = '1열삭제'; - - $lang->edit->table_config = '표 속성 지정'; - $lang->edit->border_width = '테두리 굵기'; - $lang->edit->border_color = '테두리 색'; - $lang->edit->add = '더하기'; - $lang->edit->del = '빼기'; - $lang->edit->search_color = '색상찾기'; - $lang->edit->table_backgroundcolor = '표 배경색'; - $lang->edit->special_character = '특수문자'; - $lang->edit->insert_special_character = '특수문자 삽입'; - $lang->edit->close_special_character = '특수문자 레이어 닫기'; - $lang->edit->symbol = '일반기호'; - $lang->edit->number_unit = '숫자와 단위'; - $lang->edit->circle_bracket = '원,괄호'; - $lang->edit->korean = '한글'; - $lang->edit->greece = '그리스'; - $lang->edit->Latin = '라틴어'; - $lang->edit->japan = '일본어'; - $lang->edit->selected_symbol = '선택한 기호'; - - $lang->edit->search_replace = '찾기/바꾸기'; - $lang->edit->close_search_replace = '찾기/바꾸기 레이어 닫기'; - $lang->edit->replace_all = '모두바꾸기'; - $lang->edit->search_words = '찾을단어'; - $lang->edit->replace_words = '바꿀단어'; - $lang->edit->next_search_words = '다음찾기'; - $lang->edit->edit_height_control = '입력창 크기 조절'; - - $lang->edit->merge_cells = '셀 병합'; - $lang->edit->split_row = '행 분할'; - $lang->edit->split_col = '열 분할'; - - $lang->edit->toggle_list = '목록 접기/펼치기'; - $lang->edit->minimize_list = '최소화'; - - $lang->edit->move = '이동'; - $lang->edit->materials = '글감보관함'; - $lang->edit->temporary_savings = '임시저장목록'; - - $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; - - $lang->edit->paging_prev = '이전'; - $lang->edit->paging_next = '다음'; - $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; - $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; - - $lang->edit->toc = '목차'; -?> + + * @brief 위지윅에디터(editor) 모듈의 기본 언어팩 + **/ + + $lang->editor = '위지윅 에디터'; + $lang->component_name = '컴포넌트'; + $lang->component_version = '버전'; + $lang->component_author = '제작자 '; + $lang->component_link = '링크'; + $lang->component_date = '제작일'; + $lang->component_license = '라이선스'; + $lang->component_history = '변경 이력'; + $lang->component_description = '설명'; + $lang->component_extra_vars = '설정 변수'; + $lang->component_grant = '권한설정'; + $lang->content_style = '문서 서식'; + $lang->content_font = '문서 폰트'; + $lang->content_font_size = '문서 폰트 크기'; + + $lang->about_component = '컴포넌트 소개'; + $lang->about_component_grant = '기본 컴포넌트외의 확장 컴포넌트 기능을 사용할 수 있는 권한을 지정할 수 있습니다.
(모두 해제시 아무나 사용 가능합니다)'; + $lang->about_component_mid = '에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.
(모두 해제 시 모든 대상에서 사용 가능합니다)'; + + $lang->msg_component_is_not_founded = '%s 에디터 컴포넌트를 찾을 수 없습니다.'; + $lang->msg_component_is_inserted = '선택하신 컴포넌트는 이미 입력되어 있습니다.'; + $lang->msg_component_is_first_order = '선택하신 컴포넌트는 첫번째에 위치하고 있습니다.'; + $lang->msg_component_is_last_order = '선택하신 컴포넌트는 마지막에 위치하고 있습니다.'; + $lang->msg_load_saved_doc = "자동 저장된 글이 있습니다. 복구하시겠습니까?\n글을 다 쓰신 후 저장하시면 자동 저장본은 사라집니다."; + $lang->msg_auto_saved = '자동 저장되었습니다.'; + + $lang->cmd_disable = '비활성'; + $lang->cmd_enable = '활성'; + + $lang->editor_skin = '에디터 스킨'; + $lang->upload_file_grant = '파일 첨부 권한'; + $lang->enable_default_component_grant = '기본 컴포넌트 사용 권한'; + $lang->enable_component_grant = '컴포넌트 사용 권한'; + $lang->enable_html_grant = 'HTML편집 권한'; + $lang->enable_autosave = '자동저장 사용'; + $lang->height_resizable = '높이 조절 가능'; + $lang->editor_height = '에디터 높이'; + + $lang->about_editor_skin = '에디터 스킨을 선택하실 수 있습니다'; + $lang->about_content_style = '문서 편집 및 내용 출력시 원하는 서식을 지정할 수 있습니다'; + $lang->about_content_font = '문서 편집 및 내용 출력시 원하는 폰트를 지정할 수 있습니다.
지정하지 않으면 사용자 설정에 따르게 됩니다
,(콤마)로 여러 폰트를 지정할 수 있습니다.'; + $lang->about_content_font_size = '문서 편집 및 내용 출력시 원하는 폰트의 크기를 지정할 수 있습니다.
12px, 1em등 단위까지 포함해서 입력해주세요.'; + $lang->about_upload_file_grant = '파일을 첨부할 수 있는 권한을 지정하실 수 있습니다. (모두 해제 시 아무나 첨부 가능합니다)'; + $lang->about_default_component_grant = '에디터에서 사용되는 기본 컴포넌트를 사용할 수 있는 권한을 지정할 수 있습니다. (모두 해제 시 아무나 사용 가능합니다)'; + $lang->about_editor_height = '에디터의 기본 높이를 지정하실 수 있습니다.'; + $lang->about_editor_height_resizable = '에디터의 높이를 직접 변경할 수 있도록 허용합니다.'; + $lang->about_enable_html_grant = 'HTML편집 권한을 부여할 수 있습니다.'; + $lang->about_enable_autosave = '글 작성시 자동 저장 기능을 활성화 시킬 수 있습니다.'; + + $lang->edit->fontname = '글꼴'; + $lang->edit->fontsize = '크기'; + $lang->edit->use_paragraph = '문단기능'; + $lang->edit->fontlist = array( + 'Dotum' => '돋움', + 'Gulim' => '굴림', + 'Batang' => '바탕', + 'Arial' => 'Arial', + 'Arial Black' => 'Arial Black', + 'Tahoma' => 'Tahoma', + 'Verdana' => 'Verdana', + 'Sans-serif' => 'Sans-serif', + 'Serif' => 'Serif', + 'Monospace' => 'Monospace', + 'Cursive' => 'Cursive', + 'Fantasy' => 'Fantasy', + ); + + $lang->edit->header = '형식'; + $lang->edit->header_list = array( + 'h1' => '제목 1', + 'h2' => '제목 2', + 'h3' => '제목 3', + 'h4' => '제목 4', + 'h5' => '제목 5', + 'h6' => '제목 6', + ); + + $lang->edit->submit = '확인'; + + $lang->edit->fontcolor = '글자 색'; + $lang->edit->fontbgcolor = '글자 배경색'; + $lang->edit->bold = '진하게'; + $lang->edit->italic = '기울임'; + $lang->edit->underline = '밑줄'; + $lang->edit->strike = '취소선'; + $lang->edit->sup = '위 첨자'; + $lang->edit->sub = '아래 첨자'; + $lang->edit->redo = '다시 실행'; + $lang->edit->undo = '되돌리기'; + $lang->edit->align_left = '왼쪽 정렬'; + $lang->edit->align_center = '가운데 정렬'; + $lang->edit->align_right = '오른쪽 정렬'; + $lang->edit->align_justify = '양쪽 정렬'; + $lang->edit->add_indent = '들여쓰기'; + $lang->edit->remove_indent = '내어쓰기'; + $lang->edit->list_number = '번호 매기기'; + $lang->edit->list_bullet = '목록'; + $lang->edit->remove_format = '글맵시 지우기'; + + $lang->edit->help_remove_format = '선택된 영역 내의 태그를 지웁니다.'; + $lang->edit->help_strike_through = '글자에 취소선을 표시합니다.'; + $lang->edit->help_align_full = '좌우 폭에 맞게 정렬을 합니다.'; + + $lang->edit->help_fontcolor = '글자의 색상을 지정합니다.'; + $lang->edit->help_fontbgcolor = '글자의 배경색상을 지정합니다.'; + $lang->edit->help_bold = '글자를 진하게 합니다.'; + $lang->edit->help_italic = '글자를 기울이게 합니다.'; + $lang->edit->help_underline = '밑줄을 긋습니다.'; + $lang->edit->help_strike = '취소선을 긋습니다.'; + $lang->edit->help_sup = '위 첨자를 입력합니다.'; + $lang->edit->help_sub = '아래 첨자를 입력합니다.'; + $lang->edit->help_redo = '다음 동작으로 돌아갑니다.'; + $lang->edit->help_undo = '이전 동작으로 돌아갑니다.'; + $lang->edit->help_align_left = '왼쪽 정렬을 합니다.'; + $lang->edit->help_align_center = '가운데 정렬을 합니다.'; + $lang->edit->help_align_right = '오른쪽 정렬을 합니다.'; + $lang->edit->help_add_indent = '단락의 들여쓰기 수준을 높입니다.'; + $lang->edit->help_remove_indent = '단락의 들여쓰기 수준을 낮춥니다.'; + $lang->edit->help_list_number = '숫자로된 목록을 적용합니다.'; + $lang->edit->help_list_bullet = '기호로된 목록을 적용합니다.'; + $lang->edit->help_use_paragraph = '문단 나누기를 하시려면 Ctrl+Enter를 누르시면 됩니다. (글 작성완료 후 Alt+S를 누르면 저장이 됩니다.)'; + + $lang->edit->url = '링크'; + $lang->edit->blockquote = '인용문'; + $lang->edit->table = '표'; + $lang->edit->image = '그림'; + $lang->edit->multimedia = '동영상'; + $lang->edit->emoticon = '이모티콘'; + + $lang->edit->upload = '첨부'; + $lang->edit->upload_file = '파일 첨부'; + $lang->edit->link_file = '본문 삽입'; + $lang->edit->delete_selected = '선택 삭제'; + + $lang->edit->icon_align_article = '한 문단을 차지'; + $lang->edit->icon_align_left = '글의 왼쪽으로'; + $lang->edit->icon_align_middle = '가운데 정렬'; + $lang->edit->icon_align_right = '글의 우측으로'; + + $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->lineheight = '줄간격'; + $lang->edit->fontbgsampletext = '가나다'; + + $lang->edit->hyperlink = '하이퍼링크'; + $lang->edit->target_blank = '새창으로'; + + $lang->edit->quotestyle1 = '왼쪽 실선'; + $lang->edit->quotestyle2 = '인용 부호'; + $lang->edit->quotestyle3 = '실선'; + $lang->edit->quotestyle4 = '실선 + 배경'; + $lang->edit->quotestyle5 = '굵은 실선'; + $lang->edit->quotestyle6 = '점선'; + $lang->edit->quotestyle7 = '점선 + 배경'; + $lang->edit->quotestyle8 = '적용 취소'; + + + $lang->edit->jumptoedit = '편집 도구모음 건너뛰기'; + $lang->edit->set_sel = '칸 수 지정'; + $lang->edit->row = '행'; + $lang->edit->col = '열'; + $lang->edit->add_one_row = '1행추가'; + $lang->edit->del_one_row = '1행삭제'; + $lang->edit->add_one_col = '1열추가'; + $lang->edit->del_one_col = '1열삭제'; + + $lang->edit->table_config = '표 속성 지정'; + $lang->edit->border_width = '테두리 굵기'; + $lang->edit->border_color = '테두리 색'; + $lang->edit->add = '더하기'; + $lang->edit->del = '빼기'; + $lang->edit->search_color = '색상찾기'; + $lang->edit->table_backgroundcolor = '표 배경색'; + $lang->edit->special_character = '특수문자'; + $lang->edit->insert_special_character = '특수문자 삽입'; + $lang->edit->close_special_character = '특수문자 레이어 닫기'; + $lang->edit->symbol = '일반기호'; + $lang->edit->number_unit = '숫자와 단위'; + $lang->edit->circle_bracket = '원,괄호'; + $lang->edit->korean = '한글'; + $lang->edit->greece = '그리스'; + $lang->edit->Latin = '라틴어'; + $lang->edit->japan = '일본어'; + $lang->edit->selected_symbol = '선택한 기호'; + + $lang->edit->search_replace = '찾기/바꾸기'; + $lang->edit->close_search_replace = '찾기/바꾸기 레이어 닫기'; + $lang->edit->replace_all = '모두바꾸기'; + $lang->edit->search_words = '찾을단어'; + $lang->edit->replace_words = '바꿀단어'; + $lang->edit->next_search_words = '다음찾기'; + $lang->edit->edit_height_control = '입력창 크기 조절'; + + $lang->edit->merge_cells = '셀 병합'; + $lang->edit->split_row = '행 분할'; + $lang->edit->split_col = '열 분할'; + + $lang->edit->toggle_list = '목록 접기/펼치기'; + $lang->edit->minimize_list = '최소화'; + + $lang->edit->move = '이동'; + $lang->edit->refresh = '새로고침'; + $lang->edit->materials = '글감보관함'; + $lang->edit->temporary_savings = '임시저장목록'; + + $lang->edit->drag_here = '아래의 단락추가 툴바에서 원하는 유형의 단락을 추가해 글 쓰기를 시작하세요.
글감 보관함에 글이 있으면 이곳으로 끌어 넣기 할 수 있습니다.'; + + $lang->edit->paging_prev = '이전'; + $lang->edit->paging_next = '다음'; + $lang->edit->paging_prev_help = '이전 페이지로 이동합니다.'; + $lang->edit->paging_next_help = '다음 페이지로 이동합니다.'; + + $lang->edit->toc = '목차'; +?> From ec53a41ee6cc4392115b537f046e05015c4c2f4c Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 9 Jun 2009 01:43:00 +0000 Subject: [PATCH 069/243] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80=20alias=20?= =?UTF-8?q?=EC=97=B0=EA=B2=B0=EC=8B=9C=20=EA=B0=80=EC=83=81=20=EC=82=AC?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=EA=B0=92=EC=9D=84=20=EC=A0=81=EC=9A=A9?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6492 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.model.php | 2 ++ modules/document/queries/getDocumentSrlByAlias.xml | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/document/document.model.php b/modules/document/document.model.php index 17c299ecd..45d489ea6 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -904,8 +904,10 @@ function getDocumentSrlByAlias($mid, $alias) { if(!$mid || !$alias) return null; + $site_module_info = Context::get('site_module_info'); $args->mid = $mid; $args->alias_title = $alias; + $args->site_srl = $site_module_info->site_srl; $output = executeQuery('document.getDocumentSrlByAlias', $args); if(!$output->data) return null; else return $output->data->document_srl; diff --git a/modules/document/queries/getDocumentSrlByAlias.xml b/modules/document/queries/getDocumentSrlByAlias.xml index baac51464..17eadc534 100644 --- a/modules/document/queries/getDocumentSrlByAlias.xml +++ b/modules/document/queries/getDocumentSrlByAlias.xml @@ -7,7 +7,8 @@ - + + From 346d17a02106d9150475f9f1390dcf698386485b Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 9 Jun 2009 02:14:41 +0000 Subject: [PATCH 070/243] =?UTF-8?q?=EB=B9=84=EB=B0=80=EB=B2=88=ED=98=B8=20?= =?UTF-8?q?=EC=B0=BE=EA=B8=B0=20=EB=A9=94=EC=9D=BC=EC=9D=98=20url=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6493 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/member.controller.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 8e002f13e..571904a01 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -966,7 +966,9 @@ $tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin); if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default'); - Context::set('find_url',substr(Context::getRequestUri(),0,-1).getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key)); + $find_url = getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key); + if(!preg_match('/^http/i',$find_url)) $find_url = substr(Context::getRequestUri(),0,-1).$find_url; + Context::set('find_url',$find_url); $oTemplate = &TemplateHandler::getInstance(); From 599ccf152bb9861ba7a55589d8e2880bbb752b17 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 9 Jun 2009 03:37:36 +0000 Subject: [PATCH 071/243] =?UTF-8?q?issuetracker=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EA=B0=80=EC=83=81=20=EC=82=AC=EC=9D=B4=ED=8A=B8=EC=9D=98=20vid?= =?UTF-8?q?=EA=B0=92=EC=9D=84=20=EC=9E=83=EC=96=B4=EB=B2=84=EB=A6=AC?= =?UTF-8?q?=EB=8A=94=20form=EB=AC=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6494 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/issuetracker/tpl/attach_release.html | 1 + modules/issuetracker/tpl/attached.html | 1 + modules/issuetracker/tpl/release_setting.html | 3 +++ 3 files changed, 5 insertions(+) diff --git a/modules/issuetracker/tpl/attach_release.html b/modules/issuetracker/tpl/attach_release.html index 7995655c0..03c18cb21 100644 --- a/modules/issuetracker/tpl/attach_release.html +++ b/modules/issuetracker/tpl/attach_release.html @@ -6,6 +6,7 @@ + diff --git a/modules/issuetracker/tpl/attached.html b/modules/issuetracker/tpl/attached.html index 2e2097004..129fd17d0 100644 --- a/modules/issuetracker/tpl/attached.html +++ b/modules/issuetracker/tpl/attached.html @@ -5,6 +5,7 @@ url = url.setQuery('module_srl', '{$module_srl}'); url = url.setQuery('module', '{$module}'); url = url.setQuery('mid', '{$mid}'); + url = url.setQuery('vid', '{$vid}'); url = url.setQuery('release_srl', '{$release_srl}'); url = url.setQuery('package_srl', '{$package_srl}'); diff --git a/modules/issuetracker/tpl/release_setting.html b/modules/issuetracker/tpl/release_setting.html index 484119aeb..fce4f8025 100644 --- a/modules/issuetracker/tpl/release_setting.html +++ b/modules/issuetracker/tpl/release_setting.html @@ -24,6 +24,7 @@ + @@ -47,6 +48,7 @@ + @@ -107,6 +109,7 @@ + From 2cfb31966014108b8f67d066070e95623c59444f Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 9 Jun 2009 03:45:36 +0000 Subject: [PATCH 072/243] =?UTF-8?q?=EC=9D=B4=EC=8A=88=ED=8A=B8=EB=9E=98?= =?UTF-8?q?=EC=BB=A4=EC=9D=98=20type=EC=9D=84=20=ED=95=9C=EA=B8=80?= =?UTF-8?q?=EB=A1=9C=20=EC=A2=85=EB=A5=98=EA=B0=80=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(?= =?UTF-8?q?=EC=9D=98=EB=AF=B8=20=EB=B6=88=EB=B6=84=EB=AA=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6495 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/issuetracker/lang/ko.lang.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/issuetracker/lang/ko.lang.php b/modules/issuetracker/lang/ko.lang.php index 144093a9c..ee3af3c0b 100644 --- a/modules/issuetracker/lang/ko.lang.php +++ b/modules/issuetracker/lang/ko.lang.php @@ -36,7 +36,7 @@ $lang->total_issue = '전체 문제'; $lang->milestone = $lang->milestone_srl = '계획'; $lang->priority = $lang->priority_srl = '우선순위'; - $lang->type = $lang->type_srl = '종류'; + $lang->type = $lang->type_srl = '타입'; $lang->component = $lang->component_srl = '구성요소'; $lang->assignee = '소유자'; $lang->status = '상태'; @@ -75,7 +75,7 @@ $lang->about_milestone = '개발계획을 설정합니다'; $lang->about_priority = '우선순위를 설정합니다.'; - $lang->about_type = '문제의 종류를 설정합니다 (ex. 문제, 개선사항)'; + $lang->about_type = '문제의 타입를 설정합니다 (ex. 문제, 개선사항)'; $lang->about_component = '문제의 대상 구성요소를 설정합니다'; $lang->project_menus = array( From c1d9699e6f08930853884be78b160ccb6f76fd7a Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 9 Jun 2009 05:03:06 +0000 Subject: [PATCH 073/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6496 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/issuetracker/skins/xe_issuetracker/timeline.html | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/issuetracker/skins/xe_issuetracker/timeline.html b/modules/issuetracker/skins/xe_issuetracker/timeline.html index e52e860a8..1df0a457d 100644 --- a/modules/issuetracker/skins/xe_issuetracker/timeline.html +++ b/modules/issuetracker/skins/xe_issuetracker/timeline.html @@ -6,6 +6,7 @@
+ {$lang->msg_changes_from}: From 567d648f5a6f8da8107766e2e1fe78732c806fed Mon Sep 17 00:00:00 2001 From: ngleader Date: Tue, 9 Jun 2009 05:05:41 +0000 Subject: [PATCH 074/243] git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6497 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/queries/updateDocumentOrder.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 modules/document/queries/updateDocumentOrder.xml diff --git a/modules/document/queries/updateDocumentOrder.xml b/modules/document/queries/updateDocumentOrder.xml new file mode 100644 index 000000000..0dd50b2df --- /dev/null +++ b/modules/document/queries/updateDocumentOrder.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + From d56181c9ec3d5d0664dabc2106ffe3c01e9cf8ce Mon Sep 17 00:00:00 2001 From: misol Date: Tue, 9 Jun 2009 05:54:54 +0000 Subject: [PATCH 075/243] =?UTF-8?q?Xpresseditor=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=A0=80=EC=9E=A5=EB=90=9C=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=20=EC=B2=A8=EB=B6=80=20=ED=8C=8C=EC=9D=BC=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6498 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/editor/editor.controller.php | 811 +- modules/editor/editor.model.php | 1246 +- modules/editor/skins/xpresseditor/editor.html | 8 +- .../skins/xpresseditor/js/Xpress_Editor.js | 12365 ++++++++-------- .../skins/xpresseditor/js/xe_interface.js | 557 +- .../skins/xpresseditor/js/xe_textarea.js | 82 +- modules/editor/skins/xpresseditor/skin.xml | 220 +- modules/editor/tpl/js/uploader.js | 9 +- modules/file/file.model.php | 425 +- 9 files changed, 7877 insertions(+), 7846 deletions(-) diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index 5bb665fb9..f135f874d 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -1,397 +1,414 @@ -deleteSavedDoc(); - - $args->document_srl = Context::get('document_srl'); - $args->content = Context::get('content'); - $args->title = Context::get('title'); - $output = $this->doSaveDoc($args); - - $this->setMessage('msg_auto_saved'); - } - - /** - * @brief 자동저장된 문서 삭제 - **/ - function procEditorRemoveSavedDoc() { - $oEditorController = &getController('editor'); - $oEditorController->deleteSavedDoc(); - } - - /** - * @brief 컴포넌트에서 ajax요청시 해당 컴포넌트의 method를 실행 - **/ - function procEditorCall() { - $component = Context::get('component'); - $method = Context::get('method'); - if(!$component) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); - - $oEditorModel = &getModel('editor'); - $oComponent = &$oEditorModel->getComponentObject($component); - if(!$oComponent->toBool()) return $oComponent; - - if(!method_exists($oComponent, $method)) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); - - //$output = call_user_method($method, $oComponent); - //$output = call_user_func(array($oComponent, $method)); - if(method_exists($oComponent, $method)) $output = $oComponent->{$method}(); - else return new Object(-1,sprintf('%s method is not exists', $method)); - - if((is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool()) return $output; - - $this->setError($oComponent->getError()); - $this->setMessage($oComponent->getMessage()); - - $vars = $oComponent->getVariables(); - if(count($vars)) { - foreach($vars as $key=>$val) $this->add($key, $val); - } - } - - /** - * @brief 에디터의 모듈별 추가 확장 폼을 저장 - **/ - function procEditorInsertModuleConfig() { - $module_srl = Context::get('target_module_srl'); - - // 여러개의 모듈 일괄 설정일 경우 - if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl); - else $module_srl = array($module_srl); - - $editor_config = null; - - $editor_config->editor_skin = Context::get('editor_skin'); - $editor_config->comment_editor_skin = Context::get('comment_editor_skin'); - $editor_config->content_style = Context::get('content_style'); - $editor_config->content_font = Context::get('content_font'); - if($editor_config->content_font) { - $font_list = array(); - $fonts = explode(',',$editor_config->content_font); - for($i=0,$c=count($fonts);$i<$c;$i++) { - $font = trim(str_replace(array('"','\''),'',$fonts[$i])); - if(!$font) continue; - $font_list[] = $font; - } - if(count($font_list)) $editor_config->content_font = '"'.implode('","',$font_list).'"'; - } - $editor_config->content_font_size = Context::get('content_font_size'); - $editor_config->sel_editor_colorset = Context::get('sel_editor_colorset'); - $editor_config->sel_comment_editor_colorset = Context::get('sel_comment_editor_colorset'); - - $enable_html_grant = trim(Context::get('enable_html_grant')); - if($enable_html_grant) $editor_config->enable_html_grant = explode('|@|', $enable_html_grant); - else $editor_config->enable_html_grant = array(); - - $enable_comment_html_grant = trim(Context::get('enable_comment_html_grant')); - if($enable_comment_html_grant) $editor_config->enable_comment_html_grant = explode('|@|', $enable_comment_html_grant); - else $editor_config->enable_comment_html_grant = array(); - - $upload_file_grant = trim(Context::get('upload_file_grant')); - if($upload_file_grant) $editor_config->upload_file_grant = explode('|@|', $upload_file_grant); - else $editor_config->upload_file_grant = array(); - - $comment_upload_file_grant = trim(Context::get('comment_upload_file_grant')); - if($comment_upload_file_grant) $editor_config->comment_upload_file_grant = explode('|@|', $comment_upload_file_grant); - else $editor_config->comment_upload_file_grant = array(); - - $enable_default_component_grant = trim(Context::get('enable_default_component_grant')); - if($enable_default_component_grant) $editor_config->enable_default_component_grant = explode('|@|', $enable_default_component_grant); - else $editor_config->enable_default_component_grant = array(); - - $enable_comment_default_component_grant = trim(Context::get('enable_comment_default_component_grant')); - if($enable_comment_default_component_grant) $editor_config->enable_comment_default_component_grant = explode('|@|', $enable_comment_default_component_grant); - else $editor_config->enable_comment_default_component_grant = array(); - - $enable_component_grant = trim(Context::get('enable_component_grant')); - if($enable_component_grant) $editor_config->enable_component_grant = explode('|@|', $enable_component_grant); - else $editor_config->enable_component_grant = array(); - - $enable_comment_component_grant = trim(Context::get('enable_comment_component_grant')); - if($enable_comment_component_grant) $editor_config->enable_comment_component_grant = explode('|@|', $enable_comment_component_grant); - else $editor_config->enable_comment_component_grant = array(); - - $editor_config->editor_height = (int)Context::get('editor_height'); - - $editor_config->comment_editor_height = (int)Context::get('comment_editor_height'); - - $editor_config->enable_autosave = Context::get('enable_autosave'); - - if($editor_config->enable_autosave != 'Y') $editor_config->enable_autosave = 'N'; - - $oModuleController = &getController('module'); - for($i=0;$iinsertModulePartConfig('editor',$srl,$editor_config); - } - - $this->setError(-1); - $this->setMessage('success_updated'); - } - - /** - * @brief 에디터컴포넌트의 코드를 결과물로 변환 + 문서서식 style 지정 - **/ - function triggerEditorComponentCompile(&$content) { - if(Context::getResponseMethod()!='HTML') return new Object(); - - $module_info = Context::get('module_info'); - $module_srl = $module_info->module_srl; - if($module_srl) { - $oEditorModel = &getModel('editor'); - $editor_config = $oEditorModel->getEditorConfig($module_srl); - $content_style = $editor_config->content_style; - if($content_style) { - $path = _XE_PATH_.'modules/editor/styles/'.$content_style.'/'; - if(is_dir($path) && file_exists($path.'style.ini')) { - $ini = file($path.'style.ini'); - for($i=0,$c=count($ini);$i<$c;$i++) { - $file = trim($ini[$i]); - if(!$file) continue; - if(preg_match('/\.css$/i',$file)) Context::addCSSFile('./modules/editor/styles/'.$content_style.'/'.$file, false); - elseif(preg_match('/\.js/i',$file)) Context::addJsFile('./modules/editor/styles/'.$content_style.'/'.$file, false); - } - } - } - $content_font = $editor_config->content_font; - $content_font_size = $editor_config->content_font_size; - if($content_font || $content_font_size) { - $buff = ''; - Context::addHtmlHeader($buff); - } - } - - $content = $this->transComponent($content); - } - - /** - * @brief 에디터 컴포넌트코드를 결과물로 변환 - **/ - function transComponent($content) { - $content = preg_replace_callback('!]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'transEditorComponent'), $content); - $content = preg_replace_callback('!]*)editor_component=([^\>]*?)\>!is', array($this,'transEditorComponent'), $content); - return $content; - } - - /** - * @brief 내용의 에디터 컴포넌트 코드를 변환 - **/ - function transEditorComponent($matches) { - $script = sprintf(' %s editor_component=%s', $matches[1], $matches[2]); - $script = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $script); - preg_match_all('/([a-z0-9\-\_]+)\=\"([^\"]+)\"/is', $script, $m); - for($i=0,$c=count($m[0]);$i<$c;$i++) { - $xml_obj->attrs->{$m[1][$i]} = $m[2][$i]; - } - $xml_obj->body = $matches[3]; - - if(!$xml_obj->attrs->editor_component) return $matches[0]; - - // component::transHTML() 을 이용하여 변환된 코드를 받음 - $oEditorModel = &getModel('editor'); - $oComponent = &$oEditorModel->getComponentObject($xml_obj->attrs->editor_component, 0); - if(!is_object($oComponent)||!method_exists($oComponent, 'transHTML')) return $matches[0]; - - return $oComponent->transHTML($xml_obj); - } - - - /** - * @brief 자동 저장 - **/ - function doSaveDoc($args) { - - if(Context::get('is_logged')) { - $logged_info = Context::get('logged_info'); - $args->member_srl = $logged_info->member_srl; - } else { - $args->ipaddress = $_SERVER['REMOTE_ADDR']; - } - - // 저장 - return executeQuery('editor.insertSavedDoc', $args); - } - - - /** - * @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger - **/ - function triggerDeleteSavedDoc(&$obj) { - $this->deleteSavedDoc(); - return new Object(); - } - - /** - * @brief 자동 저장된 글을 삭제 - * 현재 접속한 사용자를 기준 - **/ - function deleteSavedDoc() { - if(Context::get('is_logged')) { - $logged_info = Context::get('logged_info'); - $args->member_srl = $logged_info->member_srl; - } else { - $args->ipaddress = $_SERVER['REMOTE_ADDR']; - } - - // 일단 이전 저장본 삭제 - return executeQuery('editor.deleteSavedDoc', $args); - } - - /** - * @brief 가상 사이트에서 사용된 에디터 컴포넌트 정보를 제거 - **/ - function removeEditorConfig($site_srl) { - $args->site_srl = $site_srl; - executeQuery('editor.deleteSiteComponent', $args); - } - - /** - * @brief 에디터 컴포넌트 목록 캐싱 (editorModel::getComponentList) - * 에디터 컴포넌트 목록의 경우 DB query + Xml Parsing 때문에 캐싱 파일을 이용하도록 함 - **/ - function makeCache($filter_enabled = true, $site_srl) { - $oEditorModel = &getModel('editor'); - - if($filter_enabled) $args->enabled = "Y"; - - if($site_srl) { - $args->site_srl = $site_srl; - $output = executeQuery('editor.getSiteComponentList', $args); - } else $output = executeQuery('editor.getComponentList', $args); - $db_list = $output->data; - - // 파일목록을 구함 - $downloaded_list = FileHandler::readDir(_XE_PATH_.'modules/editor/components'); - - // 로그인 여부 및 소속 그룹 구함 - $is_logged = Context::get('is_logged'); - if($is_logged) { - $logged_info = Context::get('logged_info'); - if($logged_info->group_list && is_array($logged_info->group_list)) { - $group_list = array_keys($logged_info->group_list); - } else $group_list = array(); - } - - // DB 목록을 loop돌면서 xml정보까지 구함 - if(!is_array($db_list)) $db_list = array($db_list); - foreach($db_list as $component) { - if(in_array($component->component_name, array('colorpicker_text','colorpicker_bg'))) continue; - - $component_name = $component->component_name; - if(!$component_name) continue; - - if(!in_array($component_name, $downloaded_list)) continue; - - unset($xml_info); - $xml_info = $oEditorModel->getComponentXmlInfo($component_name); - $xml_info->enabled = $component->enabled; - - if($component->extra_vars) { - $extra_vars = unserialize($component->extra_vars); - - // 사용권한이 있으면 권한 체크 - if($extra_vars->target_group) { - // 사용권한이 체크되어 있는데 로그인이 되어 있지 않으면 무조건 사용 중지 - if(!$is_logged) continue; - - // 대상 그룹을 구해서 현재 로그인 사용자의 그룹과 비교 - $target_group = $extra_vars->target_group; - unset($extra_vars->target_group); - - $is_granted = false; - foreach($group_list as $group_srl) { - if(in_array($group_srl, $target_group)) { - $is_granted = true; - break; - } - } - if(!$is_granted) continue; - } - - // 대상 모듈이 있으면 체크 - if($extra_vars->mid_list && count($extra_vars->mid_list) && Context::get('mid')) { - if(!in_array(Context::get('mid'), $extra_vars->mid_list)) continue; - } - - // 에디터 컴포넌트의 설정 정보를 체크 - if($xml_info->extra_vars) { - foreach($xml_info->extra_vars as $key => $val) { - $xml_info->extra_vars->{$key}->value = $extra_vars->{$key}; - } - } - } - - $component_list->{$component_name} = $xml_info; - - // 버튼, 아이콘 이미지 구함 - $icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/icon.gif'; - $component_icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/component_icon.gif'; - if(file_exists($icon_file)) $component_list->{$component_name}->icon = true; - if(file_exists($component_icon_file)) $component_list->{$component_name}->component_icon = true; - } - - // enabled만 체크하도록 하였으면 그냥 return - if($filter_enabled) { - $cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl); - $buff = sprintf('', str_replace('"','\\"',serialize($component_list))); - FileHandler::writeFile($cache_file, $buff); - return $component_list; - } - - // 다운로드된 목록의 xml_info를 마저 구함 - foreach($downloaded_list as $component_name) { - if(in_array($component_name, array('colorpicker_text','colorpicker_bg'))) continue; - - // 설정된 것이라면 패스 - if($component_list->{$component_name}) continue; - - // DB에 입력 - $oEditorController = &getAdminController('editor'); - $oEditorController->insertComponent($component_name, false, $site_srl); - - // component_list에 추가 - unset($xml_info); - $xml_info = $oEditorModel->getComponentXmlInfo($component_name); - $xml_info->enabled = 'N'; - - $component_list->{$component_name} = $xml_info; - } - - $cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl); - $buff = sprintf('', str_replace('"','\\"',serialize($component_list))); - FileHandler::writeFile($cache_file, $buff); - - return $component_list; - } - - /** - * @brief 캐시 파일 삭제 - **/ - function removeCache($site_srl = 0) { - $oEditorModel = &getModel('editor'); - FileHandler::removeFile($oEditorModel->getCacheFile(true, $site_srl)); - FileHandler::removeFile($oEditorModel->getCacheFile(false, $site_srl)); - } - } -?> +deleteSavedDoc(); + + $args->document_srl = Context::get('document_srl'); + $args->content = Context::get('content'); + $args->title = Context::get('title'); + $output = $this->doSaveDoc($args); + + $this->setMessage('msg_auto_saved'); + } + + /** + * @brief 자동저장된 문서 삭제 + **/ + function procEditorRemoveSavedDoc() { + $oEditorController = &getController('editor'); + $oEditorController->deleteSavedDoc(); + } + + /** + * @brief 컴포넌트에서 ajax요청시 해당 컴포넌트의 method를 실행 + **/ + function procEditorCall() { + $component = Context::get('component'); + $method = Context::get('method'); + if(!$component) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); + + $oEditorModel = &getModel('editor'); + $oComponent = &$oEditorModel->getComponentObject($component); + if(!$oComponent->toBool()) return $oComponent; + + if(!method_exists($oComponent, $method)) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); + + //$output = call_user_method($method, $oComponent); + //$output = call_user_func(array($oComponent, $method)); + if(method_exists($oComponent, $method)) $output = $oComponent->{$method}(); + else return new Object(-1,sprintf('%s method is not exists', $method)); + + if((is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool()) return $output; + + $this->setError($oComponent->getError()); + $this->setMessage($oComponent->getMessage()); + + $vars = $oComponent->getVariables(); + if(count($vars)) { + foreach($vars as $key=>$val) $this->add($key, $val); + } + } + + /** + * @brief 에디터의 모듈별 추가 확장 폼을 저장 + **/ + function procEditorInsertModuleConfig() { + $module_srl = Context::get('target_module_srl'); + + // 여러개의 모듈 일괄 설정일 경우 + if(preg_match('/^([0-9,]+)$/',$module_srl)) $module_srl = explode(',',$module_srl); + else $module_srl = array($module_srl); + + $editor_config = null; + + $editor_config->editor_skin = Context::get('editor_skin'); + $editor_config->comment_editor_skin = Context::get('comment_editor_skin'); + $editor_config->content_style = Context::get('content_style'); + $editor_config->content_font = Context::get('content_font'); + if($editor_config->content_font) { + $font_list = array(); + $fonts = explode(',',$editor_config->content_font); + for($i=0,$c=count($fonts);$i<$c;$i++) { + $font = trim(str_replace(array('"','\''),'',$fonts[$i])); + if(!$font) continue; + $font_list[] = $font; + } + if(count($font_list)) $editor_config->content_font = '"'.implode('","',$font_list).'"'; + } + $editor_config->content_font_size = Context::get('content_font_size'); + $editor_config->sel_editor_colorset = Context::get('sel_editor_colorset'); + $editor_config->sel_comment_editor_colorset = Context::get('sel_comment_editor_colorset'); + + $enable_html_grant = trim(Context::get('enable_html_grant')); + if($enable_html_grant) $editor_config->enable_html_grant = explode('|@|', $enable_html_grant); + else $editor_config->enable_html_grant = array(); + + $enable_comment_html_grant = trim(Context::get('enable_comment_html_grant')); + if($enable_comment_html_grant) $editor_config->enable_comment_html_grant = explode('|@|', $enable_comment_html_grant); + else $editor_config->enable_comment_html_grant = array(); + + $upload_file_grant = trim(Context::get('upload_file_grant')); + if($upload_file_grant) $editor_config->upload_file_grant = explode('|@|', $upload_file_grant); + else $editor_config->upload_file_grant = array(); + + $comment_upload_file_grant = trim(Context::get('comment_upload_file_grant')); + if($comment_upload_file_grant) $editor_config->comment_upload_file_grant = explode('|@|', $comment_upload_file_grant); + else $editor_config->comment_upload_file_grant = array(); + + $enable_default_component_grant = trim(Context::get('enable_default_component_grant')); + if($enable_default_component_grant) $editor_config->enable_default_component_grant = explode('|@|', $enable_default_component_grant); + else $editor_config->enable_default_component_grant = array(); + + $enable_comment_default_component_grant = trim(Context::get('enable_comment_default_component_grant')); + if($enable_comment_default_component_grant) $editor_config->enable_comment_default_component_grant = explode('|@|', $enable_comment_default_component_grant); + else $editor_config->enable_comment_default_component_grant = array(); + + $enable_component_grant = trim(Context::get('enable_component_grant')); + if($enable_component_grant) $editor_config->enable_component_grant = explode('|@|', $enable_component_grant); + else $editor_config->enable_component_grant = array(); + + $enable_comment_component_grant = trim(Context::get('enable_comment_component_grant')); + if($enable_comment_component_grant) $editor_config->enable_comment_component_grant = explode('|@|', $enable_comment_component_grant); + else $editor_config->enable_comment_component_grant = array(); + + $editor_config->editor_height = (int)Context::get('editor_height'); + + $editor_config->comment_editor_height = (int)Context::get('comment_editor_height'); + + $editor_config->enable_autosave = Context::get('enable_autosave'); + + if($editor_config->enable_autosave != 'Y') $editor_config->enable_autosave = 'N'; + + $oModuleController = &getController('module'); + for($i=0;$iinsertModulePartConfig('editor',$srl,$editor_config); + } + + $this->setError(-1); + $this->setMessage('success_updated'); + } + + /** + * @brief 에디터컴포넌트의 코드를 결과물로 변환 + 문서서식 style 지정 + **/ + function triggerEditorComponentCompile(&$content) { + if(Context::getResponseMethod()!='HTML') return new Object(); + + $module_info = Context::get('module_info'); + $module_srl = $module_info->module_srl; + if($module_srl) { + $oEditorModel = &getModel('editor'); + $editor_config = $oEditorModel->getEditorConfig($module_srl); + $content_style = $editor_config->content_style; + if($content_style) { + $path = _XE_PATH_.'modules/editor/styles/'.$content_style.'/'; + if(is_dir($path) && file_exists($path.'style.ini')) { + $ini = file($path.'style.ini'); + for($i=0,$c=count($ini);$i<$c;$i++) { + $file = trim($ini[$i]); + if(!$file) continue; + if(preg_match('/\.css$/i',$file)) Context::addCSSFile('./modules/editor/styles/'.$content_style.'/'.$file, false); + elseif(preg_match('/\.js/i',$file)) Context::addJsFile('./modules/editor/styles/'.$content_style.'/'.$file, false); + } + } + } + $content_font = $editor_config->content_font; + $content_font_size = $editor_config->content_font_size; + if($content_font || $content_font_size) { + $buff = ''; + Context::addHtmlHeader($buff); + } + } + + $content = $this->transComponent($content); + } + + /** + * @brief 에디터 컴포넌트코드를 결과물로 변환 + **/ + function transComponent($content) { + $content = preg_replace_callback('!]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'transEditorComponent'), $content); + $content = preg_replace_callback('!]*)editor_component=([^\>]*?)\>!is', array($this,'transEditorComponent'), $content); + return $content; + } + + /** + * @brief 내용의 에디터 컴포넌트 코드를 변환 + **/ + function transEditorComponent($matches) { + $script = sprintf(' %s editor_component=%s', $matches[1], $matches[2]); + $script = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $script); + preg_match_all('/([a-z0-9\-\_]+)\=\"([^\"]+)\"/is', $script, $m); + for($i=0,$c=count($m[0]);$i<$c;$i++) { + $xml_obj->attrs->{$m[1][$i]} = $m[2][$i]; + } + $xml_obj->body = $matches[3]; + + if(!$xml_obj->attrs->editor_component) return $matches[0]; + + // component::transHTML() 을 이용하여 변환된 코드를 받음 + $oEditorModel = &getModel('editor'); + $oComponent = &$oEditorModel->getComponentObject($xml_obj->attrs->editor_component, 0); + if(!is_object($oComponent)||!method_exists($oComponent, 'transHTML')) return $matches[0]; + + return $oComponent->transHTML($xml_obj); + } + + + /** + * @brief 자동 저장 + **/ + function doSaveDoc($args) { + + if(!$args->document_srl) $args->document_srl = $_SESSION['upload_info'][$editor_sequence]->upload_target_srl; + if(Context::get('is_logged')) { + $logged_info = Context::get('logged_info'); + $args->member_srl = $logged_info->member_srl; + } else { + $args->ipaddress = $_SERVER['REMOTE_ADDR']; + } + + // 저장 + return executeQuery('editor.insertSavedDoc', $args); + } + + + /** + * @brief 자동 저장글 로드 + **/ + function loadSaveDoc() { + $editor_sequence = Context::get('editor_sequence'); + + $oEditorModel = &getModel('editor'); + $saved_doc = $oEditorModel->getSavedDoc(null); + $vars = $this->getVariables(); + $this->add("title", $saved_doc->title); + $this->add("content", $saved_doc->content); + $this->add("document_srl", $saved_doc->document_srl); + + } + + + /** + * @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger + **/ + function triggerDeleteSavedDoc(&$obj) { + $this->deleteSavedDoc(); + return new Object(); + } + + /** + * @brief 자동 저장된 글을 삭제 + * 현재 접속한 사용자를 기준 + **/ + function deleteSavedDoc() { + if(Context::get('is_logged')) { + $logged_info = Context::get('logged_info'); + $args->member_srl = $logged_info->member_srl; + } else { + $args->ipaddress = $_SERVER['REMOTE_ADDR']; + } + + // 일단 이전 저장본 삭제 + return executeQuery('editor.deleteSavedDoc', $args); + } + + /** + * @brief 가상 사이트에서 사용된 에디터 컴포넌트 정보를 제거 + **/ + function removeEditorConfig($site_srl) { + $args->site_srl = $site_srl; + executeQuery('editor.deleteSiteComponent', $args); + } + + /** + * @brief 에디터 컴포넌트 목록 캐싱 (editorModel::getComponentList) + * 에디터 컴포넌트 목록의 경우 DB query + Xml Parsing 때문에 캐싱 파일을 이용하도록 함 + **/ + function makeCache($filter_enabled = true, $site_srl) { + $oEditorModel = &getModel('editor'); + + if($filter_enabled) $args->enabled = "Y"; + + if($site_srl) { + $args->site_srl = $site_srl; + $output = executeQuery('editor.getSiteComponentList', $args); + } else $output = executeQuery('editor.getComponentList', $args); + $db_list = $output->data; + + // 파일목록을 구함 + $downloaded_list = FileHandler::readDir(_XE_PATH_.'modules/editor/components'); + + // 로그인 여부 및 소속 그룹 구함 + $is_logged = Context::get('is_logged'); + if($is_logged) { + $logged_info = Context::get('logged_info'); + if($logged_info->group_list && is_array($logged_info->group_list)) { + $group_list = array_keys($logged_info->group_list); + } else $group_list = array(); + } + + // DB 목록을 loop돌면서 xml정보까지 구함 + if(!is_array($db_list)) $db_list = array($db_list); + foreach($db_list as $component) { + if(in_array($component->component_name, array('colorpicker_text','colorpicker_bg'))) continue; + + $component_name = $component->component_name; + if(!$component_name) continue; + + if(!in_array($component_name, $downloaded_list)) continue; + + unset($xml_info); + $xml_info = $oEditorModel->getComponentXmlInfo($component_name); + $xml_info->enabled = $component->enabled; + + if($component->extra_vars) { + $extra_vars = unserialize($component->extra_vars); + + // 사용권한이 있으면 권한 체크 + if($extra_vars->target_group) { + // 사용권한이 체크되어 있는데 로그인이 되어 있지 않으면 무조건 사용 중지 + if(!$is_logged) continue; + + // 대상 그룹을 구해서 현재 로그인 사용자의 그룹과 비교 + $target_group = $extra_vars->target_group; + unset($extra_vars->target_group); + + $is_granted = false; + foreach($group_list as $group_srl) { + if(in_array($group_srl, $target_group)) { + $is_granted = true; + break; + } + } + if(!$is_granted) continue; + } + + // 대상 모듈이 있으면 체크 + if($extra_vars->mid_list && count($extra_vars->mid_list) && Context::get('mid')) { + if(!in_array(Context::get('mid'), $extra_vars->mid_list)) continue; + } + + // 에디터 컴포넌트의 설정 정보를 체크 + if($xml_info->extra_vars) { + foreach($xml_info->extra_vars as $key => $val) { + $xml_info->extra_vars->{$key}->value = $extra_vars->{$key}; + } + } + } + + $component_list->{$component_name} = $xml_info; + + // 버튼, 아이콘 이미지 구함 + $icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/icon.gif'; + $component_icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/component_icon.gif'; + if(file_exists($icon_file)) $component_list->{$component_name}->icon = true; + if(file_exists($component_icon_file)) $component_list->{$component_name}->component_icon = true; + } + + // enabled만 체크하도록 하였으면 그냥 return + if($filter_enabled) { + $cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl); + $buff = sprintf('', str_replace('"','\\"',serialize($component_list))); + FileHandler::writeFile($cache_file, $buff); + return $component_list; + } + + // 다운로드된 목록의 xml_info를 마저 구함 + foreach($downloaded_list as $component_name) { + if(in_array($component_name, array('colorpicker_text','colorpicker_bg'))) continue; + + // 설정된 것이라면 패스 + if($component_list->{$component_name}) continue; + + // DB에 입력 + $oEditorController = &getAdminController('editor'); + $oEditorController->insertComponent($component_name, false, $site_srl); + + // component_list에 추가 + unset($xml_info); + $xml_info = $oEditorModel->getComponentXmlInfo($component_name); + $xml_info->enabled = 'N'; + + $component_list->{$component_name} = $xml_info; + } + + $cache_file = $oEditorModel->getCacheFile($filter_enabled, $site_srl); + $buff = sprintf('', str_replace('"','\\"',serialize($component_list))); + FileHandler::writeFile($cache_file, $buff); + + return $component_list; + } + + /** + * @brief 캐시 파일 삭제 + **/ + function removeCache($site_srl = 0) { + $oEditorModel = &getModel('editor'); + FileHandler::removeFile($oEditorModel->getCacheFile(true, $site_srl)); + FileHandler::removeFile($oEditorModel->getCacheFile(false, $site_srl)); + } + } +?> diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index dfda27fad..abd68e9a0 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -1,623 +1,623 @@ -getModulePartConfig('editor', $module_srl); - } - - $editor_config = $GLOBALS['__editor_module_config__'][$module_srl]; - - if(!is_object($editor_config)) $editor_config = null; - - if(!is_array($editor_config->enable_html_grant)) $editor_config->enable_html_grant = array(); - if(!is_array($editor_config->enable_comment_html_grant)) $editor_config->enable_comment_html_grant = array(); - if(!is_array($editor_config->upload_file_grant)) $editor_config->upload_file_grant = array(); - if(!is_array($editor_config->comment_upload_file_grant)) $editor_config->comment_upload_file_grant = array(); - if(!is_array($editor_config->enable_default_component_grant)) $editor_config->enable_default_component_grant = array(); - if(!is_array($editor_config->enable_comment_default_component_grant)) $editor_config->enable_comment_default_component_grant = array(); - if(!is_array($editor_config->enable_component_grant)) $editor_config->enable_component_grant = array(); - if(!is_array($editor_config->enable_comment_component_grant)) $editor_config->enable_comment_component_grant= array(); - - 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_autosave!='N') $editor_config->enable_autosave = "Y"; - - if(!$editor_config->editor_skin) $editor_config->editor_skin = 'xpresseditor'; - if(!$editor_config->comment_editor_skin) $editor_config->comment_editor_skin = 'xpresseditor'; - //if(!$editor_config->content_style) $editor_config->content_style = 'xeStyle'; - - return $editor_config; - } - - /** - * @brief 에디터 template을 return - * upload_target_srl은 글의 수정시 호출하면 됨. - * 이 upload_target_srl은 첨부파일의 유무를 체크하기 위한 루틴을 구현하는데 사용됨. - **/ - function getEditor($upload_target_srl = 0, $option = null) { - /** - * 기본적인 에디터의 옵션을 정리 - **/ - // 파일 업로드 유무 옵션 설정 - if(!$option->allow_fileupload) $allow_fileupload = false; - else $allow_fileupload = true; - - // content_style 세팅 - if(!$option->content_style) $option->content_style = 'xeStyle'; - Context::set('content_style', $option->content_style); - - // 기본 글꼴 지정 - Context::set('content_font', $option->content_font); - Context::set('content_font_size', $option->content_font_size); - - // 자동 저장 유무 옵션 설정 - if(!$option->enable_autosave) $enable_autosave = false; - else $enable_autosave = true; - - // 기본 에디터 컴포넌트 사용 설정 - if(!$option->enable_default_component) $enable_default_component = false; - else $enable_default_component = true; - - // 확장 컴포넌트 사용 설정 - if(!$option->enable_component) $enable_component = false; - else $enable_component = true; - - // html 모드 조절 - if($option->disable_html) $html_mode = false; - else $html_mode = true; - - // 높이 설정 - if(!$option->height) $editor_height = 400; - else $editor_height = $option->height; - - // 스킨 설정 - $skin = $option->skin; - if(!$skin) $skin = 'xpresseditor'; - - $colorset = $option->colorset; - Context::set('colorset', $colorset); - Context::set('skin', $skin); - /** - * 자동백업 기능 체크 (글 수정일 경우는 사용하지 않음) - **/ - if($enable_autosave) { - // 자동 저장된 데이터를 추출 - $saved_doc = $this->getSavedDoc($upload_target_srl); - - // 자동 저장 데이터를 context setting - Context::set('saved_doc', $saved_doc); - } - Context::set('enable_autosave', $enable_autosave); - - /** - * 에디터의 고유 번호 추출 (한 페이지에 여러개의 에디터를 출력하는 경우를 대비) - **/ - if($option->editor_sequence) $editor_sequence = $option->editor_sequence; - else { - if(!$GLOBALS['_editor_sequence_']) $GLOBALS['_editor_sequence_'] = 1; - $editor_sequence = $GLOBALS['_editor_sequence_'] ++; - } - - /** - * 업로드 활성화시 내부적으로 file 모듈의 환경설정을 이용하여 설정 - **/ - $files_count = 0; - if($allow_fileupload) { - $oFileModel = &getModel('file'); - - // SWFUploader에 세팅할 업로드 설정 구함 - $file_config = $oFileModel->getUploadConfig(); - $file_config->allowed_attach_size = $file_config->allowed_attach_size*1024*1024; - $file_config->allowed_filesize = $file_config->allowed_filesize*1024*1024; - - Context::set('file_config',$file_config); - - // 업로드 가능 용량등에 대한 정보를 세팅 - $upload_status = $oFileModel->getUploadStatus(); - Context::set('upload_status', $upload_status); - - // upload가능하다고 설정 (내부적으로 캐싱하여 처리) - $oFileController = &getController('file'); - $oFileController->setUploadInfo($editor_sequence, $upload_target_srl); - - // 이미 등록된 파일이 있는지 검사 - if($upload_target_srl) $files_count = $oFileModel->getFilesCount($upload_target_srl); - } - Context::set('files_count', (int)$files_count); - - Context::set('allow_fileupload', $allow_fileupload); - - // 에디터 동작을 위한 editor_sequence값 설정 - Context::set('editor_sequence', $editor_sequence); - - // 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정 - // 신규문서일 경우 upload_target_srl=0 이고 첨부파일 관련 동작이 요청될때 이 값이 변경됨 - Context::set('upload_target_srl', $upload_target_srl); - - // 문서 혹은 댓글의 primary key값을 세팅한다. - Context::set('editor_primary_key_name', $option->primary_key_name); - - // 내용을 sync 맞추기 위한 content column name을 세팅한다 - Context::set('editor_content_key_name', $option->content_key_name); - - - /** - * 에디터 컴포넌트 체크 - **/ - $site_module_info = Context::get('site_module_info'); - $site_srl = (int)$site_module_info->site_srl; - if($enable_component) { - if(!Context::get('component_list')) { - $component_list = $this->getComponentList(true, $site_srl); - Context::set('component_list', $component_list); - } - } - Context::set('enable_component', $enable_component); - Context::set('enable_default_component', $enable_default_component); - - /** - * html_mode 가능한지 변수 설정 - **/ - Context::set('html_mode', $html_mode); - - /** - * 에디터 세로 크기 설정 - **/ - Context::set('editor_height', $editor_height); - - // 에디터의 초기화를 수동으로하는 것에 대한 값 체크 - Context::set('editor_manual_start', $option->manual_start); - - /** - * 템플릿을 미리 컴파일해서 컴파일된 소스를 하기 위해 스킨의 경로를 설정 - **/ - $tpl_path = sprintf('%sskins/%s/', $this->module_path, $skin); - $tpl_file = 'editor.html'; - - if(!file_exists($tpl_path.$tpl_file)) { - $skin = 'xpresseditor'; - $tpl_path = sprintf('%sskins/%s/', $this->module_path, $skin); - } - Context::set('editor_path', $tpl_path); - - // tpl 파일을 compile한 결과를 return - $oTemplate = new TemplateHandler(); - return $oTemplate->compile($tpl_path, $tpl_file); - } - - /** - * @brief 모듈별 설정이 반영된 에디터 template을 return - * getEditor() 와 동일한 결과물을 return하지만 getModuleEditor()는 각 모듈별 추가 설정을 통해 직접 제어되는 설정을 이용하여 에디터를 생성함 - * - * document/ comment 2가지 종류를 이용함. - * 굳이 나눈 이유는 하나의 모듈에서 2개 종류의 에디터 사용을 위해서인데 게시판이나 블로그등 원글과 그에 연관된 글(댓글)을 위한 용도임. - **/ - function getModuleEditor($type = 'document', $module_srl, $upload_target_srl, $primary_key_name, $content_key_name) { - // 지정된 모듈의 에디터 설정을 구해옴 - $editor_config = $this->getEditorConfig($module_srl); - - // type에 따른 설정 정리 - if($type == 'document') { - $config->editor_skin = $editor_config->editor_skin; - $config->content_style = $editor_config->content_style; - $config->content_font = $editor_config->content_font; - $config->content_font_size = $editor_config->content_font_size; - $config->sel_editor_colorset = $editor_config->sel_editor_colorset; - $config->upload_file_grant = $editor_config->upload_file_grant; - $config->enable_default_component_grant = $editor_config->enable_default_component_grant; - $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_autosave = $editor_config->enable_autosave; - } else { - $config->editor_skin = $editor_config->comment_editor_skin; - $config->content_style = $editor_config->content_style; - $config->content_font = $editor_config->content_font; - $config->content_font_size = $editor_config->content_font_size; - $config->sel_editor_colorset = $editor_config->sel_comment_editor_colorset; - $config->upload_file_grant = $editor_config->comment_upload_file_grant; - $config->enable_default_component_grant = $editor_config->enable_comment_default_component_grant; - $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_autosave = 'N'; - } - - // 권한 체크를 위한 현재 로그인 사용자의 그룹 설정 체크 - if(Context::get('is_logged')) { - $logged_info = Context::get('logged_info'); - $group_list = $logged_info->group_list; - } else { - $group_list = array(); - } - - // 에디터 옵션 변수를 미리 설정 - $option->skin = $config->editor_skin; - $option->content_style = $config->content_style; - $option->content_font = $config->content_font; - $option->content_font_size = $config->content_font_size; - $option->colorset = $config->sel_editor_colorset; - - // 파일 업로드 권한 체크 - $option->allow_fileupload = false; - if(count($config->upload_file_grant)) { - foreach($group_list as $group_srl => $group_info) { - if(in_array($group_srl, $config->upload_file_grant)) { - $option->allow_fileupload = true; - break; - } - } - } else $option->allow_fileupload = true; - - // 기본 컴포넌트 사용 권한 - $option->enable_default_component = false; - if(count($config->enable_default_component_grant)) { - foreach($group_list as $group_srl => $group_info) { - if(in_array($group_srl, $config->enable_default_component_grant)) { - $option->enable_default_component = true; - break; - } - } - } else $option->enable_default_component = true; - - // 확장 컴포넌트 사용 권한 - $option->enable_component = false; - if(count($config->enable_component_grant)) { - foreach($group_list as $group_srl => $group_info) { - if(in_array($group_srl, $config->enable_component_grant)) { - $option->enable_component = true; - break; - } - } - } else $option->enable_component = true; - - // HTML 편집 권한 - $enable_html = false; - if(count($config->enable_html_grant)) { - foreach($group_list as $group_srl => $group_info) { - if(in_array($group_srl, $config->enable_html_grant)) { - $enable_html = true; - break; - } - } - } else $enable_html = true; - - if($enable_html) $option->disable_html = false; - else $option->disable_html = true; - - // 높이 설정 - $option->height = $config->editor_height; - - // 자동 저장 유무 옵션 설정 - $option->enable_autosave = $config->enable_autosave=='Y'?true:false; - - // 기타 설정 - $option->primary_key_name = $primary_key_name; - $option->content_key_name = $content_key_name; - - return $this->getEditor($upload_target_srl, $option); - } - - /** - * @brief 자동저장되어 있는 정보를 가져옴 - **/ - function getSavedDoc($upload_target_srl) { - // 로그인 회원이면 member_srl, 아니면 ipaddress로 저장되어 있는 문서를 찾음 - if(Context::get('is_logged')) { - $logged_info = Context::get('logged_info'); - $auto_save_args->member_srl = $logged_info->member_srl; - } else { - $auto_save_args->ipaddress = $_SERVER['REMOTE_ADDR']; - } - - // DB에서 자동저장 데이터 추출 - $output = executeQuery('editor.getSavedDocument', $auto_save_args); - $saved_doc = $output->data; - - // 자동저장한 결과가 없으면 null값 return - if(!$saved_doc) return; - - // 자동저장된 값이 혹시 이미 등록된 글인지 확인 - $oDocumentModel = &getModel('document'); - $oSaved = $oDocumentModel->getDocument($saved_doc->document_srl); - if($oSaved->isExists()) return; - - // 자동저장 데이터에 문서번호가 있고 이 번호에 파일이 있다면 파일을 모두 이동하고 - // 해당 문서 번호를 editor_sequence로 세팅함 - if($saved_doc->document_srl) { - $module_srl = Context::get('module_srl'); - $oFileController = &getController('file'); - $oFileController->moveFile($saved_doc->document_srl, $module_srl, $upload_target_srl); - } - $saved_doc->document_srl = $upload_target_srl; - - // 자동 저장 데이터 변경 - $oEditorController = &getController('editor'); - $oEditorController->deleteSavedDoc(); - $oEditorController->doSaveDoc($saved_doc); - - return $saved_doc; - } - - /** - * @brief component의 객체 생성 - **/ - function getComponentObject($component, $editor_sequence = 0, $site_srl = 0) { - if(!$this->loaded_component_list[$component][$editor_sequence]) { - // 해당 컴포넌트의 객체를 생성해서 실행 - $class_path = sprintf('%scomponents/%s/', $this->module_path, $component); - $class_file = sprintf('%s%s.class.php', $class_path, $component); - if(!file_exists($class_file)) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); - - // 클래스 파일을 읽은 후 객체 생성 - require_once($class_file); - $eval_str = sprintf('$oComponent = new %s("%s","%s");', $component, $editor_sequence, $class_path); - @eval($eval_str); - if(!$oComponent) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); - - // 설정 정보를 추가 - $component_info = $this->getComponent($component, $site_srl); - $oComponent->setInfo($component_info); - $this->loaded_component_list[$component][$editor_sequence] = $oComponent; - } - - return $this->loaded_component_list[$component][$editor_sequence]; - } - - /** - * @brief editor skin 목록을 return - **/ - function getEditorSkinList() { - return FileHandler::readDir('./modules/editor/skins'); - } - - /** - * @brief 에디터 컴포넌트 목록 캐시 파일 이름 return - **/ - function getCacheFile($filter_enabled= true, $site_srl = 0) { - $lang = Context::getLangType(); - $cache_path = _XE_PATH_.'files/cache/editor/cache/'; - if(!is_dir($cache_path)) FileHandler::makeDir($cache_path); - $cache_file = $cache_path.'component_list.' . $lang .'.'; - if($filter_enabled) $cache_file .= 'filter.'; - if($site_srl) $cache_file .= $site_srl.'.'; - $cache_file .= 'php'; - return $cache_file; - } - - /** - * @brief component 목록을 return (DB정보 보함) - **/ - function getComponentList($filter_enabled = true, $site_srl=0) { - $cache_file = $this->getCacheFile($filter_enabled, $site_srl); - if(!file_exists($cache_file)) { - $oEditorController = &getController('editor'); - $oEditorController->makeCache($filter_enabled, $site_srl); - } - - if(!file_exists($cache_file)) return; - @include($cache_file); - - if(count($component_list)) { - foreach($component_list as $key => $val) { - if(!trim($key)) continue; - if(!is_dir(_XE_PATH_.'modules/editor/components/'.$key)) { - FileHandler::removeFile($cache_file); - return $this->getComponentList($filter_enabled, $site_srl); - } - } - - } - return $component_list; - } - - /** - * @brief compnent의 xml+db정보를 구함 - **/ - function getComponent($component_name, $site_srl = 0) { - $args->component_name = $component_name; - - if($site_srl) { - $args->site_srl = $site_srl; - $output = executeQuery('editor.getSiteComponent', $args); - } else { - $output = executeQuery('editor.getComponent', $args); - } - $component = $output->data; - - $component_name = $component->component_name; - - unset($xml_info); - $xml_info = $this->getComponentXmlInfo($component_name); - $xml_info->enabled = $component->enabled; - - $xml_info->target_group = array(); - - $xml_info->mid_list = array(); - - if($component->extra_vars) { - $extra_vars = unserialize($component->extra_vars); - - if($extra_vars->target_group) { - $xml_info->target_group = $extra_vars->target_group; - unset($extra_vars->target_group); - } - - if($extra_vars->mid_list) { - $xml_info->mid_list = $extra_vars->mid_list; - unset($extra_vars->mid_list); - } - - - if($xml_info->extra_vars) { - foreach($xml_info->extra_vars as $key => $val) { - $xml_info->extra_vars->{$key}->value = $extra_vars->{$key}; - } - } - } - - return $xml_info; - } - - /** - * @brief component의 xml정보를 읽음 - **/ - function getComponentXmlInfo($component) { - $lang_type = Context::getLangType(); - - // 요청된 컴포넌트의 xml파일 위치를 구함 - $component_path = sprintf('%s/components/%s/', $this->module_path, $component); - - $xml_file = sprintf('%sinfo.xml', $component_path); - $cache_file = sprintf('./files/cache/editor/%s.%s.php', $component, $lang_type); - - // 캐시된 xml파일이 있으면 include 후 정보 return - if(file_exists($cache_file) && file_exists($xml_file) && filemtime($cache_file) > filemtime($xml_file)) { - include($cache_file); - return $xml_info; - } - - // 캐시된 파일이 없으면 파싱후 캐싱 후 return - $oParser = new XmlParser(); - $xml_doc = $oParser->loadXmlFile($xml_file); - - // 정보 정리 - if($xml_doc->component->version && $xml_doc->component->attrs->version == '0.2') { - $component_info->component_name = $component; - $component_info->title = $xml_doc->component->title->body; - $component_info->description = str_replace('\n', "\n", $xml_doc->component->description->body); - $component_info->version = $xml_doc->component->version->body; - $component_info->date = $xml_doc->component->date->body; - $component_info->homepage = $xml_doc->component->link->body; - $component_info->license = $xml_doc->component->license->body; - $component_info->license_link = $xml_doc->component->license->attrs->link; - - $buff = 'component_name = "%s";', $component_info->component_name); - $buff .= sprintf('$xml_info->title = "%s";', $component_info->title); - $buff .= sprintf('$xml_info->description = "%s";', $component_info->description); - $buff .= sprintf('$xml_info->version = "%s";', $component_info->version); - $buff .= sprintf('$xml_info->date = "%s";', $component_info->date); - $buff .= sprintf('$xml_info->homepage = "%s";', $component_info->homepage); - $buff .= sprintf('$xml_info->license = "%s";', $component_info->license); - $buff .= sprintf('$xml_info->license_link = "%s";', $component_info->license_link); - - // 작성자 정보 - if(!is_array($xml_doc->component->author)) $author_list[] = $xml_doc->component->author; - else $author_list = $xml_doc->component->author; - - for($i=0; $i < count($author_list); $i++) { - $buff .= sprintf('$xml_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body); - $buff .= sprintf('$xml_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address); - $buff .= sprintf('$xml_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link); - } - - // history - if($xml_doc->component->history) { - if(!is_array($xml_doc->component->history)) $history_list[] = $xml_doc->component->history; - else $history_list = $xml_doc->component->history; - - for($i=0; $i < count($history_list); $i++) { - unset($obj); - sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); - $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); - $buff .= sprintf('$xml_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body); - $buff .= sprintf('$xml_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version); - $buff .= sprintf('$xml_info->history['.$i.']->date = "%s";', $date); - - if($history_list[$i]->author) { - (!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author; - - for($j=0; $j < count($obj->author_list); $j++) { - $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body); - $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address); - $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link); - } - } - - if($history_list[$i]->log) { - (!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log; - - for($j=0; $j < count($obj->log_list); $j++) { - $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body); - $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link); - } - } - } - } - - - } else { - sscanf($xml_doc->component->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); - $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); - $xml_info->component_name = $component; - $xml_info->title = $xml_doc->component->title->body; - $xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body); - $xml_info->version = $xml_doc->component->attrs->version; - $xml_info->date = $date; - $xml_info->author->name = $xml_doc->component->author->name->body; - $xml_info->author->email_address = $xml_doc->component->author->attrs->email_address; - $xml_info->author->homepage = $xml_doc->component->author->attrs->link; - - $buff = 'component_name = "%s";', $xml_info->component_name); - $buff .= sprintf('$xml_info->title = "%s";', $xml_info->title); - $buff .= sprintf('$xml_info->description = "%s";', $xml_info->description); - $buff .= sprintf('$xml_info->version = "%s";', $xml_info->version); - $buff .= sprintf('$xml_info->date = "%s";', $xml_info->date); - $buff .= sprintf('$xml_info->author[0]->name = "%s";', $xml_info->author->name); - $buff .= sprintf('$xml_info->author[0]->email_address = "%s";', $xml_info->author->email_address); - $buff .= sprintf('$xml_info->author[0]->homepage = "%s";', $xml_info->author->homepage); - } - - // 추가 변수 정리 (에디터 컴포넌트에서는 text형만 가능) - $extra_vars = $xml_doc->component->extra_vars->var; - if($extra_vars) { - if(!is_array($extra_vars)) $extra_vars = array($extra_vars); - foreach($extra_vars as $key => $val) { - unset($obj); - $key = $val->attrs->name; - $title = $val->title->body; - $description = $val->description->body; - $xml_info->extra_vars->{$key}->title = $title; - $xml_info->extra_vars->{$key}->description = $description; - - $buff .= sprintf('$xml_info->extra_vars->%s->%s = "%s";', $key, 'title', $title); - $buff .= sprintf('$xml_info->extra_vars->%s->%s = "%s";', $key, 'description', $description); - } - } - - $buff .= ' ?>'; - - FileHandler::writeFile($cache_file, $buff, "w"); - - unset($xml_info); - include($cache_file); - return $xml_info; - } - } -?> +getModulePartConfig('editor', $module_srl); + } + + $editor_config = $GLOBALS['__editor_module_config__'][$module_srl]; + + if(!is_object($editor_config)) $editor_config = null; + + if(!is_array($editor_config->enable_html_grant)) $editor_config->enable_html_grant = array(); + if(!is_array($editor_config->enable_comment_html_grant)) $editor_config->enable_comment_html_grant = array(); + if(!is_array($editor_config->upload_file_grant)) $editor_config->upload_file_grant = array(); + if(!is_array($editor_config->comment_upload_file_grant)) $editor_config->comment_upload_file_grant = array(); + if(!is_array($editor_config->enable_default_component_grant)) $editor_config->enable_default_component_grant = array(); + if(!is_array($editor_config->enable_comment_default_component_grant)) $editor_config->enable_comment_default_component_grant = array(); + if(!is_array($editor_config->enable_component_grant)) $editor_config->enable_component_grant = array(); + if(!is_array($editor_config->enable_comment_component_grant)) $editor_config->enable_comment_component_grant= array(); + + 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_autosave!='N') $editor_config->enable_autosave = "Y"; + + if(!$editor_config->editor_skin) $editor_config->editor_skin = 'xpresseditor'; + if(!$editor_config->comment_editor_skin) $editor_config->comment_editor_skin = 'xpresseditor'; + //if(!$editor_config->content_style) $editor_config->content_style = 'xeStyle'; + + return $editor_config; + } + + /** + * @brief 에디터 template을 return + * upload_target_srl은 글의 수정시 호출하면 됨. + * 이 upload_target_srl은 첨부파일의 유무를 체크하기 위한 루틴을 구현하는데 사용됨. + **/ + function getEditor($upload_target_srl = 0, $option = null) { + /** + * 기본적인 에디터의 옵션을 정리 + **/ + // 파일 업로드 유무 옵션 설정 + if(!$option->allow_fileupload) $allow_fileupload = false; + else $allow_fileupload = true; + + // content_style 세팅 + if(!$option->content_style) $option->content_style = 'xeStyle'; + Context::set('content_style', $option->content_style); + + // 기본 글꼴 지정 + Context::set('content_font', $option->content_font); + Context::set('content_font_size', $option->content_font_size); + + // 자동 저장 유무 옵션 설정 + if(!$option->enable_autosave) $enable_autosave = false; + else $enable_autosave = true; + + // 기본 에디터 컴포넌트 사용 설정 + if(!$option->enable_default_component) $enable_default_component = false; + else $enable_default_component = true; + + // 확장 컴포넌트 사용 설정 + if(!$option->enable_component) $enable_component = false; + else $enable_component = true; + + // html 모드 조절 + if($option->disable_html) $html_mode = false; + else $html_mode = true; + + // 높이 설정 + if(!$option->height) $editor_height = 400; + else $editor_height = $option->height; + + // 스킨 설정 + $skin = $option->skin; + if(!$skin) $skin = 'xpresseditor'; + + $colorset = $option->colorset; + Context::set('colorset', $colorset); + Context::set('skin', $skin); + /** + * 자동백업 기능 체크 (글 수정일 경우는 사용하지 않음) + **/ + if($enable_autosave) { + // 자동 저장된 데이터를 추출 + $saved_doc = $this->getSavedDoc($upload_target_srl); + + // 자동 저장 데이터를 context setting + Context::set('saved_doc', $saved_doc); + } + Context::set('enable_autosave', $enable_autosave); + + /** + * 에디터의 고유 번호 추출 (한 페이지에 여러개의 에디터를 출력하는 경우를 대비) + **/ + if($option->editor_sequence) $editor_sequence = $option->editor_sequence; + else { + if(!$GLOBALS['_editor_sequence_']) $GLOBALS['_editor_sequence_'] = 1; + $editor_sequence = $GLOBALS['_editor_sequence_'] ++; + } + + /** + * 업로드 활성화시 내부적으로 file 모듈의 환경설정을 이용하여 설정 + **/ + $files_count = 0; + if($allow_fileupload) { + $oFileModel = &getModel('file'); + + // SWFUploader에 세팅할 업로드 설정 구함 + $file_config = $oFileModel->getUploadConfig(); + $file_config->allowed_attach_size = $file_config->allowed_attach_size*1024*1024; + $file_config->allowed_filesize = $file_config->allowed_filesize*1024*1024; + + Context::set('file_config',$file_config); + + // 업로드 가능 용량등에 대한 정보를 세팅 + $upload_status = $oFileModel->getUploadStatus(); + Context::set('upload_status', $upload_status); + + // upload가능하다고 설정 (내부적으로 캐싱하여 처리) + $oFileController = &getController('file'); + $oFileController->setUploadInfo($editor_sequence, $upload_target_srl); + + // 이미 등록된 파일이 있는지 검사 + if($upload_target_srl) $files_count = $oFileModel->getFilesCount($upload_target_srl); + } + Context::set('files_count', (int)$files_count); + + Context::set('allow_fileupload', $allow_fileupload); + + // 에디터 동작을 위한 editor_sequence값 설정 + Context::set('editor_sequence', $editor_sequence); + + // 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정 + // 신규문서일 경우 upload_target_srl=0 이고 첨부파일 관련 동작이 요청될때 이 값이 변경됨 + Context::set('upload_target_srl', $upload_target_srl); + + // 문서 혹은 댓글의 primary key값을 세팅한다. + Context::set('editor_primary_key_name', $option->primary_key_name); + + // 내용을 sync 맞추기 위한 content column name을 세팅한다 + Context::set('editor_content_key_name', $option->content_key_name); + + + /** + * 에디터 컴포넌트 체크 + **/ + $site_module_info = Context::get('site_module_info'); + $site_srl = (int)$site_module_info->site_srl; + if($enable_component) { + if(!Context::get('component_list')) { + $component_list = $this->getComponentList(true, $site_srl); + Context::set('component_list', $component_list); + } + } + Context::set('enable_component', $enable_component); + Context::set('enable_default_component', $enable_default_component); + + /** + * html_mode 가능한지 변수 설정 + **/ + Context::set('html_mode', $html_mode); + + /** + * 에디터 세로 크기 설정 + **/ + Context::set('editor_height', $editor_height); + + // 에디터의 초기화를 수동으로하는 것에 대한 값 체크 + Context::set('editor_manual_start', $option->manual_start); + + /** + * 템플릿을 미리 컴파일해서 컴파일된 소스를 하기 위해 스킨의 경로를 설정 + **/ + $tpl_path = sprintf('%sskins/%s/', $this->module_path, $skin); + $tpl_file = 'editor.html'; + + if(!file_exists($tpl_path.$tpl_file)) { + $skin = 'xpresseditor'; + $tpl_path = sprintf('%sskins/%s/', $this->module_path, $skin); + } + Context::set('editor_path', $tpl_path); + + // tpl 파일을 compile한 결과를 return + $oTemplate = new TemplateHandler(); + return $oTemplate->compile($tpl_path, $tpl_file); + } + + /** + * @brief 모듈별 설정이 반영된 에디터 template을 return + * getEditor() 와 동일한 결과물을 return하지만 getModuleEditor()는 각 모듈별 추가 설정을 통해 직접 제어되는 설정을 이용하여 에디터를 생성함 + * + * document/ comment 2가지 종류를 이용함. + * 굳이 나눈 이유는 하나의 모듈에서 2개 종류의 에디터 사용을 위해서인데 게시판이나 블로그등 원글과 그에 연관된 글(댓글)을 위한 용도임. + **/ + function getModuleEditor($type = 'document', $module_srl, $upload_target_srl, $primary_key_name, $content_key_name) { + // 지정된 모듈의 에디터 설정을 구해옴 + $editor_config = $this->getEditorConfig($module_srl); + + // type에 따른 설정 정리 + if($type == 'document') { + $config->editor_skin = $editor_config->editor_skin; + $config->content_style = $editor_config->content_style; + $config->content_font = $editor_config->content_font; + $config->content_font_size = $editor_config->content_font_size; + $config->sel_editor_colorset = $editor_config->sel_editor_colorset; + $config->upload_file_grant = $editor_config->upload_file_grant; + $config->enable_default_component_grant = $editor_config->enable_default_component_grant; + $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_autosave = $editor_config->enable_autosave; + } else { + $config->editor_skin = $editor_config->comment_editor_skin; + $config->content_style = $editor_config->content_style; + $config->content_font = $editor_config->content_font; + $config->content_font_size = $editor_config->content_font_size; + $config->sel_editor_colorset = $editor_config->sel_comment_editor_colorset; + $config->upload_file_grant = $editor_config->comment_upload_file_grant; + $config->enable_default_component_grant = $editor_config->enable_comment_default_component_grant; + $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_autosave = 'N'; + } + + // 권한 체크를 위한 현재 로그인 사용자의 그룹 설정 체크 + if(Context::get('is_logged')) { + $logged_info = Context::get('logged_info'); + $group_list = $logged_info->group_list; + } else { + $group_list = array(); + } + + // 에디터 옵션 변수를 미리 설정 + $option->skin = $config->editor_skin; + $option->content_style = $config->content_style; + $option->content_font = $config->content_font; + $option->content_font_size = $config->content_font_size; + $option->colorset = $config->sel_editor_colorset; + + // 파일 업로드 권한 체크 + $option->allow_fileupload = false; + if(count($config->upload_file_grant)) { + foreach($group_list as $group_srl => $group_info) { + if(in_array($group_srl, $config->upload_file_grant)) { + $option->allow_fileupload = true; + break; + } + } + } else $option->allow_fileupload = true; + + // 기본 컴포넌트 사용 권한 + $option->enable_default_component = false; + if(count($config->enable_default_component_grant)) { + foreach($group_list as $group_srl => $group_info) { + if(in_array($group_srl, $config->enable_default_component_grant)) { + $option->enable_default_component = true; + break; + } + } + } else $option->enable_default_component = true; + + // 확장 컴포넌트 사용 권한 + $option->enable_component = false; + if(count($config->enable_component_grant)) { + foreach($group_list as $group_srl => $group_info) { + if(in_array($group_srl, $config->enable_component_grant)) { + $option->enable_component = true; + break; + } + } + } else $option->enable_component = true; + + // HTML 편집 권한 + $enable_html = false; + if(count($config->enable_html_grant)) { + foreach($group_list as $group_srl => $group_info) { + if(in_array($group_srl, $config->enable_html_grant)) { + $enable_html = true; + break; + } + } + } else $enable_html = true; + + if($enable_html) $option->disable_html = false; + else $option->disable_html = true; + + // 높이 설정 + $option->height = $config->editor_height; + + // 자동 저장 유무 옵션 설정 + $option->enable_autosave = $config->enable_autosave=='Y'?true:false; + + // 기타 설정 + $option->primary_key_name = $primary_key_name; + $option->content_key_name = $content_key_name; + + return $this->getEditor($upload_target_srl, $option); + } + + /** + * @brief 자동저장되어 있는 정보를 가져옴 + **/ + function getSavedDoc($upload_target_srl) { + // 로그인 회원이면 member_srl, 아니면 ipaddress로 저장되어 있는 문서를 찾음 + if(Context::get('is_logged')) { + $logged_info = Context::get('logged_info'); + $auto_save_args->member_srl = $logged_info->member_srl; + } else { + $auto_save_args->ipaddress = $_SERVER['REMOTE_ADDR']; + } + + // DB에서 자동저장 데이터 추출 + $output = executeQuery('editor.getSavedDocument', $auto_save_args); + $saved_doc = $output->data; + + // 자동저장한 결과가 없으면 null값 return + if(!$saved_doc) return; + + // 자동저장된 값이 혹시 이미 등록된 글인지 확인 + $oDocumentModel = &getModel('document'); + $oSaved = $oDocumentModel->getDocument($saved_doc->document_srl); + if($oSaved->isExists()) return; + + // 자동저장 데이터에 문서번호가 있고 이 번호에 파일이 있다면 파일을 모두 이동하고 + // 해당 문서 번호를 editor_sequence로 세팅함 + if($saved_doc->document_srl && $upload_target_srl) { + $module_srl = Context::get('module_srl'); + $oFileController = &getController('file'); + $oFileController->moveFile($saved_doc->document_srl, $module_srl, $upload_target_srl); + } + else if($upload_target_srl) $saved_doc->document_srl = $upload_target_srl; + + // 자동 저장 데이터 변경 + $oEditorController = &getController('editor'); + $oEditorController->deleteSavedDoc(); + $oEditorController->doSaveDoc($saved_doc); + + return $saved_doc; + } + + /** + * @brief component의 객체 생성 + **/ + function getComponentObject($component, $editor_sequence = 0, $site_srl = 0) { + if(!$this->loaded_component_list[$component][$editor_sequence]) { + // 해당 컴포넌트의 객체를 생성해서 실행 + $class_path = sprintf('%scomponents/%s/', $this->module_path, $component); + $class_file = sprintf('%s%s.class.php', $class_path, $component); + if(!file_exists($class_file)) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); + + // 클래스 파일을 읽은 후 객체 생성 + require_once($class_file); + $eval_str = sprintf('$oComponent = new %s("%s","%s");', $component, $editor_sequence, $class_path); + @eval($eval_str); + if(!$oComponent) return new Object(-1, sprintf(Context::getLang('msg_component_is_not_founded'), $component)); + + // 설정 정보를 추가 + $component_info = $this->getComponent($component, $site_srl); + $oComponent->setInfo($component_info); + $this->loaded_component_list[$component][$editor_sequence] = $oComponent; + } + + return $this->loaded_component_list[$component][$editor_sequence]; + } + + /** + * @brief editor skin 목록을 return + **/ + function getEditorSkinList() { + return FileHandler::readDir('./modules/editor/skins'); + } + + /** + * @brief 에디터 컴포넌트 목록 캐시 파일 이름 return + **/ + function getCacheFile($filter_enabled= true, $site_srl = 0) { + $lang = Context::getLangType(); + $cache_path = _XE_PATH_.'files/cache/editor/cache/'; + if(!is_dir($cache_path)) FileHandler::makeDir($cache_path); + $cache_file = $cache_path.'component_list.' . $lang .'.'; + if($filter_enabled) $cache_file .= 'filter.'; + if($site_srl) $cache_file .= $site_srl.'.'; + $cache_file .= 'php'; + return $cache_file; + } + + /** + * @brief component 목록을 return (DB정보 보함) + **/ + function getComponentList($filter_enabled = true, $site_srl=0) { + $cache_file = $this->getCacheFile($filter_enabled, $site_srl); + if(!file_exists($cache_file)) { + $oEditorController = &getController('editor'); + $oEditorController->makeCache($filter_enabled, $site_srl); + } + + if(!file_exists($cache_file)) return; + @include($cache_file); + + if(count($component_list)) { + foreach($component_list as $key => $val) { + if(!trim($key)) continue; + if(!is_dir(_XE_PATH_.'modules/editor/components/'.$key)) { + FileHandler::removeFile($cache_file); + return $this->getComponentList($filter_enabled, $site_srl); + } + } + + } + return $component_list; + } + + /** + * @brief compnent의 xml+db정보를 구함 + **/ + function getComponent($component_name, $site_srl = 0) { + $args->component_name = $component_name; + + if($site_srl) { + $args->site_srl = $site_srl; + $output = executeQuery('editor.getSiteComponent', $args); + } else { + $output = executeQuery('editor.getComponent', $args); + } + $component = $output->data; + + $component_name = $component->component_name; + + unset($xml_info); + $xml_info = $this->getComponentXmlInfo($component_name); + $xml_info->enabled = $component->enabled; + + $xml_info->target_group = array(); + + $xml_info->mid_list = array(); + + if($component->extra_vars) { + $extra_vars = unserialize($component->extra_vars); + + if($extra_vars->target_group) { + $xml_info->target_group = $extra_vars->target_group; + unset($extra_vars->target_group); + } + + if($extra_vars->mid_list) { + $xml_info->mid_list = $extra_vars->mid_list; + unset($extra_vars->mid_list); + } + + + if($xml_info->extra_vars) { + foreach($xml_info->extra_vars as $key => $val) { + $xml_info->extra_vars->{$key}->value = $extra_vars->{$key}; + } + } + } + + return $xml_info; + } + + /** + * @brief component의 xml정보를 읽음 + **/ + function getComponentXmlInfo($component) { + $lang_type = Context::getLangType(); + + // 요청된 컴포넌트의 xml파일 위치를 구함 + $component_path = sprintf('%s/components/%s/', $this->module_path, $component); + + $xml_file = sprintf('%sinfo.xml', $component_path); + $cache_file = sprintf('./files/cache/editor/%s.%s.php', $component, $lang_type); + + // 캐시된 xml파일이 있으면 include 후 정보 return + if(file_exists($cache_file) && file_exists($xml_file) && filemtime($cache_file) > filemtime($xml_file)) { + include($cache_file); + return $xml_info; + } + + // 캐시된 파일이 없으면 파싱후 캐싱 후 return + $oParser = new XmlParser(); + $xml_doc = $oParser->loadXmlFile($xml_file); + + // 정보 정리 + if($xml_doc->component->version && $xml_doc->component->attrs->version == '0.2') { + $component_info->component_name = $component; + $component_info->title = $xml_doc->component->title->body; + $component_info->description = str_replace('\n', "\n", $xml_doc->component->description->body); + $component_info->version = $xml_doc->component->version->body; + $component_info->date = $xml_doc->component->date->body; + $component_info->homepage = $xml_doc->component->link->body; + $component_info->license = $xml_doc->component->license->body; + $component_info->license_link = $xml_doc->component->license->attrs->link; + + $buff = 'component_name = "%s";', $component_info->component_name); + $buff .= sprintf('$xml_info->title = "%s";', $component_info->title); + $buff .= sprintf('$xml_info->description = "%s";', $component_info->description); + $buff .= sprintf('$xml_info->version = "%s";', $component_info->version); + $buff .= sprintf('$xml_info->date = "%s";', $component_info->date); + $buff .= sprintf('$xml_info->homepage = "%s";', $component_info->homepage); + $buff .= sprintf('$xml_info->license = "%s";', $component_info->license); + $buff .= sprintf('$xml_info->license_link = "%s";', $component_info->license_link); + + // 작성자 정보 + if(!is_array($xml_doc->component->author)) $author_list[] = $xml_doc->component->author; + else $author_list = $xml_doc->component->author; + + for($i=0; $i < count($author_list); $i++) { + $buff .= sprintf('$xml_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body); + $buff .= sprintf('$xml_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address); + $buff .= sprintf('$xml_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link); + } + + // history + if($xml_doc->component->history) { + if(!is_array($xml_doc->component->history)) $history_list[] = $xml_doc->component->history; + else $history_list = $xml_doc->component->history; + + for($i=0; $i < count($history_list); $i++) { + unset($obj); + sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $buff .= sprintf('$xml_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body); + $buff .= sprintf('$xml_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version); + $buff .= sprintf('$xml_info->history['.$i.']->date = "%s";', $date); + + if($history_list[$i]->author) { + (!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author; + + for($j=0; $j < count($obj->author_list); $j++) { + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body); + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address); + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link); + } + } + + if($history_list[$i]->log) { + (!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log; + + for($j=0; $j < count($obj->log_list); $j++) { + $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body); + $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link); + } + } + } + } + + + } else { + sscanf($xml_doc->component->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $xml_info->component_name = $component; + $xml_info->title = $xml_doc->component->title->body; + $xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body); + $xml_info->version = $xml_doc->component->attrs->version; + $xml_info->date = $date; + $xml_info->author->name = $xml_doc->component->author->name->body; + $xml_info->author->email_address = $xml_doc->component->author->attrs->email_address; + $xml_info->author->homepage = $xml_doc->component->author->attrs->link; + + $buff = 'component_name = "%s";', $xml_info->component_name); + $buff .= sprintf('$xml_info->title = "%s";', $xml_info->title); + $buff .= sprintf('$xml_info->description = "%s";', $xml_info->description); + $buff .= sprintf('$xml_info->version = "%s";', $xml_info->version); + $buff .= sprintf('$xml_info->date = "%s";', $xml_info->date); + $buff .= sprintf('$xml_info->author[0]->name = "%s";', $xml_info->author->name); + $buff .= sprintf('$xml_info->author[0]->email_address = "%s";', $xml_info->author->email_address); + $buff .= sprintf('$xml_info->author[0]->homepage = "%s";', $xml_info->author->homepage); + } + + // 추가 변수 정리 (에디터 컴포넌트에서는 text형만 가능) + $extra_vars = $xml_doc->component->extra_vars->var; + if($extra_vars) { + if(!is_array($extra_vars)) $extra_vars = array($extra_vars); + foreach($extra_vars as $key => $val) { + unset($obj); + $key = $val->attrs->name; + $title = $val->title->body; + $description = $val->description->body; + $xml_info->extra_vars->{$key}->title = $title; + $xml_info->extra_vars->{$key}->description = $description; + + $buff .= sprintf('$xml_info->extra_vars->%s->%s = "%s";', $key, 'title', $title); + $buff .= sprintf('$xml_info->extra_vars->%s->%s = "%s";', $key, 'description', $description); + } + } + + $buff .= ' ?>'; + + FileHandler::writeFile($cache_file, $buff, "w"); + + unset($xml_info); + include($cache_file); + return $xml_info; + } + } +?> diff --git a/modules/editor/skins/xpresseditor/editor.html b/modules/editor/skins/xpresseditor/editor.html index 0273d2330..f35bad884 100644 --- a/modules/editor/skins/xpresseditor/editor.html +++ b/modules/editor/skins/xpresseditor/editor.html @@ -28,6 +28,7 @@ + @@ -483,8 +484,7 @@ diff --git a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js index c041d75b9..1b0038d5d 100644 --- a/modules/editor/skins/xpresseditor/js/Xpress_Editor.js +++ b/modules/editor/skins/xpresseditor/js/Xpress_Editor.js @@ -1,6180 +1,6185 @@ -// extends jQuery object -(function($){ - -$.extend({ - Class : function(def) { - function c(){ - if (typeof this.$super != 'undefined') this.$super.$this = this; - if ($.isFunction(this.$init)) this.$init.apply(this, arguments); - } - c.prototype = def; - c.constructor = c; - c.extend = Class_extend; - - return c; - }, - $ : function(id) { - if(typeof id == 'string') { - if (id.substring(0,1) == '<') return $(id).get(0); - return $('#'+id).get(0); - } else { - return id; - } - }, - fnBind : function(fn, th/* , args... */) { - var args = $.makeArray(arguments); - args.shift(); args.shift(); - - return function() { - var a = args.concat($.makeArray(arguments)); - - return fn.apply(th, a); - }; - } -}); - -$.browser.nVersion = parseFloat($.browser.version); - -function Class_extend(superDef) { - var Super = superDef.prototype; - - this.prototype.$super = {}; - - function bind(fn) { - return function() { - return fn.apply(this.$this, arguments); - }; - } - - for(var x in Super) { - if (!Super.propertyIsEnumerable(x)) continue; - - if (typeof this.prototype[x] == 'undefined') this.prototype[x] = Super[x]; - this.prototype.$super[x] = $.isFunction(Super[x])?bind(Super[x]):Super[x]; - } - - return this; -} - -})(jQuery); - -if (typeof window.xe == 'undefined') window.xe = {}; - -//{ - /** - * @fileOverview This file contains Xpress framework core - * @name XpressCore.js - */ -xe.XpressCore = jQuery.Class({ - name : "XpressCore", - - $init : function(htOptions){ - htOptions = !htOptions?{}:jQuery.Class({}).extend({ - oDebugger : null - }).extend(htOptions); - if(htOptions.oDebugger){ - this.oDebugger = htOptions.oDebugger; - this.oDebugger.oApp = this; - } - - // To prevent processing a Xpress command before all the plugins are registered and ready, - // Queue up all the commands here until the application's status is changed to READY - this.commandQueue = []; - - this.oCommandMap = {}; - this.oDisabledCommand = {}; - this.aPlugins = []; - - this.appStatus = xe.APP_STATUS["NOT_READY"]; - - // Register the core as a plugin so it can receive messages - this.registerPlugin(this); - }, - - exec : function(msg, args, oEvent){ - // If the application is not yet ready just queue the command - if(this.appStatus == xe.APP_STATUS["NOT_READY"]){ - this.commandQueue[this.commandQueue.length] = {'msg':msg, 'args':args, 'event':oEvent}; - return true; - } - - this.exec = this._exec; - this.exec(msg, args, oEvent); - }, - - delayedExec : function(msg, args, nDelay, oEvent){ - var fExec = jQuery.fnBind(this.exec, this, msg, args, oEvent); - setTimeout(fExec, nDelay); - }, - - _exec : function(msg, args, oEvent){return (this._exec = this.oDebugger?this._execWithDebugger:this._execWithoutDebugger).call(this, msg, args, oEvent);}, - _execWithDebugger : function(msg, args, oEvent){this.oDebugger.log_MessageStart(msg, args);var bResult = this._doExec(msg, args, oEvent);this.oDebugger.log_MessageEnd(msg, args);return bResult; }, - _execWithoutDebugger : function(msg, args, oEvent){return this._doExec(msg, args, oEvent);}, - _doExec : function(msg, args, oEvent){ - var bContinue = false; - - if(!this.oDisabledCommand[msg]){ - var allArgs = []; - if(args && args.length){ - var iLen = args.length; - for(var i=0; i= 0 && xe.DOMFix.parentNode(aAllNodes[iChildIdx]) == aAllNodes[iCurIdx]){ - iChildIdx = this._recurConstructClonedTree(aAllNodes, iChildIdx, aAllNodes[iCurIdx], oCurNodeCloneWithChildren, oClonedStartContainer, oClonedEndContainer); - } - - // this may trigger an error message in IE when an erroneous script is inserted - oClonedParentNode.insertBefore(oCurNodeCloneWithChildren, oClonedParentNode.firstChild); - - return iChildIdx; - }; - - aNodes[aNodes.length] = xe.DOMFix.parentNode(aNodes[aNodes.length-1]); - _recurConstructClonedTree(aNodes, aNodes.length-1, aNodes[aNodes.length-1], oClonedParentNode); - - return {oStartContainer: oClonedStartContainer, oEndContainer: oClonedEndContainer}; - }, - - cloneRange : function(){ - return this._copyRange(new xe.W3CDOMRange(this._document)); - }, - - _copyRange : function(oClonedRange){ - oClonedRange.collapsed = this.collapsed; - oClonedRange.commonAncestorContainer = this.commonAncestorContainer; - oClonedRange.endContainer = this.endContainer; - oClonedRange.endOffset = this.endOffset; - oClonedRange.startContainer = this.startContainer; - oClonedRange.startOffset = this.startOffset; - oClonedRange._document = this._document; - - return oClonedRange; - }, - - collapse : function(toStart){ - if(toStart){ - this.endContainer = this.startContainer; - this.endOffset = this.startOffset; - }else{ - this.startContainer = this.endContainer; - this.startOffset = this.endOffset; - } - - this._updateRangeInfo(); - }, - - compareBoundaryPoints : function(how, sourceRange){ - switch(how){ - case xe.W3CDOMRange.START_TO_START: - return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.startContainer, sourceRange.startOffset); - case xe.W3CDOMRange.START_TO_END: - return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.startContainer, sourceRange.startOffset); - case xe.W3CDOMRange.END_TO_END: - return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.endContainer, sourceRange.endOffset); - case xe.W3CDOMRange.END_TO_START: - return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.endContainer, sourceRange.endOffset); - } - }, - - _findBody : function(oNode){ - if(!oNode) return null; - while(oNode){ - if(oNode.tagName == "BODY") return oNode; - oNode = xe.DOMFix.parentNode(oNode); - } - return null; - }, - - _compareEndPoint : function(oContainerA, iOffsetA, oContainerB, iOffsetB){ - var iIdxA, iIdxB; - - if(!oContainerA || this._findBody(oContainerA) != this._document.body){ - oContainerA = this._document.body; - iOffsetA = 0; - } - - if(!oContainerB || this._findBody(oContainerB) != this._document.body){ - oContainerB = this._document.body; - iOffsetB = 0; - } - - var compareIdx = function(iIdxA, iIdxB){ - // iIdxX == -1 when the node is the commonAncestorNode - // if iIdxA == -1 - // -> [[...]]... - // if iIdxB == -1 - // -> ...[[...]] - if(iIdxB == -1) iIdxB = iIdxA+1; - if(iIdxA < iIdxB) return -1; - if(iIdxA == iIdxB) return 0; - return 1; - }; - - var oCommonAncestor = this._getCommonAncestorContainer(oContainerA, oContainerB); - - // ================================================================================================================================================ - // Move up both containers so that both containers are direct child nodes of the common ancestor node. From there, just compare the offset - // Add 0.5 for each contaienrs that has "moved up" since the actual node is wrapped by 1 or more parent nodes and therefore its position is somewhere between idx & idx+1 - // NODE1

NODE2

NODE3
- // The position of NODE2 in COMMON_ANCESTOR is somewhere between after NODE1(idx1) and before NODE3(idx2), so we let that be 1.5 - - // container node A in common ancestor container - var oNodeA = oContainerA; - if(oNodeA != oCommonAncestor){ - while((oTmpNode = xe.DOMFix.parentNode(oNodeA)) != oCommonAncestor){oNodeA = oTmpNode;} - - iIdxA = this._getPosIdx(oNodeA)+0.5; - }else iIdxA = iOffsetA; - - // container node B in common ancestor container - var oNodeB = oContainerB; - if(oNodeB != oCommonAncestor){ - while((oTmpNode = xe.DOMFix.parentNode(oNodeB)) != oCommonAncestor){oNodeB = oTmpNode;} - - iIdxB = this._getPosIdx(oNodeB)+0.5; - }else iIdxB = iOffsetB; - - return compareIdx(iIdxA, iIdxB); - }, - - _getCommonAncestorContainer : function(oNode1, oNode2){ - var oComparingNode = oNode2; - - while(oNode1){ - while(oComparingNode){ - if(oNode1 == oComparingNode) return oNode1; - oComparingNode = xe.DOMFix.parentNode(oComparingNode); - } - oComparingNode = oNode2; - oNode1 = xe.DOMFix.parentNode(oNode1); - } - - return this._document.body; - }, - - deleteContents : function(){ - if(this.collapsed) return; - - this._splitTextEndNodesOfTheRange(); - - var aNodes = this._getNodesInRange(); - - if(aNodes.length < 1) return; - - var oPrevNode = aNodes[0].previousSibling; - while(oPrevNode && this._isBlankTextNode(oPrevNode)) oPrevNode = oPrevNode.previousSibling; - - var oNewStartContainer, iNewOffset; - if(!oPrevNode){ - oNewStartContainer = xe.DOMFix.parentNode(aNodes[0]); - iNewOffset = 0; - } - - for(var i=0; i oNode.nodeValue.length) iOffset = oNode.nodeValue.length; - }else{ - if(iOffset > xe.DOMFix.childNodes(oNode).length) iOffset = xe.DOMFix.childNodes(oNode).length; - } - - return iOffset; - }, - - - setEnd : function(refNode, offset){ - offset = this._endsNodeValidation(refNode, offset); - - this.endContainer = refNode; - this.endOffset = offset; - if(!this.startContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) this.collapse(false); - - this._updateRangeInfo(); - }, - - setEndAfter : function(refNode){ - if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setEndAfter"); - - if(refNode.tagName == "BODY"){ - this.setEnd(refNode, xe.DOMFix.childNodes(refNode).length); - return; - } - this.setEnd(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)+1); - }, - - setEndBefore : function(refNode){ - if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setEndBefore"); - - if(refNode.tagName == "BODY"){ - this.setEnd(refNode, 0); - return; - } - - this.setEnd(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)); - }, - - setStart : function(refNode, offset){ - offset = this._endsNodeValidation(refNode, offset); - - this.startContainer = refNode; - this.startOffset = offset; - - if(!this.endContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) this.collapse(true); - this._updateRangeInfo(); - }, - - setStartAfter : function(refNode){ - if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setStartAfter"); - - if(refNode.tagName == "BODY"){ - this.setStart(refNode, xe.DOMFix.childNodes(refNode).length); - return; - } - - this.setStart(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)+1); - }, - - setStartBefore : function(refNode){ - if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setStartBefore"); - - if(refNode.tagName == "BODY"){ - this.setStart(refNode, 0); - return; - } - this.setStart(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)); - }, - - surroundContents : function(newParent){ - newParent.appendChild(this.extractContents()); - this.insertNode(newParent); - this.selectNode(newParent); - }, - - toString : function(){ - var oTmpContainer = this._document.createElement("DIV"); - oTmpContainer.appendChild(this.cloneContents()); - - return oTmpContainer.textContent || oTmpContainer.innerText || ""; - }, - - _isBlankTextNode : function(oNode){ - if(oNode.nodeType == 3 && oNode.nodeValue == "") return true; - return false; - }, - - _getPosIdx : function(refNode){ - var idx = 0; - for(var node = refNode.previousSibling; node; node = node.previousSibling) idx++; - - return idx; - }, - - _updateRangeInfo : function(){ - if(!this.startContainer){ - this.init(this._document); - return; - } - - this.collapsed = this._isCollapsed(this.startContainer, this.startOffset, this.endContainer, this.endOffset); - - this.commonAncestorContainer = this._getCommonAncestorContainer(this.startContainer, this.endContainer); - }, - - _isCollapsed : function(oStartContainer, iStartOffset, oEndContainer, iEndOffset){ - var bCollapsed = false; - - if(oStartContainer == oEndContainer && iStartOffset == iEndOffset){ - bCollapsed = true; - }else{ - var oActualStartNode = this._getActualStartNode(oStartContainer, iStartOffset); - var oActualEndNode = this._getActualEndNode(oEndContainer, iEndOffset); - - // Take the parent nodes on the same level for easier comparison when they're next to each other - // eg) From - // - // - // - // - // - // - // - // - // - // - // - // - // , it's easier to compare the position of B and D rather than C and F because they are siblings - // - // If the range were collapsed, oActualEndNode will precede oActualStartNode by doing this - oActualStartNode = this._getNextNode(this._getPrevNode(oActualStartNode)); - oActualEndNode = this._getPrevNode(this._getNextNode(oActualEndNode)); - - if(oActualStartNode && oActualEndNode && oActualEndNode.tagName != "BODY" && - (this._getNextNode(oActualEndNode) == oActualStartNode || (oActualEndNode == oActualStartNode && this._isBlankTextNode(oActualEndNode))) - ) - bCollapsed = true; - } - - return bCollapsed; - }, - - _splitTextEndNodesOfTheRange : function(){ - var oEndPoints = this._splitTextEndNodes({oStartContainer: this.startContainer, iStartOffset: this.startOffset, - oEndContainer: this.endContainer, iEndOffset: this.endOffset}); - - this.startContainer = oEndPoints.oStartContainer; - this.startOffset = oEndPoints.iStartOffset; - - this.endContainer = oEndPoints.oEndContainer; - this.endOffset = oEndPoints.iEndOffset; - }, - - _splitTextEndNodes : function(oEndPoints){ - oEndPoints = this._splitStartTextNode(oEndPoints); - oEndPoints = this._splitEndTextNode(oEndPoints); - - return oEndPoints; - }, - - _splitStartTextNode : function(oEndPoints){ - var oStartContainer = oEndPoints.oStartContainer; - var iStartOffset = oEndPoints.iStartOffset; - - var oEndContainer = oEndPoints.oEndContainer; - var iEndOffset = oEndPoints.iEndOffset; - - if(!oStartContainer) return oEndPoints; - if(oStartContainer.nodeType != 3) return oEndPoints; - if(iStartOffset == 0) return oEndPoints; - - if(oStartContainer.nodeValue.length <= iStartOffset) return oEndPoints; - - var oLastPart = oStartContainer.splitText(iStartOffset); - - if(oStartContainer == oEndContainer){ - iEndOffset -= iStartOffset; - oEndContainer = oLastPart; - } - oStartContainer = oLastPart; - iStartOffset = 0; - - return {oStartContainer: oStartContainer, iStartOffset: iStartOffset, oEndContainer: oEndContainer, iEndOffset: iEndOffset}; - }, - - _splitEndTextNode : function(oEndPoints){ - var oStartContainer = oEndPoints.oStartContainer; - var iStartOffset = oEndPoints.iStartOffset; - - var oEndContainer = oEndPoints.oEndContainer; - var iEndOffset = oEndPoints.iEndOffset; - - if(!oEndContainer) return oEndPoints; - if(oEndContainer.nodeType != 3) return oEndPoints; - - if(iEndOffset >= oEndContainer.nodeValue.length) return oEndPoints; - if(iEndOffset == 0) return oEndPoints; - - oEndContainer.splitText(iEndOffset); - - return {oStartContainer: oStartContainer, iStartOffset: iStartOffset, oEndContainer: oEndContainer, iEndOffset: iEndOffset}; - }, - - _getNodesInRange : function(){ - if(this.collapsed) return []; - - var oStartNode = this._getActualStartNode(this.startContainer, this.startOffset); - var oEndNode = this._getActualEndNode(this.endContainer, this.endOffset); - - return this._getNodesBetween(oStartNode, oEndNode); - }, - - _getActualStartNode : function(oStartContainer, iStartOffset){ - var oStartNode = oStartContainer;; - - if(oStartContainer.nodeType == 3){ - if(iStartOffset >= oStartContainer.nodeValue.length){ - oStartNode = this._getNextNode(oStartContainer); - if(oStartNode.tagName == "BODY") oStartNode = null; - }else{ - oStartNode = oStartContainer; - } - }else{ - if(iStartOffset < xe.DOMFix.childNodes(oStartContainer).length){ - oStartNode = xe.DOMFix.childNodes(oStartContainer)[iStartOffset]; - }else{ - oStartNode = this._getNextNode(oStartContainer); - if(oStartNode.tagName == "BODY") oStartNode = null; - } - } - - return oStartNode; - }, - - _getActualEndNode : function(oEndContainer, iEndOffset){ - var oEndNode = oEndContainer; - - if(iEndOffset == 0){ - oEndNode = this._getPrevNode(oEndContainer); - if(oEndNode.tagName == "BODY") oEndNode = null; - }else if(oEndContainer.nodeType == 3){ - oEndNode = oEndContainer; - }else{ - oEndNode = xe.DOMFix.childNodes(oEndContainer)[iEndOffset-1]; - } - - return oEndNode; - }, - - _getNextNode : function(oNode){ - if(!oNode || oNode.tagName == "BODY") return this._document.body; - - if(oNode.nextSibling) return oNode.nextSibling; - - return this._getNextNode(xe.DOMFix.parentNode(oNode)); - }, - - _getPrevNode : function(oNode){ - if(!oNode || oNode.tagName == "BODY") return this._document.body; - - if(oNode.previousSibling) return oNode.previousSibling; - - return this._getPrevNode(xe.DOMFix.parentNode(oNode)); - }, - - // includes partially selected - // for
, _getNodesBetween(b, c) will yield to b, "a" and c - _getNodesBetween : function(oStartNode, oEndNode){ - var aNodesBetween = []; - - if(!oStartNode || !oEndNode) return aNodesBetween; - - this._recurGetNextNodesUntil(oStartNode, oEndNode, aNodesBetween); - return aNodesBetween; - }, - - _recurGetNextNodesUntil : function(oNode, oEndNode, aNodesBetween){ - if(!oNode) return false; - - if(!this._recurGetChildNodesUntil(oNode, oEndNode, aNodesBetween)) return false; - - var oNextToChk = oNode.nextSibling; - - while(!oNextToChk){ - if(!xe.DOMFix.parentNode(oNode)) return false; - oNode = xe.DOMFix.parentNode(oNode); - - aNodesBetween[aNodesBetween.length] = oNode; - - if(oNode == oEndNode) return false; - - oNextToChk = oNode.nextSibling; - } - - return this._recurGetNextNodesUntil(oNextToChk, oEndNode, aNodesBetween); - }, - - _recurGetChildNodesUntil : function(oNode, oEndNode, aNodesBetween){ - if(!oNode) return false; - - var bEndFound = false; - var oCurNode = oNode; - if(oCurNode.firstChild){ - oCurNode = oCurNode.firstChild; - while(oCurNode){ - if(!this._recurGetChildNodesUntil(oCurNode, oEndNode, aNodesBetween)){ - bEndFound = true; - break; - } - oCurNode = oCurNode.nextSibling; - } - } - - aNodesBetween[aNodesBetween.length] = oNode; - - if(bEndFound) return false; - if(oNode == oEndNode) return false; - - return true; - } -}); - -xe.W3CDOMRange.START_TO_START = 0; -xe.W3CDOMRange.START_TO_END = 1; -xe.W3CDOMRange.END_TO_END = 2; -xe.W3CDOMRange.END_TO_START = 3; - - -/** - * @fileOverview This file contains a cross-browser function that implements all of the W3C's DOM Range specification and some more - * @name XpressRange.js - */ -xe.XpressRange = jQuery.Class({ - setWindow : function(win){ - this._window = win; - this._document = win.document; - }, - - $init : function(win){ - this.HUSKY_BOOMARK_START_ID_PREFIX = "xpress_bookmark_start_"; - this.HUSKY_BOOMARK_END_ID_PREFIX = "xpress_bookmark_end_"; - - this.sBlockElement = "P|DIV|LI|H[1-6]|PRE"; - this.sBlockContainer = "BODY|TABLE|TH|TR|TD|UL|OL|BLOCKQUOTE|FORM"; - - this.rxBlockElement = new RegExp("^("+this.sBlockElement+")$"); - this.rxBlockContainer = new RegExp("^("+this.sBlockContainer+")$") - this.rxLineBreaker = new RegExp("^("+this.sBlockElement+"|"+this.sBlockContainer+")$") - - this.setWindow(win); - - this.oSimpleSelection = new xe.SimpleSelection(this._window); - this.selectionLoaded = this.oSimpleSelection.selectionLoaded; - - this.$super.$init(this._document); - }, - - select : function(){ - this.oSimpleSelection.selectRange(this); - }, - - setFromSelection : function(iNum){ - this.setRange(this.oSimpleSelection.getRangeAt(iNum)); - }, - - setRange : function(oW3CRange){ - this.setStart(oW3CRange.startContainer, oW3CRange.startOffset); - this.setEnd(oW3CRange.endContainer, oW3CRange.endOffset); - }, - - setEndNodes : function(oSNode, oENode){ - this.setEndAfter(oENode); - this.setStartBefore(oSNode); - }, - - splitTextAtBothEnds : function(){ - this._splitTextEndNodesOfTheRange(); - }, - - getStartNode : function(){ - if(this.collapsed){ - if(this.startContainer.nodeType == 3){ - if(this.startOffset == 0) return null; - if(this.startContainer.nodeValue.length <= this.startOffset) return null; - return this.startContainer; - } - return null; - } - - if(this.startContainer.nodeType == 3){ - if(this.startOffset >= this.startContainer.nodeValue.length) return this._getNextNode(this.startContainer); - return this.startContainer; - }else{ - if(this.startOffset >= xe.DOMFix.childNodes(this.startContainer).length) return this._getNextNode(this.startContainer); - return xe.DOMFix.childNodes(this.startContainer)[this.startOffset]; - } - }, - - getEndNode : function(){ - if(this.collapsed) return this.getStartNode(); - - if(this.endContainer.nodeType == 3){ - if(this.endOffset == 0) return this._getPrevNode(this.endContainer); - return this.endContainer; - }else{ - if(this.endOffset == 0) return this._getPrevNode(this.endContainer); - return xe.DOMFix.childNodes(this.endContainer)[this.endOffset-1]; - } - }, - - getNodeAroundRange : function(bBefore, bStrict){ - if(this.collapsed && this.startContainer && this.startContainer.nodeType == 3) return this.startContainer; - if(!this.collapsed || (this.startContainer && this.startContainer.nodeType == 3)) return this.getStartNode(); - - var oBeforeRange, oAfterRange, oResult; - - if(this.startOffset >= xe.DOMFix.childNodes(this.startContainer).length) - oAfterRange = this._getNextNode(this.startContainer); - else - oAfterRange = xe.DOMFix.childNodes(this.startContainer)[this.startOffset]; - - if(this.endOffset == 0) - oBeforeRange = this._getPrevNode(this.endContainer); - else - oBeforeRange = xe.DOMFix.childNodes(this.endContainer)[this.endOffset-1]; - - if(bBefore){ - oResult = oBeforeRange; - if(!oResult && !bStrict) oResult = oAfterRange; - }else{ - oResult = oAfterRange; - if(!oResult && !bStrict) oResult = oBeforeRange; - } - - return oResult; - }, - - _getXPath : function(elNode){ - var sXPath = ""; - - while(elNode && elNode.nodeType == 1){ - sXPath = "/" + elNode.tagName+"["+this._getPosIdx4XPath(elNode)+"]" + sXPath; - elNode = xe.DOMFix.parentNode(elNode); - } - - return sXPath; - }, - - _getPosIdx4XPath : function(refNode){ - var idx = 0; - for(var node = refNode.previousSibling; node; node = node.previousSibling) - if(node.tagName == refNode.tagName) idx++; - - return idx; - }, - - // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes - _evaluateXPath : function(sXPath, oDoc){ - sXPath = sXPath.substring(1, sXPath.length-1); - var aXPath = sXPath.split(/\//); - var elNode = oDoc.body; - - for(var i=2; i -1 && elContainer){ - var aChildNodes = xe.DOMFix.childNodes(elContainer); - var elNode = null; - - var nIdx = nTextNodeIdx; - var nOffsetLeft = nOffset; - - while((elNode = aChildNodes[nIdx]) && elNode.nodeType == 3 && elNode.nodeValue.length < nOffsetLeft){ - nOffsetLeft -= elNode.nodeValue.length; - nIdx++; - } - - elContainer = xe.DOMFix.childNodes(elContainer)[nIdx]; - nOffset = nOffsetLeft; - } - - if(!elContainer){ - elContainer = this._document.body; - nOffset = 0; - } - return {elContainer: elContainer, nOffset: nOffset}; - }, - - // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes - getXPathBookmark : function(){ - var nTextNodeIdx1 = -1; - var htEndPt1 = {elContainer: this.startContainer, nOffset: this.startOffset}; - var elNode1 = this.startContainer; - if(elNode1.nodeType == 3){ - htEndPt1 = this._getFixedStartTextNode(); - nTextNodeIdx1 = this._getPosIdx(htEndPt1.elContainer); - elNode1 = xe.DOMFix.parentNode(elNode1); - } - var sXPathNode1 = this._getXPath(elNode1); - var oBookmark1 = {sXPath:sXPathNode1, nTextNodeIdx:nTextNodeIdx1, nOffset: htEndPt1.nOffset}; - - var nTextNodeIdx2 = -1; - var htEndPt2 = {elContainer: this.endContainer, nOffset: this.endOffset}; - var elNode2 = this.endContainer; - if(elNode2.nodeType == 3){ - htEndPt2 = this._getFixedEndTextNode(); - nTextNodeIdx2 = this._getPosIdx(htEndPt2.elContainer); - elNode2 = xe.DOMFix.parentNode(elNode2); - } - var sXPathNode2 = this._getXPath(elNode2); - var oBookmark2 = {sXPath:sXPathNode2, nTextNodeIdx:nTextNodeIdx2, nOffset: htEndPt2.nOffset}; - - return [oBookmark1, oBookmark2]; - }, - - moveToXPathBookmark : function(aBookmark){ - if(!aBookmark) return; - - var oBookmarkInfo1 = this._evaluateXPathBookmark(aBookmark[0]); - var oBookmarkInfo2 = this._evaluateXPathBookmark(aBookmark[1]); - - if(!oBookmarkInfo1["elContainer"] || !oBookmarkInfo2["elContainer"]) return; - - this.startContainer = oBookmarkInfo1["elContainer"]; - this.startOffset = oBookmarkInfo1["nOffset"]; - - this.endContainer = oBookmarkInfo2["elContainer"]; - this.endOffset = oBookmarkInfo2["nOffset"]; - }, - - _getFixedTextContainer : function(elNode, nOffset){ - while(elNode && elNode.nodeType == 3 && elNode.previousSibling && elNode.previousSibling.nodeType == 3){ - nOffset += elNode.previousSibling.nodeValue.length; - elNode = elNode.previousSibling; - } - - return {elContainer:elNode, nOffset:nOffset}; - }, - - _getFixedStartTextNode : function(){ - return this._getFixedTextContainer(this.startContainer, this.startOffset); - }, - - _getFixedEndTextNode : function(){ - return this._getFixedTextContainer(this.endContainer, this.endOffset); - }, - - placeStringBookmark : function(){ - var sTmpId = (new Date()).getTime(); - - var oInsertionPoint = this.cloneRange(); - oInsertionPoint.collapseToEnd(); - var oEndMarker = this._document.createElement("A"); - oEndMarker.id = this.HUSKY_BOOMARK_END_ID_PREFIX+sTmpId; - oInsertionPoint.insertNode(oEndMarker); - - var oInsertionPoint = this.cloneRange(); - oInsertionPoint.collapseToStart(); - var oStartMarker = this._document.createElement("A"); - oStartMarker.id = this.HUSKY_BOOMARK_START_ID_PREFIX+sTmpId; - oInsertionPoint.insertNode(oStartMarker); - - this.moveToBookmark(sTmpId); - - return sTmpId; - }, - - cloneRange : function(){ - return this._copyRange(new xe.XpressRange(this._window)); - }, - - moveToBookmark : function(vBookmark){ - if(typeof(vBookmark) != "object") - this.moveToStringBookmark(vBookmark); - else - this.moveToXPathBookmark(vBookmark); - }, - - moveToStringBookmark : function(sBookmarkID){ - var oStartMarker = this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX+sBookmarkID); - var oEndMarker = this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX+sBookmarkID); - - if(!oStartMarker || !oEndMarker) return; - - this.setEndBefore(oEndMarker); - this.setStartAfter(oStartMarker); - }, - - removeStringBookmark : function(sBookmarkID){ - var oStartMarker = this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX+sBookmarkID); - var oEndMarker = this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX+sBookmarkID); - - if(oStartMarker) xe.DOMFix.parentNode(oStartMarker).removeChild(oStartMarker); - if(oEndMarker) xe.DOMFix.parentNode(oEndMarker).removeChild(oEndMarker); - }, - - collapseToStart : function(){ - this.collapse(true); - }, - - collapseToEnd : function(){ - this.collapse(false); - }, - - createAndInsertNode : function(sTagName){ - tmpNode = this._document.createElement(tagName); - this.insertNode(tmpNode) - return tmpNode - }, - - getNodes : function(bSplitTextEndNodes, fnFilter){ - if(bSplitTextEndNodes) this._splitTextEndNodesOfTheRange(); - - var aAllNodes = this._getNodesInRange(); - var aFilteredNodes = []; - - if(!fnFilter) return aAllNodes; - - for(var i=0; i= 0) return true; - - if(bIncludePartlyIncluded){ - if(startToEnd == 1) return false; - if(endToStart == -1) return false; - return true; - } - - return false; - }, - - isNodeInRange : function(oNode, bIncludePartlySelected, bContentOnly){ - var oTmpRange = new xe.XpressRange(this._window); - - if(bContentOnly && oNode.firstChild){ - oTmpRange.setStartBefore(oNode.firstChild); - oTmpRange.setEndAfter(oNode.lastChild); - }else{ - oTmpRange.selectNode(oNode); - } - - return isRangeInRange(oTmpRange, bIncludePartlySelected); - }, - - pasteHTML : function(sHTML){ - if(sHTML == ""){ - this.deleteContents(); - return; - } - - var oTmpDiv = this._document.createElement("DIV"); - oTmpDiv.innerHTML = sHTML; - - var oFirstNode = oTmpDiv.firstChild; - var oLastNode = oTmpDiv.lastChild; - - var clone = this.cloneRange(); - var sBM = clone.placeStringBookmark(); - - while(oTmpDiv.lastChild) this.insertNode(oTmpDiv.lastChild); - - this.setEndNodes(oFirstNode, oLastNode); - - // delete the content later as deleting it first may mass up the insertion point - // eg)

[A]BCD

---paste O---> O

BCD

- clone.moveToBookmark(sBM); - clone.deleteContents(); - clone.removeStringBookmark(sBM); - }, - - toString : function(){ - this.toString = xe.W3CDOMRange.prototype.toString; - return this.toString(); - }, - - toHTMLString : function(){ - var oTmpContainer = this._document.createElement("DIV"); - oTmpContainer.appendChild(this.cloneContents()); - - return oTmpContainer.innerHTML; - }, - - findAncestorByTagName : function(sTagName){ - var oNode = this.commonAncestorContainer; - while(oNode && oNode.tagName != sTagName) oNode = xe.DOMFix.parentNode(oNode); - - return oNode; - }, - - selectNodeContents : function(oNode){ - if(!oNode) return; - - var oFirstNode = oNode.firstChild?oNode.firstChild:oNode; - var oLastNode = oNode.lastChild?oNode.lastChild:oNode; - - if(oFirstNode.nodeType == 3) - this.setStart(oFirstNode, 0); - else - this.setStartBefore(oFirstNode); - - if(oLastNode.nodeType == 3) - this.setEnd(oLastNode, oLastNode.nodeValue.length); - else - this.setEndAfter(oLastNode); - }, - - styleRange : function(oStyle, oAttribute, sNewSpanMarker){ - var aStyleParents = this._getStyleParentNodes(sNewSpanMarker); - if(aStyleParents.length < 1) return; - - var sName, sValue; - - for(var i=0; i= 0)){ - oSNode = this.getNodeAroundRange(false, true); - oENode = this.getNodeAroundRange(false, true); - oStart = this._getLineStartInfo(oSNode); - oEnd = this._getLineEndInfo(oENode); - } - - return {oStart: oStart, oEnd: oEnd}; - } -}).extend(xe.W3CDOMRange); - -/** - * @fileOverview This file contains cross-browser selection function - * @name SimpleSelection.js - */ -xe.SimpleSelection = function(win){ - this.init = function(win){ - this._window = win || window; - this._document = this._window.document; - }; - - this.init(win); - - if(jQuery.browser.msie) - xe.SimpleSelectionImpl_IE.apply(this); - else - xe.SimpleSelectionImpl_FF.apply(this); - - this.selectRange = function(oRng){ - this.selectNone(); - this.addRange(oRng); - }; - - this.selectionLoaded = true; - if(!this._oSelection) this.selectionLoaded = false; -}; - -xe.SimpleSelectionImpl_FF = function(){ - this._oSelection = this._window.getSelection(); - - this.getRangeAt = function(iNum){ - iNum = iNum || 0; - - try{ - var oFFRange = this._oSelection.getRangeAt(iNum); - }catch(e){return new xe.W3CDOMRange(this._document);} - - return this._FFRange2W3CRange(oFFRange); - }; - - this.addRange = function(oW3CRange){ - var oFFRange = this._W3CRange2FFRange(oW3CRange); - this._oSelection.addRange(oFFRange); - }; - - this.selectNone = function(){ - this._oSelection.removeAllRanges(); - }; - - this._FFRange2W3CRange = function(oFFRange){ - var oW3CRange = new xe.W3CDOMRange(this._document); - oW3CRange.setStart(oFFRange.startContainer, oFFRange.startOffset); - oW3CRange.setEnd(oFFRange.endContainer, oFFRange.endOffset); - return oW3CRange; - }; - - this._W3CRange2FFRange = function(oW3CRange){ - var oFFRange = this._document.createRange(); - oFFRange.setStart(oW3CRange.startContainer, oW3CRange.startOffset); - oFFRange.setEnd(oW3CRange.endContainer, oW3CRange.endOffset); - - return oFFRange; - }; -}; - -xe.SimpleSelectionImpl_IE = function(){ - this._oSelection = this._document.selection; - - this.getRangeAt = function(iNum){ - iNum = iNum || 0; - - if(this._oSelection.type == "Control"){ - var oW3CRange = new xe.W3CDOMRange(this._document); - - var oSelectedNode = this._oSelection.createRange().item(iNum); - - // if the selction occurs in a different document, ignore - if(!oSelectedNode || oSelectedNode.ownerDocument != this._document) return oW3CRange; - - oW3CRange.selectNode(oSelectedNode); - - return oW3CRange; - }else{ - var oSelectedNode = this._oSelection.createRangeCollection().item(iNum).parentElement(); - - // if the selction occurs in a different document, ignore - if(!oSelectedNode || oSelectedNode.ownerDocument != this._document){ - var oW3CRange = new xe.W3CDOMRange(this._document); - return oW3CRange; - } - return this._IERange2W3CRange(this._oSelection.createRangeCollection().item(iNum)); - } - }; - - this.addRange = function(oW3CRange){ - var oIERange = this._W3CRange2IERange(oW3CRange); - oIERange.select(); - }; - - this.selectNone = function(){ - this._oSelection.empty(); - }; - - this._W3CRange2IERange = function(oW3CRange){ - var oStartIERange = this._getIERangeAt(oW3CRange.startContainer, oW3CRange.startOffset); - var oEndIERange = this._getIERangeAt(oW3CRange.endContainer, oW3CRange.endOffset); - oStartIERange.setEndPoint("EndToEnd", oEndIERange); - - return oStartIERange; - }; - - this._getIERangeAt = function(oW3CContainer, iW3COffset){ - var oIERange = this._document.body.createTextRange(); - - var oEndPointInfoForIERange = this._getSelectableNodeAndOffsetForIE(oW3CContainer, iW3COffset); - - var oSelectableNode = oEndPointInfoForIERange.oSelectableNodeForIE; - var iIEOffset = oEndPointInfoForIERange.iOffsetForIE; - - oIERange.moveToElementText(oSelectableNode); - oIERange.collapse(oEndPointInfoForIERange.bCollapseToStart); - oIERange.moveStart("character", iIEOffset); - - return oIERange; - }; - - this._getSelectableNodeAndOffsetForIE = function(oW3CContainer, iW3COffset){ - var oIERange = this._document.body.createTextRange(); - - var oNonTextNode = null; - var aChildNodes = null; - var iNumOfLeftNodesToCount = 0; - - if(oW3CContainer.nodeType == 3){ - oNonTextNode = xe.DOMFix.parentNode(oW3CContainer); - aChildNodes = xe.DOMFix.childNodes(oNonTextNode); - iNumOfLeftNodesToCount = aChildNodes.length; - }else{ - oNonTextNode = oW3CContainer; - aChildNodes = xe.DOMFix.childNodes(oNonTextNode); - iNumOfLeftNodesToCount = iW3COffset; - } - - var oNodeTester = null; - - var iResultOffset = 0; - - var bCollapseToStart = true; - - for(var i=0; i=0) break; - - oPrevNonTextNode = aChildNodes[i]; - } - - var pointRangeIdx = i; - - if(pointRangeIdx != 0 && aChildNodes[pointRangeIdx-1].nodeType == 3){ - var oRgTextStart = this._document.body.createTextRange(); - var oCurTextNode = null; - if(oPrevNonTextNode){ - oRgTextStart.moveToElementText(oPrevNonTextNode); - oRgTextStart.collapse(false); - oCurTextNode = oPrevNonTextNode.nextSibling; - }else{ - oRgTextStart.moveToElementText(oContainer); - oRgTextStart.collapse(true); - oCurTextNode = oContainer.firstChild; - } - - var oRgTextsUpToThePoint = oRgOrigPoint.duplicate(); - oRgTextsUpToThePoint.setEndPoint("StartToStart", oRgTextStart); - - var textCount = oRgTextsUpToThePoint.text.length - - while(textCount > oCurTextNode.nodeValue.length && oCurTextNode.nextSibling){ - textCount -= oCurTextNode.nodeValue.length; - oCurTextNode = oCurTextNode.nextSibling; - } - - // this will enforce IE to re-reference oCurTextNode - var oTmp = oCurTextNode.nodeValue; - - if(bStartPt && oCurTextNode.nextSibling && oCurTextNode.nextSibling.nodeType == 3 && textCount == oCurTextNode.nodeValue.length){ - textCount -= oCurTextNode.nodeValue.length; - oCurTextNode = oCurTextNode.nextSibling; - } - - oContainer = oCurTextNode; - offset = textCount; - }else{ - oContainer = oRgOrigPoint.parentElement(); - offset = pointRangeIdx; - } - - return {"oContainer" : oContainer, "iOffset" : offset}; - }; -} - -xe.DOMFix = new (jQuery.Class({ - $init : function(){ - if(jQuery.browser.msie || jQuery.browser.opera){ - this.childNodes = this._childNodes_Fix; - this.parentNode = this._parentNode_Fix; - }else{ - this.childNodes = this._childNodes_Native; - this.parentNode = this._parentNode_Native; - } - }, - - _parentNode_Native : function(elNode){ - return elNode.parentNode; - }, - - _parentNode_Fix : function(elNode){ - if(!elNode) return elNode; - - while(elNode.previousSibling){elNode = elNode.previousSibling;} - - return elNode.parentNode; - }, - - _childNodes_Native : function(elNode){ - return elNode.childNodes; - }, - - _childNodes_Fix : function(elNode){ - var aResult = null; - var nCount = 0; - - if(elNode){ - var aResult = []; - elNode = elNode.firstChild; - while(elNode){ - aResult[nCount++] = elNode; - elNode=elNode.nextSibling; - } - } - - return aResult; - } -}))(); -/** - * @fileOverview This file contains a function that takes care of various operations related to find and replace - * @name N_FindReplace.js - */ -xe.FindReplace = jQuery.Class({ - sKeyword : "", - window : null, - document : null, - bBrowserSupported : false, - - // true if End Of Contents is reached during last execution of find - bEOC : false, - - $init : function(win){ - this.window = win; - this.document = this.window.document; - - if(this.document.domain != this.document.location.hostname){ - if(jQuery.browser.mozilla && jQuery.browser.nVersion < 3){ - this.bBrowserSupported = false; - this.find = function(){return 3}; - return; - } - } - - this.bBrowserSupported = true; - }, - - // 0: found - // 1: not found - // 2: keyword required - // 3: browser not supported - find : function(sKeyword, bCaseMatch, bBackwards, bWholeWord){ - var bSearchResult, bFreshSearch; - - this.window.focus(); - - if(!sKeyword) return 2; - - // try find starting from current cursor position - this.bEOC = false; - bSearchResult = this.findNext(sKeyword, bCaseMatch, bBackwards, bWholeWord); - if(bSearchResult) return 0; - - // end of the contents could have been reached so search again from the beginning - this.bEOC = true; - bSearchResult = this.findNew(sKeyword, bCaseMatch, bBackwards, bWholeWord); - - if(bSearchResult) return 0; - - return 1; - }, - - findNew : function (sKeyword, bCaseMatch, bBackwards, bWholeWord){ - this.findReset(); - return this.findNext(sKeyword, bCaseMatch, bBackwards, bWholeWord); - }, - - findNext : function(sKeyword, bCaseMatch, bBackwards, bWholeWord){ - var bSearchResult; - bCaseMatch = bCaseMatch || false; - bWholeWord = bWholeWord || false; - bBackwards = bBackwards || false; - - if(this.window.find){ - var bWrapAround = false; - return this.window.find(sKeyword, bCaseMatch, bBackwards, bWrapAround, bWholeWord); - } - - // IE solution - if(this.document.body.createTextRange){ - var iOption = 0; - if(bBackwards) iOption += 1; - if(bWholeWord) iOption += 2; - if(bCaseMatch) iOption += 4; - - this.window.focus(); - this._range = this.document.selection.createRangeCollection().item(0); - this._range.collapse(false); - bSearchResult = this._range.findText(sKeyword, 1, iOption); - - this._range.select(); - return bSearchResult; - } - - return false; - }, - - findReset : function() { - if (this.window.find){ - this.window.getSelection().removeAllRanges(); - return; - } - - // IE solution - if(this.document.body.createTextRange){ - this._range = this.document.body.createTextRange(); - this._range.collapse(true); - this._range.select(); - } - }, - - // 0: replaced & next word found - // 1: replaced & next word not found - // 2: not replaced & next word found - // 3: not replaced & next word not found - // 4: sOriginalWord required - replace : function(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord){ - if(!sOriginalWord) return 4; - - var oSelection = new xe.XpressRange(this.window); - oSelection.setFromSelection(); - - bCaseMatch = bCaseMatch || false; - var bMatch, selectedText = oSelection.toString(); - if(bCaseMatch) - bMatch = (selectedText == sOriginalWord); - else - bMatch = (selectedText.toLowerCase() == sOriginalWord.toLowerCase()); - - if(!bMatch) - return this.find(sOriginalWord, bCaseMatch, bBackwards, bWholeWord)+2; - - if(typeof Replacement == "function"){ - // the returned oSelection must contain the replacement - oSelection = Replacement(oSelection); - }else{ - oSelection.pasteHTML(Replacement); - } - - // force it to find the NEXT occurance of sOriginalWord - oSelection.select(); - - return this.find(sOriginalWord, bCaseMatch, bBackwards, bWholeWord); - }, - - // returns number of replaced words - // -1 : if original word is not given - replaceAll : function(sOriginalWord, Replacement, bCaseMatch, bWholeWord){ - if(!sOriginalWord) return -1; - - var bBackwards = false; - - var iReplaceResult; - var iResult = 0; - var win = this.window; - var oSelection = new xe.XpressRange(this.window); - oSelection.setFromSelection(); - var sBookmark = oSelection.placeStringBookmark(); - - this.bEOC = false; - while(!this.bEOC){ - iReplaceResult = this.replace(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord); - if(iReplaceResult == 0 || iReplaceResult == 1) iResult++; - } - - var startingPointReached = function(){ - var oCurSelection = new xe.XpressRange(win); - oCurSelection.setFromSelection(); - - oSelection.moveToBookmark(sBookmark); - var pos = oSelection.compareBoundaryPoints(xe.W3CDOMRange.START_TO_END, oCurSelection); - - if(pos == 1) return false; - return true; - } - - iReplaceResult = 0; - this.bEOC = false; - while(!startingPointReached() && iReplaceResult == 0 && !this.bEOC){ - iReplaceResult = this.replace(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord); - if(iReplaceResult == 0 || iReplaceResult == 1) iResult++; - } - - oSelection.moveToBookmark(sBookmark); - oSelection.select(); - oSelection.removeStringBookmark(sBookmark); - - return iResult; - } -}); - -/** - * @fileOverview This file contains a function that takes care of the draggable layers - * @name N_DraggableLayer.js - */ -xe.DraggableLayer = jQuery.Class({ - $init : function(oLayer, oOptions){ - this.oOptions = jQuery.extend({ - bModal : "false", - oHandle : oLayer, - iMinX : -999999, - iMinY : -999999, - iMaxX : 999999, - iMaxY : 999999 - }, oOptions); - - this.oHandle = this.oOptions.oHandle; - - oLayer.style.display = "block"; - oLayer.style.position = "absolute"; - oLayer.style.zIndex = "9999"; - - this.aBasePosition = this.getBaseOffset(oLayer); - - // "number-ize" the position and set it as inline style. (the position could've been set as "auto" or set by css, not inline style) - oLayer.style.top = (this.toInt(jQuery(oLayer).offset().top) - this.aBasePosition.top)+"px"; - oLayer.style.left = (this.toInt(jQuery(oLayer).offset().left) - this.aBasePosition.left)+"px"; - - this.$FnMouseDown = jQuery.fnBind(this._mousedown, this, oLayer); - this.$FnMouseMove = jQuery.fnBind(this._mousemove, this, oLayer); - this.$FnMouseUp = jQuery.fnBind(this._mouseup, this, oLayer); - - jQuery(this.oHandle).bind("mousedown", this.$FnMouseDown); - }, - - _mousedown : function(oLayer, oEvent){ - if(oEvent.target.tagName == "INPUT") return; - - this.MouseOffsetY = (oEvent.pageY-this.toInt(oLayer.style.top)-this.aBasePosition['top']); - this.MouseOffsetX = (oEvent.pageX-this.toInt(oLayer.style.left)-this.aBasePosition['left']); - - jQuery(oLayer).bind("mousemove", this.$FnMouseMove); - jQuery(oLayer).bind("mouseup", this.$FnMouseUp); - }, - - _mousemove : function(oLayer, oEvent){ - var iTop = (oEvent.pageY-this.MouseOffsetY-this.aBasePosition['top']); - var iLeft = (oEvent.pageX-this.MouseOffsetX-this.aBasePosition['left']); - - if(iTopthis.oOptions.iMaxY) iTop = this.oOptions.iMaxY; - - if(iLeftthis.oOptions.iMaxX) iLeft = this.oOptions.iMaxX; - - oLayer.style.top = iTop + "px"; - oLayer.style.left = iLeft + "px"; - }, - - _mouseup : function(oLayer, oEvent){ - jQuery(oLayer).unbind("mousemove", this.$FnMouseMove); - jQuery(oLayer).unbind("mouseup", this.$FnMouseUp); - }, - - toInt : function(num){ - var result = parseInt(num); - return result || 0; - }, - - findNonStatic : function(oEl){ - if(!oEl) return null; - if(oEl.tagName == "BODY") return oEl; - - if(jQuery(oEl).css("position").match(/absolute|relative/i)) return oEl; - - return this.findNonStatic(oEl.offsetParent); - }, - - getBaseOffset : function(oEl){ - var oBase = this.findNonStatic(oEl.offsetParent); - var tmp = jQuery(oBase).offset(); - - return {top: tmp.top, left: tmp.left}; - } -}); -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the messages related to core operations - * @name hp_CorePlugin.js - */ -xe.CorePlugin = jQuery.Class({ - name : "CorePlugin", - - $init : function(funcOnReady){ - this.funcOnReady = funcOnReady; - }, - - $AFTER_MSG_APP_READY : function(){ - this.oApp.exec("EXEC_ON_READY_FUNCTION", []); - }, - - $ON_ADD_APP_PROPERTY : function(sPropertyName, oProperty){ - this.oApp[sPropertyName] = oProperty; - }, - - $ON_REGISTER_BROWSER_EVENT : function(obj, sEvent, sCMD, aParams, nDelay){ - this.oApp.registerBrowserEvent(obj, sEvent, sCMD, aParams, nDelay); - }, - - $ON_DISABLE_COMMAND : function(sCommand){ - this.oApp.disableCommand(sCommand, true); - }, - - $ON_ENABLE_COMMAND : function(sCommand){ - this.oApp.disableCommand(sCommand, false); - }, - - $ON_EXEC_ON_READY_FUNCTION : function(){ - if(typeof this.funcOnReady == "function") this.funcOnReady(); - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that helps various operations. - * @name hp_Utils.js - */ - xe.Utils = jQuery.Class({ - name : "Utils", - - $init : function(){ - if(jQuery.browser.msie && jQuery.browser.nVersion == 6){ - try{ - document.execCommand('BackgroundImageCache', false, true); - }catch(e){} - } - }, - - $ON_ATTACH_HOVER_EVENTS : function(aElms, sHoverClass){ - sHoverClass = sHoverClass || "hover"; - - if(!aElms) return; - - jQuery(aElms).hover( - function(){jQuery(this).addClass(sHoverClass)}, - function(){jQuery(this).removeClass(sHoverClass)} - ); - } -}); -//} - -//{ -/** - * @fileOverview This file contains Xpress plugin that bridges the XpressRange function - * @name hp_XpressRangeManager.js - */ -xe.XpressRangeManager = jQuery.Class({ - name : "XpressRangeManager", - - oWindow : null, - - $init : function(win){ - this.oWindow = win || window; - }, - - $BEFORE_MSG_APP_READY : function(){ - if(this.oWindow && this.oWindow.tagName == "IFRAME") - this.oWindow = this.oWindow.contentWindow; - - this.oApp.exec("ADD_APP_PROPERTY", ["getSelection", jQuery.fnBind(this.getSelection, this)]); - this.oApp.exec("ADD_APP_PROPERTY", ["getEmptySelection", jQuery.fnBind(this.getEmptySelection, this)]); - }, - - $ON_SET_EDITING_WINDOW : function(oWindow){ - this.oWindow = oWindow; - }, - - getEmptySelection : function(){ - var oXpressRange = new xe.XpressRange(this.oWindow); - return oXpressRange; - }, - - getSelection : function(){ - this.oApp.exec("RESTORE_IE_SELECTION", []); - - var oXpressRange = this.getEmptySelection(); - - // this may throw an exception if the selected is area is not yet shown - try{ - oXpressRange.setFromSelection(); - }catch(e){} - - return oXpressRange; - } -}); -//} -xe.Hotkey = jQuery.Class({ - name : "Hotkey", - - storage : {}, - keyhash : {}, - - $init : function(){ - this.storage = {}; - - this.keyhash = { - backspace : 8, - tab : 9, - enter : 13, - shift : 16, - ctrl : 17, - alt : 18, - meta : 224, - esc : 27, - space : 32, - pageup : 33, - pagedown : 34, - end : 35, - home : 36, - left : 37, - up : 38, - right : 39, - down : 40, - del : 46, - comma : 188,//(,) - period : 190,//(.) - slash : 191,//(/) - hyphen : 109, - equal : 61 - }; - - if (jQuery.browser.msie || jQuery.browser.safari) { - this.keyhash.hyphen = 189; // (-) - this.keyhash.equal = 187; // (=) - this.keyhash.meta = 91; // meta - } - - - }, - - $ON_MSG_APP_READY : function(){ - jQuery(this.oApp.getWYSIWYGDocument() || document).keydown(jQuery.fnBind(this.keydown, this)); - }, - - $ON_REGISTER_HOTKEY : function(sHotkey, sCMD, sArgs){ - if(!sArgs) sArgs = []; - var func = jQuery.fnBind(this.oApp.exec, this.oApp, sCMD, sArgs); - - sHotkey = this.normalize(sHotkey); - if (!sHotkey) return false; - - this.add(sHotkey, func); - }, - - add : function(sHotkey, func) { - if (typeof this.storage[sHotkey] == 'undefined') { - this.storage[sHotkey] = [func]; - } else { - this.storage[sHotkey].push(func); - } - }, - - keydown : function(event) { - var key = [], kh = this.keyhash; - - if (jQuery.inArray(event.keyCode, [kh.shift, kh.ctrl, kh.alt, kh.meta]) >= 0) return; - - if (event.shiftKey) key.push('shift'); - if (event.altKey) key.push('alt'); - if (event.ctrlKey) key.push('ctrl'); - if (event.metaKey) key.push('meta'); - if (!key.length) return; - if (key.length == 1 && event.metaKey) key = ['ctrl', 'meta']; - - key.push(event.keyCode); - - key = key.join('+'); - - if (!this.storage[key]) return; - - jQuery.each(this.storage[key], function(){ this(); }); - - return false; - }, - - normalize : function(sHotkey) { - var shift, ctrl, alt, meta, key, keys = (sHotkey||"").toLowerCase().split('+'); - - shift = ctrl = alt = meta = key = false; - - jQuery.each(keys, function(){ - var s = ""+this; - switch(s) { - case 'shift': shift = true; - case 'alt' : alt = true; - case 'ctrl' : ctrl = true; - case 'meta' : meta = true; - default: - key = s; - } - }); - - if (!key) return ''; - - keys = []; - if (shift) keys.push('shift'); - if (alt) keys.push('alt'); - if (ctrl) keys.push('ctrl'); - if (meta || (ctrl && !shift && !alt)) keys.push('meta'); - - keys.push(this.keyhash[key] || key.toUpperCase().charCodeAt(0)); - - return keys.join('+'); - } -}); - -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the draggable layers - * @name hp_DialogLayerManager.js - */ -xe.DialogLayerManager = jQuery.Class({ - name : "DialogLayerManager", - aMadeDraggable : null, - aOpenedLayers : null, - - $init : function(){ - this.aMadeDraggable = []; - this.aOpenedLayers = []; - }, - - $ON_SHOW_DIALOG_LAYER : function(oLayer, bModal){ - oLayer = jQuery.$(oLayer); - bModal = jQuery.$(bModal) || false; - if(!oLayer) return; - - if(jQuery.inArray(oLayer, this.aOpenedLayers)) return; - - this.oApp.exec("POSITION_DIALOG_LAYER", [oLayer]); - - this.aOpenedLayers[this.aOpenedLayers.length] = oLayer; - - if(!jQuery.inArray(oLayer, this.aMadeDraggable)){ - new xe.DraggableLayer(oLayer, {bModal: bModal, iMinY: 0}); - this.aMadeDraggable[this.aMadeDraggable.length] = oLayer; - }else{ - oLayer.style.display = "block"; - } - }, - - $ON_HIDE_LAST_DIALOG_LAYER : function(){ - this.oApp.exec("HIDE_DIALOG_LAYER", [this.aOpenedLayers[this.aOpenedLayers.length-1]]); - }, - - $ON_HIDE_ALL_DIALOG_LAYER : function(){ - for(var i=this.aOpenedLayers.length-1; i>=0; i--) - this.oApp.exec("HIDE_DIALOG_LAYER", [this.aOpenedLayers[i]]); - }, - - $ON_HIDE_DIALOG_LAYER : function(oLayer){ - oLayer = jQuery.$(oLayer); - - if(oLayer) oLayer.style.display = "none"; - this.aOpenedLayers = jQuery.grep(this.aOpenedLayers, function(a){return a!=oLayer}); - }, - - $ON_SET_DIALOG_LAYER_POSITION : function(oLayer, iTop, iLeft){ - oLayer.style.top = iTop; - oLayer.style.left = iLeft; - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the layers that should disappear when the focus is lost - * @name hp_ActiveLayerManager.js - */ -xe.ActiveLayerManager = jQuery.Class({ - name : "ActiveLayerManager", - oCurrentLayer : null, - - $ON_TOGGLE_ACTIVE_LAYER : function(oLayer, sOnOpenCmd, aOnOpenParam, sOnCloseCmd, aOnCloseParam){ - if(oLayer == this.oCurrentLayer){ - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - }else{ - this.oApp.exec("SHOW_ACTIVE_LAYER", [oLayer, sOnCloseCmd, aOnCloseParam]); - if(sOnOpenCmd) this.oApp.exec(sOnOpenCmd, aOnOpenParam); - } - }, - - $ON_SHOW_ACTIVE_LAYER : function(oLayer, sOnCloseCmd, aOnCloseParam){ - oLayer = jQuery.$(oLayer); - this.sOnCloseCmd = sOnCloseCmd; - this.aOnCloseParam = aOnCloseParam; - - var oPrevLayer = this.oCurrentLayer; - - if(oLayer == oPrevLayer) return; - - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - - oLayer.style.display = "block"; - this.oCurrentLayer = oLayer; - }, - - $ON_HIDE_ACTIVE_LAYER : function(){ - var oLayer = this.oCurrentLayer; - if(!oLayer) return; - oLayer.style.display = "none"; - this.oCurrentLayer = null; - - if(this.sOnCloseCmd) - this.oApp.exec(this.sOnCloseCmd, this.aOnCloseParam); - }, - - // for backward compatibility only. - // use HIDE_ACTIVE_LAYER instead! - $ON_HIDE_CURRENT_ACTIVE_LAYER : function(){ - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - }, - - $ON_EVENT_EDITING_AREA_KEYDOWN : function(){ - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - }, - - $ON_EVENT_EDITING_AREA_MOUSEDOWN : function(){ - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to string conversion. Ususally used to convert the IR value. - * @name hp_StringConverterManager.js - */ -xe.StringConverterManager = jQuery.Class({ - name : "StringConverterManager", - - oConverters : null, - - $init : function(){ - this.oConverters = {}; - }, - - $BEFORE_MSG_APP_READY : function(){ - this.oApp.exec("ADD_APP_PROPERTY", ["applyConverter", jQuery.fnBind(this.applyConverter, this)]); - this.oApp.exec("ADD_APP_PROPERTY", ["addConverter", jQuery.fnBind(this.addConverter, this)]); - }, - - applyConverter : function(sRuleName, sContent){ - var aConverters = this.oConverters[sRuleName]; - if(!aConverters) return sContent; - - for(var i=0; i*:first-child", aAllLi[i]).get(0); - } - } - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.registerBrowserEvent(this.toolbarArea, "mouseover", "EVENT_TOOLBAR_MOUSEOVER", []); - this.oApp.registerBrowserEvent(this.toolbarArea, "mouseout", "EVENT_TOOLBAR_MOUSEOUT", []); - - this.oApp.exec("ADD_APP_PROPERTY", ["getToolbarButtonByUIName", jQuery.fnBind(this.getToolbarButtonByUIName, this)]); - }, - - $ON_EVENT_TOOLBAR_MOUSEOVER : function(weEvent){ - if(weEvent.target.tagName == "BUTTON") jQuery(weEvent.target).addClass("hover").parent("span").addClass("hover"); - }, - - $ON_EVENT_TOOLBAR_MOUSEOUT : function(weEvent){ - if(weEvent.target.tagName == "BUTTON") jQuery(weEvent.target).removeClass("hover").parent("span").removeClass("hover"); - }, - - $ON_TOGGLE_TOOLBAR_ACTIVE_LAYER : function(oLayer, oBtn, sOpenCmd, aOpenArgs, sCloseCmd, aCloseArgs){ - this.oApp.exec("TOGGLE_ACTIVE_LAYER", [oLayer, "MSG_TOOLBAR_LAYER_SHOWN", [oLayer, oBtn, sOpenCmd, aOpenArgs], sCloseCmd, aCloseArgs]); - }, - - $ON_MSG_TOOLBAR_LAYER_SHOWN : function(oLayer, oBtn, aOpenCmd, aOpenArgs){ - this.oApp.exec("POSITION_TOOLBAR_LAYER", [oLayer, oBtn]); - if(aOpenCmd) this.oApp.exec(aOpenCmd, aOpenArgs); - }, - - $ON_SHOW_TOOLBAR_ACTIVE_LAYER : function(oLayer, sCmd, aArgs, oBtn){ - this.oApp.exec("SHOW_ACTIVE_LAYER", [oLayer, sCmd, aArgs]); - this.oApp.exec("POSITION_TOOLBAR_LAYER", [oLayer, oBtn]); - }, - - $ON_ENABLE_UI : function(sUIName){ - var elUI = this.htUIList[sUIName]; - if(!elUI) return; - jQuery(elUI).removeClass("off"); - elUI.disabled = false; - - // enable related commands - var sCmd = ""; - if(this.aUICmdMap[sUIName]){ - for(var i=0; i nToolbarLeft) oLayer.style.left = (nToolbarLeft-nLayerLeft-5)+"px"; - }, - - getToolbarButtonByUIName : function(sUIName){ - return this.htUIList[sUIName]; - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that manages multiple number editing area plugins and the IR value - * @name hp_XE_EditingAreaManager.js - */ -xe.XE_EditingAreaManager = jQuery.Class({ - name : "XE_EditingAreaManager", - - // Currently active plugin instance(XE_EditingArea_???) - oActivePlugin : null, - - // Intermediate Representation of the content being edited. - // This should be a textarea element. - oIRField : null, - - bIsDirty : false, - - $init : function(sInitialMode, oIRField, oDimension, fOnBeforeUnload, oAppContainer){ - this.sInitialMode = sInitialMode; - this.oIRField = jQuery.$(oIRField); - this._assignHTMLObjects(oAppContainer); - this.fOnBeforeUnload = fOnBeforeUnload; - - this.oEditingMode = {}; - - this.elEditingAreaContainer.style.height = parseInt(oDimension.nHeight || this.elEditingAreaContainer.offsetHeight)+"px"; - - this.nMinHeight = oDimension.nMinHeight || 10; - this.niMinWidth = oDimension.nMinWidth || 10; - }, - - _assignHTMLObjects : function(oAppContainer){ - oAppContainer = jQuery.$(oAppContainer) || document; - this.elEditingAreaContainer = jQuery("DIV.xpress_xeditor_editing_area_container", oAppContainer).get(0); - this.elEditingAreaSkipUI = jQuery("A.skip", oAppContainer).get(0); - }, - - $BEFORE_MSG_APP_READY : function(msg){ - this.oApp.exec("ADD_APP_PROPERTY", ["elEditingAreaContainer", this.elEditingAreaContainer]); - this.oApp.exec("ADD_APP_PROPERTY", ["getIR", jQuery.fnBind(this.getIR, this)]); - this.oApp.exec("ADD_APP_PROPERTY", ["setIR", this.setIR]); - this.oApp.exec("ADD_APP_PROPERTY", ["getEditingMode", jQuery.fnBind(this.getEditingMode, this)]); - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.exec("CHANGE_EDITING_MODE", [this.sInitialMode, true]); - this.oApp.exec("LOAD_IR_FIELD", [false]); - - this.oApp.registerBrowserEvent(this.elEditingAreaSkipUI, "focus", "MSG_EDITING_AREA_SIZE_CHANGED", [], 50); - this.oApp.registerBrowserEvent(this.elEditingAreaSkipUI, "blur", "MSG_EDITING_AREA_SIZE_CHANGED", [], 50); - - var fOnBeforeUnload = this.fOnBeforeUnload||function(){if(this.getIR() != this.oIRField.value || this.bIsDirty) return this.oApp.$MSG("XE_EditingAreaManager.onExit")}; - jQuery(window).bind("beforeunload", jQuery.fnBind(fOnBeforeUnload, this)); - }, - - $AFTER_MSG_APP_READY : function(){ - this.oApp.exec("UPDATE_IR_FIELD", []); - }, - - $ON_LOAD_IR_FIELD : function(bDontAddUndo){ - this.oApp.setIR(this.oIRField.value, bDontAddUndo); - }, - - $ON_UPDATE_IR_FIELD : function(){ - this.oIRField.value = this.oApp.getIR(); - }, - - $BEFORE_CHANGE_EDITING_MODE : function(sMode){ - this._oPrevActivePlugin = this.oActivePlugin; - this.oActivePlugin = this.oEditingMode[sMode]; - }, - - $AFTER_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ - if(this._oPrevActivePlugin){ - var sIR = this._oPrevActivePlugin.getIR(); - this.oApp.exec("SET_IR", [sIR]); - - this.oApp.exec("ENABLE_UI", [this._oPrevActivePlugin.sMode]); - - this._setEditingAreaDimension(); - } - this.oApp.exec("DISABLE_UI", [this.oActivePlugin.sMode]); - - if(!bNoFocus){ - this.oApp.exec("FOCUS", []); - } - }, - - $ON_SET_IS_DIRTY : function(bIsDirty){ - this.bIsDirty = bIsDirty; - }, - - $ON_FOCUS : function(){ - if(!this.oActivePlugin || typeof this.oActivePlugin.setIR != "function") return - - this.oActivePlugin.focus(); - }, - - $BEFORE_SET_IR : function(sIR, bDontAddUndoHistory){ - bDontAddUndoHistory = bDontAddUndoHistory || false; - if(!bDontAddUndoHistory) this.oApp.exec("RECORD_UNDO_ACTION", ["SET CONTENTS"]); - }, - - $ON_SET_IR : function(sIR){ - if(!this.oActivePlugin || typeof this.oActivePlugin.setIR != "function") return - - this.oActivePlugin.setIR(sIR); - }, - - $AFTER_SET_IR : function(sIR, bDontAddUndoHistory){ - bDontAddUndoHistory = bDontAddUndoHistory || false; - if(!bDontAddUndoHistory) this.oApp.exec("RECORD_UNDO_ACTION", ["SET CONTENTS"]); - }, - - $ON_REGISTER_EDITING_AREA : function(oEditingAreaPlugin){ - this.oEditingMode[oEditingAreaPlugin.sMode] = oEditingAreaPlugin; - this.attachDocumentEvents(oEditingAreaPlugin.oEditingArea); - }, - - $ON_MSG_EDITING_AREA_RESIZE_STARTED : function(){ - this.oActivePlugin.elEditingArea.style.display = "none"; - - this.iStartingHeight = parseInt(this.elEditingAreaContainer.style.height); - }, - - $ON_RESIZE_EDITING_AREA: function(ipNewWidth, ipNewHeight){ - var iNewWidth = parseInt(ipNewWidth); - var iNewHeight = parseInt(ipNewHeight); - - if(iNewWidth < this.niMinWidth) iNewWidth = this.niMinWidth; - if(iNewHeight < this.nMinHeight) iNewHeight = this.nMinHeight; - - if(ipNewWidth) this.elEditingAreaContainer.style.width = iNewWidth + "px"; - if(ipNewHeight) this.elEditingAreaContainer.style.height = iNewHeight + "px"; - }, - - $ON_RESIZE_EDITING_AREA_BY : function(ipWidthChange, ipHeightChange){ - var iWidthChange = parseInt(ipWidthChange); - var iHeightChange = parseInt(ipHeightChange); - - var iWidth = this.elEditingAreaContainer.style.width?parseInt(this.elEditingAreaContainer.style.width)+iWidthChange:null; - var iHeight = this.elEditingAreaContainer.style.height?this.iStartingHeight+iHeightChange:null; - - this.oApp.exec("RESIZE_EDITING_AREA", [iWidth, iHeight]); - }, - - $ON_MSG_EDITING_AREA_RESIZE_ENDED : function(FnMouseDown, FnMouseMove, FnMouseUp){ - this.oActivePlugin.elEditingArea.style.display = "block"; - this._setEditingAreaDimension(); - }, - - _setEditingAreaDimension : function(){ - this.oActivePlugin.elEditingArea.style.height = this.elEditingAreaContainer.style.height; - this.oActivePlugin.elEditingArea.style.width = this.elEditingAreaContainer.style.width; - }, - - attachDocumentEvents : function(doc){ - this.oApp.registerBrowserEvent(doc, "click", "EVENT_EDITING_AREA_CLICK"); - this.oApp.registerBrowserEvent(doc, "mousedown", "EVENT_EDITING_AREA_MOUSEDOWN"); - this.oApp.registerBrowserEvent(doc, "mousemove", "EVENT_EDITING_AREA_MOUSEMOVE"); - this.oApp.registerBrowserEvent(doc, "mouseup", "EVENT_EDITING_AREA_MOUSEUP"); - this.oApp.registerBrowserEvent(doc, "keydown", "EVENT_EDITING_AREA_KEYDOWN"); - this.oApp.registerBrowserEvent(doc, "keypress", "EVENT_EDITING_AREA_KEYPRESS"); - this.oApp.registerBrowserEvent(doc, "keyup", "EVENT_EDITING_AREA_KEYUP"); - }, - - getIR : function(){ - return this.oActivePlugin.getIR(); - }, - - setIR : function(sIR, bDontAddUndo){ - this.oApp.exec("SET_IR", [sIR, bDontAddUndo]); - }, - - getEditingMode : function(){ - return this.oActivePlugin.sMode; - } -}); -//} - -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations directly related to editing the HTML source code using Textarea element - * @name hp_XE_EditingArea_HTMLSrc.js - * @required XE_EditingAreaManager - */ -xe.XE_EditingArea_HTMLSrc = jQuery.Class({ - name : "XE_EditingArea_HTMLSrc", - - sMode : "HTMLSrc", - textarea : null, - - $init : function(textarea){ - this.textarea = jQuery.$(textarea); - this.elEditingArea = this.textarea; - }, - - $BEFORE_MSG_APP_READY : function(){ - this.oEditingArea = this.textarea; - this.oApp.exec("REGISTER_EDITING_AREA", [this]); - }, - - $ON_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ - if(sMode == this.sMode){ - this.textarea.style.display = "block"; - }else{ - this.textarea.style.display = "none"; - } - }, - - $ON_PASTE_HTML : function(sHTML, oPSelection){ - if(this.oApp.getEditingMode() != this.sMode) return; - - var o = new TextRange(this.textarea); - o.paste(sHTML); - this.textarea.focus(); - }, - - getIR : function(){ - var sIR; - var sContent = this.textarea.value; - - if(this.oApp.applyConverter) - sIR = this.oApp.applyConverter(this.sMode+"_TO_IR", sContent); - else - sIR = sContent; - - return sIR; - }, - - setIR : function(sIR){ - var sContent; - - if(this.oApp.applyConverter) - sContent = this.oApp.applyConverter("IR_TO_"+this.sMode, sIR); - else - sContent = sIR; - - this.textarea.value = sContent; - }, - - focus : function(){ - this.textarea.focus(); - } -}); - -var TextRange = function(oEl) { - this._o = oEl; -}; - -/** - * Selection for textfield - * - * @author hooriza - */ -TextRange.prototype.getSelection = function() { - var obj = this._o; - var ret = [ -1, -1 ]; - - if (isNaN(this._o.selectionStart)) { - obj.focus(); - - // textarea support added by nagoon97 - var range = document.body.createTextRange(); - var rangeField = null; - - rangeField = document.selection.createRange().duplicate(); - range.moveToElementText(obj); - rangeField.collapse(true); - range.setEndPoint("EndToEnd", rangeField); - ret[0] = range.text.length; - - rangeField = document.selection.createRange().duplicate(); - range.moveToElementText(obj); - rangeField.collapse(false); - range.setEndPoint("EndToEnd", rangeField); - ret[1] = range.text.length; - - obj.blur(); - } else { - ret[0] = obj.selectionStart; - ret[1] = obj.selectionEnd; - } - - return ret; -}; - -TextRange.prototype.setSelection = function(start, end) { - - var obj = this._o; - if (typeof end == 'undefined') end = start; - - if (obj.setSelectionRange) { - - obj.setSelectionRange(start, end); - - } else if (obj.createTextRange) { - - var range = obj.createTextRange(); - - range.collapse(true); - range.moveStart("character", start); - range.moveEnd("character", end - start); - range.select(); - - obj.blur(); - } - -}; - -TextRange.prototype.copy = function() { - - var r = this.getSelection(); - return this._o.value.substring(r[0], r[1]); - -}; - -TextRange.prototype.paste = function(sStr) { - - var obj = this._o; - var sel = this.getSelection(); - - var value = obj.value; - - var pre = value.substr(0, sel[0]); - var post = value.substr(sel[1]); - - value = pre + sStr + post; - obj.value = value; - - var n = 0; - if ( typeof document.body.style.maxHeight == "undefined" ) { - var a = pre.match( /\n/gi ); - n = ( a != null ? a.length : 0 ); - } - this.setSelection(sel[0] + sStr.length - n ); - -}; - -TextRange.prototype.cut = function() { - var r = this.copy(); - this.paste(''); - - return r; -}; -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations directly related to WYSIWYG iframe - * @name hp_XE_EditingArea_WYSIWYG.js - */ -xe.XE_EditingArea_WYSIWYG = jQuery.Class({ - name : "XE_EditingArea_WYSIWYG", - status : xe.PLUGIN_STATUS["NOT_READY"], - - sMode : "WYSIWYG", - iframe : null, - doc : null, - - iLastUndoRecorded : 0, - iMinUndoInterval : 3000, - - _nIFrameReadyCount : 50, - - $init : function(iframe){ - this.iframe = jQuery.$(iframe); - - this.initIframe(); - - this.elEditingArea = iframe; - }, - - $BEFORE_MSG_APP_READY : function(){ - this.oEditingArea = this.doc; - this.oApp.exec("REGISTER_EDITING_AREA", [this]); - this.oApp.exec("ADD_APP_PROPERTY", ["getWYSIWYGWindow", jQuery.fnBind(this.getWindow, this)]); - this.oApp.exec("ADD_APP_PROPERTY", ["getWYSIWYGDocument", jQuery.fnBind(this.getDocument, this)]); - }, - - $ON_MSG_APP_READY : function(){ - // uncomment this line if you wish to use the IE-style cursor in FF - // this.getDocument().body.style.cursor = "text"; - - if(jQuery.browser.msie){ - jQuery(this.doc).bind('keydown', jQuery.fnBind( - function(weEvent){ - if(this.doc.selection.type.toLowerCase() == 'control' && weEvent.keyCode == 8) { - this.oApp.exec("EXECCOMMAND", ['delete', false, false]); - weEvent.preventDefault(); weEvent.stopPropagation(); - } - } - , this)); - jQuery(this.doc.body).bind('mousedown', jQuery.fnBind( - function(weEvent){ - this._oIERange = null; - this._bIERangeReset = true; - } - , this)); - jQuery(this.doc.body).bind('beforedeactivate', jQuery.fnBind( - function(weEvent){ - // without this, cursor won't make it inside a table. - // mousedown(_oIERange gets reset) -> beforedeactivate(gets fired for table) -> RESTORE_IE_SELECTION - if(this._bIERangeReset) return; - - var tmpRange = this.getDocument().selection.createRange(0); - // Control range does not have parentElement - if(tmpRange.parentElement && tmpRange.parentElement() && tmpRange.parentElement().tagName == "INPUT"){ - this._oIERange = this._oPrevIERange; - }else{ - this._oIERange = tmpRange; - } - } - , this)); - jQuery(this.doc.body).bind('mouseup', jQuery.fnBind( - function(weEvent){ - this._bIERangeReset = false; - } - , this)); - } - }, - - $ON_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ - if(sMode == this.sMode){ - this.iframe.style.display = "block"; - - this.oApp.exec("REFRESH_WYSIWYG", []); - this.oApp.exec("SET_EDITING_WINDOW", [this.getWindow()]); - }else{ - this.iframe.style.display = "none"; - } - }, - - $AFTER_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ - this._oIERange = null; - }, - - $ON_REFRESH_WYSIWYG : function(){ - if(!jQuery.browser.mozilla) return; - - this._disableWYSIWYG(); - this._enableWYSIWYG(); - }, - - $ON_ENABLE_WYSIWYG : function(){ - this._enableWYSIWYG(); - }, - - $ON_DISABLE_WYSIWYG : function(){ - this._disableWYSIWYG(); - }, - - $ON_EVENT_EDITING_AREA_KEYUP : function(oEvent){ - // 33, 34: page up/down, 35,36: end/home, 37,38,39,40: left, up, right, down - if(oEvent.keyCode == 229 || oEvent.keyCode == 13 || oEvent.altKey || oEvent.ctrlKey || (oEvent.keyCode >= 33 && oEvent.keyCode <= 40) || oEvent.keyCode == 16) return; - this._recordUndo(oEvent); - }, - - $ON_PASTE_HTML : function(sHTML, oPSelection){ - if(this.oApp.getEditingMode() != this.sMode) return; - - var oSelection = oPSelection || this.oApp.getSelection(); - oSelection.pasteHTML(sHTML); - - // every browser except for IE may modify the innerHTML when it is inserted - if(!jQuery.browser.msie){ - var sTmpBookmark = oSelection.placeStringBookmark(); - this.oApp.getWYSIWYGDocument().body.innerHTML = this.oApp.getWYSIWYGDocument().body.innerHTML; - oSelection.moveToBookmark(sTmpBookmark); - oSelection.collapseToEnd(); - oSelection.select(); - oSelection.removeStringBookmark(sTmpBookmark); - } - - this.oApp.exec("RECORD_UNDO_ACTION", ["INSERT HTML"]); - }, - - $AFTER_MSG_EDITING_AREA_RESIZE_ENDED : function(FnMouseDown, FnMouseMove, FnMouseUp){ - this.oApp.exec("REFRESH_WYSIWYG", []); - }, - - $ON_RESTORE_IE_SELECTION : function(){ - if(this._oIERange){ - this._oIERange.select(); - this._oPrevIERange = this._oIERange; - this._oIERange = null; - } - }, - - initIframe : function(){ - try { - this.doc = this.iframe.contentWindow.document; - if (this.doc == null || this.doc.location.href == 'about:blank') { - throw new Error('Access denied'); - } - - this._enableWYSIWYG(); - - this.status = xe.PLUGIN_STATUS["READY"]; - } catch(e) { - if(this._nIFrameReadyCount-- > 0){ - setTimeout(jQuery.fnBind(this.initIframe, this), 100); - }else{ - throw("iframe for WYSIWYG editing mode can't be initialized. Please check if the iframe document exists and is also accessable(cross-domain issues). "); - } - } - }, - - getIR : function(){ - var sContent = this.doc.body.innerHTML; - var sIR; - - if(this.oApp.applyConverter) - sIR = this.oApp.applyConverter(this.sMode+"_TO_IR", sContent); - else - sIR = sContent; - - return sIR; - }, - - setIR : function(sIR){ - var sContent; - if(this.oApp.applyConverter) - sContent = this.oApp.applyConverter("IR_TO_"+this.sMode, sIR); - else - sContent = sIR; - - this.doc.body.innerHTML = sContent; - - if(jQuery.browser.mozilla){ - if(this.doc.body.innerHTML == "") this.doc.body.innerHTML = "
"; - } - }, - - getWindow : function(){ - return this.iframe.contentWindow; - }, - - getDocument : function(){ - return this.iframe.contentWindow.document; - }, - - focus : function(){ - //this.getWindow().focus(); - //this.oApp.exec("RESTORE_IE_SELECTION", []); - }, - - _recordUndo : function(oKeyInfo){ - var curTime = new Date(); - if(curTime-this.iLastUndoRecorded < this.iMinUndoInterval) return; - this.oApp.exec("RECORD_UNDO_ACTION", ["KEYPRESS"]); - - this.iLastUndoRecorded = new Date(); - - this.prevKeyCode = oKeyInfo.keyCode; - }, - - _enableWYSIWYG : function(){ - if (jQuery.browser.msie){ - var fake = jQuery(''); - jQuery(document.body).prepend(fake); - fake.focus(); - - this.doc.body.contentEditable = true; - - setTimeout(function(){fake.remove()}, 100); - } else { - this.doc.designMode = "on"; - } - }, - - _disableWYSIWYG : function(){ - if (jQuery.browser.msie){ - this.doc.body.contentEditable = false; - } else { - this.doc.designMode = "off"; - } - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to resizing the editing area vertically - * @name hp_XE_EditingAreaVerticalResizer.js - */ -xe.XE_EditingAreaVerticalResizer = jQuery.Class({ - name : "XE_EditingAreaVerticalResizer", - oResizeGrip : null, - - $init : function(oAppContainer){ - this._assignHTMLObjects(oAppContainer); - - this.$FnMouseDown = jQuery.fnBind(this._mousedown, this); - this.$FnMouseMove = jQuery.fnBind(this._mousemove, this); - this.$FnMouseUp = jQuery.fnBind(this._mouseup, this); - - jQuery(this.oResizeGrip).bind("mousedown", this.$FnMouseDown); - }, - - _assignHTMLObjects : function(oAppContainer){ - oAppContainer = jQuery.$(oAppContainer) || document; - - this.oResizeGrip = jQuery(".xpress_xeditor_editingArea_verticalResizer", oAppContainer).get(0); - }, - - _mousedown : function(oEvent){ - this.iStartHeight = oEvent.clientY; - - jQuery(document).bind("mousemove", this.$FnMouseMove); - jQuery(document).bind("mouseup", this.$FnMouseUp); - - this.oApp.exec("MSG_EDITING_AREA_RESIZE_STARTED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); - }, - - _mousemove : function(oEvent){ - var iHeightChange = oEvent.clientY - this.iStartHeight; - - this.oApp.exec("RESIZE_EDITING_AREA_BY", [0, iHeightChange]); - }, - - _mouseup : function(oEvent){ - jQuery(document).unbind("mousemove", this.$FnMouseMove); - jQuery(document).unbind("mouseup", this.$FnMouseUp); - - this.oApp.exec("MSG_EDITING_AREA_RESIZE_ENDED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the basic editor commands - * @name hp_XE_ExecCommand.js - */ -xe.XE_ExecCommand = jQuery.Class({ - name : "XE_ExecCommand", - oEditingArea : null, - - $init : function(oEditingArea){ - this.oEditingArea = oEditingArea; - }, - - $BEFORE_MSG_APP_READY : function(){ - // the right document will be available only when the src is completely loaded - if(this.oEditingArea && this.oEditingArea.tagName == "IFRAME") - this.oEditingArea = this.oEditingArea.contentWindow.document; - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+b", "EXECCOMMAND", ["bold", false, false]]); - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+u", "EXECCOMMAND", ["underline", false, false]]); - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+i", "EXECCOMMAND", ["italic", false, false]]); - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+d", "EXECCOMMAND", ["strikethrough", false, false]]); - - this.oApp.exec("REGISTER_UI_EVENT", ["bold", "click", "EXECCOMMAND", ["bold", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["underline", "click", "EXECCOMMAND", ["underline", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["italic", "click", "EXECCOMMAND", ["italic", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["lineThrough", "click", "EXECCOMMAND", ["strikethrough", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["superscript", "click", "EXECCOMMAND", ["superscript", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["subscript", "click", "EXECCOMMAND", ["subscript", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["justifyleft", "click", "EXECCOMMAND", ["justifyleft", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["justifycenter", "click", "EXECCOMMAND", ["justifycenter", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["justifyright", "click", "EXECCOMMAND", ["justifyright", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["justifyfull", "click", "EXECCOMMAND", ["justifyfull", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["orderedlist", "click", "EXECCOMMAND", ["insertorderedlist", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["unorderedlist", "click", "EXECCOMMAND", ["insertunorderedlist", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["outdent", "click", "EXECCOMMAND", ["outdent", false, false]]); - this.oApp.exec("REGISTER_UI_EVENT", ["indent", "click", "EXECCOMMAND", ["indent", false, false]]); - }, - - $BEFORE_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ - this._bOnlyCursorChanged = false; - - this.oApp.exec("FOCUS", []); - - if(sCommand.match(/^bold|underline|italic|strikethrough|superscript|subscript$/i)){ - var oSelection = this.oApp.getSelection(); - if(oSelection.collapsed) this._bOnlyCursorChanged = true; - } - - if(!this._bOnlyCursorChanged){ - this.oApp.exec("RECORD_UNDO_BEFORE_ACTION", [sCommand]); - } - }, - - $ON_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ - bUserInterface = (bUserInterface == "" || bUserInterface)?bUserInterface:false; - vValue = (vValue == "" || vValue)?vValue:false; - - this.oEditingArea.execCommand(sCommand, bUserInterface, vValue); - }, - - $AFTER_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ - if(!this._bOnlyCursorChanged){ - this.oApp.exec("RECORD_UNDO_AFTER_ACTION", [sCommand]); - } - - this.oApp.exec("CHECK_STYLE_CHANGE", []); - } -}); -//} - -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to wrapping the sentence around with a

tag when enter key is pressed - * @name hp_XE_WYSIWYGEnterKey.js - */ -xe.XE_WYSIWYGEnterKey = jQuery.Class({ - name : "XE_WYSIWYGEnterKey", - // IE/Opera do not need this - unsupportedBrowser : ['ie', 'opera'], - oEditingArea : null, - - $init : function(oEditingArea){ - this.oEditingArea = oEditingArea; - }, - - $BEFORE_MSG_APP_READY : function(){ - // the right document will be available only when the src is completely loaded - if(this.oEditingArea && this.oEditingArea.tagName == "IFRAME") - this.oEditingArea = this.oEditingArea.contentWindow.document; - }, - - $ON_EVENT_EDITING_AREA_KEYDOWN : function(oEvent){ - if(this.oApp.getEditingMode() != "WYSIWYG") return; - - if(oEvent.shiftKey) return; - - if(oEvent.keyCode == 13){ - var oSelection = this.oApp.getSelection(); - var sBM = oSelection.placeStringBookmark(); - var oLineInfo = oSelection.getLineInfo(); - var oStart = oLineInfo.oStart; - var oEnd = oLineInfo.oEnd; - - //top.document.title = oStart.oNode.tagName+":"+oStart.oNode.nodeValue+", "+oEnd.oNode.tagName+":"+oEnd.oNode.nodeValue+"::"+oStart.bParentBreak+", "+oStart.oLineBreaker.tagName; - - // line broke by sibling - // or - // the parent line breaker is just a block container - if(!oStart.bParentBreak || oSelection.rxBlockContainer.test(oStart.oLineBreaker.tagName)){ - oEvent.stopPropagation(); - oEvent.preventDefault(); - - var oSWrapper = this.oEditingArea.createElement("P"); - oSelection.moveToBookmark(sBM); - oSelection.setStartBefore(oStart.oNode); - oSelection.surroundContents(oSWrapper); - - oSelection.collapseToEnd(); - - var oEWrapper = this.oEditingArea.createElement("P"); - oSelection.setEndAfter(oEnd.oNode); - oSelection.surroundContents(oEWrapper); - - oSelection.removeStringBookmark(sBM); - - if(oSWrapper.innerHTML == "") oSWrapper.innerHTML = "
"; - if(oEWrapper.innerHTML == "") oEWrapper.innerHTML = "
"; - - if(oEWrapper.nextSibling && oEWrapper.nextSibling.tagName == "BR") oEWrapper.parentNode.removeChild(oEWrapper.nextSibling); - - oSelection.selectNodeContents(oEWrapper); - oSelection.collapseToStart(); - oSelection.select(); - this.oApp.exec("CHECK_STYLE_CHANGE", []); - }else{ - oSelection.removeStringBookmark(sBM); - } - } - } -}); -//} - -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to styling the font - * @name hp_XE_WYSIWYGStyler.js - * @required XE_EditingArea_WYSIWYG, XpressRangeManager - */ -xe.XE_WYSIWYGStyler = jQuery.Class({ - name : "XE_WYSIWYGStyler", - - $PRECONDITION : function(sFullCommand, aArgs){ - return (this.oApp.getEditingMode() == "WYSIWYG"); - }, - - $ON_SET_WYSIWYG_STYLE : function(oStyles){ - var oSelection = this.oApp.getSelection(); - - // style cursor - if(oSelection.collapsed){ - var oSpan = this.oApp.getWYSIWYGDocument().createElement("SPAN"); - oSelection.insertNode(oSpan); - oSpan.innerHTML = unescape("%uFEFF"); - - var sValue; - for(var sName in oStyles){ - sValue = oStyles[sName]; - - if(typeof sValue != "string") continue; - - oSpan.style[sName] = sValue; - } - - oSelection.selectNodeContents(oSpan); - oSelection.collapseToEnd(); - oSelection._window.focus(); - oSelection._window.document.body.focus(); - oSelection.select(); - - // FF3 will actually display %uFEFF when it is followed by a number AND certain font-family is used(like Gulim), so remove the chcaracter for FF3 - if(jQuery.browser.mozilla && jQuery.browser.nVersion == 3) - oSpan.innerHTML = ""; - - return; - } - - this.oApp.exec("RECORD_UNDO_BEFORE_ACTION", ["FONT STYLE"]); - - oSelection.styleRange(oStyles); - oSelection._window.focus(); - oSelection.select(); - - this.oApp.exec("RECORD_UNDO_AFTER_ACTION", ["FONT STYLE"]); - } -}); -//} - -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to detecting the style change - * @name hp_XE_WYSIWYGStyleGetter.js - */ -xe.XE_WYSIWYGStyleGetter = jQuery.Class({ - name : "XE_WYSIWYGStyleGetter", - - hKeyUp : null, - - getStyleInterval : 200, - - oStyleMap : { - fontFamily : { - type : "Value", - css : "fontFamily" - }, - fontSize : { - type : "Value", - css : "fontSize" - }, - lineHeight : { - type : "Value", - css : "lineHeight", - converter : function(sValue, oStyle){ - if(!sValue.match(/px$/)) return sValue; - - return Math.ceil((parseInt(sValue)/parseInt(oStyle.fontSize))*10)/10; - } - }, - bold : { - command : "bold" - }, - underline : { - command : "underline" - }, - italic : { - command : "italic" - }, - lineThrough : { - command : "strikethrough" - }, - superscript : { - command : "superscript" - }, - subscript : { - command : "subscript" - }, - justifyleft : { - command : "justifyleft" - }, - justifycenter : { - command : "justifycenter" - }, - justifyright : { - command : "justifyright" - }, - justifyfull : { - command : "justifyfull" - }, - orderedlist : { - command : "insertorderedlist" - }, - unorderedlist : { - command : "insertunorderedlist" - } - }, - - $init : function(){ - this.oStyle = this._getBlankStyle(); - }, - - $PRECONDITION : function(){ - if(this.oApp.getEditingMode() != "WYSIWYG") return false; - - return true; - }, - - $ON_MSG_APP_READY : function(){ - this.oDocument = this.oApp.getWYSIWYGDocument(); - this.oApp.exec("ADD_APP_PROPERTY", ["getCurrentStyle", jQuery.fnBind(this.getCurrentStyle, this)]); - }, - - $ON_EVENT_EDITING_AREA_MOUSEUP : function(oEvnet){ - if(this.hKeyUp) clearTimeout(this.hKeyUp); - this.oApp.exec("CHECK_STYLE_CHANGE", []); - }, - - $ON_EVENT_EDITING_AREA_KEYUP : function(oEvent){ - /* - backspace 8 - page up 33 - page down 34 - end 35 - home 36 - left arrow 37 - up arrow 38 - right arrow 39 - down arrow 40 - insert 45 - delete 46 - */ - if(!(oEvent.keyCode == 8 || (oEvent.keyCode >= 33 && oEvent.keyCode <= 40) || oEvent.keyCode == 45 || oEvent.keyCode == 46)) return; - - if(this.hKeyUp) clearTimeout(this.hKeyUp); - - this.hKeyUp = setTimeout(jQuery.fnBind(this.oApp.exec, this.oApp, "CHECK_STYLE_CHANGE", []), this.getStyleInterval); - }, - - $ON_CHECK_STYLE_CHANGE : function(){ - this._getStyle(); - }, - - $ON_RESET_STYLE_STATUS : function(){ - var oBlankStyle = this._getBlankStyle(); - for(var sAttributeName in oBlankStyle) - this.oApp.exec("SET_STYLE_STATUS", [sAttributeName, oBlankStyle[sAttributeName]]); - }, - - getCurrentStyle : function(){ - return this.oStyle; - }, - - _check_style_change : function(){ - this.oApp.exec("CHECK_STYLE_CHANGE", []); - }, - - _getBlankStyle : function(){ - var oBlankStyle = {}; - for(var attributeName in this.oStyleMap){ - if(this.oStyleMap[attributeName].type == "Value") - oBlankStyle[attributeName] = ""; - else - oBlankStyle[attributeName] = 0; - } - - return oBlankStyle; - }, - - _getStyle : function(){ - var oSelection = this.oApp.getSelection(); - - var funcFilter = function(oNode){ - if (!oNode.childNodes || oNode.childNodes.length == 0) - return true; - else - return false; - } - - var aBottomNodes = oSelection.getNodes(false, funcFilter); - - var oStyle, oBaseStyle, oTmpStyle, attributeName; - if(aBottomNodes.length == 0){ - oStyle = this._getStyleOf(oSelection.commonAncestorContainer); - }else{ - oStyle = this._getStyleOf(aBottomNodes[0]); - } - - for(attributeName in oStyle){ - if(this.oStyleMap[attributeName].converter){ - oStyle[attributeName] = this.oStyleMap[attributeName].converter(oStyle[attributeName], oStyle); - } - - if(this.oStyle[attributeName] != oStyle[attributeName]) - this.oApp.exec("MSG_STYLE_CHANGED", [attributeName, oStyle[attributeName]]); - } - - this.oStyle = oStyle; - }, - - _getStyleOf : function(oNode){ - var oStyle = this._getBlankStyle(); - - // this must not happen - if(!oNode) return oStyle; - - if(oNode.nodeType == 3) oNode = oNode.parentNode; - - var welNode = jQuery(oNode); - var attribute, cssName; - for(var styleName in this.oStyle){ - attribute = this.oStyleMap[styleName]; - - if(attribute.type && attribute.type == "Value"){ - if(attribute.css){ - var sValue = welNode.css(attribute.css); - - if(styleName == "fontFamily"){ - sValue = sValue.split(/,/)[0]; - } - - oStyle[styleName] = sValue; - }else{ - if(attribute.command){ - try{ - oStyle[styleName] = this.oDocument.queryCommandState(attribute.command); - }catch(e){} - }else{ - // todo - } - } - }else{ - if(attribute.command){ - try{ - if(this.oDocument.queryCommandState(attribute.command)){ - oStyle[styleName] = 1; - }else{ - oStyle[styleName] = 0; - } - }catch(e){} - }else{ - // todo - } - } - } - return oStyle; - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to changing the font size using Select element - * @name hp_XE_FontSizeWithSelectUI.js - */ -xe.XE_FontSizeWithSelectUI = jQuery.Class({ - name : "XE_FontSizeWithSelectUI", - - $init : function(elAppContainer){ - this._assignHTMLObjects(elAppContainer); - }, - - _assignHTMLObjects : function(elAppContainer){ - this.elFontSizeSelect = jQuery("SELECT.xpress_xeditor_ui_fontSize_select", elAppContainer).get(0); - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.registerBrowserEvent(this.elFontSizeSelect, "change", "SET_FONTSIZE_FROM_SELECT_UI"); - this.elFontSizeSelect.selectedIndex = 0; - }, - - $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ - if(sAttributeName == "fontSize"){ - this.elFontSizeSelect.value = sAttributeValue; - if(this.elFontSizeSelect.selectedIndex < 0) this.elFontSizeSelect.selectedIndex = 0; - } - }, - - $ON_SET_FONTSIZE_FROM_SELECT_UI : function(){ - var sFontSize = this.elFontSizeSelect.value; - if(!sFontSize) return; - - this.oApp.exec("SET_WYSIWYG_STYLE", [{"fontSize":sFontSize}]); - this.oApp.exec("CHECK_STYLE_CHANGE", []); - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to changing the font name using Select element - * @name hp_XE_FontNameWithSelectUI.js - */ -xe.XE_FontNameWithSelectUI = jQuery.Class({ - name : "XE_FontNameWithSelectUI", - - $init : function(elAppContainer){ - this._assignHTMLObjects(elAppContainer); - }, - - _assignHTMLObjects : function(elAppContainer){ - this.elFontNameSelect = jQuery("SELECT.xpress_xeditor_ui_fontName_select", elAppContainer).get(0); - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.registerBrowserEvent(this.elFontNameSelect, "change", "SET_FONTNAME_FROM_SELECT_UI"); - this.elFontNameSelect.selectedIndex = 0; - }, - - $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ - if(sAttributeName == "fontFamily"){ - this.elFontNameSelect.value = sAttributeValue.toLowerCase(); - if(this.elFontNameSelect.selectedIndex < 0) this.elFontNameSelect.selectedIndex = 0; - } - }, - - $ON_SET_FONTNAME_FROM_SELECT_UI : function(){ - var sFontName = this.elFontNameSelect.value; - if(!sFontName) return; - - this.oApp.exec("SET_WYSIWYG_STYLE", [{"fontFamily":sFontName}]); - this.oApp.exec("CHECK_STYLE_CHANGE", []); - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to setting/changing the lineheight - * @name hp_XE_LineHeight.js - */ -xe.XE_LineHeight = jQuery.Class({ - name : "XE_LineHeight", - - $init : function(oAppContainer){ - this._assignHTMLObjects(oAppContainer); - }, - - _assignHTMLObjects : function(oAppContainer){ - }, - - $ON_SET_LINEHEIGHT : function(nLineHeight){ - this.setLineHeight(nLineHeight); - }, - - getLineHeight : function(){ - var nodes = this._getSelectedNodes(false); - - var curWrapper, prevWrapper; - var iCurHeight, iHeight; - - if(nodes.length == 0) return -1; - - var iLength = nodes.length; - - if(iLength == 0){ - iHeight = -1; - }else{ - prevWrapper = this._getLineWrapper(nodes[0]); - iHeight = this._getWrapperLineheight(prevWrapper); - } - - var firstNode = this.oSelection.getStartNode(); - - if(iHeight > 0){ - for(var i=1; i=0; i--){ - if(aNodes[i].nodeType == 3 || aNodes[i].tagName == "BR"){ - var oP = oSelection._document.createElement("P"); - oInsertionPoint = aNodes[i].nextSibling; - while(i>=0 && aNodes[i] && (aNodes[i].nodeType == 3 || aNodes[i].tagName == "BR")){ - oP.insertBefore(aNodes[i--], oP.firstChild); - } - oFormattingNode.insertBefore(oP, oInsertionPoint); - i++; - } - } - - if(oFormattingNode && oFormattingNode.parentNode){ - var oP = oSelection._document.createElement("P"); - oP.innerHTML = unescape("
"); - oFormattingNode.parentNode.insertBefore(oP, oFormattingNode.nextSibling); - } - - this.oApp.exec("RECORD_UNDO_ACTION", ["Block Quote"]); - - return oFormattingNode; - }, - - _expandToTableStart : function(oSelection, oNode){ - var oC = oSelection.commonAncestorContainer; - var oResultNode = null; - - var bLastIteration = false; - while(oNode && !bLastIteration){ - if(oNode == oC) bLastIteration = true; - - if(/TBODY|TFOOT|THEAD|TR/i.test(oNode.tagName)){ - oResultNode = this._getTableRoot(oNode); - break; - } - oNode = oNode.parentNode; - } - - return oResultNode; - }, - - _getTableRoot : function(oNode){ - while(oNode && oNode.tagName != "TABLE") oNode = oNode.parentNode; - - return oNode; - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to inserting special characters - * @name hp_XE_SCharacter.js - * @required XpressRangeManager - */ -xe.XE_SCharacter = jQuery.Class({ - name : "XE_SCharacter", - - $init : function(oAppContainer){ - this.bIE = jQuery.browser.msie; - - this._assignHTMLObjects(oAppContainer); - - this.charSet = []; - this.charSet[0] = unescape('FF5B FF5D 3014 3015 3008 3009 300A 300B 300C 300D 300E 300F 3010 3011 2018 2019 201C 201D 3001 3002 %B7 2025 2026 %A7 203B 2606 2605 25CB 25CF 25CE 25C7 25C6 25A1 25A0 25B3 25B2 25BD 25BC 25C1 25C0 25B7 25B6 2664 2660 2661 2665 2667 2663 2299 25C8 25A3 25D0 25D1 2592 25A4 25A5 25A8 25A7 25A6 25A9 %B1 %D7 %F7 2260 2264 2265 221E 2234 %B0 2032 2033 2220 22A5 2312 2202 2261 2252 226A 226B 221A 223D 221D 2235 222B 222C 2208 220B 2286 2287 2282 2283 222A 2229 2227 2228 FFE2 21D2 21D4 2200 2203 %B4 FF5E 02C7 02D8 02DD 02DA 02D9 %B8 02DB %A1 %BF 02D0 222E 2211 220F 266D 2669 266A 266C 327F 2192 2190 2191 2193 2194 2195 2197 2199 2196 2198 321C 2116 33C7 2122 33C2 33D8 2121 2668 260F 260E 261C 261E %B6 2020 2021 %AE %AA %BA 2642 2640').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - this.charSet[1] = unescape('%BD 2153 2154 %BC %BE 215B 215C 215D 215E %B9 %B2 %B3 2074 207F 2081 2082 2083 2084 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 FFE6 %24 FFE5 FFE1 20AC 2103 212B 2109 FFE0 %A4 2030 3395 3396 3397 2113 3398 33C4 33A3 33A4 33A5 33A6 3399 339A 339B 339C 339D 339E 339F 33A0 33A1 33A2 33CA 338D 338E 338F 33CF 3388 3389 33C8 33A7 33A8 33B0 33B1 33B2 33B3 33B4 33B5 33B6 33B7 33B8 33B9 3380 3381 3382 3383 3384 33BA 33BB 33BC 33BD 33BE 33BF 3390 3391 3392 3393 3394 2126 33C0 33C1 338A 338B 338C 33D6 33C5 33AD 33AE 33AF 33DB 33A9 33AA 33AB 33AC 33DD 33D0 33D3 33C3 33C9 33DC 33C6').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - this.charSet[2] = unescape('3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 326A 326B 326C 326D 326E 326F 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 327A 327B 24D0 24D1 24D2 24D3 24D4 24D5 24D6 24D7 24D8 24D9 24DA 24DB 24DC 24DD 24DE 24DF 24E0 24E1 24E2 24E3 24E4 24E5 24E6 24E7 24E8 24E9 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 246A 246B 246C 246D 246E 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 320A 320B 320C 320D 320E 320F 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 321A 321B 249C 249D 249E 249F 24A0 24A1 24A2 24A3 24A4 24A5 24A6 24A7 24A8 24A9 24AA 24AB 24AC 24AD 24AE 24AF 24B0 24B1 24B2 24B3 24B4 24B5 2474 2475 2476 2477 2478 2479 247A 247B 247C 247D 247E 247F 2480 2481 2482').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - this.charSet[3] = unescape('3131 3132 3133 3134 3135 3136 3137 3138 3139 313A 313B 313C 313D 313E 313F 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 314A 314B 314C 314D 314E 314F 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 315A 315B 315C 315D 315E 315F 3160 3161 3162 3163 3165 3166 3167 3168 3169 316A 316B 316C 316D 316E 316F 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 317A 317B 317C 317D 317E 317F 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 318A 318B 318C 318D 318E').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - this.charSet[4] = unescape('0391 0392 0393 0394 0395 0396 0397 0398 0399 039A 039B 039C 039D 039E 039F 03A0 03A1 03A3 03A4 03A5 03A6 03A7 03A8 03A9 03B1 03B2 03B3 03B4 03B5 03B6 03B7 03B8 03B9 03BA 03BB 03BC 03BD 03BE 03BF 03C0 03C1 03C3 03C4 03C5 03C6 03C7 03C8 03C9 %C6 %D0 0126 0132 013F 0141 %D8 0152 %DE 0166 014A %E6 0111 %F0 0127 I 0133 0138 0140 0142 0142 0153 %DF %FE 0167 014B 0149 0411 0413 0414 0401 0416 0417 0418 0419 041B 041F 0426 0427 0428 0429 042A 042B 042C 042D 042E 042F 0431 0432 0433 0434 0451 0436 0437 0438 0439 043B 043F 0444 0446 0447 0448 0449 044A 044B 044C 044D 044E 044F').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - this.charSet[5] = unescape('3041 3042 3043 3044 3045 3046 3047 3048 3049 304A 304B 304C 304D 304E 304F 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 305A 305B 305C 305D 305E 305F 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 306A 306B 306C 306D 306E 306F 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 307A 307B 307C 307D 307E 307F 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 308A 308B 308C 308D 308E 308F 3090 3091 3092 3093 30A1 30A2 30A3 30A4 30A5 30A6 30A7 30A8 30A9 30AA 30AB 30AC 30AD 30AE 30AF 30B0 30B1 30B2 30B3 30B4 30B5 30B6 30B7 30B8 30B9 30BA 30BB 30BC 30BD 30BE 30BF 30C0 30C1 30C2 30C3 30C4 30C5 30C6 30C7 30C8 30C9 30CA 30CB 30CC 30CD 30CE 30CF 30D0 30D1 30D2 30D3 30D4 30D5 30D6 30D7 30D8 30D9 30DA 30DB 30DC 30DD 30DE 30DF 30E0 30E1 30E2 30E3 30E4 30E5 30E6 30E7 30E8 30E9 30EA 30EB 30EC 30ED 30EE 30EF 30F0 30F1 30F2 30F3 30F4 30F5 30F6').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); - }, - - _assignHTMLObjects : function(oAppContainer){ - oAppContainer = jQuery.$(oAppContainer) || document; - - this.elDropdownLayer = jQuery("DIV.xpress_xeditor_sCharacter_layer", oAppContainer).get(0); - - this.oTextField = jQuery("INPUT", this.elDropdownLayer).get(0); - this.oInsertButton = jQuery("+ BUTTON", this.oTextField).get(0); - this.aCloseButton = jQuery("BUTTON.close", this.elDropdownLayer).get(); - this.aSCharList = jQuery(".list", this.elDropdownLayer).get(); - var oLabelUL = jQuery(">UL", this.elDropdownLayer).get(0); - this.aLabelA = jQuery("A", oLabelUL).get(); - }, - - $ON_MSG_APP_READY : function(){ - var funcInsert = jQuery.fnBind(this.oApp.exec, this.oApp, "INSERT_SCHARACTERS", [this.oTextField.value]); - jQuery(this.oInsertButton).click(funcInsert, this); - - this.oApp.exec("SET_SCHARACTER_LIST", [this.charSet]); - - for(var i=0; i"); - }else{ - button = document.createElement("BUTTON"); - button.type = "button"; - } - span = document.createElement("SPAN"); - span.innerHTML = unescape(this.charSet[i][ii]); - button.appendChild(span); - - aLI[ii].appendChild(button); - this.aSCharList[i].appendChild(aLI[ii]); - } - - // enable this after Jindo framework is updated -// this.oApp.exec("ATTACH_HOVER_EVENTS", [jQuery(">LI>BUTTON", this.aSCharList[i])]).get(); - }, - - _stopBrowserEvent : function(obj, sEvent){ - jQuery(obj).bind(sEvent, function(e){e.stopPropagation();e.preventDefault();} ) - } -}); -//} -//{ -/** - * @fileOverview This file contains Xpress plugin that takes care of the operations related to Undo/Redo - * @name hp_XE_UndoRedo.js - * @required XE_EditingAreaManager, XpressRangeManager - */ -xe.XE_UndoRedo = jQuery.Class({ - name : "XE_UndoRedo", - actionHistory : null, - // this may also be called, lastAdded/lastRestored - oCurStateIdx : null, - iMinimumSizeChange : 10, - sBlankContentsForFF : "
", - - $init : function(){ - this.aUndoHistory = []; - this.oCurStateIdx = {nIdx: 0, nStep: 0}; - }, - - $PRECONDITION : function(sCmd){ - if(sCmd.match(/_DO_RECORD_UNDO_HISTORY_AT$/)) return true; - - try{ - if(this.oApp.getEditingMode() != "WYSIWYG") return false; - }catch(e){ - return false; - } - - return true; - }, - - $BEFORE_MSG_APP_READY : function(){ - this.oApp.exec("DO_RECORD_UNDO_HISTORY_AT", [this.oCurStateIdx, "", "", null]); - }, - - $ON_MSG_APP_READY : function(){ - this.bFF = jQuery.browser.mozilla; - - this.oApp.exec("ADD_APP_PROPERTY", ["getUndoHistory", jQuery.fnBind(this.getUndoHistory, this)]); - this.oApp.exec("ADD_APP_PROPERTY", ["getUndoStateIdx", jQuery.fnBind(this.getUndoStateIdx, this)]); - - this.oApp.exec("REGISTER_UI_EVENT", ["undo", "click", "UNDO"]); - this.oApp.exec("REGISTER_UI_EVENT", ["redo", "click", "REDO"]); - - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+z", "UNDO"]); - this.oApp.exec("REGISTER_HOTKEY", ["ctrl+y", "REDO"]); - }, - - $ON_UNDO : function(){ - var oTmpStateIdx = {}; - this.oApp.exec("DO_RECORD_UNDO_HISTORY", ["KEYPRESS", false, false, 1]); - if(this.oCurStateIdx.nIdx == 0) return; - - if(this.oCurStateIdx.nStep > 0){ - this.oCurStateIdx.nStep--; - }else{ - var oTmpHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - - this.oCurStateIdx.nIdx--; - - if(oTmpHistory.nTotalSteps>1){ - this.oCurStateIdx.nStep = 0; - }else{ - oTmpHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - this.oCurStateIdx.nStep = oTmpHistory.nTotalSteps-1; - } - } - - this.oApp.exec("RESTORE_UNDO_HISTORY", [this.oCurStateIdx.nIdx, this.oCurStateIdx.nStep]); - - this.oApp.exec("CHECK_STYLE_CHANGE", []); - }, - - - $ON_REDO : function(){ - if(this.oCurStateIdx.nIdx >= this.aUndoHistory.length) return; - - var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - if(this.oCurStateIdx.nIdx == this.aUndoHistory.length-1 && this.oCurStateIdx.nStep >= oCurHistory.nTotalSteps-1) return; - - if(this.oCurStateIdx.nStep < oCurHistory.nTotalSteps-1){ - this.oCurStateIdx.nStep++; - }else{ - this.oCurStateIdx.nIdx++; - oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - this.oCurStateIdx.nStep = oCurHistory.nTotalSteps-1; - } - - this.oApp.exec("RESTORE_UNDO_HISTORY", [this.oCurStateIdx.nIdx, this.oCurStateIdx.nStep]); - - this.oApp.exec("CHECK_STYLE_CHANGE", []); - }, - - $ON_RECORD_UNDO_ACTION : function(sAction){ - this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction]); - }, - - $ON_RECORD_UNDO_BEFORE_ACTION : function(sAction){ - this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction, true, true]); - }, - - $ON_RECORD_UNDO_AFTER_ACTION : function(sAction){ - this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction, true, false]); - }, - - $ON_RESTORE_UNDO_HISTORY : function(nUndoIdx, nUndoStateStep){ - this.oCurStateIdx.nIdx = nUndoIdx; - this.oCurStateIdx.nStep = nUndoStateStep; - - var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - var sContent = oCurHistory.sContent[this.oCurStateIdx.nStep]; - var oBookmark = oCurHistory.oBookmark[this.oCurStateIdx.nStep]; - - this.oApp.setIR(sContent, true); - - // setting the innerHTML may change the internal DOM structure, so save the value again. - var sCurContent = this.oApp.getIR(); - if(this.bFF && sCurContent == this.sBlankContentsForFF){ - sCurContent = ""; - } - oCurHistory.sContent[this.oCurStateIdx.nStep] = sCurContent; - - var oSelection = this.oApp.getEmptySelection(); - if(oSelection.selectionLoaded){ - if(oBookmark){ - oSelection.moveToXPathBookmark(oBookmark); - }else{ - oSelection = this.oApp.getEmptySelection(); - } - - oSelection.select(); - } - }, - - $ON_DO_RECORD_UNDO_HISTORY : function(sAction, bTwoStepAction, bBeforeAction, nForceAddUnlessEqual){ - bTwoStepAction = bTwoStepAction || false; - bBeforeAction = bBeforeAction || false; - nForceAddUnlessEqual = nForceAddUnlessEqual || 0; - - // if we're in the middle of some action history, remove everything after current idx if any "little" change is made - if(!(this.oCurStateIdx.nIdx == this.aUndoHistory.length-1)) nForceAddUnlessEqual = 1; - - var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; - - var sCurContent = this.oApp.getIR(); - var sHistoryContent = oCurHistory.sContent[this.oCurStateIdx.nStep]; - - if(this.bFF && sCurContent == this.sBlankContentsForFF){ - sCurContent = ""; - } - - // every TwoStepAction needs to be recorded - if(!bTwoStepAction){ - switch(nForceAddUnlessEqual){ - case 0: - if(Math.abs(sHistoryContent.length - sCurContent.length) .bx", this.oUILayer).get(); - - this.oFindInputSet = oTmp[0]; - this.oReplaceInputSet = oTmp[1]; - - this.oFindInput_Keyword = jQuery("INPUT", this.oFindInputSet).get(0); - - oTmp = jQuery("INPUT", this.oReplaceInputSet).get(); - this.oReplaceInput_Original = oTmp[0]; - this.oReplaceInput_Replacement = oTmp[1]; - - this.oFindNextButton = jQuery("BUTTON.find_next", this.oUILayer).get(0); - this.oCancelButton = jQuery("BUTTON.cancel", this.oUILayer).get(0); - - this.oReplaceButton = jQuery("BUTTON.replace", this.oUILayer).get(0); - this.oReplaceAllButton = jQuery("BUTTON.replace_all", this.oUILayer).get(0); - - this.aCloseButtons = jQuery("BUTTON.close", this.oUILayer).get(); - this.aCloseButtons[this.aCloseButtons.length] = this.oCancelButton; - }, - - $ON_MSG_APP_READY : function(){ - // the right document will be available only when the src is completely loaded - if(this.oEditingWindow && this.oEditingWindow.tagName == "IFRAME") - this.oEditingWindow = this.oEditingWindow.contentWindow; - - this.oFindReplace = new xe.FindReplace(this.oEditingWindow); - if(!this.oFindReplace.bBrowserSupported){ - this.oApp.exec("DISABLE_UI", ["find_replace"]); - return; - } - - for(var i=0; i" + sURL + ""; - this.oSelection.pasteHTML(str); - }else{ - var nSession = Math.ceil(Math.random()*10000); - var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); - this.oApp.exec("EXECCOMMAND", arg); - - this.oSelection.setFromSelection(); - - var oDoc = this.oApp.getWYSIWYGDocument(); - var aATags = oDoc.body.getElementsByTagName("A"); - var nLen = aATags.length; - var rxMarker = new RegExp(this.sRXATagMarker+nSession, "i"); - var elATag; - for(var i=0; i this.iMaxRows) iRows = this.iMaxRows; - - this.oRowInput.value = iRows; - this._showNewTable(); - }, - - $ON_ST_SET_COLUMN_NUM : function(iColumns, iColumnDiff){ - iColumns = iColumns || parseInt(this.oColumnInput.value); - iColumnDiff = iColumnDiff || 0; - - iColumns += iColumnDiff; - - if(iColumns < this.iMinColumns) iColumns = this.iMinColumns; - if(iColumns > this.iMaxColumns) iColumns = this.iMaxColumns; - - this.oColumnInput.value = iColumns; - this._showNewTable(); - }, - - $ON_ST_INSERT_TABLE : function(){ - var sTable = this._getTableString(); - - this.oApp.exec("PASTE_HTML", [sTable]); - - this.oApp.exec("ST_CLOSE", []); - }, - - $ON_ST_CLOSE : function(){ - this.oApp.exec("HIDE_ACTIVE_LAYER", []); - }, - - $ON_ST_SET_BORDER_WIDTH : function(iBorderWidth, iBorderWidthDiff){ - iBorderWidth = iBorderWidth || parseInt(this.oBorderWidthInput.value); - iBorderWidthDiff = iBorderWidthDiff || 0; - - iBorderWidth += iBorderWidthDiff; - - if(iBorderWidth < this.iMinBorderWidth) iBorderWidth = this.iMinBorderWidth; - if(iBorderWidth > this.iMaxBorderWidth) iBorderWidth = this.iMaxBorderWidth; - - this.oBorderWidthInput.value = iBorderWidth; - this._showNewTable(); - }, - - $ON_ST_INC_BORDER_WIDTH : function(){ - this.oApp.exec("ST_SET_BORDER_WIDTH", [null, 1]); - }, - - $ON_ST_DEC_BORDER_WIDTH : function(){ - this.oApp.exec("ST_SET_BORDER_WIDTH", [null, -1]); - }, - - $ON_ST_TOGGLE_BORDER_COLOR_LAYER : function(){ - if(this.welDropdownLayer.hasClass("p1")) - this.oApp.exec("ST_HIDE_BORDER_COLOR_LAYER", []); - else - this.oApp.exec("ST_SHOW_BORDER_COLOR_LAYER", []); - }, - - $ON_ST_SHOW_BORDER_COLOR_LAYER : function(){ - this.welDropdownLayer.addClass("p1"); - this.welDropdownLayer.removeClass("p2"); - - this.oApp.exec("SHOW_COLOR_PALETTE", ["ST_SET_BORDER_COLOR_FROM_PALETTE", this.elDropdownLayer]); - }, - - $ON_ST_HIDE_BORDER_COLOR_LAYER : function(){ - this.welDropdownLayer.removeClass("p1"); - - this.oApp.exec("HIDE_COLOR_PALETTE", []); - }, - - $ON_ST_TOGGLE_BGCOLOR_LAYER : function(){ - if(this.welDropdownLayer.hasClass("p2")) - this.oApp.exec("ST_HIDE_BGCOLOR_LAYER", []); - else - this.oApp.exec("ST_SHOW_BGCOLOR_LAYER", []); - }, - - $ON_ST_SHOW_BGCOLOR_LAYER : function(){ - this.welDropdownLayer.removeClass("p1"); - this.welDropdownLayer.addClass("p2"); - - this.oApp.exec("SHOW_COLOR_PALETTE", ["ST_SET_BGCOLOR_FROM_PALETTE", this.elDropdownLayer]); - }, - - $ON_ST_HIDE_BGCOLOR_LAYER : function(){ - this.welDropdownLayer.removeClass("p2"); - - this.oApp.exec("HIDE_COLOR_PALETTE", []); - }, - - $ON_ST_SET_BORDER_COLOR_FROM_PALETTE : function(sColorCode){ - this.oApp.exec("ST_SET_BORDER_COLOR", [sColorCode]); - this.oApp.exec("ST_HIDE_BORDER_COLOR_LAYER", []); - }, - - $ON_ST_SET_BORDER_COLOR : function(sColorCode){ - this.oBorderColorInput.value = sColorCode; - this.oButton_BorderColorPreview.style.backgroundColor = sColorCode; - - this._showNewTable(); - }, - - $ON_ST_SET_BGCOLOR_FROM_PALETTE : function(sColorCode){ - this.oApp.exec("ST_SET_BGCOLOR", [sColorCode]); - this.oApp.exec("ST_HIDE_BGCOLOR_LAYER", []); - }, - - $ON_ST_SET_BGCOLOR : function(sColorCode){ - this.oBGColorInput.value = sColorCode; - this.oButton_BGColorPreview.style.backgroundColor = sColorCode; - - this._showNewTable(); - }, - - _showNewTable : function(){ - var oTmp = document.createElement("DIV"); - oTmp.innerHTML = this._getTableString(); - var oNewTable = oTmp.firstChild; - this.oSampleTable.parentNode.insertBefore(oNewTable, this.oSampleTable); - this.oSampleTable.parentNode.removeChild(this.oSampleTable); - this.oSampleTable = oNewTable; - }, - - // need to do something about the table width as the same HTML code is being used to the actual table and the preview table - _getTableString : function(){ - var sBorderColorCode = this.oBorderColorInput.value; - var sBGColorCode = this.oBGColorInput.value; - var iBorderWidth = this.oBorderWidthInput.value; - var sTD = ""; - if(jQuery.browser.msie){ - sTD = "

"; - }else{ - if(jQuery.browser.firefox){ - sTD = ""; - }else{ - sTD = ""; - } - } - - var sTable = '


 

'; - var sRow = ''; - var iColumns = this.oColumnInput.value; - for(var i=0; i/ig, - regex_meanless_css2 = /(?:(?:margin|padding)\s*:\s*0(?:px)?|\-(?:moz|ms|webkit|opera)\-[\w-]+\s*:\s*.*?|[\w-]+\s*:\s*\-(?:moz|ms|webkit|opera)\-[\w-]+|(?:line-height|font-variant|font-stretch|font-size-adjust|font-size)\s*:\s*[a-z_-]+)\s*;?\s*|font-(?:weight|style)\s*:\s*normal;?/ig, - regex_class = /<(.*?)\s+class\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))(.*?)>/ig, - regex_class2 = /xe_selected_cell/g; - regex_handler = /<(.*?)\s+on[a-z]+\s*=(?:\s*".*?"|\s*'.*?'|[^\s>]+)(.*?)>/ig, - //regex_id = /<(.*?)\s+id\s*=(?:[^\s>]+|\s*".*?"|\s*'.*?')(.*?)>/ig, - //regex_script = //ig, - regex_font_color = /color\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, - regex_font_face = /face\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, - regex_font_size = /size\s*=(?:\s*"(\d+)"|\s*'(\d+)'|(\d+))/i, - regex_style = /style\s*=\s*(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, - regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, - regex_font_style = /font-style\s*:\s*italic;?/i, - regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i, - regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/ig, - regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //" - -var - allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var,iframe,object,param,style'.split(','), - lonely_tags = 'area,br,col,embed,hr,img,input,param'.split(','); - -var - replace_tags = { - 'b' : 'strong', - 'i' : 'em', - 's' : 'del', - 'strike' : 'del' - }; - -xe.XE_XHTMLFormatter = $.Class({ - name : "XE_XHTMLFormatter", - - $ON_MSG_APP_READY : function() { - this.oApp.addConverter("WYSIWYG_TO_IR", this.TO_IR); - this.oApp.addConverter("HTMLSrc_TO_IR", this.TO_IR); - this.oApp.addConverter("IR_TO_HTMLSrc", this.IR_TO); - this.oApp.addConverter("IR_TO_WYSIWYG", this.IR_TO); - }, - - TO_IR : function(sContent) { - var stack = []; - - // remove xeHandled attrs - sContent = sContent.replace(/xeHandled="YES"/ig,''); - - - // remove all useless styles - sContent = sContent.replace(regex_meanless_css1, function(m0,m1,m2,m3){ - m2 = m2.replace(regex_meanless_css2, ''); - - return '<'+m1+(m2?' style="'+m2+'"':'')+m3+'>'; - }); - - // remove all useless classes - sContent = sContent.replace(regex_class, function(m0,m1,m2,m3,m4,m5){ - var cls = jQuery.trim((m2 || m3 || m4 || "").replace(regex_class2, '')); - - return '<'+(m1||"")+(cls?' class="'+cls+'"':'')+(m5||"")+'>'; - }); - - // remove all event handler - sContent = sContent.replace(regex_handler, '<$1$2>'); - - // remove all id - //sContent = sContent.replace(regex_id, '<$1$2>'); - - // remove all scripts - //sContent = sContent.replace(regex_script, ''); - - if (jQuery.browser.msie) { - // remove jQuery attributes - sContent = sContent.replace(regex_jquery, ''); - - // quote all attrs - sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){ - return '<'+m1+' '+ - m2.replace(regex_quote_attr, function(s0,s1,s2,s3){ - if (s1) return s1; - if(/^"/.test(s3)||/"$/.test(s3)) return s2+'='+s3; - return s2+'="'+s3+'"'; - }) + '>'; - }); - } - - // remove all useless tag and enclose tags - regex = /<(\/)?([:\w\/-]+)(.*?)>/ig; - sContent = sContent.replace(regex, function(m0,m1,m2,m3){ - var m3s = []; - var state = ''; - - m1 = m1 || ''; - m2 = m2.toLowerCase(); - m3 = $.trim(m3 || ''); - - if (!m1) { - if ($.inArray(m2,lonely_tags) >= 0) { - var len = m3.length; - if (m2 == 'br') m3 = ''; - if (!m3 || m3.substring(len-1,len) != '/') m3 += ' /'; - - return '<'+m2+' '+m3+'>'; - } - - if (replace_tags[m2]) { - stack.push({tag:m2, state:'deleted'}); - - m2 = replace_tags[m2]; - state = 'inserted'; - } else if (m2 == 'font') { - stack.push({tag:m2, state:'deleted'}); - - m2 = 'span'; - m3s = []; - if (regex_font_color.test(m3)) m3s.push('color:'+(RegExp.$1||RegExp.$2||RegExp.$3)+';'); - if (regex_font_face.test(m3)) m3s.push('font-family:'+(RegExp.$1||RegExp.$2||RegExp.$3)+';'); - - m3 = m3s.length?'style="'+m3s.join('')+'"':''; - state = 'inserted'; - } else if (m2 == 'center') { - stack.push({tag:m2, state:'deleted'}); - - m2 = 'div' - m3 = 'style="text-align:center"'; - - state = 'inserted'; - } else if (m2 == 'span') { - var style = ''; - - if (!m3) { - stack.push({tag:m3, state:'deleted'}); - return ''; - } - - if (regex_style.test(m3)) { - var tmpstack = []; - var tmptag = ''; - - style = RegExp.$1||RegExp.$2||RegExp.$3; - m3 = m3.replace(regex_style, ''); - - if (regex_font_weight.test(style)) { - if (RegExp.$1 == 'bold' || RegExp.$1 == 'bolder') { - style = style.replace(regex_font_weight, ''); - tmpstack.push({tag:'strong', state:'inserted'}); - tmptag += ''; - } - } - - if (regex_font_style.test(style)) { - style = style.replace(regex_font_style, ''); - tmpstack.push({tag:'em', state:'inserted'}); - tmptag += ''; - } - - if (regex_font_decoration.test(style)) { - var deco_css = ' '+RegExp.$1.toLowerCase()+' '; - - if (deco_css.indexOf('underline ') > 0) { - deco_css = deco_css.replace('underline ', ''); - tmpstack.push({tag:'u', state:'inserted'}); - tmptag += ''; - } - - if (deco_css.indexOf('line-through ') > 0) { - deco_css = deco_css.replace('line-through ', ''); - tmpstack.push({tag:'del', state:'inserted'}); - tmptag += ''; - } - - deco_css = $.trim(deco_css); - style = style.replace(regex_font_decoration, (deco_css?'text-decoration:'+deco_css+';':'')); - } - - style = $.trim(style); - - stack.push({tag:m2, state:(!m3&&!style?'deleted':'')}); - stack = stack.concat(tmpstack); - - return (!m3&&!style?'':'')+tmptag; - } - } else { - state = (jQuery.inArray(m2,allow_tags) < 0)?'deleted':''; - if (state == 'deleted') return ''; - } - - stack.push({tag:m2, state:state}); - } else { - var tags = [], t = ''; - - if (!stack.length) return ''; - - do { - t = stack.pop(); - if (t.state != 'inserted' && t.tag != m2) { - stack.push(t); - return tags.join(''); - } - if (t.state != 'deleted') tags.push(''); - } while(stack.length && t.tag != m2); - - return tags.join(''); - } - - return '<'+m1+m2+(m3?' '+m3:'')+'>'; - }); - if (stack.length) { - var t = ''; - - do { - t = stack.pop(); - if (t.state != 'deleted') sContent += ''; - } while(stack.length); - } - - return sContent; - }, - - IR_TO : function(sContent) { - return sContent; - } -}); - -// center, font, b, i, s, strike - -})(jQuery); -/** - * Support XE extensions - * @author gony - */ -xe.XE_Extension = jQuery.Class({ - name : "XE_Extension", - seq : '', - - $init : function(elAppContainer, editor_sequence) { - this.seq = editor_sequence; - this._assignHTMLObjects(elAppContainer); - }, - - _assignHTMLObjects : function(elAppContainer) { - this.elDropdownLayer = jQuery('DIV.xpress_xeditor_extension_layer', elAppContainer).get(0); - }, - - _removeAttrs : function(sContent) { - return sContent; - }, - - _addEvent : function() { - if (this.oApp.getEditingMode() != 'WYSIWYG') return; - - var doc = this.oApp.getWYSIWYGDocument(); - var seq = this.seq; - var fn = function(){ - var obj = jQuery(this); - var comp = obj.attr('editor_component'); - if (comp && jQuery.isFunction(openComponent)) { - editorPrevNode = obj.get(0); - openComponent(comp, seq); - } - }; - - jQuery('img,div[editor_component]', doc).each(function(){ - var obj = jQuery(this); - if(this.nodeName == 'IMG' && !obj.attr('editor_component')) obj.attr('editor_component','image_link') - if(!obj.attr('xeHandled')) { - obj.attr('xeHandled','YES'); - obj.dblclick(fn); - } - }); - }, - - $ON_MSG_APP_READY : function() { - this.oApp.exec('REGISTER_UI_EVENT', ['extension', 'click', 'TOGGLE_EXTENSION_LAYER']); - }, - - $ON_TOGGLE_EXTENSION_LAYER : function() { - this.oApp.exec('TOGGLE_TOOLBAR_ACTIVE_LAYER', [this.elDropdownLayer]); - }, - - $ON_CHANGE_EDITING_MODE : function(mode) { - var self = this; - setTimeout(function(){ self._addEvent(); }, 100); - }, - - $ON_PASTE_HTML : function() { - var self = this; - setTimeout(function(){ self._addEvent(); }, 100); - }, - - $ON_LOAD_IR_FIELD : function() { - var self = this; - setTimeout(function(){ self._addEvent(); }, 100); - }, - - $ON_SET_IR : function() { - var self = this; - setTimeout(function(){ self._addEvent(); }, 100); - } -}); -/** - * Auto saving - * @author gony - */ -xe.XE_AutoSave = jQuery.Class({ - name : "XE_AutoSave", - form : null, - textarea : null, - - $init : function(oIRTextarea, elAppContainer) { - this.form = oIRTextarea.form; - this.textarea = oIRTextarea; - - this._assignHTMLObjects(elAppContainer); - }, - - _assignHTMLObjects : function(elAppContainer) { - this.welMessageBox = jQuery('autosave_message'); - }, - - $ON_MSG_APP_READY : function() { - var elTitle = jQuery(this.form._saved_doc_title); - var elContent = jQuery(this.form._saved_doc_content); - var title = jQuery.trim(elTitle.val()); - var content = jQuery.trim(elContent.val()); - - if (title || content) { - if (confirm(this.form._saved_doc_message.value)) { - jQuery(this.form.title).val(title); - this.oApp.setIR(content); - } else { - editorRemoveSavedDoc(); - } - } - - editorEnableAutoSave(this.form, jQuery(this.form).attr("editor_sequence")); - - // register hotkey - this.oApp.exec('REGISTER_HOTKEY', ['ctrl+shift+s','AUTO_SAVE']); - }, - - $ON_AUTO_SAVE : function() { - _editorAutoSave(); - } -}); -/** - * Format Block plugin - * @author gony - */ -xe.XE_FormatWithSelectUI = jQuery.Class({ - name : "XE_FormatWithSelectUI", - - $init : function(elAppContainer){ - this._assignHTMLObjects(elAppContainer); - }, - - _assignHTMLObjects : function(elAppContainer){ - this.elFormatSelect = jQuery("SELECT.xpress_xeditor_ui_format_select", elAppContainer).get(0); - }, - - $ON_MSG_APP_READY : function(){ - this.oApp.registerBrowserEvent(this.elFormatSelect, "change", "SET_FORMAT_FROM_SELECT_UI"); - this.elFormatSelect.selectedIndex = 0; - }, - - $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ - var blockName = this.oApp.getWYSIWYGDocument().queryCommandValue("FormatBlock"); - - if (!blockName) return (this.elFormatSelect.selectedIndex = 0); - if (jQuery.browser.msie && /([0-9])/.test(blockName)) blockName = 'h'+(RegExp.$1); - - this.elFormatSelect.value = blockName.toLowerCase(); - if(this.elFormatSelect.selectedIndex < 0) this.elFormatSelect.selectedIndex = 0; - }, - - $ON_SET_FORMAT_FROM_SELECT_UI : function(){ - var sFormat = this.elFormatSelect.value; - if(!sFormat) return; - if(jQuery.browser.msie) sFormat = '<'+sFormat+'>'; - - this.oApp.exec("EXECCOMMAND", ["FormatBlock", false, sFormat]); - this.oApp.exec("CHECK_STYLE_CHANGE", []); - } -}); -/** - * Enhanced Table Fetures - * @author gony - */ - -// 표 편집 확장 기능 -xe.XE_Table = jQuery.Class({ - _startSel : null, - _endSel : null, - - $ON_MSG_APP_READY : function() { - this._doc = jQuery(this.oApp.getWYSIWYGDocument()); - - this.$FnMouseDown = jQuery.fnBind(this._mousedown, this); - this.$FnMouseUp = jQuery.fnBind(this._mouseup, this); - this.$FnMouseMove = jQuery.fnBind(this._mousemove, this); - - this._doc.mousedown(this.$FnMouseDown); - - // initialize - this._startSel = null; - this._endSel = null; - - // register buttons - this.oApp.exec('REGISTER_UI_EVENT', ['merge_cells', 'click', 'MERGE_CELLS']); - this.oApp.exec('REGISTER_UI_EVENT', ['split_col', 'click', 'CELL_SPLIT_BY_COL']); - this.oApp.exec('REGISTER_UI_EVENT', ['split_row', 'click', 'CELL_SPLIT_BY_ROW']); - - // register hotkeys - this.oApp.exec('REGISTER_HOTKEY', ['ctrl+alt+m', 'MERGE_CELLS']); - - // perform default ready action - this.$super.$ON_MSG_APP_READY(); - }, - - $ON_MERGE_CELLS : function() { - var html = ""; - var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); - var self = this; - - // 선택된 셀이 없으면 종료 - if (!cell.length) return; - - // UNDO 지점 기록 - this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Merge"]); - - // 선택한 모든 셀의 데이터를 첫번째 셀로 복사 - cell.each(function(){ html += jQuery(this).html() }).eq(0).html(html); - - // 첫번째 셀 가로 확장 - var colspan = 0; - cell.eq(0).nextAll('td,th').andSelf().filter('.xe_selected_cell').each(function(idx){ - colspan += self._getSpan(this, 'col'); - }); - - // 마지막 셀까지 줄의 갯수 계산 - var rect = this._getRect(cell.eq(0)); - var start_tr = cell.eq(0).parent('tr'); - var end_tr = cell.eq(cell.length-1).parent('tr'); - var all_rows = cell.parents('table').eq(0).find('tr'); - var rowspan = all_rows.index(end_tr.get(0)) - all_rows.index(start_tr.get(0)) + this._getSpan(cell.eq(cell.length-1), 'row'); - - // 첫번째 셀 colspan, rowspan 속성 지정 - cell.eq(0).attr('colSpan', colspan).attr('rowSpan', rowspan); - - // 첫번째 셀을 제외한 다른 모든 셀 제거 - cell.slice(1).remove(); - }, - - $ON_CELL_SPLIT_BY_ROW : function(many) { - var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); - var table = cell.parents('table').eq(0); - var self = this; - - // 선택된 셀이 없으면 종료 - if (!cell.length) return; - - // UNDO 지점 기록 - this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Split By Row"]); - - // 선택 영역의 상하 좌표 구함 - var _top = this._getRect(cell.eq(0)).top; - var _bottom = this._getRect(cell.eq(cell.length-1)).bottom; - - // 테이블의 모든 셀에서 선택영역에 해당하는 셀을 구한다(상하 기준). - (cell = table.find('td,th').filter(function(){ - var rect = self._getRect(jQuery(this)); - - return !(rect.bottom <= _top || rect.top >= _bottom); - })).filter('.xe_selected_cell').each(function(){ - var t = jQuery(this); - var row = t.parent('tr'); - var rowspan = self._getSpan(t, 'row'); - var rect = self._getRect(t); - var queue = []; - var clone = t.clone().html('
'); - var topspan = 1, botspan = 1; - - // rowspan > 1이면 현재 셀의 rowspan을 절반으로 분할한다. - if (rowspan > 1) { - - topspan = Math.ceil(rowspan/2); - botspan = rowspan - topspan; - - queue.push(function(){ - t.attr('rowSpan', topspan); - }); - - clone.attr('rowSpan', botspan); - } else { - // rowspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 rowspan을 추가 - cell.filter(function(){ - if (t.get(0) == this) return false; - - var tt = jQuery(this); - var rc = self._getRect(tt); - - // 범위를 넘은 부분은 제외 - if (rc.bottom <= rect.top || rc.top >= rect.bottom) return false; - - return true; - }).each(function(){ - var tt = jQuery(this); - var sp = self._getSpan(tt, 'row')+1; - - // rowspan 1 추가 - queue.push(function(){ - tt.attr('rowSpan', sp); - }); - }); - - // 새 줄을 추가한다. - if (jQuery.browser.msie) { - // Fix bug for IE - row.after(row.clone().empty().get(0).outerHTML); - } else { - row.after(row.clone().empty()); - } - } - - var rows = row.nextAll('tr'); - - // 현재 셀이 마지막 줄에 있다면 한 줄 추가 후 새로운 셀 추가 - if (!rows.length) { - row.after(row.clone().empty().append(clone)); - } else { - var next_sib = rows.eq(topspan - 1).children('td,th').filter(function(){ - return ( self._getRect(jQuery(this)).left > rect.left ); - }); - - if (jQuery.browser.msie) { - next_sib.length? - next_sib.eq(0).before(clone.get(0).outerHTML): - rows.eq(topspan-1).append(clone.get(0).outerHTML); - } else { - next_sib.length? - next_sib.slice(0,1).before(clone): - rows.slice(topspan-1,1).append(clone); - } - } - - // 함수를 바로 실행하면 좌표가 틀어지므로, 큐에 넣은 후 실행 - jQuery.each(queue, function(){ this(); }); - - }); - }, - - $ON_CELL_SPLIT_BY_COL : function(many) { - var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); - var table = cell.parents('table').slice(0,1); - var self = this; - var ie_bug = [], tmpId = (new Date).getTime(), tmpStr = ''; - - // 선택된 셀이 없으면 종료 - if (!cell.length) return; - - // UNDO 지점 기록 - this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Split By Column"]); - - // 선택 영역의 좌우 좌표 구함 - var first_row = cell.eq(0).parent('tr'); - var _left = this._getRect(first_row.find('.xe_selected_cell:first')).left; - var _right = this._getRect(first_row.find('.xe_selected_cell:last')).right; - - // 테이블의 모든 셀에서 선택영역에 해당하는 셀을 구한다(좌우 기준). - (cell = table.find('td,th').filter(function(){ - var rect = self._getRect(jQuery(this)); - - return !(rect.right <= _left || rect.left >= _right); - })).filter('.xe_selected_cell').each(function(idx){ - var t = jQuery(this); - var colspan = self._getSpan(t, 'col'); - var clone = t.clone().html('
'); - - // colspan > 1 이면 colspan을 절반으로 분할한다. - if (colspan > 1) { - var leftspan = Math.ceil(colspan/2); - var rightspan = colspan - leftspan; - - t.attr('colSpan', leftspan); - clone.attr('colSpan', rightspan); - } else { - // colspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 colspan을 추가 - var rect = self._getRect(t); - - cell.filter(function(){ - if (t.get(0) == this) return false; - - var tt = jQuery(this); - var rc = self._getRect(tt); - - // 범위를 넘은 부분은 제외 - if (rc.right <= rect.left || rc.left >= rect.right) return false; - - return true; - }).each(function(){ - var tt = jQuery(this); - - // colspan 1 추가 - tt.attr('colSpan', self._getSpan(tt, 'col')+1); - }); - - clone.attr('colSpan', 1); - } - - if (jQuery.browser.msie) { - // Fix for IE bug - t.after(clone.get(0).outerHTML); - } else { - t.after(clone); - } - }); - }, - - $ON_CHECK_STYLE_CHANGE : function(){ - var ui = ['merge_cells', 'split_col', 'split_row']; - var app = this.oApp; - var command = (this._startSel && this._startSel.is('.xe_selected_cell'))?'ENABLE_UI':'DISABLE_UI'; - - jQuery.each(ui, function(){ app.exec(command, [this]); }); - }, - - _mousedown : function(event) { - var cur = jQuery(event.target); - var sel = cur.parents().andSelf().filter('td,th,table'); - var app = this.oApp; - var self = this; - - // 모든 선택영역 해제 - jQuery('td.xe_selected_cell', this.oApp.getWYSIWYGDocument()).removeClass('xe_selected_cell'); - - this._startSel = null; - this._endSel = null; - - if (!sel.length || !this._isLeftClicked(event.button)) return; - - function delayed(){ - sel = app.getSelection().cloneRange(); - sel.collapseToStart(); - sel = jQuery(sel.startContainer).parents().andSelf().filter('td,th').eq(0); - - if (!sel.length) return self._removeAllListener()||true; - - // 좌표를 구한다 - self._getRect(self._startSel = sel); - - // 이벤트 바인딩 - self._doc.bind('mousemove', self.$FnMouseMove); - self._doc.bind('mouseup', self.$FnMouseUp); - } - - // mousedown이 일어난 후에 선택 영역이 설정되므로 실행을 지연시킨다. - setTimeout(delayed, 0); - }, - - _mouseup : function(event) { - // 선택된 셀 확인 - this._removeAllListener(); - - // 시작셀과 종료셀 제거 - this._startSel = this._endSel = null; - }, - - _mousemove : function(event) { - var cur = jQuery(event.target); - var cell = cur.parents().andSelf().filter('td,th').eq(0); - var self = this; - - // 마우스 왼쪽 버튼이 눌리지 않았으면 종료 - if (!cell.length || !this._isLeftClicked(event.button)) return; - if (!this._endSel && cell.get(0) == this._startSel.get(0)) return; - if (this._endSel && cell.get(0) == this._endSel.get(0)) return; - - // 종료셀 && 종료셀의 좌표 - this._getRect(this._endSel = cell); - - // 선택 범위를 구한다 - var _top = Math.min(this._startSel.rect.top, this._endSel.rect.top); - var _left = Math.min(this._startSel.rect.left, this._endSel.rect.left); - var _bottom = Math.max(this._startSel.rect.bottom, this._endSel.rect.bottom); - var _right = Math.max(this._startSel.rect.right, this._endSel.rect.right); - - var table = cell.parents('table'); - var cells = table.find('td,th').removeClass('xe_selected_cell'); - var i = 0; - - // 복잡한 모양의 테이블을 위한 반복 처리 - var selected = jQuery(); - do { - // 선택한 셀로 최대 영역 재계산 - selected.each(function(){ - var rect = self._getRect(jQuery(this)); - - // 영역 재계산 - if (rect.right > _right) _right = rect.right; - if (rect.left < _left) _left = rect.left; - if (rect.top < _top) _top = rect.top; - if (rect.bottom > _bottom) _bottom = rect.bottom; - }); - - // 좌표 범위 안에 있는 선택할 셀을 추린다. - cells = cells.filter(':not(.xe_selected_cell)'); - selected = cells.filter(function(){ - var rect = self._getRect(jQuery(this)); - - if (rect.right <= _left || rect.left >= _right || rect.bottom <= _top || rect.top >= _bottom) return false; - - return true; - }).addClass('xe_selected_cell'); - } while(selected.length); - - // 브라우저의 기본 선택영역 해제 : FF 제외 - 기본 기능이 충분히 좋아서 + 이 부분을 실행하면 오류가 발생해서 - if (!jQuery.browser.mozilla) { - function delayed() { - var sel = self.oApp.getSelection(); - - if (!self._startSel) return; - if (!self._startSel.get(0).firstChild) self._startSel.text(" "); - - sel.selectNode(self._startSel.get(0).firstChild); - sel.collapseToStart(); - sel.select(); - } - - setTimeout(delayed, 0); - } - - return false; - }, - - _removeAllListener : function() { - // 이벤트 해제 - this._doc.unbind("mousemove", this.$FnMouseMove); - this._doc.unbind("mouseup", this.$FnMouseUp); - }, - - _isLeftClicked : function(value) { - return jQuery.browser.msie?!!(value & 1):(value == 0); - }, - - _getRect : function(obj) { - var el = obj.get(0); - - obj.rect = {}; - obj.rect.top = el.offsetTop; - obj.rect.left = el.offsetLeft; - obj.rect.bottom = obj.rect.top + el.offsetHeight; - obj.rect.right = obj.rect.left + el.offsetWidth; - - return obj.rect; - }, - - _getSpan : function(obj, type) { - var span = parseInt(jQuery(obj).attr(type+'span')); - - return isNaN(span)?1:span; - } -}).extend(xe.XE_Table); +// extends jQuery object +(function($){ + +$.extend({ + Class : function(def) { + function c(){ + if (typeof this.$super != 'undefined') this.$super.$this = this; + if ($.isFunction(this.$init)) this.$init.apply(this, arguments); + } + c.prototype = def; + c.constructor = c; + c.extend = Class_extend; + + return c; + }, + $ : function(id) { + if(typeof id == 'string') { + if (id.substring(0,1) == '<') return $(id).get(0); + return $('#'+id).get(0); + } else { + return id; + } + }, + fnBind : function(fn, th/* , args... */) { + var args = $.makeArray(arguments); + args.shift(); args.shift(); + + return function() { + var a = args.concat($.makeArray(arguments)); + + return fn.apply(th, a); + }; + } +}); + +$.browser.nVersion = parseFloat($.browser.version); + +function Class_extend(superDef) { + var Super = superDef.prototype; + + this.prototype.$super = {}; + + function bind(fn) { + return function() { + return fn.apply(this.$this, arguments); + }; + } + + for(var x in Super) { + if (!Super.propertyIsEnumerable(x)) continue; + + if (typeof this.prototype[x] == 'undefined') this.prototype[x] = Super[x]; + this.prototype.$super[x] = $.isFunction(Super[x])?bind(Super[x]):Super[x]; + } + + return this; +} + +})(jQuery); + +if (typeof window.xe == 'undefined') window.xe = {}; + +//{ + /** + * @fileOverview This file contains Xpress framework core + * @name XpressCore.js + */ +xe.XpressCore = jQuery.Class({ + name : "XpressCore", + + $init : function(htOptions){ + htOptions = !htOptions?{}:jQuery.Class({}).extend({ + oDebugger : null + }).extend(htOptions); + if(htOptions.oDebugger){ + this.oDebugger = htOptions.oDebugger; + this.oDebugger.oApp = this; + } + + // To prevent processing a Xpress command before all the plugins are registered and ready, + // Queue up all the commands here until the application's status is changed to READY + this.commandQueue = []; + + this.oCommandMap = {}; + this.oDisabledCommand = {}; + this.aPlugins = []; + + this.appStatus = xe.APP_STATUS["NOT_READY"]; + + // Register the core as a plugin so it can receive messages + this.registerPlugin(this); + }, + + exec : function(msg, args, oEvent){ + // If the application is not yet ready just queue the command + if(this.appStatus == xe.APP_STATUS["NOT_READY"]){ + this.commandQueue[this.commandQueue.length] = {'msg':msg, 'args':args, 'event':oEvent}; + return true; + } + + this.exec = this._exec; + this.exec(msg, args, oEvent); + }, + + delayedExec : function(msg, args, nDelay, oEvent){ + var fExec = jQuery.fnBind(this.exec, this, msg, args, oEvent); + setTimeout(fExec, nDelay); + }, + + _exec : function(msg, args, oEvent){return (this._exec = this.oDebugger?this._execWithDebugger:this._execWithoutDebugger).call(this, msg, args, oEvent);}, + _execWithDebugger : function(msg, args, oEvent){this.oDebugger.log_MessageStart(msg, args);var bResult = this._doExec(msg, args, oEvent);this.oDebugger.log_MessageEnd(msg, args);return bResult; }, + _execWithoutDebugger : function(msg, args, oEvent){return this._doExec(msg, args, oEvent);}, + _doExec : function(msg, args, oEvent){ + var bContinue = false; + + if(!this.oDisabledCommand[msg]){ + var allArgs = []; + if(args && args.length){ + var iLen = args.length; + for(var i=0; i= 0 && xe.DOMFix.parentNode(aAllNodes[iChildIdx]) == aAllNodes[iCurIdx]){ + iChildIdx = this._recurConstructClonedTree(aAllNodes, iChildIdx, aAllNodes[iCurIdx], oCurNodeCloneWithChildren, oClonedStartContainer, oClonedEndContainer); + } + + // this may trigger an error message in IE when an erroneous script is inserted + oClonedParentNode.insertBefore(oCurNodeCloneWithChildren, oClonedParentNode.firstChild); + + return iChildIdx; + }; + + aNodes[aNodes.length] = xe.DOMFix.parentNode(aNodes[aNodes.length-1]); + _recurConstructClonedTree(aNodes, aNodes.length-1, aNodes[aNodes.length-1], oClonedParentNode); + + return {oStartContainer: oClonedStartContainer, oEndContainer: oClonedEndContainer}; + }, + + cloneRange : function(){ + return this._copyRange(new xe.W3CDOMRange(this._document)); + }, + + _copyRange : function(oClonedRange){ + oClonedRange.collapsed = this.collapsed; + oClonedRange.commonAncestorContainer = this.commonAncestorContainer; + oClonedRange.endContainer = this.endContainer; + oClonedRange.endOffset = this.endOffset; + oClonedRange.startContainer = this.startContainer; + oClonedRange.startOffset = this.startOffset; + oClonedRange._document = this._document; + + return oClonedRange; + }, + + collapse : function(toStart){ + if(toStart){ + this.endContainer = this.startContainer; + this.endOffset = this.startOffset; + }else{ + this.startContainer = this.endContainer; + this.startOffset = this.endOffset; + } + + this._updateRangeInfo(); + }, + + compareBoundaryPoints : function(how, sourceRange){ + switch(how){ + case xe.W3CDOMRange.START_TO_START: + return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.startContainer, sourceRange.startOffset); + case xe.W3CDOMRange.START_TO_END: + return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.startContainer, sourceRange.startOffset); + case xe.W3CDOMRange.END_TO_END: + return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.endContainer, sourceRange.endOffset); + case xe.W3CDOMRange.END_TO_START: + return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.endContainer, sourceRange.endOffset); + } + }, + + _findBody : function(oNode){ + if(!oNode) return null; + while(oNode){ + if(oNode.tagName == "BODY") return oNode; + oNode = xe.DOMFix.parentNode(oNode); + } + return null; + }, + + _compareEndPoint : function(oContainerA, iOffsetA, oContainerB, iOffsetB){ + var iIdxA, iIdxB; + + if(!oContainerA || this._findBody(oContainerA) != this._document.body){ + oContainerA = this._document.body; + iOffsetA = 0; + } + + if(!oContainerB || this._findBody(oContainerB) != this._document.body){ + oContainerB = this._document.body; + iOffsetB = 0; + } + + var compareIdx = function(iIdxA, iIdxB){ + // iIdxX == -1 when the node is the commonAncestorNode + // if iIdxA == -1 + // -> [[...]]... + // if iIdxB == -1 + // -> ...[[...]] + if(iIdxB == -1) iIdxB = iIdxA+1; + if(iIdxA < iIdxB) return -1; + if(iIdxA == iIdxB) return 0; + return 1; + }; + + var oCommonAncestor = this._getCommonAncestorContainer(oContainerA, oContainerB); + + // ================================================================================================================================================ + // Move up both containers so that both containers are direct child nodes of the common ancestor node. From there, just compare the offset + // Add 0.5 for each contaienrs that has "moved up" since the actual node is wrapped by 1 or more parent nodes and therefore its position is somewhere between idx & idx+1 + // NODE1

NODE2

NODE3
+ // The position of NODE2 in COMMON_ANCESTOR is somewhere between after NODE1(idx1) and before NODE3(idx2), so we let that be 1.5 + + // container node A in common ancestor container + var oNodeA = oContainerA; + if(oNodeA != oCommonAncestor){ + while((oTmpNode = xe.DOMFix.parentNode(oNodeA)) != oCommonAncestor){oNodeA = oTmpNode;} + + iIdxA = this._getPosIdx(oNodeA)+0.5; + }else iIdxA = iOffsetA; + + // container node B in common ancestor container + var oNodeB = oContainerB; + if(oNodeB != oCommonAncestor){ + while((oTmpNode = xe.DOMFix.parentNode(oNodeB)) != oCommonAncestor){oNodeB = oTmpNode;} + + iIdxB = this._getPosIdx(oNodeB)+0.5; + }else iIdxB = iOffsetB; + + return compareIdx(iIdxA, iIdxB); + }, + + _getCommonAncestorContainer : function(oNode1, oNode2){ + var oComparingNode = oNode2; + + while(oNode1){ + while(oComparingNode){ + if(oNode1 == oComparingNode) return oNode1; + oComparingNode = xe.DOMFix.parentNode(oComparingNode); + } + oComparingNode = oNode2; + oNode1 = xe.DOMFix.parentNode(oNode1); + } + + return this._document.body; + }, + + deleteContents : function(){ + if(this.collapsed) return; + + this._splitTextEndNodesOfTheRange(); + + var aNodes = this._getNodesInRange(); + + if(aNodes.length < 1) return; + + var oPrevNode = aNodes[0].previousSibling; + while(oPrevNode && this._isBlankTextNode(oPrevNode)) oPrevNode = oPrevNode.previousSibling; + + var oNewStartContainer, iNewOffset; + if(!oPrevNode){ + oNewStartContainer = xe.DOMFix.parentNode(aNodes[0]); + iNewOffset = 0; + } + + for(var i=0; i oNode.nodeValue.length) iOffset = oNode.nodeValue.length; + }else{ + if(iOffset > xe.DOMFix.childNodes(oNode).length) iOffset = xe.DOMFix.childNodes(oNode).length; + } + + return iOffset; + }, + + + setEnd : function(refNode, offset){ + offset = this._endsNodeValidation(refNode, offset); + + this.endContainer = refNode; + this.endOffset = offset; + if(!this.startContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) this.collapse(false); + + this._updateRangeInfo(); + }, + + setEndAfter : function(refNode){ + if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setEndAfter"); + + if(refNode.tagName == "BODY"){ + this.setEnd(refNode, xe.DOMFix.childNodes(refNode).length); + return; + } + this.setEnd(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)+1); + }, + + setEndBefore : function(refNode){ + if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setEndBefore"); + + if(refNode.tagName == "BODY"){ + this.setEnd(refNode, 0); + return; + } + + this.setEnd(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)); + }, + + setStart : function(refNode, offset){ + offset = this._endsNodeValidation(refNode, offset); + + this.startContainer = refNode; + this.startOffset = offset; + + if(!this.endContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) this.collapse(true); + this._updateRangeInfo(); + }, + + setStartAfter : function(refNode){ + if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setStartAfter"); + + if(refNode.tagName == "BODY"){ + this.setStart(refNode, xe.DOMFix.childNodes(refNode).length); + return; + } + + this.setStart(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)+1); + }, + + setStartBefore : function(refNode){ + if(!refNode) throw new Error("INVALID_NODE_TYPE_ERR in setStartBefore"); + + if(refNode.tagName == "BODY"){ + this.setStart(refNode, 0); + return; + } + this.setStart(xe.DOMFix.parentNode(refNode), this._getPosIdx(refNode)); + }, + + surroundContents : function(newParent){ + newParent.appendChild(this.extractContents()); + this.insertNode(newParent); + this.selectNode(newParent); + }, + + toString : function(){ + var oTmpContainer = this._document.createElement("DIV"); + oTmpContainer.appendChild(this.cloneContents()); + + return oTmpContainer.textContent || oTmpContainer.innerText || ""; + }, + + _isBlankTextNode : function(oNode){ + if(oNode.nodeType == 3 && oNode.nodeValue == "") return true; + return false; + }, + + _getPosIdx : function(refNode){ + var idx = 0; + for(var node = refNode.previousSibling; node; node = node.previousSibling) idx++; + + return idx; + }, + + _updateRangeInfo : function(){ + if(!this.startContainer){ + this.init(this._document); + return; + } + + this.collapsed = this._isCollapsed(this.startContainer, this.startOffset, this.endContainer, this.endOffset); + + this.commonAncestorContainer = this._getCommonAncestorContainer(this.startContainer, this.endContainer); + }, + + _isCollapsed : function(oStartContainer, iStartOffset, oEndContainer, iEndOffset){ + var bCollapsed = false; + + if(oStartContainer == oEndContainer && iStartOffset == iEndOffset){ + bCollapsed = true; + }else{ + var oActualStartNode = this._getActualStartNode(oStartContainer, iStartOffset); + var oActualEndNode = this._getActualEndNode(oEndContainer, iEndOffset); + + // Take the parent nodes on the same level for easier comparison when they're next to each other + // eg) From + // + // + // + // + // + // + // + // + // + // + // + // + // , it's easier to compare the position of B and D rather than C and F because they are siblings + // + // If the range were collapsed, oActualEndNode will precede oActualStartNode by doing this + oActualStartNode = this._getNextNode(this._getPrevNode(oActualStartNode)); + oActualEndNode = this._getPrevNode(this._getNextNode(oActualEndNode)); + + if(oActualStartNode && oActualEndNode && oActualEndNode.tagName != "BODY" && + (this._getNextNode(oActualEndNode) == oActualStartNode || (oActualEndNode == oActualStartNode && this._isBlankTextNode(oActualEndNode))) + ) + bCollapsed = true; + } + + return bCollapsed; + }, + + _splitTextEndNodesOfTheRange : function(){ + var oEndPoints = this._splitTextEndNodes({oStartContainer: this.startContainer, iStartOffset: this.startOffset, + oEndContainer: this.endContainer, iEndOffset: this.endOffset}); + + this.startContainer = oEndPoints.oStartContainer; + this.startOffset = oEndPoints.iStartOffset; + + this.endContainer = oEndPoints.oEndContainer; + this.endOffset = oEndPoints.iEndOffset; + }, + + _splitTextEndNodes : function(oEndPoints){ + oEndPoints = this._splitStartTextNode(oEndPoints); + oEndPoints = this._splitEndTextNode(oEndPoints); + + return oEndPoints; + }, + + _splitStartTextNode : function(oEndPoints){ + var oStartContainer = oEndPoints.oStartContainer; + var iStartOffset = oEndPoints.iStartOffset; + + var oEndContainer = oEndPoints.oEndContainer; + var iEndOffset = oEndPoints.iEndOffset; + + if(!oStartContainer) return oEndPoints; + if(oStartContainer.nodeType != 3) return oEndPoints; + if(iStartOffset == 0) return oEndPoints; + + if(oStartContainer.nodeValue.length <= iStartOffset) return oEndPoints; + + var oLastPart = oStartContainer.splitText(iStartOffset); + + if(oStartContainer == oEndContainer){ + iEndOffset -= iStartOffset; + oEndContainer = oLastPart; + } + oStartContainer = oLastPart; + iStartOffset = 0; + + return {oStartContainer: oStartContainer, iStartOffset: iStartOffset, oEndContainer: oEndContainer, iEndOffset: iEndOffset}; + }, + + _splitEndTextNode : function(oEndPoints){ + var oStartContainer = oEndPoints.oStartContainer; + var iStartOffset = oEndPoints.iStartOffset; + + var oEndContainer = oEndPoints.oEndContainer; + var iEndOffset = oEndPoints.iEndOffset; + + if(!oEndContainer) return oEndPoints; + if(oEndContainer.nodeType != 3) return oEndPoints; + + if(iEndOffset >= oEndContainer.nodeValue.length) return oEndPoints; + if(iEndOffset == 0) return oEndPoints; + + oEndContainer.splitText(iEndOffset); + + return {oStartContainer: oStartContainer, iStartOffset: iStartOffset, oEndContainer: oEndContainer, iEndOffset: iEndOffset}; + }, + + _getNodesInRange : function(){ + if(this.collapsed) return []; + + var oStartNode = this._getActualStartNode(this.startContainer, this.startOffset); + var oEndNode = this._getActualEndNode(this.endContainer, this.endOffset); + + return this._getNodesBetween(oStartNode, oEndNode); + }, + + _getActualStartNode : function(oStartContainer, iStartOffset){ + var oStartNode = oStartContainer;; + + if(oStartContainer.nodeType == 3){ + if(iStartOffset >= oStartContainer.nodeValue.length){ + oStartNode = this._getNextNode(oStartContainer); + if(oStartNode.tagName == "BODY") oStartNode = null; + }else{ + oStartNode = oStartContainer; + } + }else{ + if(iStartOffset < xe.DOMFix.childNodes(oStartContainer).length){ + oStartNode = xe.DOMFix.childNodes(oStartContainer)[iStartOffset]; + }else{ + oStartNode = this._getNextNode(oStartContainer); + if(oStartNode.tagName == "BODY") oStartNode = null; + } + } + + return oStartNode; + }, + + _getActualEndNode : function(oEndContainer, iEndOffset){ + var oEndNode = oEndContainer; + + if(iEndOffset == 0){ + oEndNode = this._getPrevNode(oEndContainer); + if(oEndNode.tagName == "BODY") oEndNode = null; + }else if(oEndContainer.nodeType == 3){ + oEndNode = oEndContainer; + }else{ + oEndNode = xe.DOMFix.childNodes(oEndContainer)[iEndOffset-1]; + } + + return oEndNode; + }, + + _getNextNode : function(oNode){ + if(!oNode || oNode.tagName == "BODY") return this._document.body; + + if(oNode.nextSibling) return oNode.nextSibling; + + return this._getNextNode(xe.DOMFix.parentNode(oNode)); + }, + + _getPrevNode : function(oNode){ + if(!oNode || oNode.tagName == "BODY") return this._document.body; + + if(oNode.previousSibling) return oNode.previousSibling; + + return this._getPrevNode(xe.DOMFix.parentNode(oNode)); + }, + + // includes partially selected + // for
, _getNodesBetween(b, c) will yield to b, "a" and c + _getNodesBetween : function(oStartNode, oEndNode){ + var aNodesBetween = []; + + if(!oStartNode || !oEndNode) return aNodesBetween; + + this._recurGetNextNodesUntil(oStartNode, oEndNode, aNodesBetween); + return aNodesBetween; + }, + + _recurGetNextNodesUntil : function(oNode, oEndNode, aNodesBetween){ + if(!oNode) return false; + + if(!this._recurGetChildNodesUntil(oNode, oEndNode, aNodesBetween)) return false; + + var oNextToChk = oNode.nextSibling; + + while(!oNextToChk){ + if(!xe.DOMFix.parentNode(oNode)) return false; + oNode = xe.DOMFix.parentNode(oNode); + + aNodesBetween[aNodesBetween.length] = oNode; + + if(oNode == oEndNode) return false; + + oNextToChk = oNode.nextSibling; + } + + return this._recurGetNextNodesUntil(oNextToChk, oEndNode, aNodesBetween); + }, + + _recurGetChildNodesUntil : function(oNode, oEndNode, aNodesBetween){ + if(!oNode) return false; + + var bEndFound = false; + var oCurNode = oNode; + if(oCurNode.firstChild){ + oCurNode = oCurNode.firstChild; + while(oCurNode){ + if(!this._recurGetChildNodesUntil(oCurNode, oEndNode, aNodesBetween)){ + bEndFound = true; + break; + } + oCurNode = oCurNode.nextSibling; + } + } + + aNodesBetween[aNodesBetween.length] = oNode; + + if(bEndFound) return false; + if(oNode == oEndNode) return false; + + return true; + } +}); + +xe.W3CDOMRange.START_TO_START = 0; +xe.W3CDOMRange.START_TO_END = 1; +xe.W3CDOMRange.END_TO_END = 2; +xe.W3CDOMRange.END_TO_START = 3; + + +/** + * @fileOverview This file contains a cross-browser function that implements all of the W3C's DOM Range specification and some more + * @name XpressRange.js + */ +xe.XpressRange = jQuery.Class({ + setWindow : function(win){ + this._window = win; + this._document = win.document; + }, + + $init : function(win){ + this.HUSKY_BOOMARK_START_ID_PREFIX = "xpress_bookmark_start_"; + this.HUSKY_BOOMARK_END_ID_PREFIX = "xpress_bookmark_end_"; + + this.sBlockElement = "P|DIV|LI|H[1-6]|PRE"; + this.sBlockContainer = "BODY|TABLE|TH|TR|TD|UL|OL|BLOCKQUOTE|FORM"; + + this.rxBlockElement = new RegExp("^("+this.sBlockElement+")$"); + this.rxBlockContainer = new RegExp("^("+this.sBlockContainer+")$") + this.rxLineBreaker = new RegExp("^("+this.sBlockElement+"|"+this.sBlockContainer+")$") + + this.setWindow(win); + + this.oSimpleSelection = new xe.SimpleSelection(this._window); + this.selectionLoaded = this.oSimpleSelection.selectionLoaded; + + this.$super.$init(this._document); + }, + + select : function(){ + this.oSimpleSelection.selectRange(this); + }, + + setFromSelection : function(iNum){ + this.setRange(this.oSimpleSelection.getRangeAt(iNum)); + }, + + setRange : function(oW3CRange){ + this.setStart(oW3CRange.startContainer, oW3CRange.startOffset); + this.setEnd(oW3CRange.endContainer, oW3CRange.endOffset); + }, + + setEndNodes : function(oSNode, oENode){ + this.setEndAfter(oENode); + this.setStartBefore(oSNode); + }, + + splitTextAtBothEnds : function(){ + this._splitTextEndNodesOfTheRange(); + }, + + getStartNode : function(){ + if(this.collapsed){ + if(this.startContainer.nodeType == 3){ + if(this.startOffset == 0) return null; + if(this.startContainer.nodeValue.length <= this.startOffset) return null; + return this.startContainer; + } + return null; + } + + if(this.startContainer.nodeType == 3){ + if(this.startOffset >= this.startContainer.nodeValue.length) return this._getNextNode(this.startContainer); + return this.startContainer; + }else{ + if(this.startOffset >= xe.DOMFix.childNodes(this.startContainer).length) return this._getNextNode(this.startContainer); + return xe.DOMFix.childNodes(this.startContainer)[this.startOffset]; + } + }, + + getEndNode : function(){ + if(this.collapsed) return this.getStartNode(); + + if(this.endContainer.nodeType == 3){ + if(this.endOffset == 0) return this._getPrevNode(this.endContainer); + return this.endContainer; + }else{ + if(this.endOffset == 0) return this._getPrevNode(this.endContainer); + return xe.DOMFix.childNodes(this.endContainer)[this.endOffset-1]; + } + }, + + getNodeAroundRange : function(bBefore, bStrict){ + if(this.collapsed && this.startContainer && this.startContainer.nodeType == 3) return this.startContainer; + if(!this.collapsed || (this.startContainer && this.startContainer.nodeType == 3)) return this.getStartNode(); + + var oBeforeRange, oAfterRange, oResult; + + if(this.startOffset >= xe.DOMFix.childNodes(this.startContainer).length) + oAfterRange = this._getNextNode(this.startContainer); + else + oAfterRange = xe.DOMFix.childNodes(this.startContainer)[this.startOffset]; + + if(this.endOffset == 0) + oBeforeRange = this._getPrevNode(this.endContainer); + else + oBeforeRange = xe.DOMFix.childNodes(this.endContainer)[this.endOffset-1]; + + if(bBefore){ + oResult = oBeforeRange; + if(!oResult && !bStrict) oResult = oAfterRange; + }else{ + oResult = oAfterRange; + if(!oResult && !bStrict) oResult = oBeforeRange; + } + + return oResult; + }, + + _getXPath : function(elNode){ + var sXPath = ""; + + while(elNode && elNode.nodeType == 1){ + sXPath = "/" + elNode.tagName+"["+this._getPosIdx4XPath(elNode)+"]" + sXPath; + elNode = xe.DOMFix.parentNode(elNode); + } + + return sXPath; + }, + + _getPosIdx4XPath : function(refNode){ + var idx = 0; + for(var node = refNode.previousSibling; node; node = node.previousSibling) + if(node.tagName == refNode.tagName) idx++; + + return idx; + }, + + // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes + _evaluateXPath : function(sXPath, oDoc){ + sXPath = sXPath.substring(1, sXPath.length-1); + var aXPath = sXPath.split(/\//); + var elNode = oDoc.body; + + for(var i=2; i -1 && elContainer){ + var aChildNodes = xe.DOMFix.childNodes(elContainer); + var elNode = null; + + var nIdx = nTextNodeIdx; + var nOffsetLeft = nOffset; + + while((elNode = aChildNodes[nIdx]) && elNode.nodeType == 3 && elNode.nodeValue.length < nOffsetLeft){ + nOffsetLeft -= elNode.nodeValue.length; + nIdx++; + } + + elContainer = xe.DOMFix.childNodes(elContainer)[nIdx]; + nOffset = nOffsetLeft; + } + + if(!elContainer){ + elContainer = this._document.body; + nOffset = 0; + } + return {elContainer: elContainer, nOffset: nOffset}; + }, + + // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes + getXPathBookmark : function(){ + var nTextNodeIdx1 = -1; + var htEndPt1 = {elContainer: this.startContainer, nOffset: this.startOffset}; + var elNode1 = this.startContainer; + if(elNode1.nodeType == 3){ + htEndPt1 = this._getFixedStartTextNode(); + nTextNodeIdx1 = this._getPosIdx(htEndPt1.elContainer); + elNode1 = xe.DOMFix.parentNode(elNode1); + } + var sXPathNode1 = this._getXPath(elNode1); + var oBookmark1 = {sXPath:sXPathNode1, nTextNodeIdx:nTextNodeIdx1, nOffset: htEndPt1.nOffset}; + + var nTextNodeIdx2 = -1; + var htEndPt2 = {elContainer: this.endContainer, nOffset: this.endOffset}; + var elNode2 = this.endContainer; + if(elNode2.nodeType == 3){ + htEndPt2 = this._getFixedEndTextNode(); + nTextNodeIdx2 = this._getPosIdx(htEndPt2.elContainer); + elNode2 = xe.DOMFix.parentNode(elNode2); + } + var sXPathNode2 = this._getXPath(elNode2); + var oBookmark2 = {sXPath:sXPathNode2, nTextNodeIdx:nTextNodeIdx2, nOffset: htEndPt2.nOffset}; + + return [oBookmark1, oBookmark2]; + }, + + moveToXPathBookmark : function(aBookmark){ + if(!aBookmark) return; + + var oBookmarkInfo1 = this._evaluateXPathBookmark(aBookmark[0]); + var oBookmarkInfo2 = this._evaluateXPathBookmark(aBookmark[1]); + + if(!oBookmarkInfo1["elContainer"] || !oBookmarkInfo2["elContainer"]) return; + + this.startContainer = oBookmarkInfo1["elContainer"]; + this.startOffset = oBookmarkInfo1["nOffset"]; + + this.endContainer = oBookmarkInfo2["elContainer"]; + this.endOffset = oBookmarkInfo2["nOffset"]; + }, + + _getFixedTextContainer : function(elNode, nOffset){ + while(elNode && elNode.nodeType == 3 && elNode.previousSibling && elNode.previousSibling.nodeType == 3){ + nOffset += elNode.previousSibling.nodeValue.length; + elNode = elNode.previousSibling; + } + + return {elContainer:elNode, nOffset:nOffset}; + }, + + _getFixedStartTextNode : function(){ + return this._getFixedTextContainer(this.startContainer, this.startOffset); + }, + + _getFixedEndTextNode : function(){ + return this._getFixedTextContainer(this.endContainer, this.endOffset); + }, + + placeStringBookmark : function(){ + var sTmpId = (new Date()).getTime(); + + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToEnd(); + var oEndMarker = this._document.createElement("A"); + oEndMarker.id = this.HUSKY_BOOMARK_END_ID_PREFIX+sTmpId; + oInsertionPoint.insertNode(oEndMarker); + + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToStart(); + var oStartMarker = this._document.createElement("A"); + oStartMarker.id = this.HUSKY_BOOMARK_START_ID_PREFIX+sTmpId; + oInsertionPoint.insertNode(oStartMarker); + + this.moveToBookmark(sTmpId); + + return sTmpId; + }, + + cloneRange : function(){ + return this._copyRange(new xe.XpressRange(this._window)); + }, + + moveToBookmark : function(vBookmark){ + if(typeof(vBookmark) != "object") + this.moveToStringBookmark(vBookmark); + else + this.moveToXPathBookmark(vBookmark); + }, + + moveToStringBookmark : function(sBookmarkID){ + var oStartMarker = this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX+sBookmarkID); + var oEndMarker = this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX+sBookmarkID); + + if(!oStartMarker || !oEndMarker) return; + + this.setEndBefore(oEndMarker); + this.setStartAfter(oStartMarker); + }, + + removeStringBookmark : function(sBookmarkID){ + var oStartMarker = this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX+sBookmarkID); + var oEndMarker = this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX+sBookmarkID); + + if(oStartMarker) xe.DOMFix.parentNode(oStartMarker).removeChild(oStartMarker); + if(oEndMarker) xe.DOMFix.parentNode(oEndMarker).removeChild(oEndMarker); + }, + + collapseToStart : function(){ + this.collapse(true); + }, + + collapseToEnd : function(){ + this.collapse(false); + }, + + createAndInsertNode : function(sTagName){ + tmpNode = this._document.createElement(tagName); + this.insertNode(tmpNode) + return tmpNode + }, + + getNodes : function(bSplitTextEndNodes, fnFilter){ + if(bSplitTextEndNodes) this._splitTextEndNodesOfTheRange(); + + var aAllNodes = this._getNodesInRange(); + var aFilteredNodes = []; + + if(!fnFilter) return aAllNodes; + + for(var i=0; i= 0) return true; + + if(bIncludePartlyIncluded){ + if(startToEnd == 1) return false; + if(endToStart == -1) return false; + return true; + } + + return false; + }, + + isNodeInRange : function(oNode, bIncludePartlySelected, bContentOnly){ + var oTmpRange = new xe.XpressRange(this._window); + + if(bContentOnly && oNode.firstChild){ + oTmpRange.setStartBefore(oNode.firstChild); + oTmpRange.setEndAfter(oNode.lastChild); + }else{ + oTmpRange.selectNode(oNode); + } + + return isRangeInRange(oTmpRange, bIncludePartlySelected); + }, + + pasteHTML : function(sHTML){ + if(sHTML == ""){ + this.deleteContents(); + return; + } + + var oTmpDiv = this._document.createElement("DIV"); + oTmpDiv.innerHTML = sHTML; + + var oFirstNode = oTmpDiv.firstChild; + var oLastNode = oTmpDiv.lastChild; + + var clone = this.cloneRange(); + var sBM = clone.placeStringBookmark(); + + while(oTmpDiv.lastChild) this.insertNode(oTmpDiv.lastChild); + + this.setEndNodes(oFirstNode, oLastNode); + + // delete the content later as deleting it first may mass up the insertion point + // eg)

[A]BCD

---paste O---> O

BCD

+ clone.moveToBookmark(sBM); + clone.deleteContents(); + clone.removeStringBookmark(sBM); + }, + + toString : function(){ + this.toString = xe.W3CDOMRange.prototype.toString; + return this.toString(); + }, + + toHTMLString : function(){ + var oTmpContainer = this._document.createElement("DIV"); + oTmpContainer.appendChild(this.cloneContents()); + + return oTmpContainer.innerHTML; + }, + + findAncestorByTagName : function(sTagName){ + var oNode = this.commonAncestorContainer; + while(oNode && oNode.tagName != sTagName) oNode = xe.DOMFix.parentNode(oNode); + + return oNode; + }, + + selectNodeContents : function(oNode){ + if(!oNode) return; + + var oFirstNode = oNode.firstChild?oNode.firstChild:oNode; + var oLastNode = oNode.lastChild?oNode.lastChild:oNode; + + if(oFirstNode.nodeType == 3) + this.setStart(oFirstNode, 0); + else + this.setStartBefore(oFirstNode); + + if(oLastNode.nodeType == 3) + this.setEnd(oLastNode, oLastNode.nodeValue.length); + else + this.setEndAfter(oLastNode); + }, + + styleRange : function(oStyle, oAttribute, sNewSpanMarker){ + var aStyleParents = this._getStyleParentNodes(sNewSpanMarker); + if(aStyleParents.length < 1) return; + + var sName, sValue; + + for(var i=0; i= 0)){ + oSNode = this.getNodeAroundRange(false, true); + oENode = this.getNodeAroundRange(false, true); + oStart = this._getLineStartInfo(oSNode); + oEnd = this._getLineEndInfo(oENode); + } + + return {oStart: oStart, oEnd: oEnd}; + } +}).extend(xe.W3CDOMRange); + +/** + * @fileOverview This file contains cross-browser selection function + * @name SimpleSelection.js + */ +xe.SimpleSelection = function(win){ + this.init = function(win){ + this._window = win || window; + this._document = this._window.document; + }; + + this.init(win); + + if(jQuery.browser.msie) + xe.SimpleSelectionImpl_IE.apply(this); + else + xe.SimpleSelectionImpl_FF.apply(this); + + this.selectRange = function(oRng){ + this.selectNone(); + this.addRange(oRng); + }; + + this.selectionLoaded = true; + if(!this._oSelection) this.selectionLoaded = false; +}; + +xe.SimpleSelectionImpl_FF = function(){ + this._oSelection = this._window.getSelection(); + + this.getRangeAt = function(iNum){ + iNum = iNum || 0; + + try{ + var oFFRange = this._oSelection.getRangeAt(iNum); + }catch(e){return new xe.W3CDOMRange(this._document);} + + return this._FFRange2W3CRange(oFFRange); + }; + + this.addRange = function(oW3CRange){ + var oFFRange = this._W3CRange2FFRange(oW3CRange); + this._oSelection.addRange(oFFRange); + }; + + this.selectNone = function(){ + this._oSelection.removeAllRanges(); + }; + + this._FFRange2W3CRange = function(oFFRange){ + var oW3CRange = new xe.W3CDOMRange(this._document); + oW3CRange.setStart(oFFRange.startContainer, oFFRange.startOffset); + oW3CRange.setEnd(oFFRange.endContainer, oFFRange.endOffset); + return oW3CRange; + }; + + this._W3CRange2FFRange = function(oW3CRange){ + var oFFRange = this._document.createRange(); + oFFRange.setStart(oW3CRange.startContainer, oW3CRange.startOffset); + oFFRange.setEnd(oW3CRange.endContainer, oW3CRange.endOffset); + + return oFFRange; + }; +}; + +xe.SimpleSelectionImpl_IE = function(){ + this._oSelection = this._document.selection; + + this.getRangeAt = function(iNum){ + iNum = iNum || 0; + + if(this._oSelection.type == "Control"){ + var oW3CRange = new xe.W3CDOMRange(this._document); + + var oSelectedNode = this._oSelection.createRange().item(iNum); + + // if the selction occurs in a different document, ignore + if(!oSelectedNode || oSelectedNode.ownerDocument != this._document) return oW3CRange; + + oW3CRange.selectNode(oSelectedNode); + + return oW3CRange; + }else{ + var oSelectedNode = this._oSelection.createRangeCollection().item(iNum).parentElement(); + + // if the selction occurs in a different document, ignore + if(!oSelectedNode || oSelectedNode.ownerDocument != this._document){ + var oW3CRange = new xe.W3CDOMRange(this._document); + return oW3CRange; + } + return this._IERange2W3CRange(this._oSelection.createRangeCollection().item(iNum)); + } + }; + + this.addRange = function(oW3CRange){ + var oIERange = this._W3CRange2IERange(oW3CRange); + oIERange.select(); + }; + + this.selectNone = function(){ + this._oSelection.empty(); + }; + + this._W3CRange2IERange = function(oW3CRange){ + var oStartIERange = this._getIERangeAt(oW3CRange.startContainer, oW3CRange.startOffset); + var oEndIERange = this._getIERangeAt(oW3CRange.endContainer, oW3CRange.endOffset); + oStartIERange.setEndPoint("EndToEnd", oEndIERange); + + return oStartIERange; + }; + + this._getIERangeAt = function(oW3CContainer, iW3COffset){ + var oIERange = this._document.body.createTextRange(); + + var oEndPointInfoForIERange = this._getSelectableNodeAndOffsetForIE(oW3CContainer, iW3COffset); + + var oSelectableNode = oEndPointInfoForIERange.oSelectableNodeForIE; + var iIEOffset = oEndPointInfoForIERange.iOffsetForIE; + + oIERange.moveToElementText(oSelectableNode); + oIERange.collapse(oEndPointInfoForIERange.bCollapseToStart); + oIERange.moveStart("character", iIEOffset); + + return oIERange; + }; + + this._getSelectableNodeAndOffsetForIE = function(oW3CContainer, iW3COffset){ + var oIERange = this._document.body.createTextRange(); + + var oNonTextNode = null; + var aChildNodes = null; + var iNumOfLeftNodesToCount = 0; + + if(oW3CContainer.nodeType == 3){ + oNonTextNode = xe.DOMFix.parentNode(oW3CContainer); + aChildNodes = xe.DOMFix.childNodes(oNonTextNode); + iNumOfLeftNodesToCount = aChildNodes.length; + }else{ + oNonTextNode = oW3CContainer; + aChildNodes = xe.DOMFix.childNodes(oNonTextNode); + iNumOfLeftNodesToCount = iW3COffset; + } + + var oNodeTester = null; + + var iResultOffset = 0; + + var bCollapseToStart = true; + + for(var i=0; i=0) break; + + oPrevNonTextNode = aChildNodes[i]; + } + + var pointRangeIdx = i; + + if(pointRangeIdx != 0 && aChildNodes[pointRangeIdx-1].nodeType == 3){ + var oRgTextStart = this._document.body.createTextRange(); + var oCurTextNode = null; + if(oPrevNonTextNode){ + oRgTextStart.moveToElementText(oPrevNonTextNode); + oRgTextStart.collapse(false); + oCurTextNode = oPrevNonTextNode.nextSibling; + }else{ + oRgTextStart.moveToElementText(oContainer); + oRgTextStart.collapse(true); + oCurTextNode = oContainer.firstChild; + } + + var oRgTextsUpToThePoint = oRgOrigPoint.duplicate(); + oRgTextsUpToThePoint.setEndPoint("StartToStart", oRgTextStart); + + var textCount = oRgTextsUpToThePoint.text.length + + while(textCount > oCurTextNode.nodeValue.length && oCurTextNode.nextSibling){ + textCount -= oCurTextNode.nodeValue.length; + oCurTextNode = oCurTextNode.nextSibling; + } + + // this will enforce IE to re-reference oCurTextNode + var oTmp = oCurTextNode.nodeValue; + + if(bStartPt && oCurTextNode.nextSibling && oCurTextNode.nextSibling.nodeType == 3 && textCount == oCurTextNode.nodeValue.length){ + textCount -= oCurTextNode.nodeValue.length; + oCurTextNode = oCurTextNode.nextSibling; + } + + oContainer = oCurTextNode; + offset = textCount; + }else{ + oContainer = oRgOrigPoint.parentElement(); + offset = pointRangeIdx; + } + + return {"oContainer" : oContainer, "iOffset" : offset}; + }; +} + +xe.DOMFix = new (jQuery.Class({ + $init : function(){ + if(jQuery.browser.msie || jQuery.browser.opera){ + this.childNodes = this._childNodes_Fix; + this.parentNode = this._parentNode_Fix; + }else{ + this.childNodes = this._childNodes_Native; + this.parentNode = this._parentNode_Native; + } + }, + + _parentNode_Native : function(elNode){ + return elNode.parentNode; + }, + + _parentNode_Fix : function(elNode){ + if(!elNode) return elNode; + + while(elNode.previousSibling){elNode = elNode.previousSibling;} + + return elNode.parentNode; + }, + + _childNodes_Native : function(elNode){ + return elNode.childNodes; + }, + + _childNodes_Fix : function(elNode){ + var aResult = null; + var nCount = 0; + + if(elNode){ + var aResult = []; + elNode = elNode.firstChild; + while(elNode){ + aResult[nCount++] = elNode; + elNode=elNode.nextSibling; + } + } + + return aResult; + } +}))(); +/** + * @fileOverview This file contains a function that takes care of various operations related to find and replace + * @name N_FindReplace.js + */ +xe.FindReplace = jQuery.Class({ + sKeyword : "", + window : null, + document : null, + bBrowserSupported : false, + + // true if End Of Contents is reached during last execution of find + bEOC : false, + + $init : function(win){ + this.window = win; + this.document = this.window.document; + + if(this.document.domain != this.document.location.hostname){ + if(jQuery.browser.mozilla && jQuery.browser.nVersion < 3){ + this.bBrowserSupported = false; + this.find = function(){return 3}; + return; + } + } + + this.bBrowserSupported = true; + }, + + // 0: found + // 1: not found + // 2: keyword required + // 3: browser not supported + find : function(sKeyword, bCaseMatch, bBackwards, bWholeWord){ + var bSearchResult, bFreshSearch; + + this.window.focus(); + + if(!sKeyword) return 2; + + // try find starting from current cursor position + this.bEOC = false; + bSearchResult = this.findNext(sKeyword, bCaseMatch, bBackwards, bWholeWord); + if(bSearchResult) return 0; + + // end of the contents could have been reached so search again from the beginning + this.bEOC = true; + bSearchResult = this.findNew(sKeyword, bCaseMatch, bBackwards, bWholeWord); + + if(bSearchResult) return 0; + + return 1; + }, + + findNew : function (sKeyword, bCaseMatch, bBackwards, bWholeWord){ + this.findReset(); + return this.findNext(sKeyword, bCaseMatch, bBackwards, bWholeWord); + }, + + findNext : function(sKeyword, bCaseMatch, bBackwards, bWholeWord){ + var bSearchResult; + bCaseMatch = bCaseMatch || false; + bWholeWord = bWholeWord || false; + bBackwards = bBackwards || false; + + if(this.window.find){ + var bWrapAround = false; + return this.window.find(sKeyword, bCaseMatch, bBackwards, bWrapAround, bWholeWord); + } + + // IE solution + if(this.document.body.createTextRange){ + var iOption = 0; + if(bBackwards) iOption += 1; + if(bWholeWord) iOption += 2; + if(bCaseMatch) iOption += 4; + + this.window.focus(); + this._range = this.document.selection.createRangeCollection().item(0); + this._range.collapse(false); + bSearchResult = this._range.findText(sKeyword, 1, iOption); + + this._range.select(); + return bSearchResult; + } + + return false; + }, + + findReset : function() { + if (this.window.find){ + this.window.getSelection().removeAllRanges(); + return; + } + + // IE solution + if(this.document.body.createTextRange){ + this._range = this.document.body.createTextRange(); + this._range.collapse(true); + this._range.select(); + } + }, + + // 0: replaced & next word found + // 1: replaced & next word not found + // 2: not replaced & next word found + // 3: not replaced & next word not found + // 4: sOriginalWord required + replace : function(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord){ + if(!sOriginalWord) return 4; + + var oSelection = new xe.XpressRange(this.window); + oSelection.setFromSelection(); + + bCaseMatch = bCaseMatch || false; + var bMatch, selectedText = oSelection.toString(); + if(bCaseMatch) + bMatch = (selectedText == sOriginalWord); + else + bMatch = (selectedText.toLowerCase() == sOriginalWord.toLowerCase()); + + if(!bMatch) + return this.find(sOriginalWord, bCaseMatch, bBackwards, bWholeWord)+2; + + if(typeof Replacement == "function"){ + // the returned oSelection must contain the replacement + oSelection = Replacement(oSelection); + }else{ + oSelection.pasteHTML(Replacement); + } + + // force it to find the NEXT occurance of sOriginalWord + oSelection.select(); + + return this.find(sOriginalWord, bCaseMatch, bBackwards, bWholeWord); + }, + + // returns number of replaced words + // -1 : if original word is not given + replaceAll : function(sOriginalWord, Replacement, bCaseMatch, bWholeWord){ + if(!sOriginalWord) return -1; + + var bBackwards = false; + + var iReplaceResult; + var iResult = 0; + var win = this.window; + var oSelection = new xe.XpressRange(this.window); + oSelection.setFromSelection(); + var sBookmark = oSelection.placeStringBookmark(); + + this.bEOC = false; + while(!this.bEOC){ + iReplaceResult = this.replace(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord); + if(iReplaceResult == 0 || iReplaceResult == 1) iResult++; + } + + var startingPointReached = function(){ + var oCurSelection = new xe.XpressRange(win); + oCurSelection.setFromSelection(); + + oSelection.moveToBookmark(sBookmark); + var pos = oSelection.compareBoundaryPoints(xe.W3CDOMRange.START_TO_END, oCurSelection); + + if(pos == 1) return false; + return true; + } + + iReplaceResult = 0; + this.bEOC = false; + while(!startingPointReached() && iReplaceResult == 0 && !this.bEOC){ + iReplaceResult = this.replace(sOriginalWord, Replacement, bCaseMatch, bBackwards, bWholeWord); + if(iReplaceResult == 0 || iReplaceResult == 1) iResult++; + } + + oSelection.moveToBookmark(sBookmark); + oSelection.select(); + oSelection.removeStringBookmark(sBookmark); + + return iResult; + } +}); + +/** + * @fileOverview This file contains a function that takes care of the draggable layers + * @name N_DraggableLayer.js + */ +xe.DraggableLayer = jQuery.Class({ + $init : function(oLayer, oOptions){ + this.oOptions = jQuery.extend({ + bModal : "false", + oHandle : oLayer, + iMinX : -999999, + iMinY : -999999, + iMaxX : 999999, + iMaxY : 999999 + }, oOptions); + + this.oHandle = this.oOptions.oHandle; + + oLayer.style.display = "block"; + oLayer.style.position = "absolute"; + oLayer.style.zIndex = "9999"; + + this.aBasePosition = this.getBaseOffset(oLayer); + + // "number-ize" the position and set it as inline style. (the position could've been set as "auto" or set by css, not inline style) + oLayer.style.top = (this.toInt(jQuery(oLayer).offset().top) - this.aBasePosition.top)+"px"; + oLayer.style.left = (this.toInt(jQuery(oLayer).offset().left) - this.aBasePosition.left)+"px"; + + this.$FnMouseDown = jQuery.fnBind(this._mousedown, this, oLayer); + this.$FnMouseMove = jQuery.fnBind(this._mousemove, this, oLayer); + this.$FnMouseUp = jQuery.fnBind(this._mouseup, this, oLayer); + + jQuery(this.oHandle).bind("mousedown", this.$FnMouseDown); + }, + + _mousedown : function(oLayer, oEvent){ + if(oEvent.target.tagName == "INPUT") return; + + this.MouseOffsetY = (oEvent.pageY-this.toInt(oLayer.style.top)-this.aBasePosition['top']); + this.MouseOffsetX = (oEvent.pageX-this.toInt(oLayer.style.left)-this.aBasePosition['left']); + + jQuery(oLayer).bind("mousemove", this.$FnMouseMove); + jQuery(oLayer).bind("mouseup", this.$FnMouseUp); + }, + + _mousemove : function(oLayer, oEvent){ + var iTop = (oEvent.pageY-this.MouseOffsetY-this.aBasePosition['top']); + var iLeft = (oEvent.pageX-this.MouseOffsetX-this.aBasePosition['left']); + + if(iTopthis.oOptions.iMaxY) iTop = this.oOptions.iMaxY; + + if(iLeftthis.oOptions.iMaxX) iLeft = this.oOptions.iMaxX; + + oLayer.style.top = iTop + "px"; + oLayer.style.left = iLeft + "px"; + }, + + _mouseup : function(oLayer, oEvent){ + jQuery(oLayer).unbind("mousemove", this.$FnMouseMove); + jQuery(oLayer).unbind("mouseup", this.$FnMouseUp); + }, + + toInt : function(num){ + var result = parseInt(num); + return result || 0; + }, + + findNonStatic : function(oEl){ + if(!oEl) return null; + if(oEl.tagName == "BODY") return oEl; + + if(jQuery(oEl).css("position").match(/absolute|relative/i)) return oEl; + + return this.findNonStatic(oEl.offsetParent); + }, + + getBaseOffset : function(oEl){ + var oBase = this.findNonStatic(oEl.offsetParent); + var tmp = jQuery(oBase).offset(); + + return {top: tmp.top, left: tmp.left}; + } +}); +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the messages related to core operations + * @name hp_CorePlugin.js + */ +xe.CorePlugin = jQuery.Class({ + name : "CorePlugin", + + $init : function(funcOnReady){ + this.funcOnReady = funcOnReady; + }, + + $AFTER_MSG_APP_READY : function(){ + this.oApp.exec("EXEC_ON_READY_FUNCTION", []); + }, + + $ON_ADD_APP_PROPERTY : function(sPropertyName, oProperty){ + this.oApp[sPropertyName] = oProperty; + }, + + $ON_REGISTER_BROWSER_EVENT : function(obj, sEvent, sCMD, aParams, nDelay){ + this.oApp.registerBrowserEvent(obj, sEvent, sCMD, aParams, nDelay); + }, + + $ON_DISABLE_COMMAND : function(sCommand){ + this.oApp.disableCommand(sCommand, true); + }, + + $ON_ENABLE_COMMAND : function(sCommand){ + this.oApp.disableCommand(sCommand, false); + }, + + $ON_EXEC_ON_READY_FUNCTION : function(){ + if(typeof this.funcOnReady == "function") this.funcOnReady(); + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that helps various operations. + * @name hp_Utils.js + */ + xe.Utils = jQuery.Class({ + name : "Utils", + + $init : function(){ + if(jQuery.browser.msie && jQuery.browser.nVersion == 6){ + try{ + document.execCommand('BackgroundImageCache', false, true); + }catch(e){} + } + }, + + $ON_ATTACH_HOVER_EVENTS : function(aElms, sHoverClass){ + sHoverClass = sHoverClass || "hover"; + + if(!aElms) return; + + jQuery(aElms).hover( + function(){jQuery(this).addClass(sHoverClass)}, + function(){jQuery(this).removeClass(sHoverClass)} + ); + } +}); +//} + +//{ +/** + * @fileOverview This file contains Xpress plugin that bridges the XpressRange function + * @name hp_XpressRangeManager.js + */ +xe.XpressRangeManager = jQuery.Class({ + name : "XpressRangeManager", + + oWindow : null, + + $init : function(win){ + this.oWindow = win || window; + }, + + $BEFORE_MSG_APP_READY : function(){ + if(this.oWindow && this.oWindow.tagName == "IFRAME") + this.oWindow = this.oWindow.contentWindow; + + this.oApp.exec("ADD_APP_PROPERTY", ["getSelection", jQuery.fnBind(this.getSelection, this)]); + this.oApp.exec("ADD_APP_PROPERTY", ["getEmptySelection", jQuery.fnBind(this.getEmptySelection, this)]); + }, + + $ON_SET_EDITING_WINDOW : function(oWindow){ + this.oWindow = oWindow; + }, + + getEmptySelection : function(){ + var oXpressRange = new xe.XpressRange(this.oWindow); + return oXpressRange; + }, + + getSelection : function(){ + this.oApp.exec("RESTORE_IE_SELECTION", []); + + var oXpressRange = this.getEmptySelection(); + + // this may throw an exception if the selected is area is not yet shown + try{ + oXpressRange.setFromSelection(); + }catch(e){} + + return oXpressRange; + } +}); +//} +xe.Hotkey = jQuery.Class({ + name : "Hotkey", + + storage : {}, + keyhash : {}, + + $init : function(){ + this.storage = {}; + + this.keyhash = { + backspace : 8, + tab : 9, + enter : 13, + shift : 16, + ctrl : 17, + alt : 18, + meta : 224, + esc : 27, + space : 32, + pageup : 33, + pagedown : 34, + end : 35, + home : 36, + left : 37, + up : 38, + right : 39, + down : 40, + del : 46, + comma : 188,//(,) + period : 190,//(.) + slash : 191,//(/) + hyphen : 109, + equal : 61 + }; + + if (jQuery.browser.msie || jQuery.browser.safari) { + this.keyhash.hyphen = 189; // (-) + this.keyhash.equal = 187; // (=) + this.keyhash.meta = 91; // meta + } + + + }, + + $ON_MSG_APP_READY : function(){ + jQuery(this.oApp.getWYSIWYGDocument() || document).keydown(jQuery.fnBind(this.keydown, this)); + }, + + $ON_REGISTER_HOTKEY : function(sHotkey, sCMD, sArgs){ + if(!sArgs) sArgs = []; + var func = jQuery.fnBind(this.oApp.exec, this.oApp, sCMD, sArgs); + + sHotkey = this.normalize(sHotkey); + if (!sHotkey) return false; + + this.add(sHotkey, func); + }, + + add : function(sHotkey, func) { + if (typeof this.storage[sHotkey] == 'undefined') { + this.storage[sHotkey] = [func]; + } else { + this.storage[sHotkey].push(func); + } + }, + + keydown : function(event) { + var key = [], kh = this.keyhash; + + if (jQuery.inArray(event.keyCode, [kh.shift, kh.ctrl, kh.alt, kh.meta]) >= 0) return; + + if (event.shiftKey) key.push('shift'); + if (event.altKey) key.push('alt'); + if (event.ctrlKey) key.push('ctrl'); + if (event.metaKey) key.push('meta'); + if (!key.length) return; + if (key.length == 1 && event.metaKey) key = ['ctrl', 'meta']; + + key.push(event.keyCode); + + key = key.join('+'); + + if (!this.storage[key]) return; + + jQuery.each(this.storage[key], function(){ this(); }); + + return false; + }, + + normalize : function(sHotkey) { + var shift, ctrl, alt, meta, key, keys = (sHotkey||"").toLowerCase().split('+'); + + shift = ctrl = alt = meta = key = false; + + jQuery.each(keys, function(){ + var s = ""+this; + switch(s) { + case 'shift': shift = true; + case 'alt' : alt = true; + case 'ctrl' : ctrl = true; + case 'meta' : meta = true; + default: + key = s; + } + }); + + if (!key) return ''; + + keys = []; + if (shift) keys.push('shift'); + if (alt) keys.push('alt'); + if (ctrl) keys.push('ctrl'); + if (meta || (ctrl && !shift && !alt)) keys.push('meta'); + + keys.push(this.keyhash[key] || key.toUpperCase().charCodeAt(0)); + + return keys.join('+'); + } +}); + +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the draggable layers + * @name hp_DialogLayerManager.js + */ +xe.DialogLayerManager = jQuery.Class({ + name : "DialogLayerManager", + aMadeDraggable : null, + aOpenedLayers : null, + + $init : function(){ + this.aMadeDraggable = []; + this.aOpenedLayers = []; + }, + + $ON_SHOW_DIALOG_LAYER : function(oLayer, bModal){ + oLayer = jQuery.$(oLayer); + bModal = jQuery.$(bModal) || false; + if(!oLayer) return; + + if(jQuery.inArray(oLayer, this.aOpenedLayers)) return; + + this.oApp.exec("POSITION_DIALOG_LAYER", [oLayer]); + + this.aOpenedLayers[this.aOpenedLayers.length] = oLayer; + + if(!jQuery.inArray(oLayer, this.aMadeDraggable)){ + new xe.DraggableLayer(oLayer, {bModal: bModal, iMinY: 0}); + this.aMadeDraggable[this.aMadeDraggable.length] = oLayer; + }else{ + oLayer.style.display = "block"; + } + }, + + $ON_HIDE_LAST_DIALOG_LAYER : function(){ + this.oApp.exec("HIDE_DIALOG_LAYER", [this.aOpenedLayers[this.aOpenedLayers.length-1]]); + }, + + $ON_HIDE_ALL_DIALOG_LAYER : function(){ + for(var i=this.aOpenedLayers.length-1; i>=0; i--) + this.oApp.exec("HIDE_DIALOG_LAYER", [this.aOpenedLayers[i]]); + }, + + $ON_HIDE_DIALOG_LAYER : function(oLayer){ + oLayer = jQuery.$(oLayer); + + if(oLayer) oLayer.style.display = "none"; + this.aOpenedLayers = jQuery.grep(this.aOpenedLayers, function(a){return a!=oLayer}); + }, + + $ON_SET_DIALOG_LAYER_POSITION : function(oLayer, iTop, iLeft){ + oLayer.style.top = iTop; + oLayer.style.left = iLeft; + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the layers that should disappear when the focus is lost + * @name hp_ActiveLayerManager.js + */ +xe.ActiveLayerManager = jQuery.Class({ + name : "ActiveLayerManager", + oCurrentLayer : null, + + $ON_TOGGLE_ACTIVE_LAYER : function(oLayer, sOnOpenCmd, aOnOpenParam, sOnCloseCmd, aOnCloseParam){ + if(oLayer == this.oCurrentLayer){ + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + }else{ + this.oApp.exec("SHOW_ACTIVE_LAYER", [oLayer, sOnCloseCmd, aOnCloseParam]); + if(sOnOpenCmd) this.oApp.exec(sOnOpenCmd, aOnOpenParam); + } + }, + + $ON_SHOW_ACTIVE_LAYER : function(oLayer, sOnCloseCmd, aOnCloseParam){ + oLayer = jQuery.$(oLayer); + this.sOnCloseCmd = sOnCloseCmd; + this.aOnCloseParam = aOnCloseParam; + + var oPrevLayer = this.oCurrentLayer; + + if(oLayer == oPrevLayer) return; + + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + + oLayer.style.display = "block"; + this.oCurrentLayer = oLayer; + }, + + $ON_HIDE_ACTIVE_LAYER : function(){ + var oLayer = this.oCurrentLayer; + if(!oLayer) return; + oLayer.style.display = "none"; + this.oCurrentLayer = null; + + if(this.sOnCloseCmd) + this.oApp.exec(this.sOnCloseCmd, this.aOnCloseParam); + }, + + // for backward compatibility only. + // use HIDE_ACTIVE_LAYER instead! + $ON_HIDE_CURRENT_ACTIVE_LAYER : function(){ + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + }, + + $ON_EVENT_EDITING_AREA_KEYDOWN : function(){ + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + }, + + $ON_EVENT_EDITING_AREA_MOUSEDOWN : function(){ + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to string conversion. Ususally used to convert the IR value. + * @name hp_StringConverterManager.js + */ +xe.StringConverterManager = jQuery.Class({ + name : "StringConverterManager", + + oConverters : null, + + $init : function(){ + this.oConverters = {}; + }, + + $BEFORE_MSG_APP_READY : function(){ + this.oApp.exec("ADD_APP_PROPERTY", ["applyConverter", jQuery.fnBind(this.applyConverter, this)]); + this.oApp.exec("ADD_APP_PROPERTY", ["addConverter", jQuery.fnBind(this.addConverter, this)]); + }, + + applyConverter : function(sRuleName, sContent){ + var aConverters = this.oConverters[sRuleName]; + if(!aConverters) return sContent; + + for(var i=0; i*:first-child", aAllLi[i]).get(0); + } + } + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.registerBrowserEvent(this.toolbarArea, "mouseover", "EVENT_TOOLBAR_MOUSEOVER", []); + this.oApp.registerBrowserEvent(this.toolbarArea, "mouseout", "EVENT_TOOLBAR_MOUSEOUT", []); + + this.oApp.exec("ADD_APP_PROPERTY", ["getToolbarButtonByUIName", jQuery.fnBind(this.getToolbarButtonByUIName, this)]); + }, + + $ON_EVENT_TOOLBAR_MOUSEOVER : function(weEvent){ + if(weEvent.target.tagName == "BUTTON") jQuery(weEvent.target).addClass("hover").parent("span").addClass("hover"); + }, + + $ON_EVENT_TOOLBAR_MOUSEOUT : function(weEvent){ + if(weEvent.target.tagName == "BUTTON") jQuery(weEvent.target).removeClass("hover").parent("span").removeClass("hover"); + }, + + $ON_TOGGLE_TOOLBAR_ACTIVE_LAYER : function(oLayer, oBtn, sOpenCmd, aOpenArgs, sCloseCmd, aCloseArgs){ + this.oApp.exec("TOGGLE_ACTIVE_LAYER", [oLayer, "MSG_TOOLBAR_LAYER_SHOWN", [oLayer, oBtn, sOpenCmd, aOpenArgs], sCloseCmd, aCloseArgs]); + }, + + $ON_MSG_TOOLBAR_LAYER_SHOWN : function(oLayer, oBtn, aOpenCmd, aOpenArgs){ + this.oApp.exec("POSITION_TOOLBAR_LAYER", [oLayer, oBtn]); + if(aOpenCmd) this.oApp.exec(aOpenCmd, aOpenArgs); + }, + + $ON_SHOW_TOOLBAR_ACTIVE_LAYER : function(oLayer, sCmd, aArgs, oBtn){ + this.oApp.exec("SHOW_ACTIVE_LAYER", [oLayer, sCmd, aArgs]); + this.oApp.exec("POSITION_TOOLBAR_LAYER", [oLayer, oBtn]); + }, + + $ON_ENABLE_UI : function(sUIName){ + var elUI = this.htUIList[sUIName]; + if(!elUI) return; + jQuery(elUI).removeClass("off"); + elUI.disabled = false; + + // enable related commands + var sCmd = ""; + if(this.aUICmdMap[sUIName]){ + for(var i=0; i nToolbarLeft) oLayer.style.left = (nToolbarLeft-nLayerLeft-5)+"px"; + }, + + getToolbarButtonByUIName : function(sUIName){ + return this.htUIList[sUIName]; + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that manages multiple number editing area plugins and the IR value + * @name hp_XE_EditingAreaManager.js + */ +xe.XE_EditingAreaManager = jQuery.Class({ + name : "XE_EditingAreaManager", + + // Currently active plugin instance(XE_EditingArea_???) + oActivePlugin : null, + + // Intermediate Representation of the content being edited. + // This should be a textarea element. + oIRField : null, + + bIsDirty : false, + + $init : function(sInitialMode, oIRField, oDimension, fOnBeforeUnload, oAppContainer){ + this.sInitialMode = sInitialMode; + this.oIRField = jQuery.$(oIRField); + this._assignHTMLObjects(oAppContainer); + this.fOnBeforeUnload = fOnBeforeUnload; + + this.oEditingMode = {}; + + this.elEditingAreaContainer.style.height = parseInt(oDimension.nHeight || this.elEditingAreaContainer.offsetHeight)+"px"; + + this.nMinHeight = oDimension.nMinHeight || 10; + this.niMinWidth = oDimension.nMinWidth || 10; + }, + + _assignHTMLObjects : function(oAppContainer){ + oAppContainer = jQuery.$(oAppContainer) || document; + this.elEditingAreaContainer = jQuery("DIV.xpress_xeditor_editing_area_container", oAppContainer).get(0); + this.elEditingAreaSkipUI = jQuery("A.skip", oAppContainer).get(0); + }, + + $BEFORE_MSG_APP_READY : function(msg){ + this.oApp.exec("ADD_APP_PROPERTY", ["elEditingAreaContainer", this.elEditingAreaContainer]); + this.oApp.exec("ADD_APP_PROPERTY", ["getIR", jQuery.fnBind(this.getIR, this)]); + this.oApp.exec("ADD_APP_PROPERTY", ["setIR", this.setIR]); + this.oApp.exec("ADD_APP_PROPERTY", ["getEditingMode", jQuery.fnBind(this.getEditingMode, this)]); + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.exec("CHANGE_EDITING_MODE", [this.sInitialMode, true]); + this.oApp.exec("LOAD_IR_FIELD", [false]); + + this.oApp.registerBrowserEvent(this.elEditingAreaSkipUI, "focus", "MSG_EDITING_AREA_SIZE_CHANGED", [], 50); + this.oApp.registerBrowserEvent(this.elEditingAreaSkipUI, "blur", "MSG_EDITING_AREA_SIZE_CHANGED", [], 50); + + var fOnBeforeUnload = this.fOnBeforeUnload||function(){if(this.getIR() != this.oIRField.value || this.bIsDirty) return this.oApp.$MSG("XE_EditingAreaManager.onExit")}; + jQuery(window).bind("beforeunload", jQuery.fnBind(fOnBeforeUnload, this)); + }, + + $AFTER_MSG_APP_READY : function(){ + this.oApp.exec("UPDATE_IR_FIELD", []); + }, + + $ON_LOAD_IR_FIELD : function(bDontAddUndo){ + this.oApp.setIR(this.oIRField.value, bDontAddUndo); + }, + + $ON_UPDATE_IR_FIELD : function(){ + this.oIRField.value = this.oApp.getIR(); + }, + + $BEFORE_CHANGE_EDITING_MODE : function(sMode){ + this._oPrevActivePlugin = this.oActivePlugin; + this.oActivePlugin = this.oEditingMode[sMode]; + }, + + $AFTER_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ + if(this._oPrevActivePlugin){ + var sIR = this._oPrevActivePlugin.getIR(); + this.oApp.exec("SET_IR", [sIR]); + + this.oApp.exec("ENABLE_UI", [this._oPrevActivePlugin.sMode]); + + this._setEditingAreaDimension(); + } + this.oApp.exec("DISABLE_UI", [this.oActivePlugin.sMode]); + + if(!bNoFocus){ + this.oApp.exec("FOCUS", []); + } + }, + + $ON_SET_IS_DIRTY : function(bIsDirty){ + this.bIsDirty = bIsDirty; + }, + + $ON_FOCUS : function(){ + if(!this.oActivePlugin || typeof this.oActivePlugin.setIR != "function") return + + this.oActivePlugin.focus(); + }, + + $BEFORE_SET_IR : function(sIR, bDontAddUndoHistory){ + bDontAddUndoHistory = bDontAddUndoHistory || false; + if(!bDontAddUndoHistory) this.oApp.exec("RECORD_UNDO_ACTION", ["SET CONTENTS"]); + }, + + $ON_SET_IR : function(sIR){ + if(!this.oActivePlugin || typeof this.oActivePlugin.setIR != "function") return + + this.oActivePlugin.setIR(sIR); + }, + + $AFTER_SET_IR : function(sIR, bDontAddUndoHistory){ + bDontAddUndoHistory = bDontAddUndoHistory || false; + if(!bDontAddUndoHistory) this.oApp.exec("RECORD_UNDO_ACTION", ["SET CONTENTS"]); + }, + + $ON_REGISTER_EDITING_AREA : function(oEditingAreaPlugin){ + this.oEditingMode[oEditingAreaPlugin.sMode] = oEditingAreaPlugin; + this.attachDocumentEvents(oEditingAreaPlugin.oEditingArea); + }, + + $ON_MSG_EDITING_AREA_RESIZE_STARTED : function(){ + this.oActivePlugin.elEditingArea.style.display = "none"; + + this.iStartingHeight = parseInt(this.elEditingAreaContainer.style.height); + }, + + $ON_RESIZE_EDITING_AREA: function(ipNewWidth, ipNewHeight){ + var iNewWidth = parseInt(ipNewWidth); + var iNewHeight = parseInt(ipNewHeight); + + if(iNewWidth < this.niMinWidth) iNewWidth = this.niMinWidth; + if(iNewHeight < this.nMinHeight) iNewHeight = this.nMinHeight; + + if(ipNewWidth) this.elEditingAreaContainer.style.width = iNewWidth + "px"; + if(ipNewHeight) this.elEditingAreaContainer.style.height = iNewHeight + "px"; + }, + + $ON_RESIZE_EDITING_AREA_BY : function(ipWidthChange, ipHeightChange){ + var iWidthChange = parseInt(ipWidthChange); + var iHeightChange = parseInt(ipHeightChange); + + var iWidth = this.elEditingAreaContainer.style.width?parseInt(this.elEditingAreaContainer.style.width)+iWidthChange:null; + var iHeight = this.elEditingAreaContainer.style.height?this.iStartingHeight+iHeightChange:null; + + this.oApp.exec("RESIZE_EDITING_AREA", [iWidth, iHeight]); + }, + + $ON_MSG_EDITING_AREA_RESIZE_ENDED : function(FnMouseDown, FnMouseMove, FnMouseUp){ + this.oActivePlugin.elEditingArea.style.display = "block"; + this._setEditingAreaDimension(); + }, + + _setEditingAreaDimension : function(){ + this.oActivePlugin.elEditingArea.style.height = this.elEditingAreaContainer.style.height; + this.oActivePlugin.elEditingArea.style.width = this.elEditingAreaContainer.style.width; + }, + + attachDocumentEvents : function(doc){ + this.oApp.registerBrowserEvent(doc, "click", "EVENT_EDITING_AREA_CLICK"); + this.oApp.registerBrowserEvent(doc, "mousedown", "EVENT_EDITING_AREA_MOUSEDOWN"); + this.oApp.registerBrowserEvent(doc, "mousemove", "EVENT_EDITING_AREA_MOUSEMOVE"); + this.oApp.registerBrowserEvent(doc, "mouseup", "EVENT_EDITING_AREA_MOUSEUP"); + this.oApp.registerBrowserEvent(doc, "keydown", "EVENT_EDITING_AREA_KEYDOWN"); + this.oApp.registerBrowserEvent(doc, "keypress", "EVENT_EDITING_AREA_KEYPRESS"); + this.oApp.registerBrowserEvent(doc, "keyup", "EVENT_EDITING_AREA_KEYUP"); + }, + + getIR : function(){ + return this.oActivePlugin.getIR(); + }, + + setIR : function(sIR, bDontAddUndo){ + this.oApp.exec("SET_IR", [sIR, bDontAddUndo]); + }, + + getEditingMode : function(){ + return this.oActivePlugin.sMode; + } +}); +//} + +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations directly related to editing the HTML source code using Textarea element + * @name hp_XE_EditingArea_HTMLSrc.js + * @required XE_EditingAreaManager + */ +xe.XE_EditingArea_HTMLSrc = jQuery.Class({ + name : "XE_EditingArea_HTMLSrc", + + sMode : "HTMLSrc", + textarea : null, + + $init : function(textarea){ + this.textarea = jQuery.$(textarea); + this.elEditingArea = this.textarea; + }, + + $BEFORE_MSG_APP_READY : function(){ + this.oEditingArea = this.textarea; + this.oApp.exec("REGISTER_EDITING_AREA", [this]); + }, + + $ON_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ + if(sMode == this.sMode){ + this.textarea.style.display = "block"; + }else{ + this.textarea.style.display = "none"; + } + }, + + $ON_PASTE_HTML : function(sHTML, oPSelection){ + if(this.oApp.getEditingMode() != this.sMode) return; + + var o = new TextRange(this.textarea); + o.paste(sHTML); + this.textarea.focus(); + }, + + getIR : function(){ + var sIR; + var sContent = this.textarea.value; + + if(this.oApp.applyConverter) + sIR = this.oApp.applyConverter(this.sMode+"_TO_IR", sContent); + else + sIR = sContent; + + return sIR; + }, + + setIR : function(sIR){ + var sContent; + + if(this.oApp.applyConverter) + sContent = this.oApp.applyConverter("IR_TO_"+this.sMode, sIR); + else + sContent = sIR; + + this.textarea.value = sContent; + }, + + focus : function(){ + this.textarea.focus(); + } +}); + +var TextRange = function(oEl) { + this._o = oEl; +}; + +/** + * Selection for textfield + * + * @author hooriza + */ +TextRange.prototype.getSelection = function() { + var obj = this._o; + var ret = [ -1, -1 ]; + + if (isNaN(this._o.selectionStart)) { + obj.focus(); + + // textarea support added by nagoon97 + var range = document.body.createTextRange(); + var rangeField = null; + + rangeField = document.selection.createRange().duplicate(); + range.moveToElementText(obj); + rangeField.collapse(true); + range.setEndPoint("EndToEnd", rangeField); + ret[0] = range.text.length; + + rangeField = document.selection.createRange().duplicate(); + range.moveToElementText(obj); + rangeField.collapse(false); + range.setEndPoint("EndToEnd", rangeField); + ret[1] = range.text.length; + + obj.blur(); + } else { + ret[0] = obj.selectionStart; + ret[1] = obj.selectionEnd; + } + + return ret; +}; + +TextRange.prototype.setSelection = function(start, end) { + + var obj = this._o; + if (typeof end == 'undefined') end = start; + + if (obj.setSelectionRange) { + + obj.setSelectionRange(start, end); + + } else if (obj.createTextRange) { + + var range = obj.createTextRange(); + + range.collapse(true); + range.moveStart("character", start); + range.moveEnd("character", end - start); + range.select(); + + obj.blur(); + } + +}; + +TextRange.prototype.copy = function() { + + var r = this.getSelection(); + return this._o.value.substring(r[0], r[1]); + +}; + +TextRange.prototype.paste = function(sStr) { + + var obj = this._o; + var sel = this.getSelection(); + + var value = obj.value; + + var pre = value.substr(0, sel[0]); + var post = value.substr(sel[1]); + + value = pre + sStr + post; + obj.value = value; + + var n = 0; + if ( typeof document.body.style.maxHeight == "undefined" ) { + var a = pre.match( /\n/gi ); + n = ( a != null ? a.length : 0 ); + } + this.setSelection(sel[0] + sStr.length - n ); + +}; + +TextRange.prototype.cut = function() { + var r = this.copy(); + this.paste(''); + + return r; +}; +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations directly related to WYSIWYG iframe + * @name hp_XE_EditingArea_WYSIWYG.js + */ +xe.XE_EditingArea_WYSIWYG = jQuery.Class({ + name : "XE_EditingArea_WYSIWYG", + status : xe.PLUGIN_STATUS["NOT_READY"], + + sMode : "WYSIWYG", + iframe : null, + doc : null, + + iLastUndoRecorded : 0, + iMinUndoInterval : 3000, + + _nIFrameReadyCount : 50, + + $init : function(iframe){ + this.iframe = jQuery.$(iframe); + + this.initIframe(); + + this.elEditingArea = iframe; + }, + + $BEFORE_MSG_APP_READY : function(){ + this.oEditingArea = this.doc; + this.oApp.exec("REGISTER_EDITING_AREA", [this]); + this.oApp.exec("ADD_APP_PROPERTY", ["getWYSIWYGWindow", jQuery.fnBind(this.getWindow, this)]); + this.oApp.exec("ADD_APP_PROPERTY", ["getWYSIWYGDocument", jQuery.fnBind(this.getDocument, this)]); + }, + + $ON_MSG_APP_READY : function(){ + // uncomment this line if you wish to use the IE-style cursor in FF + // this.getDocument().body.style.cursor = "text"; + + if(jQuery.browser.msie){ + jQuery(this.doc).bind('keydown', jQuery.fnBind( + function(weEvent){ + if(this.doc.selection.type.toLowerCase() == 'control' && weEvent.keyCode == 8) { + this.oApp.exec("EXECCOMMAND", ['delete', false, false]); + weEvent.preventDefault(); weEvent.stopPropagation(); + } + } + , this)); + jQuery(this.doc.body).bind('mousedown', jQuery.fnBind( + function(weEvent){ + this._oIERange = null; + this._bIERangeReset = true; + } + , this)); + jQuery(this.doc.body).bind('beforedeactivate', jQuery.fnBind( + function(weEvent){ + // without this, cursor won't make it inside a table. + // mousedown(_oIERange gets reset) -> beforedeactivate(gets fired for table) -> RESTORE_IE_SELECTION + if(this._bIERangeReset) return; + + var tmpRange = this.getDocument().selection.createRange(0); + // Control range does not have parentElement + if(tmpRange.parentElement && tmpRange.parentElement() && tmpRange.parentElement().tagName == "INPUT"){ + this._oIERange = this._oPrevIERange; + }else{ + this._oIERange = tmpRange; + } + } + , this)); + jQuery(this.doc.body).bind('mouseup', jQuery.fnBind( + function(weEvent){ + this._bIERangeReset = false; + } + , this)); + } + }, + + $ON_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ + if(sMode == this.sMode){ + this.iframe.style.display = "block"; + + this.oApp.exec("REFRESH_WYSIWYG", []); + this.oApp.exec("SET_EDITING_WINDOW", [this.getWindow()]); + }else{ + this.iframe.style.display = "none"; + } + }, + + $AFTER_CHANGE_EDITING_MODE : function(sMode, bNoFocus){ + this._oIERange = null; + }, + + $ON_REFRESH_WYSIWYG : function(){ + if(!jQuery.browser.mozilla) return; + + this._disableWYSIWYG(); + this._enableWYSIWYG(); + }, + + $ON_ENABLE_WYSIWYG : function(){ + this._enableWYSIWYG(); + }, + + $ON_DISABLE_WYSIWYG : function(){ + this._disableWYSIWYG(); + }, + + $ON_EVENT_EDITING_AREA_KEYUP : function(oEvent){ + // 33, 34: page up/down, 35,36: end/home, 37,38,39,40: left, up, right, down + if(oEvent.keyCode == 229 || oEvent.keyCode == 13 || oEvent.altKey || oEvent.ctrlKey || (oEvent.keyCode >= 33 && oEvent.keyCode <= 40) || oEvent.keyCode == 16) return; + this._recordUndo(oEvent); + }, + + $ON_PASTE_HTML : function(sHTML, oPSelection){ + if(this.oApp.getEditingMode() != this.sMode) return; + + var oSelection = oPSelection || this.oApp.getSelection(); + oSelection.pasteHTML(sHTML); + + // every browser except for IE may modify the innerHTML when it is inserted + if(!jQuery.browser.msie){ + var sTmpBookmark = oSelection.placeStringBookmark(); + this.oApp.getWYSIWYGDocument().body.innerHTML = this.oApp.getWYSIWYGDocument().body.innerHTML; + oSelection.moveToBookmark(sTmpBookmark); + oSelection.collapseToEnd(); + oSelection.select(); + oSelection.removeStringBookmark(sTmpBookmark); + } + + this.oApp.exec("RECORD_UNDO_ACTION", ["INSERT HTML"]); + }, + + $AFTER_MSG_EDITING_AREA_RESIZE_ENDED : function(FnMouseDown, FnMouseMove, FnMouseUp){ + this.oApp.exec("REFRESH_WYSIWYG", []); + }, + + $ON_RESTORE_IE_SELECTION : function(){ + if(this._oIERange){ + this._oIERange.select(); + this._oPrevIERange = this._oIERange; + this._oIERange = null; + } + }, + + initIframe : function(){ + try { + this.doc = this.iframe.contentWindow.document; + if (this.doc == null || this.doc.location.href == 'about:blank') { + throw new Error('Access denied'); + } + + this._enableWYSIWYG(); + + this.status = xe.PLUGIN_STATUS["READY"]; + } catch(e) { + if(this._nIFrameReadyCount-- > 0){ + setTimeout(jQuery.fnBind(this.initIframe, this), 100); + }else{ + throw("iframe for WYSIWYG editing mode can't be initialized. Please check if the iframe document exists and is also accessable(cross-domain issues). "); + } + } + }, + + getIR : function(){ + var sContent = this.doc.body.innerHTML; + var sIR; + + if(this.oApp.applyConverter) + sIR = this.oApp.applyConverter(this.sMode+"_TO_IR", sContent); + else + sIR = sContent; + + return sIR; + }, + + setIR : function(sIR){ + var sContent; + if(this.oApp.applyConverter) + sContent = this.oApp.applyConverter("IR_TO_"+this.sMode, sIR); + else + sContent = sIR; + + this.doc.body.innerHTML = sContent; + + if(jQuery.browser.mozilla){ + if(this.doc.body.innerHTML == "") this.doc.body.innerHTML = "
"; + } + }, + + getWindow : function(){ + return this.iframe.contentWindow; + }, + + getDocument : function(){ + return this.iframe.contentWindow.document; + }, + + focus : function(){ + //this.getWindow().focus(); + //this.oApp.exec("RESTORE_IE_SELECTION", []); + }, + + _recordUndo : function(oKeyInfo){ + var curTime = new Date(); + if(curTime-this.iLastUndoRecorded < this.iMinUndoInterval) return; + this.oApp.exec("RECORD_UNDO_ACTION", ["KEYPRESS"]); + + this.iLastUndoRecorded = new Date(); + + this.prevKeyCode = oKeyInfo.keyCode; + }, + + _enableWYSIWYG : function(){ + if (jQuery.browser.msie){ + var fake = jQuery(''); + jQuery(document.body).prepend(fake); + fake.focus(); + + this.doc.body.contentEditable = true; + + setTimeout(function(){fake.remove()}, 100); + } else { + this.doc.designMode = "on"; + } + }, + + _disableWYSIWYG : function(){ + if (jQuery.browser.msie){ + this.doc.body.contentEditable = false; + } else { + this.doc.designMode = "off"; + } + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to resizing the editing area vertically + * @name hp_XE_EditingAreaVerticalResizer.js + */ +xe.XE_EditingAreaVerticalResizer = jQuery.Class({ + name : "XE_EditingAreaVerticalResizer", + oResizeGrip : null, + + $init : function(oAppContainer){ + this._assignHTMLObjects(oAppContainer); + + this.$FnMouseDown = jQuery.fnBind(this._mousedown, this); + this.$FnMouseMove = jQuery.fnBind(this._mousemove, this); + this.$FnMouseUp = jQuery.fnBind(this._mouseup, this); + + jQuery(this.oResizeGrip).bind("mousedown", this.$FnMouseDown); + }, + + _assignHTMLObjects : function(oAppContainer){ + oAppContainer = jQuery.$(oAppContainer) || document; + + this.oResizeGrip = jQuery(".xpress_xeditor_editingArea_verticalResizer", oAppContainer).get(0); + }, + + _mousedown : function(oEvent){ + this.iStartHeight = oEvent.clientY; + + jQuery(document).bind("mousemove", this.$FnMouseMove); + jQuery(document).bind("mouseup", this.$FnMouseUp); + + this.oApp.exec("MSG_EDITING_AREA_RESIZE_STARTED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); + }, + + _mousemove : function(oEvent){ + var iHeightChange = oEvent.clientY - this.iStartHeight; + + this.oApp.exec("RESIZE_EDITING_AREA_BY", [0, iHeightChange]); + }, + + _mouseup : function(oEvent){ + jQuery(document).unbind("mousemove", this.$FnMouseMove); + jQuery(document).unbind("mouseup", this.$FnMouseUp); + + this.oApp.exec("MSG_EDITING_AREA_RESIZE_ENDED", [this.$FnMouseDown, this.$FnMouseMove, this.$FnMouseUp]); + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the basic editor commands + * @name hp_XE_ExecCommand.js + */ +xe.XE_ExecCommand = jQuery.Class({ + name : "XE_ExecCommand", + oEditingArea : null, + + $init : function(oEditingArea){ + this.oEditingArea = oEditingArea; + }, + + $BEFORE_MSG_APP_READY : function(){ + // the right document will be available only when the src is completely loaded + if(this.oEditingArea && this.oEditingArea.tagName == "IFRAME") + this.oEditingArea = this.oEditingArea.contentWindow.document; + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+b", "EXECCOMMAND", ["bold", false, false]]); + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+u", "EXECCOMMAND", ["underline", false, false]]); + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+i", "EXECCOMMAND", ["italic", false, false]]); + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+d", "EXECCOMMAND", ["strikethrough", false, false]]); + + this.oApp.exec("REGISTER_UI_EVENT", ["bold", "click", "EXECCOMMAND", ["bold", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["underline", "click", "EXECCOMMAND", ["underline", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["italic", "click", "EXECCOMMAND", ["italic", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["lineThrough", "click", "EXECCOMMAND", ["strikethrough", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["superscript", "click", "EXECCOMMAND", ["superscript", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["subscript", "click", "EXECCOMMAND", ["subscript", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["justifyleft", "click", "EXECCOMMAND", ["justifyleft", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["justifycenter", "click", "EXECCOMMAND", ["justifycenter", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["justifyright", "click", "EXECCOMMAND", ["justifyright", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["justifyfull", "click", "EXECCOMMAND", ["justifyfull", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["orderedlist", "click", "EXECCOMMAND", ["insertorderedlist", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["unorderedlist", "click", "EXECCOMMAND", ["insertunorderedlist", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["outdent", "click", "EXECCOMMAND", ["outdent", false, false]]); + this.oApp.exec("REGISTER_UI_EVENT", ["indent", "click", "EXECCOMMAND", ["indent", false, false]]); + }, + + $BEFORE_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ + this._bOnlyCursorChanged = false; + + this.oApp.exec("FOCUS", []); + + if(sCommand.match(/^bold|underline|italic|strikethrough|superscript|subscript$/i)){ + var oSelection = this.oApp.getSelection(); + if(oSelection.collapsed) this._bOnlyCursorChanged = true; + } + + if(!this._bOnlyCursorChanged){ + this.oApp.exec("RECORD_UNDO_BEFORE_ACTION", [sCommand]); + } + }, + + $ON_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ + bUserInterface = (bUserInterface == "" || bUserInterface)?bUserInterface:false; + vValue = (vValue == "" || vValue)?vValue:false; + + this.oEditingArea.execCommand(sCommand, bUserInterface, vValue); + }, + + $AFTER_EXECCOMMAND : function(sCommand, bUserInterface, vValue){ + if(!this._bOnlyCursorChanged){ + this.oApp.exec("RECORD_UNDO_AFTER_ACTION", [sCommand]); + } + + this.oApp.exec("CHECK_STYLE_CHANGE", []); + } +}); +//} + +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to wrapping the sentence around with a

tag when enter key is pressed + * @name hp_XE_WYSIWYGEnterKey.js + */ +xe.XE_WYSIWYGEnterKey = jQuery.Class({ + name : "XE_WYSIWYGEnterKey", + // IE/Opera do not need this + unsupportedBrowser : ['ie', 'opera'], + oEditingArea : null, + + $init : function(oEditingArea){ + this.oEditingArea = oEditingArea; + }, + + $BEFORE_MSG_APP_READY : function(){ + // the right document will be available only when the src is completely loaded + if(this.oEditingArea && this.oEditingArea.tagName == "IFRAME") + this.oEditingArea = this.oEditingArea.contentWindow.document; + }, + + $ON_EVENT_EDITING_AREA_KEYDOWN : function(oEvent){ + if(this.oApp.getEditingMode() != "WYSIWYG") return; + + if(oEvent.shiftKey) return; + + if(oEvent.keyCode == 13){ + var oSelection = this.oApp.getSelection(); + var sBM = oSelection.placeStringBookmark(); + var oLineInfo = oSelection.getLineInfo(); + var oStart = oLineInfo.oStart; + var oEnd = oLineInfo.oEnd; + + //top.document.title = oStart.oNode.tagName+":"+oStart.oNode.nodeValue+", "+oEnd.oNode.tagName+":"+oEnd.oNode.nodeValue+"::"+oStart.bParentBreak+", "+oStart.oLineBreaker.tagName; + + // line broke by sibling + // or + // the parent line breaker is just a block container + if(!oStart.bParentBreak || oSelection.rxBlockContainer.test(oStart.oLineBreaker.tagName)){ + oEvent.stopPropagation(); + oEvent.preventDefault(); + + var oSWrapper = this.oEditingArea.createElement("P"); + oSelection.moveToBookmark(sBM); + oSelection.setStartBefore(oStart.oNode); + oSelection.surroundContents(oSWrapper); + + oSelection.collapseToEnd(); + + var oEWrapper = this.oEditingArea.createElement("P"); + oSelection.setEndAfter(oEnd.oNode); + oSelection.surroundContents(oEWrapper); + + oSelection.removeStringBookmark(sBM); + + if(oSWrapper.innerHTML == "") oSWrapper.innerHTML = "
"; + if(oEWrapper.innerHTML == "") oEWrapper.innerHTML = "
"; + + if(oEWrapper.nextSibling && oEWrapper.nextSibling.tagName == "BR") oEWrapper.parentNode.removeChild(oEWrapper.nextSibling); + + oSelection.selectNodeContents(oEWrapper); + oSelection.collapseToStart(); + oSelection.select(); + this.oApp.exec("CHECK_STYLE_CHANGE", []); + }else{ + oSelection.removeStringBookmark(sBM); + } + } + } +}); +//} + +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to styling the font + * @name hp_XE_WYSIWYGStyler.js + * @required XE_EditingArea_WYSIWYG, XpressRangeManager + */ +xe.XE_WYSIWYGStyler = jQuery.Class({ + name : "XE_WYSIWYGStyler", + + $PRECONDITION : function(sFullCommand, aArgs){ + return (this.oApp.getEditingMode() == "WYSIWYG"); + }, + + $ON_SET_WYSIWYG_STYLE : function(oStyles){ + var oSelection = this.oApp.getSelection(); + + // style cursor + if(oSelection.collapsed){ + var oSpan = this.oApp.getWYSIWYGDocument().createElement("SPAN"); + oSelection.insertNode(oSpan); + oSpan.innerHTML = unescape("%uFEFF"); + + var sValue; + for(var sName in oStyles){ + sValue = oStyles[sName]; + + if(typeof sValue != "string") continue; + + oSpan.style[sName] = sValue; + } + + oSelection.selectNodeContents(oSpan); + oSelection.collapseToEnd(); + oSelection._window.focus(); + oSelection._window.document.body.focus(); + oSelection.select(); + + // FF3 will actually display %uFEFF when it is followed by a number AND certain font-family is used(like Gulim), so remove the chcaracter for FF3 + if(jQuery.browser.mozilla && jQuery.browser.nVersion == 3) + oSpan.innerHTML = ""; + + return; + } + + this.oApp.exec("RECORD_UNDO_BEFORE_ACTION", ["FONT STYLE"]); + + oSelection.styleRange(oStyles); + oSelection._window.focus(); + oSelection.select(); + + this.oApp.exec("RECORD_UNDO_AFTER_ACTION", ["FONT STYLE"]); + } +}); +//} + +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to detecting the style change + * @name hp_XE_WYSIWYGStyleGetter.js + */ +xe.XE_WYSIWYGStyleGetter = jQuery.Class({ + name : "XE_WYSIWYGStyleGetter", + + hKeyUp : null, + + getStyleInterval : 200, + + oStyleMap : { + fontFamily : { + type : "Value", + css : "fontFamily" + }, + fontSize : { + type : "Value", + css : "fontSize" + }, + lineHeight : { + type : "Value", + css : "lineHeight", + converter : function(sValue, oStyle){ + if(!sValue.match(/px$/)) return sValue; + + return Math.ceil((parseInt(sValue)/parseInt(oStyle.fontSize))*10)/10; + } + }, + bold : { + command : "bold" + }, + underline : { + command : "underline" + }, + italic : { + command : "italic" + }, + lineThrough : { + command : "strikethrough" + }, + superscript : { + command : "superscript" + }, + subscript : { + command : "subscript" + }, + justifyleft : { + command : "justifyleft" + }, + justifycenter : { + command : "justifycenter" + }, + justifyright : { + command : "justifyright" + }, + justifyfull : { + command : "justifyfull" + }, + orderedlist : { + command : "insertorderedlist" + }, + unorderedlist : { + command : "insertunorderedlist" + } + }, + + $init : function(){ + this.oStyle = this._getBlankStyle(); + }, + + $PRECONDITION : function(){ + if(this.oApp.getEditingMode() != "WYSIWYG") return false; + + return true; + }, + + $ON_MSG_APP_READY : function(){ + this.oDocument = this.oApp.getWYSIWYGDocument(); + this.oApp.exec("ADD_APP_PROPERTY", ["getCurrentStyle", jQuery.fnBind(this.getCurrentStyle, this)]); + }, + + $ON_EVENT_EDITING_AREA_MOUSEUP : function(oEvnet){ + if(this.hKeyUp) clearTimeout(this.hKeyUp); + this.oApp.exec("CHECK_STYLE_CHANGE", []); + }, + + $ON_EVENT_EDITING_AREA_KEYUP : function(oEvent){ + /* + backspace 8 + page up 33 + page down 34 + end 35 + home 36 + left arrow 37 + up arrow 38 + right arrow 39 + down arrow 40 + insert 45 + delete 46 + */ + if(!(oEvent.keyCode == 8 || (oEvent.keyCode >= 33 && oEvent.keyCode <= 40) || oEvent.keyCode == 45 || oEvent.keyCode == 46)) return; + + if(this.hKeyUp) clearTimeout(this.hKeyUp); + + this.hKeyUp = setTimeout(jQuery.fnBind(this.oApp.exec, this.oApp, "CHECK_STYLE_CHANGE", []), this.getStyleInterval); + }, + + $ON_CHECK_STYLE_CHANGE : function(){ + this._getStyle(); + }, + + $ON_RESET_STYLE_STATUS : function(){ + var oBlankStyle = this._getBlankStyle(); + for(var sAttributeName in oBlankStyle) + this.oApp.exec("SET_STYLE_STATUS", [sAttributeName, oBlankStyle[sAttributeName]]); + }, + + getCurrentStyle : function(){ + return this.oStyle; + }, + + _check_style_change : function(){ + this.oApp.exec("CHECK_STYLE_CHANGE", []); + }, + + _getBlankStyle : function(){ + var oBlankStyle = {}; + for(var attributeName in this.oStyleMap){ + if(this.oStyleMap[attributeName].type == "Value") + oBlankStyle[attributeName] = ""; + else + oBlankStyle[attributeName] = 0; + } + + return oBlankStyle; + }, + + _getStyle : function(){ + var oSelection = this.oApp.getSelection(); + + var funcFilter = function(oNode){ + if (!oNode.childNodes || oNode.childNodes.length == 0) + return true; + else + return false; + } + + var aBottomNodes = oSelection.getNodes(false, funcFilter); + + var oStyle, oBaseStyle, oTmpStyle, attributeName; + if(aBottomNodes.length == 0){ + oStyle = this._getStyleOf(oSelection.commonAncestorContainer); + }else{ + oStyle = this._getStyleOf(aBottomNodes[0]); + } + + for(attributeName in oStyle){ + if(this.oStyleMap[attributeName].converter){ + oStyle[attributeName] = this.oStyleMap[attributeName].converter(oStyle[attributeName], oStyle); + } + + if(this.oStyle[attributeName] != oStyle[attributeName]) + this.oApp.exec("MSG_STYLE_CHANGED", [attributeName, oStyle[attributeName]]); + } + + this.oStyle = oStyle; + }, + + _getStyleOf : function(oNode){ + var oStyle = this._getBlankStyle(); + + // this must not happen + if(!oNode) return oStyle; + + if(oNode.nodeType == 3) oNode = oNode.parentNode; + + var welNode = jQuery(oNode); + var attribute, cssName; + for(var styleName in this.oStyle){ + attribute = this.oStyleMap[styleName]; + + if(attribute.type && attribute.type == "Value"){ + if(attribute.css){ + var sValue = welNode.css(attribute.css); + + if(styleName == "fontFamily"){ + sValue = sValue.split(/,/)[0]; + } + + oStyle[styleName] = sValue; + }else{ + if(attribute.command){ + try{ + oStyle[styleName] = this.oDocument.queryCommandState(attribute.command); + }catch(e){} + }else{ + // todo + } + } + }else{ + if(attribute.command){ + try{ + if(this.oDocument.queryCommandState(attribute.command)){ + oStyle[styleName] = 1; + }else{ + oStyle[styleName] = 0; + } + }catch(e){} + }else{ + // todo + } + } + } + return oStyle; + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to changing the font size using Select element + * @name hp_XE_FontSizeWithSelectUI.js + */ +xe.XE_FontSizeWithSelectUI = jQuery.Class({ + name : "XE_FontSizeWithSelectUI", + + $init : function(elAppContainer){ + this._assignHTMLObjects(elAppContainer); + }, + + _assignHTMLObjects : function(elAppContainer){ + this.elFontSizeSelect = jQuery("SELECT.xpress_xeditor_ui_fontSize_select", elAppContainer).get(0); + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.registerBrowserEvent(this.elFontSizeSelect, "change", "SET_FONTSIZE_FROM_SELECT_UI"); + this.elFontSizeSelect.selectedIndex = 0; + }, + + $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ + if(sAttributeName == "fontSize"){ + this.elFontSizeSelect.value = sAttributeValue; + if(this.elFontSizeSelect.selectedIndex < 0) this.elFontSizeSelect.selectedIndex = 0; + } + }, + + $ON_SET_FONTSIZE_FROM_SELECT_UI : function(){ + var sFontSize = this.elFontSizeSelect.value; + if(!sFontSize) return; + + this.oApp.exec("SET_WYSIWYG_STYLE", [{"fontSize":sFontSize}]); + this.oApp.exec("CHECK_STYLE_CHANGE", []); + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to changing the font name using Select element + * @name hp_XE_FontNameWithSelectUI.js + */ +xe.XE_FontNameWithSelectUI = jQuery.Class({ + name : "XE_FontNameWithSelectUI", + + $init : function(elAppContainer){ + this._assignHTMLObjects(elAppContainer); + }, + + _assignHTMLObjects : function(elAppContainer){ + this.elFontNameSelect = jQuery("SELECT.xpress_xeditor_ui_fontName_select", elAppContainer).get(0); + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.registerBrowserEvent(this.elFontNameSelect, "change", "SET_FONTNAME_FROM_SELECT_UI"); + this.elFontNameSelect.selectedIndex = 0; + }, + + $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ + if(sAttributeName == "fontFamily"){ + this.elFontNameSelect.value = sAttributeValue.toLowerCase(); + if(this.elFontNameSelect.selectedIndex < 0) this.elFontNameSelect.selectedIndex = 0; + } + }, + + $ON_SET_FONTNAME_FROM_SELECT_UI : function(){ + var sFontName = this.elFontNameSelect.value; + if(!sFontName) return; + + this.oApp.exec("SET_WYSIWYG_STYLE", [{"fontFamily":sFontName}]); + this.oApp.exec("CHECK_STYLE_CHANGE", []); + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to setting/changing the lineheight + * @name hp_XE_LineHeight.js + */ +xe.XE_LineHeight = jQuery.Class({ + name : "XE_LineHeight", + + $init : function(oAppContainer){ + this._assignHTMLObjects(oAppContainer); + }, + + _assignHTMLObjects : function(oAppContainer){ + }, + + $ON_SET_LINEHEIGHT : function(nLineHeight){ + this.setLineHeight(nLineHeight); + }, + + getLineHeight : function(){ + var nodes = this._getSelectedNodes(false); + + var curWrapper, prevWrapper; + var iCurHeight, iHeight; + + if(nodes.length == 0) return -1; + + var iLength = nodes.length; + + if(iLength == 0){ + iHeight = -1; + }else{ + prevWrapper = this._getLineWrapper(nodes[0]); + iHeight = this._getWrapperLineheight(prevWrapper); + } + + var firstNode = this.oSelection.getStartNode(); + + if(iHeight > 0){ + for(var i=1; i=0; i--){ + if(aNodes[i].nodeType == 3 || aNodes[i].tagName == "BR"){ + var oP = oSelection._document.createElement("P"); + oInsertionPoint = aNodes[i].nextSibling; + while(i>=0 && aNodes[i] && (aNodes[i].nodeType == 3 || aNodes[i].tagName == "BR")){ + oP.insertBefore(aNodes[i--], oP.firstChild); + } + oFormattingNode.insertBefore(oP, oInsertionPoint); + i++; + } + } + + if(oFormattingNode && oFormattingNode.parentNode){ + var oP = oSelection._document.createElement("P"); + oP.innerHTML = unescape("
"); + oFormattingNode.parentNode.insertBefore(oP, oFormattingNode.nextSibling); + } + + this.oApp.exec("RECORD_UNDO_ACTION", ["Block Quote"]); + + return oFormattingNode; + }, + + _expandToTableStart : function(oSelection, oNode){ + var oC = oSelection.commonAncestorContainer; + var oResultNode = null; + + var bLastIteration = false; + while(oNode && !bLastIteration){ + if(oNode == oC) bLastIteration = true; + + if(/TBODY|TFOOT|THEAD|TR/i.test(oNode.tagName)){ + oResultNode = this._getTableRoot(oNode); + break; + } + oNode = oNode.parentNode; + } + + return oResultNode; + }, + + _getTableRoot : function(oNode){ + while(oNode && oNode.tagName != "TABLE") oNode = oNode.parentNode; + + return oNode; + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to inserting special characters + * @name hp_XE_SCharacter.js + * @required XpressRangeManager + */ +xe.XE_SCharacter = jQuery.Class({ + name : "XE_SCharacter", + + $init : function(oAppContainer){ + this.bIE = jQuery.browser.msie; + + this._assignHTMLObjects(oAppContainer); + + this.charSet = []; + this.charSet[0] = unescape('FF5B FF5D 3014 3015 3008 3009 300A 300B 300C 300D 300E 300F 3010 3011 2018 2019 201C 201D 3001 3002 %B7 2025 2026 %A7 203B 2606 2605 25CB 25CF 25CE 25C7 25C6 25A1 25A0 25B3 25B2 25BD 25BC 25C1 25C0 25B7 25B6 2664 2660 2661 2665 2667 2663 2299 25C8 25A3 25D0 25D1 2592 25A4 25A5 25A8 25A7 25A6 25A9 %B1 %D7 %F7 2260 2264 2265 221E 2234 %B0 2032 2033 2220 22A5 2312 2202 2261 2252 226A 226B 221A 223D 221D 2235 222B 222C 2208 220B 2286 2287 2282 2283 222A 2229 2227 2228 FFE2 21D2 21D4 2200 2203 %B4 FF5E 02C7 02D8 02DD 02DA 02D9 %B8 02DB %A1 %BF 02D0 222E 2211 220F 266D 2669 266A 266C 327F 2192 2190 2191 2193 2194 2195 2197 2199 2196 2198 321C 2116 33C7 2122 33C2 33D8 2121 2668 260F 260E 261C 261E %B6 2020 2021 %AE %AA %BA 2642 2640').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + this.charSet[1] = unescape('%BD 2153 2154 %BC %BE 215B 215C 215D 215E %B9 %B2 %B3 2074 207F 2081 2082 2083 2084 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 FFE6 %24 FFE5 FFE1 20AC 2103 212B 2109 FFE0 %A4 2030 3395 3396 3397 2113 3398 33C4 33A3 33A4 33A5 33A6 3399 339A 339B 339C 339D 339E 339F 33A0 33A1 33A2 33CA 338D 338E 338F 33CF 3388 3389 33C8 33A7 33A8 33B0 33B1 33B2 33B3 33B4 33B5 33B6 33B7 33B8 33B9 3380 3381 3382 3383 3384 33BA 33BB 33BC 33BD 33BE 33BF 3390 3391 3392 3393 3394 2126 33C0 33C1 338A 338B 338C 33D6 33C5 33AD 33AE 33AF 33DB 33A9 33AA 33AB 33AC 33DD 33D0 33D3 33C3 33C9 33DC 33C6').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + this.charSet[2] = unescape('3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 326A 326B 326C 326D 326E 326F 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 327A 327B 24D0 24D1 24D2 24D3 24D4 24D5 24D6 24D7 24D8 24D9 24DA 24DB 24DC 24DD 24DE 24DF 24E0 24E1 24E2 24E3 24E4 24E5 24E6 24E7 24E8 24E9 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 246A 246B 246C 246D 246E 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 320A 320B 320C 320D 320E 320F 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 321A 321B 249C 249D 249E 249F 24A0 24A1 24A2 24A3 24A4 24A5 24A6 24A7 24A8 24A9 24AA 24AB 24AC 24AD 24AE 24AF 24B0 24B1 24B2 24B3 24B4 24B5 2474 2475 2476 2477 2478 2479 247A 247B 247C 247D 247E 247F 2480 2481 2482').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + this.charSet[3] = unescape('3131 3132 3133 3134 3135 3136 3137 3138 3139 313A 313B 313C 313D 313E 313F 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 314A 314B 314C 314D 314E 314F 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 315A 315B 315C 315D 315E 315F 3160 3161 3162 3163 3165 3166 3167 3168 3169 316A 316B 316C 316D 316E 316F 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 317A 317B 317C 317D 317E 317F 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 318A 318B 318C 318D 318E').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + this.charSet[4] = unescape('0391 0392 0393 0394 0395 0396 0397 0398 0399 039A 039B 039C 039D 039E 039F 03A0 03A1 03A3 03A4 03A5 03A6 03A7 03A8 03A9 03B1 03B2 03B3 03B4 03B5 03B6 03B7 03B8 03B9 03BA 03BB 03BC 03BD 03BE 03BF 03C0 03C1 03C3 03C4 03C5 03C6 03C7 03C8 03C9 %C6 %D0 0126 0132 013F 0141 %D8 0152 %DE 0166 014A %E6 0111 %F0 0127 I 0133 0138 0140 0142 0142 0153 %DF %FE 0167 014B 0149 0411 0413 0414 0401 0416 0417 0418 0419 041B 041F 0426 0427 0428 0429 042A 042B 042C 042D 042E 042F 0431 0432 0433 0434 0451 0436 0437 0438 0439 043B 043F 0444 0446 0447 0448 0449 044A 044B 044C 044D 044E 044F').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + this.charSet[5] = unescape('3041 3042 3043 3044 3045 3046 3047 3048 3049 304A 304B 304C 304D 304E 304F 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 305A 305B 305C 305D 305E 305F 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 306A 306B 306C 306D 306E 306F 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 307A 307B 307C 307D 307E 307F 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 308A 308B 308C 308D 308E 308F 3090 3091 3092 3093 30A1 30A2 30A3 30A4 30A5 30A6 30A7 30A8 30A9 30AA 30AB 30AC 30AD 30AE 30AF 30B0 30B1 30B2 30B3 30B4 30B5 30B6 30B7 30B8 30B9 30BA 30BB 30BC 30BD 30BE 30BF 30C0 30C1 30C2 30C3 30C4 30C5 30C6 30C7 30C8 30C9 30CA 30CB 30CC 30CD 30CE 30CF 30D0 30D1 30D2 30D3 30D4 30D5 30D6 30D7 30D8 30D9 30DA 30DB 30DC 30DD 30DE 30DF 30E0 30E1 30E2 30E3 30E4 30E5 30E6 30E7 30E8 30E9 30EA 30EB 30EC 30ED 30EE 30EF 30F0 30F1 30F2 30F3 30F4 30F5 30F6').replace(/(\S{4})/g, function(a){return "%u"+a}).split(' '); + }, + + _assignHTMLObjects : function(oAppContainer){ + oAppContainer = jQuery.$(oAppContainer) || document; + + this.elDropdownLayer = jQuery("DIV.xpress_xeditor_sCharacter_layer", oAppContainer).get(0); + + this.oTextField = jQuery("INPUT", this.elDropdownLayer).get(0); + this.oInsertButton = jQuery("+ BUTTON", this.oTextField).get(0); + this.aCloseButton = jQuery("BUTTON.close", this.elDropdownLayer).get(); + this.aSCharList = jQuery(".list", this.elDropdownLayer).get(); + var oLabelUL = jQuery(">UL", this.elDropdownLayer).get(0); + this.aLabelA = jQuery("A", oLabelUL).get(); + }, + + $ON_MSG_APP_READY : function(){ + var funcInsert = jQuery.fnBind(this.oApp.exec, this.oApp, "INSERT_SCHARACTERS", [this.oTextField.value]); + jQuery(this.oInsertButton).click(funcInsert, this); + + this.oApp.exec("SET_SCHARACTER_LIST", [this.charSet]); + + for(var i=0; i"); + }else{ + button = document.createElement("BUTTON"); + button.type = "button"; + } + span = document.createElement("SPAN"); + span.innerHTML = unescape(this.charSet[i][ii]); + button.appendChild(span); + + aLI[ii].appendChild(button); + this.aSCharList[i].appendChild(aLI[ii]); + } + + // enable this after Jindo framework is updated +// this.oApp.exec("ATTACH_HOVER_EVENTS", [jQuery(">LI>BUTTON", this.aSCharList[i])]).get(); + }, + + _stopBrowserEvent : function(obj, sEvent){ + jQuery(obj).bind(sEvent, function(e){e.stopPropagation();e.preventDefault();} ) + } +}); +//} +//{ +/** + * @fileOverview This file contains Xpress plugin that takes care of the operations related to Undo/Redo + * @name hp_XE_UndoRedo.js + * @required XE_EditingAreaManager, XpressRangeManager + */ +xe.XE_UndoRedo = jQuery.Class({ + name : "XE_UndoRedo", + actionHistory : null, + // this may also be called, lastAdded/lastRestored + oCurStateIdx : null, + iMinimumSizeChange : 10, + sBlankContentsForFF : "
", + + $init : function(){ + this.aUndoHistory = []; + this.oCurStateIdx = {nIdx: 0, nStep: 0}; + }, + + $PRECONDITION : function(sCmd){ + if(sCmd.match(/_DO_RECORD_UNDO_HISTORY_AT$/)) return true; + + try{ + if(this.oApp.getEditingMode() != "WYSIWYG") return false; + }catch(e){ + return false; + } + + return true; + }, + + $BEFORE_MSG_APP_READY : function(){ + this.oApp.exec("DO_RECORD_UNDO_HISTORY_AT", [this.oCurStateIdx, "", "", null]); + }, + + $ON_MSG_APP_READY : function(){ + this.bFF = jQuery.browser.mozilla; + + this.oApp.exec("ADD_APP_PROPERTY", ["getUndoHistory", jQuery.fnBind(this.getUndoHistory, this)]); + this.oApp.exec("ADD_APP_PROPERTY", ["getUndoStateIdx", jQuery.fnBind(this.getUndoStateIdx, this)]); + + this.oApp.exec("REGISTER_UI_EVENT", ["undo", "click", "UNDO"]); + this.oApp.exec("REGISTER_UI_EVENT", ["redo", "click", "REDO"]); + + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+z", "UNDO"]); + this.oApp.exec("REGISTER_HOTKEY", ["ctrl+y", "REDO"]); + }, + + $ON_UNDO : function(){ + var oTmpStateIdx = {}; + this.oApp.exec("DO_RECORD_UNDO_HISTORY", ["KEYPRESS", false, false, 1]); + if(this.oCurStateIdx.nIdx == 0) return; + + if(this.oCurStateIdx.nStep > 0){ + this.oCurStateIdx.nStep--; + }else{ + var oTmpHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + + this.oCurStateIdx.nIdx--; + + if(oTmpHistory.nTotalSteps>1){ + this.oCurStateIdx.nStep = 0; + }else{ + oTmpHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + this.oCurStateIdx.nStep = oTmpHistory.nTotalSteps-1; + } + } + + this.oApp.exec("RESTORE_UNDO_HISTORY", [this.oCurStateIdx.nIdx, this.oCurStateIdx.nStep]); + + this.oApp.exec("CHECK_STYLE_CHANGE", []); + }, + + + $ON_REDO : function(){ + if(this.oCurStateIdx.nIdx >= this.aUndoHistory.length) return; + + var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + if(this.oCurStateIdx.nIdx == this.aUndoHistory.length-1 && this.oCurStateIdx.nStep >= oCurHistory.nTotalSteps-1) return; + + if(this.oCurStateIdx.nStep < oCurHistory.nTotalSteps-1){ + this.oCurStateIdx.nStep++; + }else{ + this.oCurStateIdx.nIdx++; + oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + this.oCurStateIdx.nStep = oCurHistory.nTotalSteps-1; + } + + this.oApp.exec("RESTORE_UNDO_HISTORY", [this.oCurStateIdx.nIdx, this.oCurStateIdx.nStep]); + + this.oApp.exec("CHECK_STYLE_CHANGE", []); + }, + + $ON_RECORD_UNDO_ACTION : function(sAction){ + this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction]); + }, + + $ON_RECORD_UNDO_BEFORE_ACTION : function(sAction){ + this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction, true, true]); + }, + + $ON_RECORD_UNDO_AFTER_ACTION : function(sAction){ + this.oApp.exec("DO_RECORD_UNDO_HISTORY", [sAction, true, false]); + }, + + $ON_RESTORE_UNDO_HISTORY : function(nUndoIdx, nUndoStateStep){ + this.oCurStateIdx.nIdx = nUndoIdx; + this.oCurStateIdx.nStep = nUndoStateStep; + + var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + var sContent = oCurHistory.sContent[this.oCurStateIdx.nStep]; + var oBookmark = oCurHistory.oBookmark[this.oCurStateIdx.nStep]; + + this.oApp.setIR(sContent, true); + + // setting the innerHTML may change the internal DOM structure, so save the value again. + var sCurContent = this.oApp.getIR(); + if(this.bFF && sCurContent == this.sBlankContentsForFF){ + sCurContent = ""; + } + oCurHistory.sContent[this.oCurStateIdx.nStep] = sCurContent; + + var oSelection = this.oApp.getEmptySelection(); + if(oSelection.selectionLoaded){ + if(oBookmark){ + oSelection.moveToXPathBookmark(oBookmark); + }else{ + oSelection = this.oApp.getEmptySelection(); + } + + oSelection.select(); + } + }, + + $ON_DO_RECORD_UNDO_HISTORY : function(sAction, bTwoStepAction, bBeforeAction, nForceAddUnlessEqual){ + bTwoStepAction = bTwoStepAction || false; + bBeforeAction = bBeforeAction || false; + nForceAddUnlessEqual = nForceAddUnlessEqual || 0; + + // if we're in the middle of some action history, remove everything after current idx if any "little" change is made + if(!(this.oCurStateIdx.nIdx == this.aUndoHistory.length-1)) nForceAddUnlessEqual = 1; + + var oCurHistory = this.aUndoHistory[this.oCurStateIdx.nIdx]; + + var sCurContent = this.oApp.getIR(); + var sHistoryContent = oCurHistory.sContent[this.oCurStateIdx.nStep]; + + if(this.bFF && sCurContent == this.sBlankContentsForFF){ + sCurContent = ""; + } + + // every TwoStepAction needs to be recorded + if(!bTwoStepAction){ + switch(nForceAddUnlessEqual){ + case 0: + if(Math.abs(sHistoryContent.length - sCurContent.length) .bx", this.oUILayer).get(); + + this.oFindInputSet = oTmp[0]; + this.oReplaceInputSet = oTmp[1]; + + this.oFindInput_Keyword = jQuery("INPUT", this.oFindInputSet).get(0); + + oTmp = jQuery("INPUT", this.oReplaceInputSet).get(); + this.oReplaceInput_Original = oTmp[0]; + this.oReplaceInput_Replacement = oTmp[1]; + + this.oFindNextButton = jQuery("BUTTON.find_next", this.oUILayer).get(0); + this.oCancelButton = jQuery("BUTTON.cancel", this.oUILayer).get(0); + + this.oReplaceButton = jQuery("BUTTON.replace", this.oUILayer).get(0); + this.oReplaceAllButton = jQuery("BUTTON.replace_all", this.oUILayer).get(0); + + this.aCloseButtons = jQuery("BUTTON.close", this.oUILayer).get(); + this.aCloseButtons[this.aCloseButtons.length] = this.oCancelButton; + }, + + $ON_MSG_APP_READY : function(){ + // the right document will be available only when the src is completely loaded + if(this.oEditingWindow && this.oEditingWindow.tagName == "IFRAME") + this.oEditingWindow = this.oEditingWindow.contentWindow; + + this.oFindReplace = new xe.FindReplace(this.oEditingWindow); + if(!this.oFindReplace.bBrowserSupported){ + this.oApp.exec("DISABLE_UI", ["find_replace"]); + return; + } + + for(var i=0; i" + sURL + ""; + this.oSelection.pasteHTML(str); + }else{ + var nSession = Math.ceil(Math.random()*10000); + var arg = ( sURL == "" ? ["unlink"] : ["createLink", false, this.sATagMarker+nSession+sURL] ); + this.oApp.exec("EXECCOMMAND", arg); + + this.oSelection.setFromSelection(); + + var oDoc = this.oApp.getWYSIWYGDocument(); + var aATags = oDoc.body.getElementsByTagName("A"); + var nLen = aATags.length; + var rxMarker = new RegExp(this.sRXATagMarker+nSession, "i"); + var elATag; + for(var i=0; i this.iMaxRows) iRows = this.iMaxRows; + + this.oRowInput.value = iRows; + this._showNewTable(); + }, + + $ON_ST_SET_COLUMN_NUM : function(iColumns, iColumnDiff){ + iColumns = iColumns || parseInt(this.oColumnInput.value); + iColumnDiff = iColumnDiff || 0; + + iColumns += iColumnDiff; + + if(iColumns < this.iMinColumns) iColumns = this.iMinColumns; + if(iColumns > this.iMaxColumns) iColumns = this.iMaxColumns; + + this.oColumnInput.value = iColumns; + this._showNewTable(); + }, + + $ON_ST_INSERT_TABLE : function(){ + var sTable = this._getTableString(); + + this.oApp.exec("PASTE_HTML", [sTable]); + + this.oApp.exec("ST_CLOSE", []); + }, + + $ON_ST_CLOSE : function(){ + this.oApp.exec("HIDE_ACTIVE_LAYER", []); + }, + + $ON_ST_SET_BORDER_WIDTH : function(iBorderWidth, iBorderWidthDiff){ + iBorderWidth = iBorderWidth || parseInt(this.oBorderWidthInput.value); + iBorderWidthDiff = iBorderWidthDiff || 0; + + iBorderWidth += iBorderWidthDiff; + + if(iBorderWidth < this.iMinBorderWidth) iBorderWidth = this.iMinBorderWidth; + if(iBorderWidth > this.iMaxBorderWidth) iBorderWidth = this.iMaxBorderWidth; + + this.oBorderWidthInput.value = iBorderWidth; + this._showNewTable(); + }, + + $ON_ST_INC_BORDER_WIDTH : function(){ + this.oApp.exec("ST_SET_BORDER_WIDTH", [null, 1]); + }, + + $ON_ST_DEC_BORDER_WIDTH : function(){ + this.oApp.exec("ST_SET_BORDER_WIDTH", [null, -1]); + }, + + $ON_ST_TOGGLE_BORDER_COLOR_LAYER : function(){ + if(this.welDropdownLayer.hasClass("p1")) + this.oApp.exec("ST_HIDE_BORDER_COLOR_LAYER", []); + else + this.oApp.exec("ST_SHOW_BORDER_COLOR_LAYER", []); + }, + + $ON_ST_SHOW_BORDER_COLOR_LAYER : function(){ + this.welDropdownLayer.addClass("p1"); + this.welDropdownLayer.removeClass("p2"); + + this.oApp.exec("SHOW_COLOR_PALETTE", ["ST_SET_BORDER_COLOR_FROM_PALETTE", this.elDropdownLayer]); + }, + + $ON_ST_HIDE_BORDER_COLOR_LAYER : function(){ + this.welDropdownLayer.removeClass("p1"); + + this.oApp.exec("HIDE_COLOR_PALETTE", []); + }, + + $ON_ST_TOGGLE_BGCOLOR_LAYER : function(){ + if(this.welDropdownLayer.hasClass("p2")) + this.oApp.exec("ST_HIDE_BGCOLOR_LAYER", []); + else + this.oApp.exec("ST_SHOW_BGCOLOR_LAYER", []); + }, + + $ON_ST_SHOW_BGCOLOR_LAYER : function(){ + this.welDropdownLayer.removeClass("p1"); + this.welDropdownLayer.addClass("p2"); + + this.oApp.exec("SHOW_COLOR_PALETTE", ["ST_SET_BGCOLOR_FROM_PALETTE", this.elDropdownLayer]); + }, + + $ON_ST_HIDE_BGCOLOR_LAYER : function(){ + this.welDropdownLayer.removeClass("p2"); + + this.oApp.exec("HIDE_COLOR_PALETTE", []); + }, + + $ON_ST_SET_BORDER_COLOR_FROM_PALETTE : function(sColorCode){ + this.oApp.exec("ST_SET_BORDER_COLOR", [sColorCode]); + this.oApp.exec("ST_HIDE_BORDER_COLOR_LAYER", []); + }, + + $ON_ST_SET_BORDER_COLOR : function(sColorCode){ + this.oBorderColorInput.value = sColorCode; + this.oButton_BorderColorPreview.style.backgroundColor = sColorCode; + + this._showNewTable(); + }, + + $ON_ST_SET_BGCOLOR_FROM_PALETTE : function(sColorCode){ + this.oApp.exec("ST_SET_BGCOLOR", [sColorCode]); + this.oApp.exec("ST_HIDE_BGCOLOR_LAYER", []); + }, + + $ON_ST_SET_BGCOLOR : function(sColorCode){ + this.oBGColorInput.value = sColorCode; + this.oButton_BGColorPreview.style.backgroundColor = sColorCode; + + this._showNewTable(); + }, + + _showNewTable : function(){ + var oTmp = document.createElement("DIV"); + oTmp.innerHTML = this._getTableString(); + var oNewTable = oTmp.firstChild; + this.oSampleTable.parentNode.insertBefore(oNewTable, this.oSampleTable); + this.oSampleTable.parentNode.removeChild(this.oSampleTable); + this.oSampleTable = oNewTable; + }, + + // need to do something about the table width as the same HTML code is being used to the actual table and the preview table + _getTableString : function(){ + var sBorderColorCode = this.oBorderColorInput.value; + var sBGColorCode = this.oBGColorInput.value; + var iBorderWidth = this.oBorderWidthInput.value; + var sTD = ""; + if(jQuery.browser.msie){ + sTD = "

"; + }else{ + if(jQuery.browser.firefox){ + sTD = ""; + }else{ + sTD = ""; + } + } + + var sTable = '


 

'; + var sRow = ''; + var iColumns = this.oColumnInput.value; + for(var i=0; i/ig, + regex_meanless_css2 = /(?:(?:margin|padding)\s*:\s*0(?:px)?|\-(?:moz|ms|webkit|opera)\-[\w-]+\s*:\s*.*?|[\w-]+\s*:\s*\-(?:moz|ms|webkit|opera)\-[\w-]+|(?:line-height|font-variant|font-stretch|font-size-adjust|font-size)\s*:\s*[a-z_-]+)\s*;?\s*|font-(?:weight|style)\s*:\s*normal;?/ig, + regex_class = /<(.*?)\s+class\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))(.*?)>/ig, + regex_class2 = /xe_selected_cell/g; + regex_handler = /<(.*?)\s+on[a-z]+\s*=(?:\s*".*?"|\s*'.*?'|[^\s>]+)(.*?)>/ig, + //regex_id = /<(.*?)\s+id\s*=(?:[^\s>]+|\s*".*?"|\s*'.*?')(.*?)>/ig, + //regex_script = //ig, + regex_font_color = /color\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, + regex_font_face = /face\s*=(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, + regex_font_size = /size\s*=(?:\s*"(\d+)"|\s*'(\d+)'|(\d+))/i, + regex_style = /style\s*=\s*(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, + regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, + regex_font_style = /font-style\s*:\s*italic;?/i, + regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i, + regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/ig, + regex_quote_attr = /([\w-]+\s*=(?:\s*"[^"]+"|\s*'[^']+'))|([\w-]+)=([^\s]+)/g; //" + +var + allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var,iframe,object,param,style'.split(','), + lonely_tags = 'area,br,col,embed,hr,img,input,param'.split(','); + +var + replace_tags = { + 'b' : 'strong', + 'i' : 'em', + 's' : 'del', + 'strike' : 'del' + }; + +xe.XE_XHTMLFormatter = $.Class({ + name : "XE_XHTMLFormatter", + + $ON_MSG_APP_READY : function() { + this.oApp.addConverter("WYSIWYG_TO_IR", this.TO_IR); + this.oApp.addConverter("HTMLSrc_TO_IR", this.TO_IR); + this.oApp.addConverter("IR_TO_HTMLSrc", this.IR_TO); + this.oApp.addConverter("IR_TO_WYSIWYG", this.IR_TO); + }, + + TO_IR : function(sContent) { + var stack = []; + + // remove xeHandled attrs + sContent = sContent.replace(/xeHandled="YES"/ig,''); + + + // remove all useless styles + sContent = sContent.replace(regex_meanless_css1, function(m0,m1,m2,m3){ + m2 = m2.replace(regex_meanless_css2, ''); + + return '<'+m1+(m2?' style="'+m2+'"':'')+m3+'>'; + }); + + // remove all useless classes + sContent = sContent.replace(regex_class, function(m0,m1,m2,m3,m4,m5){ + var cls = jQuery.trim((m2 || m3 || m4 || "").replace(regex_class2, '')); + + return '<'+(m1||"")+(cls?' class="'+cls+'"':'')+(m5||"")+'>'; + }); + + // remove all event handler + sContent = sContent.replace(regex_handler, '<$1$2>'); + + // remove all id + //sContent = sContent.replace(regex_id, '<$1$2>'); + + // remove all scripts + //sContent = sContent.replace(regex_script, ''); + + if (jQuery.browser.msie) { + // remove jQuery attributes + sContent = sContent.replace(regex_jquery, ''); + + // quote all attrs + sContent = sContent.replace(/<(\w+) ([^>]+)>/g, function(m0,m1,m2){ + return '<'+m1+' '+ + m2.replace(regex_quote_attr, function(s0,s1,s2,s3){ + if (s1) return s1; + if(/^"/.test(s3)||/"$/.test(s3)) return s2+'='+s3; + return s2+'="'+s3+'"'; + }) + '>'; + }); + } + + // remove all useless tag and enclose tags + regex = /<(\/)?([:\w\/-]+)(.*?)>/ig; + sContent = sContent.replace(regex, function(m0,m1,m2,m3){ + var m3s = []; + var state = ''; + + m1 = m1 || ''; + m2 = m2.toLowerCase(); + m3 = $.trim(m3 || ''); + + if (!m1) { + if ($.inArray(m2,lonely_tags) >= 0) { + var len = m3.length; + if (m2 == 'br') m3 = ''; + if (!m3 || m3.substring(len-1,len) != '/') m3 += ' /'; + + return '<'+m2+' '+m3+'>'; + } + + if (replace_tags[m2]) { + stack.push({tag:m2, state:'deleted'}); + + m2 = replace_tags[m2]; + state = 'inserted'; + } else if (m2 == 'font') { + stack.push({tag:m2, state:'deleted'}); + + m2 = 'span'; + m3s = []; + if (regex_font_color.test(m3)) m3s.push('color:'+(RegExp.$1||RegExp.$2||RegExp.$3)+';'); + if (regex_font_face.test(m3)) m3s.push('font-family:'+(RegExp.$1||RegExp.$2||RegExp.$3)+';'); + + m3 = m3s.length?'style="'+m3s.join('')+'"':''; + state = 'inserted'; + } else if (m2 == 'center') { + stack.push({tag:m2, state:'deleted'}); + + m2 = 'div' + m3 = 'style="text-align:center"'; + + state = 'inserted'; + } else if (m2 == 'span') { + var style = ''; + + if (!m3) { + stack.push({tag:m3, state:'deleted'}); + return ''; + } + + if (regex_style.test(m3)) { + var tmpstack = []; + var tmptag = ''; + + style = RegExp.$1||RegExp.$2||RegExp.$3; + m3 = m3.replace(regex_style, ''); + + if (regex_font_weight.test(style)) { + if (RegExp.$1 == 'bold' || RegExp.$1 == 'bolder') { + style = style.replace(regex_font_weight, ''); + tmpstack.push({tag:'strong', state:'inserted'}); + tmptag += ''; + } + } + + if (regex_font_style.test(style)) { + style = style.replace(regex_font_style, ''); + tmpstack.push({tag:'em', state:'inserted'}); + tmptag += ''; + } + + if (regex_font_decoration.test(style)) { + var deco_css = ' '+RegExp.$1.toLowerCase()+' '; + + if (deco_css.indexOf('underline ') > 0) { + deco_css = deco_css.replace('underline ', ''); + tmpstack.push({tag:'u', state:'inserted'}); + tmptag += ''; + } + + if (deco_css.indexOf('line-through ') > 0) { + deco_css = deco_css.replace('line-through ', ''); + tmpstack.push({tag:'del', state:'inserted'}); + tmptag += ''; + } + + deco_css = $.trim(deco_css); + style = style.replace(regex_font_decoration, (deco_css?'text-decoration:'+deco_css+';':'')); + } + + style = $.trim(style); + + stack.push({tag:m2, state:(!m3&&!style?'deleted':'')}); + stack = stack.concat(tmpstack); + + return (!m3&&!style?'':'')+tmptag; + } + } else { + state = (jQuery.inArray(m2,allow_tags) < 0)?'deleted':''; + if (state == 'deleted') return ''; + } + + stack.push({tag:m2, state:state}); + } else { + var tags = [], t = ''; + + if (!stack.length) return ''; + + do { + t = stack.pop(); + if (t.state != 'inserted' && t.tag != m2) { + stack.push(t); + return tags.join(''); + } + if (t.state != 'deleted') tags.push(''); + } while(stack.length && t.tag != m2); + + return tags.join(''); + } + + return '<'+m1+m2+(m3?' '+m3:'')+'>'; + }); + if (stack.length) { + var t = ''; + + do { + t = stack.pop(); + if (t.state != 'deleted') sContent += ''; + } while(stack.length); + } + + return sContent; + }, + + IR_TO : function(sContent) { + return sContent; + } +}); + +// center, font, b, i, s, strike + +})(jQuery); +/** + * Support XE extensions + * @author gony + */ +xe.XE_Extension = jQuery.Class({ + name : "XE_Extension", + seq : '', + + $init : function(elAppContainer, editor_sequence) { + this.seq = editor_sequence; + this._assignHTMLObjects(elAppContainer); + }, + + _assignHTMLObjects : function(elAppContainer) { + this.elDropdownLayer = jQuery('DIV.xpress_xeditor_extension_layer', elAppContainer).get(0); + }, + + _removeAttrs : function(sContent) { + return sContent; + }, + + _addEvent : function() { + if (this.oApp.getEditingMode() != 'WYSIWYG') return; + + var doc = this.oApp.getWYSIWYGDocument(); + var seq = this.seq; + var fn = function(){ + var obj = jQuery(this); + var comp = obj.attr('editor_component'); + if (comp && jQuery.isFunction(openComponent)) { + editorPrevNode = obj.get(0); + openComponent(comp, seq); + } + }; + + jQuery('img,div[editor_component]', doc).each(function(){ + var obj = jQuery(this); + if(this.nodeName == 'IMG' && !obj.attr('editor_component')) obj.attr('editor_component','image_link') + if(!obj.attr('xeHandled')) { + obj.attr('xeHandled','YES'); + obj.dblclick(fn); + } + }); + }, + + $ON_MSG_APP_READY : function() { + this.oApp.exec('REGISTER_UI_EVENT', ['extension', 'click', 'TOGGLE_EXTENSION_LAYER']); + }, + + $ON_TOGGLE_EXTENSION_LAYER : function() { + this.oApp.exec('TOGGLE_TOOLBAR_ACTIVE_LAYER', [this.elDropdownLayer]); + }, + + $ON_CHANGE_EDITING_MODE : function(mode) { + var self = this; + setTimeout(function(){ self._addEvent(); }, 100); + }, + + $ON_PASTE_HTML : function() { + var self = this; + setTimeout(function(){ self._addEvent(); }, 100); + }, + + $ON_LOAD_IR_FIELD : function() { + var self = this; + setTimeout(function(){ self._addEvent(); }, 100); + }, + + $ON_SET_IR : function() { + var self = this; + setTimeout(function(){ self._addEvent(); }, 100); + } +}); +/** + * Auto saving + * @author gony + */ +xe.XE_AutoSave = jQuery.Class({ + name : "XE_AutoSave", + form : null, + textarea : null, + + $init : function(oIRTextarea, elAppContainer) { + this.form = oIRTextarea.form; + this.textarea = oIRTextarea; + + this._assignHTMLObjects(elAppContainer); + }, + + _assignHTMLObjects : function(elAppContainer) { + this.welMessageBox = jQuery('autosave_message'); + }, + + $ON_MSG_APP_READY : function() { + var elSrl = jQuery(this.form._saved_doc_srl); + var elTitle = jQuery(this.form._saved_doc_title); + var elContent = jQuery(this.form._saved_doc_content); + + var doc_srl = jQuery.trim(elSrl.val()); + var title = jQuery.trim(elTitle.val()); + var content = jQuery.trim(elContent.val()); + + if (title || content) { + if (confirm(this.form._saved_doc_message.value)) { + jQuery(this.form.title).val(title); + jQuery(this.form.document_srl).val(doc_srl); + this.oApp.setIR(content); + editorUploadInit(uploadSettingObj, true); + } else { + editorRemoveSavedDoc(); + } + } + + editorEnableAutoSave(this.form, jQuery(this.form).attr("editor_sequence")); + + // register hotkey + this.oApp.exec('REGISTER_HOTKEY', ['ctrl+shift+s','AUTO_SAVE']); + }, + + $ON_AUTO_SAVE : function() { + _editorAutoSave(); + } +}); +/** + * Format Block plugin + * @author gony + */ +xe.XE_FormatWithSelectUI = jQuery.Class({ + name : "XE_FormatWithSelectUI", + + $init : function(elAppContainer){ + this._assignHTMLObjects(elAppContainer); + }, + + _assignHTMLObjects : function(elAppContainer){ + this.elFormatSelect = jQuery("SELECT.xpress_xeditor_ui_format_select", elAppContainer).get(0); + }, + + $ON_MSG_APP_READY : function(){ + this.oApp.registerBrowserEvent(this.elFormatSelect, "change", "SET_FORMAT_FROM_SELECT_UI"); + this.elFormatSelect.selectedIndex = 0; + }, + + $ON_MSG_STYLE_CHANGED : function(sAttributeName, sAttributeValue){ + var blockName = this.oApp.getWYSIWYGDocument().queryCommandValue("FormatBlock"); + + if (!blockName) return (this.elFormatSelect.selectedIndex = 0); + if (jQuery.browser.msie && /([0-9])/.test(blockName)) blockName = 'h'+(RegExp.$1); + + this.elFormatSelect.value = blockName.toLowerCase(); + if(this.elFormatSelect.selectedIndex < 0) this.elFormatSelect.selectedIndex = 0; + }, + + $ON_SET_FORMAT_FROM_SELECT_UI : function(){ + var sFormat = this.elFormatSelect.value; + if(!sFormat) return; + if(jQuery.browser.msie) sFormat = '<'+sFormat+'>'; + + this.oApp.exec("EXECCOMMAND", ["FormatBlock", false, sFormat]); + this.oApp.exec("CHECK_STYLE_CHANGE", []); + } +}); +/** + * Enhanced Table Fetures + * @author gony + */ + +// 표 편집 확장 기능 +xe.XE_Table = jQuery.Class({ + _startSel : null, + _endSel : null, + + $ON_MSG_APP_READY : function() { + this._doc = jQuery(this.oApp.getWYSIWYGDocument()); + + this.$FnMouseDown = jQuery.fnBind(this._mousedown, this); + this.$FnMouseUp = jQuery.fnBind(this._mouseup, this); + this.$FnMouseMove = jQuery.fnBind(this._mousemove, this); + + this._doc.mousedown(this.$FnMouseDown); + + // initialize + this._startSel = null; + this._endSel = null; + + // register buttons + this.oApp.exec('REGISTER_UI_EVENT', ['merge_cells', 'click', 'MERGE_CELLS']); + this.oApp.exec('REGISTER_UI_EVENT', ['split_col', 'click', 'CELL_SPLIT_BY_COL']); + this.oApp.exec('REGISTER_UI_EVENT', ['split_row', 'click', 'CELL_SPLIT_BY_ROW']); + + // register hotkeys + this.oApp.exec('REGISTER_HOTKEY', ['ctrl+alt+m', 'MERGE_CELLS']); + + // perform default ready action + this.$super.$ON_MSG_APP_READY(); + }, + + $ON_MERGE_CELLS : function() { + var html = ""; + var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); + var self = this; + + // 선택된 셀이 없으면 종료 + if (!cell.length) return; + + // UNDO 지점 기록 + this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Merge"]); + + // 선택한 모든 셀의 데이터를 첫번째 셀로 복사 + cell.each(function(){ html += jQuery(this).html() }).eq(0).html(html); + + // 첫번째 셀 가로 확장 + var colspan = 0; + cell.eq(0).nextAll('td,th').andSelf().filter('.xe_selected_cell').each(function(idx){ + colspan += self._getSpan(this, 'col'); + }); + + // 마지막 셀까지 줄의 갯수 계산 + var rect = this._getRect(cell.eq(0)); + var start_tr = cell.eq(0).parent('tr'); + var end_tr = cell.eq(cell.length-1).parent('tr'); + var all_rows = cell.parents('table').eq(0).find('tr'); + var rowspan = all_rows.index(end_tr.get(0)) - all_rows.index(start_tr.get(0)) + this._getSpan(cell.eq(cell.length-1), 'row'); + + // 첫번째 셀 colspan, rowspan 속성 지정 + cell.eq(0).attr('colSpan', colspan).attr('rowSpan', rowspan); + + // 첫번째 셀을 제외한 다른 모든 셀 제거 + cell.slice(1).remove(); + }, + + $ON_CELL_SPLIT_BY_ROW : function(many) { + var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); + var table = cell.parents('table').eq(0); + var self = this; + + // 선택된 셀이 없으면 종료 + if (!cell.length) return; + + // UNDO 지점 기록 + this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Split By Row"]); + + // 선택 영역의 상하 좌표 구함 + var _top = this._getRect(cell.eq(0)).top; + var _bottom = this._getRect(cell.eq(cell.length-1)).bottom; + + // 테이블의 모든 셀에서 선택영역에 해당하는 셀을 구한다(상하 기준). + (cell = table.find('td,th').filter(function(){ + var rect = self._getRect(jQuery(this)); + + return !(rect.bottom <= _top || rect.top >= _bottom); + })).filter('.xe_selected_cell').each(function(){ + var t = jQuery(this); + var row = t.parent('tr'); + var rowspan = self._getSpan(t, 'row'); + var rect = self._getRect(t); + var queue = []; + var clone = t.clone().html('
'); + var topspan = 1, botspan = 1; + + // rowspan > 1이면 현재 셀의 rowspan을 절반으로 분할한다. + if (rowspan > 1) { + + topspan = Math.ceil(rowspan/2); + botspan = rowspan - topspan; + + queue.push(function(){ + t.attr('rowSpan', topspan); + }); + + clone.attr('rowSpan', botspan); + } else { + // rowspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 rowspan을 추가 + cell.filter(function(){ + if (t.get(0) == this) return false; + + var tt = jQuery(this); + var rc = self._getRect(tt); + + // 범위를 넘은 부분은 제외 + if (rc.bottom <= rect.top || rc.top >= rect.bottom) return false; + + return true; + }).each(function(){ + var tt = jQuery(this); + var sp = self._getSpan(tt, 'row')+1; + + // rowspan 1 추가 + queue.push(function(){ + tt.attr('rowSpan', sp); + }); + }); + + // 새 줄을 추가한다. + if (jQuery.browser.msie) { + // Fix bug for IE + row.after(row.clone().empty().get(0).outerHTML); + } else { + row.after(row.clone().empty()); + } + } + + var rows = row.nextAll('tr'); + + // 현재 셀이 마지막 줄에 있다면 한 줄 추가 후 새로운 셀 추가 + if (!rows.length) { + row.after(row.clone().empty().append(clone)); + } else { + var next_sib = rows.eq(topspan - 1).children('td,th').filter(function(){ + return ( self._getRect(jQuery(this)).left > rect.left ); + }); + + if (jQuery.browser.msie) { + next_sib.length? + next_sib.eq(0).before(clone.get(0).outerHTML): + rows.eq(topspan-1).append(clone.get(0).outerHTML); + } else { + next_sib.length? + next_sib.slice(0,1).before(clone): + rows.slice(topspan-1,1).append(clone); + } + } + + // 함수를 바로 실행하면 좌표가 틀어지므로, 큐에 넣은 후 실행 + jQuery.each(queue, function(){ this(); }); + + }); + }, + + $ON_CELL_SPLIT_BY_COL : function(many) { + var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); + var table = cell.parents('table').slice(0,1); + var self = this; + var ie_bug = [], tmpId = (new Date).getTime(), tmpStr = ''; + + // 선택된 셀이 없으면 종료 + if (!cell.length) return; + + // UNDO 지점 기록 + this.oApp.exec("RECORD_UNDO_ACTION", ["Cell:Split By Column"]); + + // 선택 영역의 좌우 좌표 구함 + var first_row = cell.eq(0).parent('tr'); + var _left = this._getRect(first_row.find('.xe_selected_cell:first')).left; + var _right = this._getRect(first_row.find('.xe_selected_cell:last')).right; + + // 테이블의 모든 셀에서 선택영역에 해당하는 셀을 구한다(좌우 기준). + (cell = table.find('td,th').filter(function(){ + var rect = self._getRect(jQuery(this)); + + return !(rect.right <= _left || rect.left >= _right); + })).filter('.xe_selected_cell').each(function(idx){ + var t = jQuery(this); + var colspan = self._getSpan(t, 'col'); + var clone = t.clone().html('
'); + + // colspan > 1 이면 colspan을 절반으로 분할한다. + if (colspan > 1) { + var leftspan = Math.ceil(colspan/2); + var rightspan = colspan - leftspan; + + t.attr('colSpan', leftspan); + clone.attr('colSpan', rightspan); + } else { + // colspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 colspan을 추가 + var rect = self._getRect(t); + + cell.filter(function(){ + if (t.get(0) == this) return false; + + var tt = jQuery(this); + var rc = self._getRect(tt); + + // 범위를 넘은 부분은 제외 + if (rc.right <= rect.left || rc.left >= rect.right) return false; + + return true; + }).each(function(){ + var tt = jQuery(this); + + // colspan 1 추가 + tt.attr('colSpan', self._getSpan(tt, 'col')+1); + }); + + clone.attr('colSpan', 1); + } + + if (jQuery.browser.msie) { + // Fix for IE bug + t.after(clone.get(0).outerHTML); + } else { + t.after(clone); + } + }); + }, + + $ON_CHECK_STYLE_CHANGE : function(){ + var ui = ['merge_cells', 'split_col', 'split_row']; + var app = this.oApp; + var command = (this._startSel && this._startSel.is('.xe_selected_cell'))?'ENABLE_UI':'DISABLE_UI'; + + jQuery.each(ui, function(){ app.exec(command, [this]); }); + }, + + _mousedown : function(event) { + var cur = jQuery(event.target); + var sel = cur.parents().andSelf().filter('td,th,table'); + var app = this.oApp; + var self = this; + + // 모든 선택영역 해제 + jQuery('td.xe_selected_cell', this.oApp.getWYSIWYGDocument()).removeClass('xe_selected_cell'); + + this._startSel = null; + this._endSel = null; + + if (!sel.length || !this._isLeftClicked(event.button)) return; + + function delayed(){ + sel = app.getSelection().cloneRange(); + sel.collapseToStart(); + sel = jQuery(sel.startContainer).parents().andSelf().filter('td,th').eq(0); + + if (!sel.length) return self._removeAllListener()||true; + + // 좌표를 구한다 + self._getRect(self._startSel = sel); + + // 이벤트 바인딩 + self._doc.bind('mousemove', self.$FnMouseMove); + self._doc.bind('mouseup', self.$FnMouseUp); + } + + // mousedown이 일어난 후에 선택 영역이 설정되므로 실행을 지연시킨다. + setTimeout(delayed, 0); + }, + + _mouseup : function(event) { + // 선택된 셀 확인 + this._removeAllListener(); + + // 시작셀과 종료셀 제거 + this._startSel = this._endSel = null; + }, + + _mousemove : function(event) { + var cur = jQuery(event.target); + var cell = cur.parents().andSelf().filter('td,th').eq(0); + var self = this; + + // 마우스 왼쪽 버튼이 눌리지 않았으면 종료 + if (!cell.length || !this._isLeftClicked(event.button)) return; + if (!this._endSel && cell.get(0) == this._startSel.get(0)) return; + if (this._endSel && cell.get(0) == this._endSel.get(0)) return; + + // 종료셀 && 종료셀의 좌표 + this._getRect(this._endSel = cell); + + // 선택 범위를 구한다 + var _top = Math.min(this._startSel.rect.top, this._endSel.rect.top); + var _left = Math.min(this._startSel.rect.left, this._endSel.rect.left); + var _bottom = Math.max(this._startSel.rect.bottom, this._endSel.rect.bottom); + var _right = Math.max(this._startSel.rect.right, this._endSel.rect.right); + + var table = cell.parents('table'); + var cells = table.find('td,th').removeClass('xe_selected_cell'); + var i = 0; + + // 복잡한 모양의 테이블을 위한 반복 처리 + var selected = jQuery(); + do { + // 선택한 셀로 최대 영역 재계산 + selected.each(function(){ + var rect = self._getRect(jQuery(this)); + + // 영역 재계산 + if (rect.right > _right) _right = rect.right; + if (rect.left < _left) _left = rect.left; + if (rect.top < _top) _top = rect.top; + if (rect.bottom > _bottom) _bottom = rect.bottom; + }); + + // 좌표 범위 안에 있는 선택할 셀을 추린다. + cells = cells.filter(':not(.xe_selected_cell)'); + selected = cells.filter(function(){ + var rect = self._getRect(jQuery(this)); + + if (rect.right <= _left || rect.left >= _right || rect.bottom <= _top || rect.top >= _bottom) return false; + + return true; + }).addClass('xe_selected_cell'); + } while(selected.length); + + // 브라우저의 기본 선택영역 해제 : FF 제외 - 기본 기능이 충분히 좋아서 + 이 부분을 실행하면 오류가 발생해서 + if (!jQuery.browser.mozilla) { + function delayed() { + var sel = self.oApp.getSelection(); + + if (!self._startSel) return; + if (!self._startSel.get(0).firstChild) self._startSel.text(" "); + + sel.selectNode(self._startSel.get(0).firstChild); + sel.collapseToStart(); + sel.select(); + } + + setTimeout(delayed, 0); + } + + return false; + }, + + _removeAllListener : function() { + // 이벤트 해제 + this._doc.unbind("mousemove", this.$FnMouseMove); + this._doc.unbind("mouseup", this.$FnMouseUp); + }, + + _isLeftClicked : function(value) { + return jQuery.browser.msie?!!(value & 1):(value == 0); + }, + + _getRect : function(obj) { + var el = obj.get(0); + + obj.rect = {}; + obj.rect.top = el.offsetTop; + obj.rect.left = el.offsetLeft; + obj.rect.bottom = obj.rect.top + el.offsetHeight; + obj.rect.right = obj.rect.left + el.offsetWidth; + + return obj.rect; + }, + + _getSpan : function(obj, type) { + var span = parseInt(jQuery(obj).attr(type+'span')); + + return isNaN(span)?1:span; + } +}).extend(xe.XE_Table); diff --git a/modules/editor/skins/xpresseditor/js/xe_interface.js b/modules/editor/skins/xpresseditor/js/xe_interface.js index ed3ed5fcc..025c67775 100644 --- a/modules/editor/skins/xpresseditor/js/xe_interface.js +++ b/modules/editor/skins/xpresseditor/js/xe_interface.js @@ -1,277 +1,280 @@ -if (!window.xe) xe = {}; - -xe.Editors = []; - -function editorStart_xe(editor_sequence, primary_key, content_key, editor_height, colorset, content_style, content_font, content_font_size) { - if(typeof(colorset)=='undefined') colorset = 'white'; - if(typeof(content_style)=='undefined') content_style = 'xeStyle'; - if(typeof(content_font)=='undefined') content_font= ''; - if(typeof(content_font_size)=='undefined') content_font_size= ''; - - var target_src = request_uri+'modules/editor/styles/'+content_style+'/editor.html'; - - var textarea = jQuery("#xpress-editor-"+editor_sequence); - var iframe = jQuery('