merge from 1.7.3.5(r13153:r13167)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2013-09-29 23:32:39 +00:00
parent cc47d2b247
commit 2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions

View file

@ -9,10 +9,10 @@
<title xml:lang="ru">Меню</title>
<title xml:lang="zh-TW">選單</title>
<title xml:lang="tr">Menü</title>
<description xml:lang="ko">레이아웃, 모듈을 연결하는 메뉴를 생성/관리하는 모듈입니다.</description>
<description xml:lang="ko">레이아웃과 페이지를 연결하고 메뉴를 생성/관리합니다.</description>
<description xml:lang="zh-CN">此模块将生成并管理连接布局,模块的菜单。</description>
<description xml:lang="jp">レイアウト、モジュールを連動させるメニューを作成・管理するモジュールです。</description>
<description xml:lang="en">This module is for creating/managing menus which link to layouts or modules.</description>
<description xml:lang="en">This is for creating/managing menus which link to layouts or modules.</description>
<description xml:lang="vi">Module này dành cho việc tạo và quản lý Menu sẽ liên kết với giao diện hoặc Mudule.</description>
<description xml:lang="es">Este módulo es para crear/manejar los menús que que son conectados con los diseños o módulos.</description>
<description xml:lang="ru">Этот модуль служит для создания/управления меню, соединяюще лейауты и модули.</description>

View file

@ -1,46 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<permission action="getMenuAdminSiteMap" target="manager" />
<permission action="procMenuAdminUpdateAuth" target="manager" />
<permissions />
<actions>
<action name="dispMenuAdminContent" type="view" standalone="true" />
<action name="dispMenuAdminInsert" type="view" standalone="true" />
<action name="dispMenuAdminManagement" type="view" standalone="true" />
<action name="dispMenuAdminMidList" type="view" standalone="true" />
<action name="dispMenuAdminSiteMap" type="view" standalone="true" admin_index="true" menu_name="siteMap" menu_index="true" />
<action name="dispMenuAdminSiteDesign" type="view" standalone="true" menu_name="siteDesign" menu_index="true" />
<action name="getMenuAdminTplInfo" type="model" standalone="true" />
<action name="getMenuAdminItemInfo" type="model" standalone="true" />
<action name="getMenuAdminSiteMap" type="model" standalone="true" />
<action name="getMenuAdminInstalledMenuType" type="model" standalone="true" />
<action name="getMenuAdminDetailSetup" type="model" standalone="true" />
<action name="procMenuAdminInsert" type="controller" standalone="true" ruleset="insertMenu" />
<action name="procMenuAdminUpdate" type="controller" standalone="true" ruleset="updateMenuTitle" />
<action name="procMenuAdminDelete" type="controller" standalone="true" />
<action name="procMenuAdminInsertItem" type="controller" standalone="true" ruleset="insertMenuItem" />
<action name="procMenuAdminUpdateItem" type="controller" standalone="true" ruleset="updateMenuItem" />
<action name="procMenuAdminButtonUpload" type="controller" standalone="true" />
<action name="procMenuAdminInsertItemForAdminMenu" type="controller" standalone="true" />
<action name="procMenuAdminDeleteItem" type="controller" standalone="true" />
<action name="procMenuAdminMakeXmlFile" type="controller" standalone="true" />
<action name="procMenuAdminMoveItem" type="controller" standalone="true" />
<action name="procMenuAdminCopyItem" type="controller" standalone="true" />
<action name="procMenuAdminArrangeItem" type="controller" standalone="true" />
<action name="procMenuAdminUploadButton" type="controller" standalone="true" />
<action name="procMenuAdminDeleteButton" type="controller" standalone="true" />
<action name="procMenuAdminAllActList" type="controller" standalone="true" />
<action name="procMenuAdminUpdateAuth" type="controller" standalone="true" />
<action name="dispMenuMenu" type="mobile" standalone="true" />
</actions>
<menus>
<menu name="siteMap">
<title xml:lang="en">Menu Management</title>
<title xml:lang="ko">사이트</title>
<title xml:lang="en">Menu Editor</title>
<title xml:lang="ko">사이트 메뉴 편집</title>
<title xml:lang="jp">サイトマップ</title>
<title xml:lang="zh-CN">Menu Management</title>
<title xml:lang="zh-CN">Menu Editor</title>
<title xml:lang="zh-TW">選單管理</title>
<title xml:lang="es">Menu Management</title>
<title xml:lang="ru">Menu Management</title>
<title xml:lang="fr">Menu Management</title>
<title xml:lang="vi">Menu Management</title>
<title xml:lang="mn">Menu Management</title>
<title xml:lang="tr">Menu Management</title>
<title xml:lang="es">Menu Editor</title>
<title xml:lang="ru">Menu Editor</title>
<title xml:lang="fr">Menu Editor</title>
<title xml:lang="vi">Menu Editor</title>
<title xml:lang="mn">Menu Editor</title>
<title xml:lang="tr">Menu Editor</title>
</menu>
<menu name="siteDesign">
<title xml:lang="en">Site Design</title>
<title xml:lang="ko">사이트 디자인 설정</title>
<title xml:lang="jp">Site Design</title>
<title xml:lang="zh-CN">Site Design</title>
<title xml:lang="zh-TW">Site Design</title>
<title xml:lang="es">Site Design</title>
<title xml:lang="ru">Site Design</title>
<title xml:lang="fr">Site Design</title>
<title xml:lang="vi">Site Design</title>
<title xml:lang="mn">Site Design</title>
<title xml:lang="tr">Site Design</title>
</menu>
</menus>
</module>

View file

@ -64,6 +64,14 @@
<value xml:lang="jp"><![CDATA[展開]]></value>
<value xml:lang="zh-TW"><![CDATA[展開]]></value>
</item>
<item name="edit_sitemap">
<value xml:lang="ko"><![CDATA[사이트맵 수정]]></value>
<value xml:lang="en"><![CDATA[Edit Sitemap]]></value>
</item>
<item name="sitemap_name">
<value xml:lang="ko"><![CDATA[사이트맵 이름]]></value>
<value xml:lang="en"><![CDATA[Sitemap Name]]></value>
</item>
<item name="add_menu">
<value xml:lang="ko"><![CDATA[메뉴 추가]]></value>
<value xml:lang="en"><![CDATA[Add Menu Item]]></value>
@ -76,42 +84,58 @@
<value xml:lang="jp"><![CDATA[メニューの編集]]></value>
<value xml:lang="zh-TW"><![CDATA[編輯選單]]></value>
</item>
<item name="sitemap">
<value xml:lang="ko"><![CDATA[사이트맵]]></value>
<value xml:lang="en"><![CDATA[Sitemap]]></value>
</item>
<item name="edit_sitemap">
<value xml:lang="ko"><![CDATA[사이트맵 편집]]></value>
<value xml:lang="en"><![CDATA[Edit Sitemap]]></value>
</item>
<item name="add_new_sitemap">
<value xml:lang="ko"><![CDATA[새 사이트맵 추가]]></value>
<value xml:lang="en"><![CDATA[Add New Menu]]></value>
<value xml:lang="ko"><![CDATA[사이트맵 추가]]></value>
<value xml:lang="en"><![CDATA[Add Menu]]></value>
<value xml:lang="jp"><![CDATA[新しいサイトマップ追加]]></value>
<value xml:lang="zh-TW"><![CDATA[新增選單]]></value>
</item>
<item name="module_or_url">
<value xml:lang="ko"><![CDATA[모듈 또는 URL]]></value>
<value xml:lang="en"><![CDATA[Module or URL]]></value>
<value xml:lang="ko"><![CDATA[페이지 또는 URL]]></value>
<value xml:lang="en"><![CDATA[Page or URL]]></value>
<value xml:lang="jp"><![CDATA[モジュール、またはURL]]></value>
<value xml:lang="zh-TW"><![CDATA[模組或連結]]></value>
</item>
<item name="create_module_in_menu">
<value xml:lang="ko"><![CDATA[모듈 생성]]></value>
<value xml:lang="en"><![CDATA[Create Module]]></value>
<value xml:lang="ko"><![CDATA[페이지 생성]]></value>
<value xml:lang="en"><![CDATA[Create Page]]></value>
<value xml:lang="jp"><![CDATA[モジュール生成]]></value>
<value xml:lang="zh-TW"><![CDATA[建立模組]]></value>
</item>
<item name="select_module_in_menu">
<value xml:lang="ko"><![CDATA[모듈 선택]]></value>
<value xml:lang="en"><![CDATA[Select Module]]></value>
<value xml:lang="ko"><![CDATA[페이지 선택]]></value>
<value xml:lang="en"><![CDATA[Select Page]]></value>
<value xml:lang="jp"><![CDATA[モジュール選択]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇模組]]></value>
</item>
<item name="create_mid_in_menu">
<value xml:lang="ko"><![CDATA[모듈 아이디 생성]]></value>
<value xml:lang="en"><![CDATA[Create Module ID]]></value>
<value xml:lang="ko"><![CDATA[페이지 아이디 생성]]></value>
<value xml:lang="en"><![CDATA[Create Page ID]]></value>
<value xml:lang="jp"><![CDATA[モジュールID生成]]></value>
<value xml:lang="zh-TW"><![CDATA[建立模組 ID]]></value>
</item>
<item name="select_mid_in_menu">
<value xml:lang="ko"><![CDATA[모듈 아이디 선택]]></value>
<value xml:lang="en"><![CDATA[Select Module ID]]></value>
<value xml:lang="ko"><![CDATA[페이지 아이디 선택]]></value>
<value xml:lang="en"><![CDATA[Select Page ID]]></value>
<value xml:lang="jp"><![CDATA[モジュールID選択]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇模組 ID]]></value>
</item>
<item name="update">
<value xml:lang="ko"><![CDATA[업데이트]]></value>
<value xml:lang="en"><![CDATA[Update]]></value>
</item>
<item name="installed">
<value xml:lang="ko"><![CDATA[설치됨]]></value>
<value xml:lang="en"><![CDATA[Installed]]></value>
</item>
<item name="depth">
<value xml:lang="ko"><![CDATA[단계]]></value>
<value xml:lang="en"><![CDATA[Step]]></value>
@ -161,9 +185,9 @@
<value xml:lang="vi"><![CDATA[Số Serial của Menu]]></value>
</item>
<item name="menu_id">
<value xml:lang="ko"><![CDATA[메뉴 이름]]></value>
<value xml:lang="ko"><![CDATA[메뉴 ID]]></value>
<value xml:lang="en"><![CDATA[Menu ID]]></value>
<value xml:lang="jp"><![CDATA[メニュー]]></value>
<value xml:lang="jp"><![CDATA[メニューID]]></value>
<value xml:lang="zh-CN"><![CDATA[菜单名称]]></value>
<value xml:lang="zh-TW"><![CDATA[選單名稱]]></value>
<value xml:lang="fr"><![CDATA[Nom d'Identité de Menu]]></value>
@ -171,6 +195,18 @@
<value xml:lang="es"><![CDATA[ID del menú]]></value>
<value xml:lang="tr"><![CDATA[Menü Kimliği]]></value>
</item>
<item name="browser_title">
<value xml:lang="ko"><![CDATA[브라우저 제목]]></value>
<value xml:lang="en"><![CDATA[Browser title]]></value>
</item>
<item name="about_browser_title">
<value xml:lang="ko"><![CDATA[브라우저 제목에 나타나는 값입니다. RSS/Trackback에서도 사용됩니다.]]></value>
<value xml:lang="en"><![CDATA[Text used as browser title. Also used for RSS/Trackback]]></value>
</item>
<item name="menu_type">
<value xml:lang="ko"><![CDATA[메뉴 타입]]></value>
<value xml:lang="en"><![CDATA[Menu type]]></value>
</item>
<item name="menu_url">
<value xml:lang="ko"><![CDATA[연결 url]]></value>
<value xml:lang="en"><![CDATA[Menu URL]]></value>
@ -183,7 +219,7 @@
<value xml:lang="tr"><![CDATA[Menü URLsi]]></value>
</item>
<item name="menu_open_window">
<value xml:lang="ko"><![CDATA[새 창 열기]]></value>
<value xml:lang="ko"><![CDATA[메뉴 클릭시 새 창으로 열기]]></value>
<value xml:lang="en"><![CDATA[Open a new window]]></value>
<value xml:lang="jp"><![CDATA[新規ウィンドウで開く]]></value>
<value xml:lang="zh-CN"><![CDATA[新窗口]]></value>
@ -201,7 +237,7 @@
<value xml:lang="zh-TW"><![CDATA[目前視窗開啟]]></value>
</item>
<item name="menu_expand">
<value xml:lang="ko"><![CDATA[펼침]]></value>
<value xml:lang="ko"><![CDATA[늘 펼쳐진 상태로 있게 합니다]]></value>
<value xml:lang="en"><![CDATA[Expand]]></value>
<value xml:lang="jp"><![CDATA[展開]]></value>
<value xml:lang="zh-CN"><![CDATA[展开]]></value>
@ -213,8 +249,8 @@
<value xml:lang="vi"><![CDATA[Trải rộng]]></value>
</item>
<item name="menu_img_btn">
<value xml:lang="ko"><![CDATA[이미지 버튼]]></value>
<value xml:lang="en"><![CDATA[Image button]]></value>
<value xml:lang="ko"><![CDATA[메뉴 링크 이미지]]></value>
<value xml:lang="en"><![CDATA[Menu link image]]></value>
<value xml:lang="jp"><![CDATA[イメージボタン]]></value>
<value xml:lang="zh-CN"><![CDATA[图片按钮]]></value>
<value xml:lang="zh-TW"><![CDATA[圖片按鈕]]></value>
@ -224,8 +260,16 @@
<value xml:lang="tr"><![CDATA[Resim Tuşu]]></value>
<value xml:lang="vi"><![CDATA[Hình nút bấm]]></value>
</item>
<item name="about_imgbtn">
<value xml:lang="ko"><![CDATA[사이트 네비게이션에 텍스트 메뉴명을 대신할 이미지를 등록 합니다.]]></value>
<value xml:lang="en"><![CDATA[Replace text natigation links with image buttons]]></value>
</item>
<item name="menu_no_img_btn">
<value xml:lang="ko"><![CDATA[이미지 없음]]></value>
<value xml:lang="en"><![CDATA[No image]]></value>
</item>
<item name="menu_normal_btn">
<value xml:lang="ko"><![CDATA[일반]]></value>
<value xml:lang="ko"><![CDATA[기본]]></value>
<value xml:lang="en"><![CDATA[Normal]]></value>
<value xml:lang="jp"><![CDATA[一般ボタン]]></value>
<value xml:lang="zh-CN"><![CDATA[普通]]></value>
@ -233,6 +277,10 @@
<value xml:lang="ru"><![CDATA[Обычное]]></value>
<value xml:lang="vi"><![CDATA[Bình thường]]></value>
</item>
<item name="about_menu_normal_btn">
<value xml:lang="ko"><![CDATA[일반 버튼 이미지]]></value>
<value xml:lang="en"><![CDATA[Normal button image]]></value>
</item>
<item name="menu_hover_btn">
<value xml:lang="ko"><![CDATA[마우스 오버]]></value>
<value xml:lang="en"><![CDATA[Mouse over]]></value>
@ -245,8 +293,12 @@
<value xml:lang="tr"><![CDATA[Fare üzerine geldiğinde]]></value>
<value xml:lang="vi"><![CDATA[Khi trỏ chuột]]></value>
</item>
<item name="about_menu_hover_btn">
<value xml:lang="ko"><![CDATA[마우스 오버 버튼 이미지]]></value>
<value xml:lang="en"><![CDATA[Mouse over button image]]></value>
</item>
<item name="menu_active_btn">
<value xml:lang="ko"><![CDATA[선택 시]]></value>
<value xml:lang="ko"><![CDATA[선택 ]]></value>
<value xml:lang="en"><![CDATA[When selected]]></value>
<value xml:lang="jp"><![CDATA[選択時のボタン]]></value>
<value xml:lang="zh-CN"><![CDATA[激活链接]]></value>
@ -257,6 +309,18 @@
<value xml:lang="tr"><![CDATA[Seçildiğinde]]></value>
<value xml:lang="vi"><![CDATA[Khi chọn]]></value>
</item>
<item name="about_menu_active_btn">
<value xml:lang="ko"><![CDATA[선택 됨 버튼 이미지]]></value>
<value xml:lang="en"><![CDATA[When selected button image]]></value>
</item>
<item name="menu_change_btn">
<value xml:lang="ko"><![CDATA[변경]]></value>
<value xml:lang="en"><![CDATA[Change]]></value>
</item>
<item name="menu_upload_btn">
<value xml:lang="ko"><![CDATA[이미지 올리기]]></value>
<value xml:lang="en"><![CDATA[Upload image]]></value>
</item>
<item name="menu_group_srls">
<value xml:lang="ko"><![CDATA[그룹 제한]]></value>
<value xml:lang="en"><![CDATA[Accessable Groups]]></value>
@ -390,7 +454,7 @@
<value xml:lang="vi"><![CDATA[Tìm kiếm Module]]></value>
</item>
<item name="msg_cannot_delete_for_child">
<value xml:lang="ko"><![CDATA[하부 메뉴가 있는 메뉴는 삭제하실 수 없습니다.]]></value>
<value xml:lang="ko"><![CDATA[하부 메뉴가 있는 메뉴는 삭제 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[A menu with child menus cannot be deleted.]]></value>
<value xml:lang="jp"><![CDATA[下位メニューのあるメニューは削除できません。]]></value>
<value xml:lang="zh-CN"><![CDATA[有下级菜单的菜单不能删除。]]></value>
@ -401,6 +465,10 @@
<value xml:lang="tr"><![CDATA[Altmenüleri olan bir menü silinemez.]]></value>
<value xml:lang="vi"><![CDATA[Không thể xóa Menu khi có những Menu con.]]></value>
</item>
<item name="msg_cannot_delete_homemenu">
<value xml:lang="ko"><![CDATA[시작 메뉴가 포함된 경우 삭제할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[Cannot delete a menu with Home menu.]]></value>
</item>
<item name="msg_cannot_delete_for_admin_topmenu">
<value xml:lang="ko"><![CDATA[최상위 메뉴는 삭제할 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[A top menu cannot be deleted]]></value>
@ -408,8 +476,8 @@
<value xml:lang="zh-TW"><![CDATA[主選單無法刪除。]]></value>
</item>
<item name="about_title">
<value xml:lang="ko"><![CDATA[모듈에 연결할 때, 쉽게 구분할 수 있는 제목을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Please enter the title that is easy to verify when connecting to the module.]]></value>
<value xml:lang="ko"><![CDATA[페이지에 연결할 때, 쉽게 구분할 수 있는 제목을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Please enter the title that is easy to verify when connecting to the page.]]></value>
<value xml:lang="jp"><![CDATA[モジュールをリンクする際に分かりやすいタイトルを入力してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[请输入连接模块时容易区分的标题。]]></value>
<value xml:lang="zh-TW"><![CDATA[請輸入連接模組時,容易區分的標題。]]></value>
@ -420,9 +488,9 @@
<value xml:lang="vi"><![CDATA[Xin hãy nhập tiêu đề để dễ dàng xác minh khi kết nối tới Module.]]></value>
</item>
<item name="about_menu_management">
<value xml:lang="ko"><![CDATA[메뉴관리는 선택하신 레이아웃에서 사용하는 메뉴를 구성할 수 있도록 합니다.
정해진 단계까지 메뉴를 구성 가능하며 입력하신 메뉴를 클릭하시면 상세 정보를 입력할 수 있습니다.
폴더 그림을 클릭하시면 메뉴를 확장하실 수 있습니다.
<value xml:lang="ko"><![CDATA[메뉴관리는 선택 레이아웃에서 사용하는 메뉴를 구성할 수 있도록 합니다.
정해진 단계까지 메뉴를 구성 가능하며 입력한 메뉴를 클릭하면 상세 정보를 입력할 수 있습니다.
폴더 그림을 클릭하면 메뉴를 확장할 수 있습니다.
간혹 메뉴가 정상적으로 나타나지 않으면 "캐시파일 재생성" 버튼을 눌러서 정보를 갱신하세요.
* 정해진 단계 이상의 메뉴는 제대로 표시되지 않을 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[The menu management enables you to organize your menus in the selected layout.
@ -479,7 +547,7 @@ Nếu Menu không hiển thị một cách bình thường, hãy làm mới thô
<value xml:lang="vi"><![CDATA[Tên sẽ hiển thị là Tên Menu nếu không phải là Admin hay nút hình ảnh.]]></value>
</item>
<item name="about_menu_url">
<value xml:lang="ko"><![CDATA[메뉴 선택 시 이동할 URL입니다.<br />다른 모듈을 연결하고자 할 때는 mid값만 입력해주시면 됩니다.<br />내용이 없으면 이 메뉴를 선택해도 아무런 동작이 없습니다.]]></value>
<value xml:lang="ko"><![CDATA[메뉴 선택 시 이동할 URL입니다.<br />다른 페이지를 연결하고자 할 때는 mid값만 입력하면 됩니다.<br />내용이 없으면 이 메뉴를 선택해도 아무런 동작이 없습니다.]]></value>
<value xml:lang="en"><![CDATA[It is the menu URL when select the menu.<br />You may enter only id value to link to other module.<br />If no contents exist, nothing will happen even though you click the menu.]]></value>
<value xml:lang="jp"><![CDATA[メニュー選択時、移動するURLです。<br />他のモジュールとリンクを張る場合はIDの値のみ入力してください。<br />内容がない場合は、メニューを選択しても何の動作も行われません。]]></value>
<value xml:lang="zh-CN"><![CDATA[点击菜单时要移动的URL。<br />连接其他模块时只输入id值即可。<br />没有内容时点击菜单也不会有什么动作。]]></value>
@ -527,7 +595,7 @@ Nếu Menu không hiển thị một cách bình thường, hãy làm mới thô
<value xml:lang="vi"><![CDATA[Nếu đăng kí nút hình ảnh, hình ảnh sẽ tự động chèn lên tên của Menu, và sẽ hiển thị trong giao diện.]]></value>
</item>
<item name="about_menu_group_srls">
<value xml:lang="ko"><![CDATA[그룹을 선택하면 해당 그룹의 사용자만 메뉴가 보이게 됩니다. (xml파일을 직접 열람하면 노출이 됩니다.)]]></value>
<value xml:lang="ko"><![CDATA[그룹을 선택하면 해당 그룹의 사용자만 메뉴가 보이게 됩니다. (xml파일을 직접 열람하면 노출이 됩니다.)]]></value>
<value xml:lang="en"><![CDATA[If you select a group, only the group members can see the menu. (if xml file is directly opened, it will be visible to anyone who opens it.)]]></value>
<value xml:lang="jp"><![CDATA[グループを選択すると該当するグループのユーザーにのみメニューが表示されますXMLファイルを直接開くと情報が表示されます。]]></value>
<value xml:lang="zh-CN"><![CDATA[如选择用户组,只有所属组用户才能看到此菜单。 —xml文件中不能隐藏]]></value>
@ -539,8 +607,8 @@ Nếu Menu không hiển thị một cách bình thường, hãy làm mới thô
<value xml:lang="vi"><![CDATA[Nếu lựa chọn nhóm, thì chỉ những nhóm được chọn mới thấy được Menu. (nếu File XML trực tiếp mở ra, nó sẽ được hiển thị).]]></value>
</item>
<item name="about_menu">
<value xml:lang="ko"><![CDATA[메뉴모듈은 생성된 모듈을 편리한 메뉴관리기를 통해 정리하고 레이아웃과 연결하여 별도의 수작업 없이 완성된 사이트를 구축하도록 도와줍니다.
메뉴는 사이트를 관리하기 보다는 모듈과 레이아웃을 연결해 주며 레이아웃을 통해 여러 가지 형태의 메뉴를 표시할 수 있도록 하는 정보만 가지고 있습니다.]]></value>
<value xml:lang="ko"><![CDATA[생성한 페이지를 레이아웃과 연결하여 완성된 사이트를 구축하도록 도와줍니다.
메뉴는 사이트를 관리하기 보다는 페이지와 레이아웃을 연결해 주며 레이아웃을 통해 여러 가지 형태의 메뉴를 표시할 수 있도록 하는 정보만 가지고 있습니다.]]></value>
<value xml:lang="en"><![CDATA[Menu module will help you create a complete site through the convenient menu management which arranges the created modules and links to layouts without any manual work.
However, menu is not a site manager. It just has the information which can link to modules and layouts so you can express different types of menus.]]></value>
<value xml:lang="jp"><![CDATA[メニューモジュールは、メニュー管理機能にて生成モジュールの整理やレイアウトとのリンクを設定し、かんたんに管理者画面でサイトを構築できるようにします。
@ -573,23 +641,23 @@ Menu không phải là người quản lý, nhiệm vụ của nó chỉ là li
<value xml:lang="vi"><![CDATA[Chỉ được phép sử dụng File hình ảnh.]]></value>
</item>
<item name="cType">
<value xml:lang="ko"><![CDATA[모듈 또는 URL]]></value>
<value xml:lang="en"><![CDATA[Module or URL]]></value>
<value xml:lang="ko"><![CDATA[페이지 또는 URL]]></value>
<value xml:lang="en"><![CDATA[Page or URL]]></value>
<value xml:lang="zh-TW"><![CDATA[模組或連結]]></value>
</item>
<item name="module_type">
<value xml:lang="ko"><![CDATA[모듈 선택]]></value>
<value xml:lang="en"><![CDATA[Select Module]]></value>
<value xml:lang="ko"><![CDATA[페이지 선택]]></value>
<value xml:lang="en"><![CDATA[Select Page]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇模組]]></value>
</item>
<item name="create_menu_url">
<value xml:lang="ko"><![CDATA[모듈 아이디 생성]]></value>
<value xml:lang="en"><![CDATA[Create Module ID]]></value>
<value xml:lang="ko"><![CDATA[페이지 아이디 생성]]></value>
<value xml:lang="en"><![CDATA[Create Page ID]]></value>
<value xml:lang="zh-TW"><![CDATA[建立模組 ID]]></value>
</item>
<item name="select_menu_url">
<value xml:lang="ko"><![CDATA[모듈 아이디 선택]]></value>
<value xml:lang="en"><![CDATA[Select Module ID]]></value>
<value xml:lang="ko"><![CDATA[페이지 아이디 선택]]></value>
<value xml:lang="en"><![CDATA[Select Page ID]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇模組 ID]]></value>
</item>
<item name="exposure_limits">
@ -597,4 +665,254 @@ Menu không phải là người quản lý, nhiệm vụ của nó chỉ là li
<value xml:lang="en"><![CDATA[Exposure limits]]></value>
<value xml:lang="zh-TW"><![CDATA[Exposure limits]]></value>
</item>
<item name="msg_empty_menu_item">
<value xml:lang="ko"><![CDATA[선택된 메뉴의 정보가 없습니다.]]></value>
</item>
<item name="copy">
<value xml:lang="ko"><![CDATA[복사]]></value>
<value xml:lang="en"><![CDATA[Copy]]></value>
</item>
<item name="cut">
<value xml:lang="ko"><![CDATA[잘라내기]]></value>
<value xml:lang="en"><![CDATA[Cut]]></value>
</item>
<item name="paste">
<value xml:lang="ko"><![CDATA[붙여넣기]]></value>
<value xml:lang="en"><![CDATA[Paste]]></value>
</item>
<item name="change_name">
<value xml:lang="ko"><![CDATA[이름 변경]]></value>
<value xml:lang="en"><![CDATA[Change name]]></value>
</item>
<item name="set_as_homepage">
<value xml:lang="ko"><![CDATA[홈 페이지로 사용하기]]></value>
<value xml:lang="en"><![CDATA[Set as homepage]]></value>
</item>
<item name="has_been_set_as_homepage">
<value xml:lang="ko"><![CDATA[홈 페이지로 사용중]]></value>
<value xml:lang="en"><![CDATA[Has been set as homepage]]></value>
</item>
<item name="general_settings">
<value xml:lang="ko"><![CDATA[메뉴 수정]]></value>
<value xml:lang="en"><![CDATA[General settings]]></value>
</item>
<item name="design">
<value xml:lang="ko"><![CDATA[디자인]]></value>
<value xml:lang="en"><![CDATA[Design]]></value>
</item>
<item name="site_design">
<value xml:lang="ko"><![CDATA[사이트 디자인]]></value>
<value xml:lang="en"><![CDATA[Site design]]></value>
</item>
<item name="use_site_design">
<value xml:lang="ko"><![CDATA[사이트 디자인 사용]]></value>
<value xml:lang="en"><![CDATA[Use site design]]></value>
</item>
<item name="full_settings">
<value xml:lang="ko"><![CDATA[상세 설정]]></value>
<value xml:lang="en"><![CDATA[Full settings]]></value>
</item>
<item name="install_other_menu_types">
<value xml:lang="ko"><![CDATA[다른 메뉴타입 설치]]></value>
<value xml:lang="en"><![CDATA[Install other menu types]]></value>
</item>
<item name="about_new_menu_id">
<value xml:lang="ko"><![CDATA[URL을 사용할 필요가 없다면 생략 가능. 메뉴 생성 후 [메뉴 수정]에서 수정 가능.]]></value>
<value xml:lang="en"><![CDATA[URL을 사용할 필요가 없다면 생략 가능. 메뉴 생성 후 [메뉴 수정]에서 수정 가능.]]></value>
</item>
<item name="about_menu_id">
<value xml:lang="ko"><![CDATA[페이지 URL로 사용(40자 이내).]]></value>
<value xml:lang="en"><![CDATA[페이지 URL로 사용(40자 이내).]]></value>
</item>
<item name="skip_menu_id">
<value xml:lang="ko"><![CDATA[생략시 임의값 사용]]></value>
<value xml:lang="en"><![CDATA[생략시 임의값 사용]]></value>
</item>
<item name="url_link">
<value xml:lang="ko"><![CDATA[URL 링크]]></value>
<value xml:lang="en"><![CDATA[URL link]]></value>
</item>
<item name="menu_link">
<value xml:lang="ko"><![CDATA[메뉴 링크]]></value>
<value xml:lang="en"><![CDATA[Menu link]]></value>
</item>
<item name="about_menu_link">
<value xml:lang="ko"><![CDATA[메뉴를 선택하면 자동 입력됨]]></value>
<value xml:lang="en"><![CDATA[메뉴를 선택하면 자동 입력됨]]></value>
</item>
<item name="view_zoom">
<value xml:lang="ko"><![CDATA[크게 보기]]></value>
<value xml:lang="en"><![CDATA[Zoom]]></value>
</item>
<item name="use_site_default_layout">
<value xml:lang="ko"><![CDATA[사이트 기본 레이아웃 사용]]></value>
<value xml:lang="en"><![CDATA[Use site default layout]]></value>
</item>
<item name="site_default_layout_settings">
<value xml:lang="ko"><![CDATA[사이트 기본 레이아웃 설정]]></value>
<value xml:lang="en"><![CDATA[Site default layout settings]]></value>
</item>
<item name="no_use_layout">
<value xml:lang="ko"><![CDATA[레이아웃 사용 안 함]]></value>
<value xml:lang="en"><![CDATA[No use layout]]></value>
</item>
<item name="about_apply_layout">
<value xml:lang="ko"><![CDATA[클릭하면 레이아웃이 적용됩니다.]]></value>
<value xml:lang="en"><![CDATA[클릭하면 레이아웃이 적용됩니다.]]></value>
</item>
<item name="make_copy">
<value xml:lang="ko"><![CDATA[복사본 생성]]></value>
<value xml:lang="en"><![CDATA[Make copy]]></value>
</item>
<item name="install_other_layouts">
<value xml:lang="ko"><![CDATA[다른 레이아웃 설치]]></value>
<value xml:lang="en"><![CDATA[Install other layouts]]></value>
</item>
<item name="layout_html_css_settings">
<value xml:lang="ko"><![CDATA[HTML/CSS 설정]]></value>
<value xml:lang="en"><![CDATA[HTML/CSS settings]]></value>
</item>
<item name="layout_settings">
<value xml:lang="ko"><![CDATA[설정]]></value>
<value xml:lang="en"><![CDATA[Settings]]></value>
</item>
<item name="use_site_default_skin">
<value xml:lang="ko"><![CDATA[사이트 기본 스킨 사용]]></value>
<value xml:lang="en"><![CDATA[Use site default skin]]></value>
</item>
<item name="site_default_skin_settings">
<value xml:lang="ko"><![CDATA[사이트 기본 스킨 설정]]></value>
<value xml:lang="en"><![CDATA[Site default skin settings]]></value>
</item>
<item name="about_apply_skin">
<value xml:lang="ko"><![CDATA[클릭하면 스킨이 적용됩니다.]]></value>
<value xml:lang="en"><![CDATA[클릭하면 스킨이 적용됩니다.]]></value>
</item>
<item name="install_other_skins">
<value xml:lang="ko"><![CDATA[다른 스킨 설치]]></value>
<value xml:lang="en"><![CDATA[Install other themes]]></value>
</item>
<item name="no_downloadable_item">
<value xml:lang="ko"><![CDATA[다운로드 가능한 항목이 없습니다.]]></value>
<value xml:lang="en"><![CDATA[There are no downloadable item.]]></value>
</item>
<item name="confirm_sitemap_delete">
<value xml:lang="ko"><![CDATA[사이트맵을 삭제 하겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to remove this sitemap?]]></value>
</item>
<item name="confirm_menu_delete">
<value xml:lang="ko"><![CDATA[메뉴를 삭제 하겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to remove this menu item?]]></value>
</item>
<item name="confirm_delete_all_contents">
<value xml:lang="ko"><![CDATA[메뉴와 연결된 콘텐츠도 모두 삭제된다는 것을 이해하고 있습니다.]]></value>
<value xml:lang="en"><![CDATA[I understand that the contents will be deleted as well.]]></value>
</item>
<item name="confirm_shortcut_delete">
<value xml:lang="ko"><![CDATA[바로가기를 삭제 하겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to remove this shortcut item?]]></value>
</item>
<item name="confirm_shortcut_desc">
<value xml:lang="ko"><![CDATA[바로가기를 삭제해도 실제 메뉴는 지워지지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[바로가기를 삭제해도 실제 메뉴는 지워지지 않습니다.]]></value>
</item>
<item name="confirm_delete_all_sub_items_title">
<value xml:lang="ko"><![CDATA[하위 메뉴가 있습니다.]]></value>
<value xml:lang="en"><![CDATA[The menu has sub-menu(s)]]></value>
</item>
<item name="confirm_delete_all_sub_items">
<value xml:lang="ko"><![CDATA[하위 메뉴도 함께 삭제 하시겠습니까?]]></value>
<value xml:lang="en"><![CDATA[Do you want to delete all the sub-menu(s)?]]></value>
</item>
<item name="confirm_delete_all_item">
<value xml:lang="ko"><![CDATA[사이트맵에 포함된 메뉴 모두 삭제된다는 것을 이해하고 있습니다.]]></value>
<value xml:lang="en"><![CDATA[I know delete all menu of sitemap.]]></value>
</item>
<item name="installation_completed">
<value xml:lang="ko"><![CDATA[설치가 완료 됐습니다.]]></value>
<value xml:lang="en"><![CDATA[Installation is completed.]]></value>
</item>
<item name="shortcut">
<value xml:lang="ko"><![CDATA[바로가기]]></value>
<value xml:lang="en"><![CDATA[Shortcut]]></value>
</item>
<item name="shortcut_desc">
<value xml:lang="ko"><![CDATA[URL 또는 다른 메뉴에 대한 링크입니다.]]></value>
<value xml:lang="en"><![CDATA[A shortcut is a link to a URL or to another menu]]></value>
</item>
<item name="msg_target_is_sub_of_origin">
<value xml:lang="ko"><![CDATA[대상 메뉴가 원본 메뉴의 하위 메뉴 입니다.]]></value>
<value xml:lang="en"><![CDATA[Target menu is sub of origin menu.]]></value>
</item>
<item name="target_of_view_menu">
<value xml:lang="ko"><![CDATA[메뉴 노출 대상]]></value>
<value xml:lang="en"><![CDATA[Target of view menu]]></value>
</item>
<item name="input_new_layout_name">
<value xml:lang="ko"><![CDATA[새 레이아웃명을 입력 해 주세요.]]></value>
<value xml:lang="en"><![CDATA[Input new layout name]]></value>
</item>
<item name="skip_new_layout_name">
<value xml:lang="ko"><![CDATA[생략 시 임의의 값이 사용 됩니다.]]></value>
<value xml:lang="en"><![CDATA[생략 시 임의의 값이 사용 됩니다.]]></value>
</item>
<item name="need_to_ftp_setup">
<value xml:lang="ko"><![CDATA[FTP 설정이 필요 합니다.]]></value>
<value xml:lang="en"><![CDATA[Need to FTP setup.]]></value>
</item>
<item name="go_to_ftp_setup">
<value xml:lang="ko"><![CDATA[확인을 누르면 FTP 설정 페이지로 이동 합니다.]]></value>
<value xml:lang="en"><![CDATA[Redirecting to FTP Setup page.]]></value>
</item>
<item name="go_to_site_design_setup">
<value xml:lang="ko"><![CDATA[사이트 기본 디자인 설정 페이지로 이동 합니다.]]></value>
<value xml:lang="en"><![CDATA[Redirecting to Site Design page.]]></value>
</item>
<item name="about_menu_type_in_default">
<value xml:lang="ko"><![CDATA[메뉴 타입 변경을 위해서는 메뉴를 삭제 후 재생성 해야 됩니다.]]></value>
<value xml:lang="en"><![CDATA[To change the menu type, you have to delete and recreate the menu.]]></value>
</item>
<item name="how_to_modify_menu">
<value xml:lang="ko"><![CDATA[생성한 메뉴는 [메뉴 수정]에서 수정 할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[생성한 메뉴는 [메뉴 수정]에서 수정 할 수 있습니다.]]></value>
</item>
<item name="can_drag_menu">
<value xml:lang="ko"><![CDATA[사이트 맵에서 메뉴를 드래그 해서도 위치를 변경 할 수 있습니다.]]></value>
<value xml:lang="en"><![CDATA[사이트 맵에서 메뉴를 드래그 해서도 위치를 변경 할 수 있습니다.]]></value>
</item>
<item name="good_to_duplicate_layout">
<value xml:lang="ko"><![CDATA[레이아웃 설정 변경 시, [복사본 생성] 버튼을 눌러 복사본을 만들어 설정을 변경 하는 것이 좋습니다.]]></value>
<value xml:lang="en"><![CDATA[레이아웃 설정 변경 시, [복사본 생성] 버튼을 눌러 복사본을 만들어 설정을 변경 하는 것이 좋습니다.]]></value>
</item>
<item name="img_uploaded">
<value xml:lang="ko"><![CDATA[버튼 이미지가 등록 됐습니다.]]></value>
<value xml:lang="en"><![CDATA[Button image is uploaded.]]></value>
</item>
<item name="img_deleted">
<value xml:lang="ko"><![CDATA[버튼 이미지가 삭제 됐습니다.]]></value>
<value xml:lang="en"><![CDATA[Button image is deleted.]]></value>
</item>
<item name="do_not_display_again">
<value xml:lang="ko"><![CDATA[다시 보지 않기.]]></value>
<value xml:lang="en"><![CDATA[Do not display again.]]></value>
</item>
<item name="need_ftp_password">
<value xml:lang="ko"><![CDATA[FTP 계정 정보가 필요 합니다.]]></value>
</item>
<item name="need_ftp_password_title">
<value xml:lang="ko"><![CDATA[FTP 비밀번호]]></value>
</item>
<item name="need_core_update">
<value xml:lang="ko"><![CDATA[설치하려면 XE core 업데이트가 필요합니다]]></value>
</item>
<item name="need_core_update_continue">
<value xml:lang="ko"><![CDATA[XE core 업데이트가 함께 진행됩니다. 계속하시겠습니까?]]></value>
</item>
<item name="not_found_module">
<value xml:lang="ko"><![CDATA[모듈이 존재하지 않음]]></value>
</item>
<item name="no_skin">
<value xml:lang="ko"><![CDATA[스킨 없음]]></value>
</item>
</lang>

File diff suppressed because it is too large Load diff

View file

@ -1,301 +1,698 @@
<?php
/**
* @class menuAdminModel
* @brief admin model class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
*/
class menuAdminModel extends menu
{
private $menuSrlWithinHome = 0;
/**
* @class menuAdminModel
* @brief admin model class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
* Initialization
* @return void
*/
class menuAdminModel extends menu {
/**
* Initialization
* @return void
*/
function init() {
}
function init()
{
}
/**
* Get a list of all menus
* @param object $obj
* @return object
*/
function getMenuList($obj) {
if(!$obj->site_srl) {
$site_module_info = Context::get('site_module_info');
$obj->site_srl = (int)$site_module_info->site_srl;
}
$args->site_srl = $obj->site_srl;
$args->sort_index = $obj->sort_index;
$args->page = $obj->page?$obj->page:1;
$args->list_count = $obj->list_count?$obj->list_count:20;
$args->page_count = $obj->page_count?$obj->page_count:10;
// document.getDocumentList query execution
$output = executeQuery('menu.getMenuList', $args);
// Return if no result or an error occurs
if(!$output->toBool()||!count($output->data)) return $output;
return $output;
}
/**
* Return all menus
* @param int $site_srl
* @return array
*/
function getMenus($site_srl = null) {
if(!isset($site_srl)) {
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
// Get information from the DB
$args->site_srl = $site_srl ;
$args->menu_srl = $menu_srl;
$output = executeQueryArray('menu.getMenus', $args);
if(!$output->data) return;
$menus = $output->data;
return $menus;
}
/**
* Get information of a new menu from the DB
* Return DB and XML information of the menu
* @param int $menu_srl
* @return object
*/
function getMenu($menu_srl) {
// Get information from the DB
$args->menu_srl = $menu_srl;
$output = executeQuery('menu.getMenu', $args);
if(!$output->data) return;
$menu_info = $output->data;
$menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_srl);
$menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_srl);
return $menu_info;
}
/**
* Get information of a new menu from the DB, search condition is menu title
* Return DB and XML information of the menu
* @param string $title
* @return object
*/
function getMenuByTitle($title) {
// Get information from the DB
$args->title = $title;
$output = executeQuery('menu.getMenuByTitle', $args);
if(!$output->data) return;
if(is_array($output->data)) $menu_info = $output->data[0];
else $menu_info = $output->data;
if($menu_info->menu_srl)
{
$menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_info->menu_srl);
$menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_info->menu_srl);
}
return $menu_info;
}
/**
* Return item information of the menu_srl
* group_srls uses a seperator with comma(,) and converts to an array by explode
* @param int $menu_item_srl
* @return object
*/
function getMenuItemInfo($menu_item_srl) {
// Get the menu information if menu_item_srl exists
$args->menu_item_srl = $menu_item_srl;
$output = executeQuery('menu.getMenuItem', $args);
$node = $output->data;
settype($node,'object');
if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
else $node->group_srls = array();
$tmp_name = unserialize($node->name);
if($tmp_name && count($tmp_name) ) {
$selected_lang = array();
$rand_name = $tmp_name[Context::getLangType()];
if(!$rand_name) $rand_name = array_shift($tmp_name);
$node->name = $rand_name;
}
return $node;
}
/**
* Return item information of the menu_srl
* @return void
*/
function getMenuAdminItemInfo()
/**
* Get a list of all menus
* @param object $obj
* @return object
*/
function getMenuList($obj)
{
if(!$obj->site_srl)
{
$menuItemSrl = Context::get('menu_item_srl');
$menuItem = $this->getMenuItemInfo($menuItemSrl);
$site_module_info = Context::get('site_module_info');
$obj->site_srl = (int)$site_module_info->site_srl;
}
$args->site_srl = $obj->site_srl;
$args->sort_index = $obj->sort_index;
$args->page = $obj->page?$obj->page:1;
$args->list_count = $obj->list_count?$obj->list_count:20;
$args->page_count = $obj->page_count?$obj->page_count:10;
// document.getDocumentList query execution
$output = executeQuery('menu.getMenuList', $args);
// Return if no result or an error occurs
if(!$output->toBool()||!count($output->data)) return $output;
if(!$menuItem->url)
{
$menuItem->moduleType = null;
}
else if(!preg_match('/^http/i',$menuItem->url))
{
$oModuleModel = &getModel('module');
$moduleInfo = $oModuleModel->getModuleInfoByMid($menuItem->url, 0);
if(!$moduleInfo) $menuItem->moduleType = 'url';
else
{
if($moduleInfo->mid == $menuItem->url) {
$menuItem->moduleType = $moduleInfo->module;
$menuItem->pageType = $moduleInfo->page_type;
$menuItem->layoutSrl = $moduleInfo->layout_srl;
}
}
}
else $menuItem->moduleType = 'url';
return $output;
}
// get groups
$oMemberModel = &getModel('member');
$oModuleAdminModel = &getAdminModel('module');
$output = $oMemberModel->getGroups();
if(is_array($output))
{
$groupList = array();
foreach($output AS $key=>$value)
{
$groupList[$value->group_srl]->group_srl = $value->group_srl;
if(substr($value->title,0,12)=='$user_lang->') {
$tmp = $oModuleAdminModel->getLangCode(0, $value->title);
$groupList[$value->group_srl]->title = $tmp[Context::getLangType()];
}
else $groupList[$value->group_srl]->title = $value->title;
if(in_array($key, $menuItem->group_srls)) $groupList[$value->group_srl]->isChecked = true;
else $groupList[$value->group_srl]->isChecked = false;
}
}
$menuItem->groupList = $groupList;
$oModuleController = &getController('module');
$menuItem->name_key = $menuItem->name;
$oModuleController->replaceDefinedLangCode($menuItem->name);
$this->add('menu_item', $menuItem);
}
/**
* Return menu item list by menu number
* @param int $menu_srl
* @param int $parent_srl
* @param array $columnList
* @return object
*/
function getMenuItems($menu_srl, $parent_srl = null, $columnList = array())
/**
* Return all menus
* @param int $site_srl
* @return array
*/
function getMenus($site_srl = null)
{
if(!isset($site_srl))
{
$args->menu_srl = $menu_srl;
$args->parent_srl = $parent_srl;
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
// Get information from the DB
$args = new stdClass();
$args->site_srl = $site_srl ;
$args->menu_srl = $menu_srl;
$output = executeQueryArray('menu.getMenus', $args);
if(!$output->data) return;
$menus = $output->data;
return $menus;
}
$output = executeQueryArray('menu.getMenuItems', $args, $columnList);
return $output;
/**
* Get information of a new menu from the DB
* Return DB and XML information of the menu
* @param int $menu_srl
* @return object
*/
function getMenu($menu_srl)
{
// Get information from the DB
$args = new stdClass();
$args->menu_srl = $menu_srl;
$output = executeQuery('menu.getMenu', $args);
if(!$output->data) return;
$menu_info = $output->data;
$menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_srl);
$menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_srl);
return $menu_info;
}
/**
* Get information of a new menu from the DB, search condition is menu title
* Return DB and XML information of the menu
* @param string $title
* @return object
*/
function getMenuByTitle($title, $site_srl = 0)
{
// Get information from the DB
if(!is_array($title))
{
$title = array($title);
}
$args = new stdClass();
$args->title = $title;
$args->site_srl = $site_srl;
$output = executeQuery('menu.getMenuByTitle', $args);
if(!$output->data) return;
if(is_array($output->data)) $menu_info = $output->data[0];
else $menu_info = $output->data;
if($menu_info->menu_srl)
{
$menu_info->xml_file = sprintf('./files/cache/menu/%s.xml.php',$menu_info->menu_srl);
$menu_info->php_file = sprintf('./files/cache/menu/%s.php',$menu_info->menu_srl);
}
return $menu_info;
}
/**
* Get information of a new menu from the DB, search condition is menu title
* Return DB and XML information of the menu(list Type)
* @param string $title
* @return object
*/
function getMenuListByTitle($title)
{
// Get information from the DB
$args = new stdClass();
$args->title = $title;
$output = executeQueryArray('menu.getMenuByTitle', $args);
if(!$output->data)
{
return array();
}
/**
* Return menu name in each language to support multi-language
* @param string $source_name
* @param int $site_srl
* @return array
*/
function getMenuItemNames($source_name, $site_srl = null) {
if(!$site_srl) {
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
// Get language code
$oModuleAdminModel = &getAdminModel('module');
return $oModuleAdminModel->getLangCode($site_srl, $source_name);
}
return $output->data;
}
/**
* Get a template by using the menu_srl and retrun.
* Return html after compiling tpl on the server in order to add menu information on the admin page
* @return void
*/
function getMenuAdminTplInfo() {
// Get information on the menu for the parameter settings
$menu_item_srl = Context::get('menu_item_srl');
$parent_srl = Context::get('parent_srl');
// Get a list of member groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
// Add a sub-menu if there is parent_srl but not menu_item_srl
if(!$menu_item_srl && $parent_srl) {
// Get information of the parent menu
$parent_info = $this->getMenuItemInfo($parent_srl);
// Default parameter settings for a new menu
$item_info->menu_item_srl = getNextSequence();
$item_info->parent_srl = $parent_srl;
$item_info->parent_menu_name = $parent_info->name;
// In case of modifying the existing menu or addting a new menu to the root
} else {
// Get information of the menu if menu_item_srl exists
if($menu_item_srl) $item_info = $this->getMenuItemInfo($menu_item_srl);
// Get only menu_item_srl if no values found, considering it as adding a new menu
if(!$item_info->menu_item_srl) {
$item_info->menu_item_srl = getNextSequence();
}
}
Context::set('item_info', $item_info);
//Security
$security = new Security();
$security->encodeHTML('group_list..title');
$security->encodeHTML('item_info.url');
$security->encodeHTML('item_info.name');
/**
* Return item information of the menu_srl
* group_srls uses a seperator with comma(,) and converts to an array by explode
* @param int $menu_item_srl
* @return object
*/
function getMenuItemInfo($menu_item_srl)
{
// Get the menu information if menu_item_srl exists
$args = new stdClass();
$args->menu_item_srl = $menu_item_srl;
$output = executeQuery('menu.getMenuItem', $args);
$node = $output->data;
settype($node,'object');
if($node->group_srls) $node->group_srls = explode(',',$node->group_srls);
else $node->group_srls = array();
// Compile the template file into tpl variable and then return it
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info');
$tmp_name = unserialize($node->name);
if($tmp_name && count($tmp_name))
{
$selected_lang = array();
$rand_name = $tmp_name[Context::getLangType()];
if(!$rand_name) $rand_name = array_shift($tmp_name);
$node->name = $rand_name;
}
return $node;
}
$this->add('tpl', str_replace("\n"," ",$tpl));
}
/**
* Return item information of the menu_srl
* @return void
*/
function getMenuAdminItemInfo()
{
$menuItemSrl = Context::get('menu_item_srl');
$menuItem = $this->getMenuItemInfo($menuItemSrl);
/**
* @brief when menu add in sitemap, select module list
* this menu showing with trigger
* @param int $site_srl
* @return array
*/
function getModuleListInSitemap($site_srl = 0)
if(!$menuItem->url)
{
$menuItem->moduleType = null;
}
else if(!preg_match('/^http/i',$menuItem->url))
{
$oModuleModel = &getModel('module');
$columnList = array('module');
$moduleList = array('page');
$output = $oModuleModel->getModuleListByInstance($site_srl, $columnList);
if(is_array($output->data))
$moduleInfo = $oModuleModel->getModuleInfoByMid($menuItem->url, 0);
if(!$moduleInfo) $menuItem->moduleType = 'url';
else
{
foreach($output->data AS $key=>$value)
if($moduleInfo->mid == $menuItem->url)
{
$menuItem->moduleType = $moduleInfo->module;
$menuItem->pageType = $moduleInfo->page_type;
$menuItem->layoutSrl = $moduleInfo->layout_srl;
}
}
}
else $menuItem->moduleType = 'url';
// grant setting
if(is_array($menuItem->group_srls) && count($menuItem->group_srls) > 0)
{
if($menuItem->group_srls[0] == -1)
{
$menuItem->grant = 'member';
}
else if($menuItem->group_srls[0] == -3)
{
$menuItem->grant = 'manager';
}
else
{
$menuItem->grant = 'group';
}
}
// get groups
$oMemberModel = &getModel('member');
$oModuleAdminModel = &getAdminModel('module');
$output = $oMemberModel->getGroups();
if(is_array($output))
{
$groupList = array();
foreach($output AS $key=>$value)
{
$groupList[$value->group_srl] = new stdClass();
$groupList[$value->group_srl]->group_srl = $value->group_srl;
if(substr($value->title,0,12)=='$user_lang->')
{
$tmp = $oModuleAdminModel->getLangCode(0, $value->title);
$groupList[$value->group_srl]->title = $tmp[Context::getLangType()];
}
else $groupList[$value->group_srl]->title = $value->title;
if(in_array($key, $menuItem->group_srls)) $groupList[$value->group_srl]->isChecked = true;
else $groupList[$value->group_srl]->isChecked = false;
}
}
$menuItem->groupList = $groupList;
$oModuleController = &getController('module');
$menuItem->name_key = $menuItem->name;
$oModuleController->replaceDefinedLangCode($menuItem->name);
$this->add('menu_item', $menuItem);
}
/**
* Return menu item list by menu number
* @param int $menu_srl
* @param int $parent_srl
* @param array $columnList
* @return object
*/
function getMenuItems($menu_srl, $parent_srl = null, $columnList = array())
{
$args = new stdClass();
$args->menu_srl = $menu_srl;
$args->parent_srl = $parent_srl;
$output = executeQueryArray('menu.getMenuItems', $args, $columnList);
return $output;
}
/**
* Return menu name in each language to support multi-language
* @param string $source_name
* @param int $site_srl
* @return array
*/
function getMenuItemNames($source_name, $site_srl = null)
{
if(!$site_srl)
{
$site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl;
}
// Get language code
$oModuleAdminModel = &getAdminModel('module');
return $oModuleAdminModel->getLangCode($site_srl, $source_name, TRUE);
}
/**
* Get a template by using the menu_srl and retrun.
* Return html after compiling tpl on the server in order to add menu information on the admin page
* @return void
*/
function getMenuAdminTplInfo()
{
// Get information on the menu for the parameter settings
$menu_item_srl = Context::get('menu_item_srl');
$parent_srl = Context::get('parent_srl');
// Get a list of member groups
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
// Add a sub-menu if there is parent_srl but not menu_item_srl
if(!$menu_item_srl && $parent_srl)
{
// Get information of the parent menu
$parent_info = $this->getMenuItemInfo($parent_srl);
// Default parameter settings for a new menu
$item_info->menu_item_srl = getNextSequence();
$item_info->parent_srl = $parent_srl;
$item_info->parent_menu_name = $parent_info->name;
// In case of modifying the existing menu or addting a new menu to the root
}
else
{
// Get information of the menu if menu_item_srl exists
if($menu_item_srl) $item_info = $this->getMenuItemInfo($menu_item_srl);
// Get only menu_item_srl if no values found, considering it as adding a new menu
if(!$item_info->menu_item_srl)
{
$item_info->menu_item_srl = getNextSequence();
}
}
Context::set('item_info', $item_info);
//Security
$security = new Security();
$security->encodeHTML('group_list..title');
$security->encodeHTML('item_info.url');
$security->encodeHTML('item_info.name');
// Compile the template file into tpl variable and then return it
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'menu_item_info');
$this->add('tpl', str_replace("\n"," ",$tpl));
}
/**
* get installed menu type api
*/
function getMenuAdminInstalledMenuType()
{
$oModuleModel = getModel('module');
$oAutoinstallModel = getModel('autoinstall');
$this->add('menu_types', $this->getModuleListInSitemap(0));
$_allModules = $oModuleModel->getModuleList();
$allModules = array();
Context::loadLang('modules/page/lang');
foreach($_allModules AS $key=>$value)
{
//$moduleInfo = $oModuleModel->getModuleInfoXml($value->module);
$defaultSkin = $oModuleModel->getModuleDefaultSkin($value->module, 'P');
$defaultMobileSkin = $oModuleModel->getModuleDefaultSkin($value->module, 'M');
$skinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value->module), $defaultSkin);
$mobileSkinInfo = $oModuleModel->loadSkinInfo(ModuleHandler::getModulePath($value->module), $defaultMobileSkin, 'm.skins');
$value->defaultSkin = new stdClass();
$value->defaultSkin->skin = $defaultSkin;
$value->defaultSkin->title = $skinInfo->title ? $skinInfo->title : $defaultSkin;
$value->defaultMobileSkin = new stdClass();
$value->defaultMobileSkin->skin = $defaultMobileSkin;
$value->defaultMobileSkin->title = $mobileSkinInfo->title ? $mobileSkinInfo->title : $defaultMobileSkin;
$value->package_srl = $oAutoinstallModel->getPackageSrlByPath('./modules/' . $value->module);
$value->url = _XE_LOCATION_SITE_ . '?mid=download&package_srl=' . $value->package_srl;
if($value->module == 'page')
{
$pageTypeName = Context::getLang('page_type_name');
$value->title = $pageTypeName['ARTICLE'];
$allModules['ARTICLE'] = $value;
$wModuleInfo = clone $value;
unset($wModuleInfo->default_skin);
unset($wModuleInfo->default_mskin);
$wModuleInfo->title = $pageTypeName['WIDGET'];
$wModuleInfo->no_skin = 'Y';
$allModules['WIDGET'] = $wModuleInfo;
$oModuleInfo = clone $value;
unset($oModuleInfo->default_skin);
unset($oModuleInfo->default_mskin);
$oModuleInfo->title = $pageTypeName['OUTSIDE'];
$oModuleInfo->no_skin = 'Y';
$allModules['OUTSIDE'] = $oModuleInfo;
}
else
{
$allModules[$value->module] = $value;
}
}
$this->add('all_modules', $allModules);
}
/**
* @brief when menu add in sitemap, select module list
* this menu showing with trigger
* @param int $site_srl
* @return array
*/
function getModuleListInSitemap($site_srl = 0)
{
$oModuleModel = &getModel('module');
$moduleList = array('page');
$output = $oModuleModel->getModuleListByInstance($site_srl);
if(is_array($output->data))
{
foreach($output->data AS $key=>$value)
{
if($value->instanceCount > 1)
{
array_push($moduleList, $value->module);
}
}
}
// after trigger
$output = ModuleHandler::triggerCall('menu.getModuleListInSitemap', 'after', $moduleList);
if(!$output->toBool()) return $output;
// after trigger
$output = ModuleHandler::triggerCall('menu.getModuleListInSitemap', 'after', $moduleList);
if(!$output->toBool()) return $output;
$moduleList = array_unique($moduleList);
$localModuleList = array_unique($moduleList);
$moduleInfoList = array();
if(is_array($moduleList))
$oAutoinstallModel = getModel('autoinstall');
// get have instance
$remotePackageList = $oAutoinstallModel->getHaveInstance(array('path'));
$remoteModuleList = array();
foreach($remotePackageList as $package)
{
if(strpos($package->path, './modules/') !== 0) continue;
$pathInfo = explode('/', $package->path);
$remoteModuleList[] = $pathInfo[2];
}
// all module list
$allModuleList = FileHandler::readDir('./modules', '/^([a-zA-Z0-9_-]+)$/');
// union have instance and all module list
$haveInstance = array_intersect($remoteModuleList, $allModuleList);
$haveDirectory = array_intersect($localModuleList, $allModuleList);
// union
$moduleList = array_unique(array_merge($haveDirectory, $haveInstance));
$moduleInfoList = array();
Context::loadLang('modules/page/lang');
if(is_array($moduleList))
{
foreach($moduleList AS $key=>$value)
{
foreach($moduleList AS $key=>$value)
$moduleInfo = $oModuleModel->getModuleInfoXml($value);
if($value == 'page')
{
$pageTypeName = Context::getLang('page_type_name');
$moduleInfo->title = $pageTypeName['ARTICLE'];
$moduleInfoList['ARTICLE'] = $moduleInfo;
$wModuleInfo = clone $moduleInfo;
unset($wModuleInfo->default_skin);
unset($wModuleInfo->default_mskin);
$wModuleInfo->title = $pageTypeName['WIDGET'];
$wModuleInfo->no_skin = 'Y';
$moduleInfoList['WIDGET'] = $wModuleInfo;
$oModuleInfo = clone $moduleInfo;
unset($oModuleInfo->default_skin);
unset($oModuleInfo->default_mskin);
$oModuleInfo->title = $pageTypeName['OUTSIDE'];
$oModuleInfo->no_skin = 'Y';
$moduleInfoList['OUTSIDE'] = $oModuleInfo;
}
else
{
$moduleInfo = $oModuleModel->getModuleInfoXml($value);
$moduleInfoList[$value] = $moduleInfo;
}
}
return $moduleInfoList;
}
}
?>
return $moduleInfoList;
}
public function getMenuAdminSiteMap()
{
$siteSrl = Context::get('site_srl');
$menuSrl = Context::get('menu_srl');
if(!isset($siteSrl))
{
$site_module_info = Context::get('site_module_info');
$siteSrl = (int)$site_module_info->site_srl;
}
$oModuleModel = &getModel('module');
$oMenuAdminController = &getAdminController('menu');
$columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl');
$start_module = $oModuleModel->getSiteInfo(0, $columnList);
$menuList = array();
if($menuSrl)
{
$isMenuFixed = false;
$output = $this->getMenu($menuSrl);
$php_file = sprintf('./files/cache/menu/%s.php',$output->menu_srl);
if(file_exists($php_file)) @include($php_file);
else
{
$oMenuAdminController->makeXmlFile($menuSrl);
}
if(count($menu->list)>0)
{
foreach($menu->list AS $key=>$value)
{
$this->_menuInfoSetting($menu->list[$key], $start_module, $isMenuFixed, $menuSrl,$siteSrl);
}
}
// menu recreate
if($isMenuFixed)
{
$oMenuAdminController->makeXmlFile($menuSrl);
}
$menuItems->menuSrl = $output->menu_srl;
$menuItems->title = $output->title;
$menuItems->menuItems = $menu;
array_push($menuList, $menuItems);
}
else
{
$menuListFromDB = $this->getMenus($siteSrl);
if(is_array($menuListFromDB))
{
$oAdmin = &getClass('admin');
foreach($menuListFromDB AS $key=>$value)
{
if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]);
else
{
unset($menu);
unset($menuItems);
$value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl);
if(file_exists($value->php_file)) @include($value->php_file);
else
{
$oMenuAdminController->makeXmlFile($value->menu_srl);
}
$isMenuFixed = false;
if(count($menu->list)>0)
{
foreach($menu->list AS $key2=>$value2)
{
$this->_menuInfoSetting($menu->list[$key2], $start_module, $isMenuFixed, $value->menu_srl,$siteSrl);
}
}
// menu recreate
if($isMenuFixed)
{
$oMenuAdminController->makeXmlFile($value->menu_srl);
}
$menuItems = new stdClass();
$menuItems->menuSrl = $value->menu_srl;
$menuItems->title = $value->title;
$menuItems->menuItems = $menu;
// If include home menu, move first
if($value->menu_srl == $this->menuSrlWithinHome)
{
$menuList[-1] = $menuItems;
}
else
{
array_push($menuList, $menuItems);
}
}
}
}
}
ksort($menuList);
$this->add('menuList', $menuList);
}
/**
* Get module's detail setup contents
* @return void
*/
public function getMenuAdminDetailSetup()
{
$menuItemSrl = Context::get('menu_item_srl');
if(!$menuItemSrl)
{
return new Object(-1, 'msg_invalid_request');
}
$menuItemInfo = $this->getMenuItemInfo($menuItemSrl);
// if menu is shortcut
if($menuItemInfo->is_shortcut == 'Y')
{
return new Object(-1, 'msg_invalid_request');
}
// get module info
$oModuleModel = &getModel('module');
$moduleInfo = $oModuleModel->getModuleInfoByMid($menuItemInfo->url);
// get xml info
$moduleConfInfo = $oModuleModel->getModuleInfoXml($moduleInfo->module);
if($moduleConfInfo->setup_index_act)
{
$setupUrl = getNotEncodedUrl('', 'module', 'admin', 'act', $moduleConfInfo->setup_index_act, 'module_srl', $moduleInfo->module_srl, 'isLayoutDrop', '1');
}
if($moduleConfInfo->simple_setup_index_act)
{
$oTargetmoduleAdminModel = &getAdminModel($moduleInfo->module);
$advancedSetupUrl = getUrl('', 'module', 'admin', 'act', $moduleConfInfo->setup_index_act, 'module_srl', $moduleInfo->module_srl);
$simpleSetupHtml = $oTargetmoduleAdminModel->{$moduleConfInfo->simple_setup_index_act}($moduleInfo->module_srl, $advancedSetupUrl);
if($simpleSetupHtml)
{
$this->add('simpleSetupHtml', $simpleSetupHtml);
}
}
$this->add('setupUrl', $setupUrl);
}
/**
* Setting menu information(recursive)
* @param array $menu
* @return void
*/
private function _menuInfoSetting(&$menu, &$start_module, &$isMenuFixed, $menuSrl,$siteSrl = 0)
{
$oModuleModel = &getModel('module');
// if url is empty and is_shortcut is 'N', change to is_shortcut 'Y'
if(!$menu['url'] && $menu['is_shortcut'] == 'N')
{
$menu['is_shortcut'] = 'Y';
unset($args);
$args->menu_item_srl = $menu['node_srl'];
$args->is_shortcut = 'Y';
if($menu['menu_name_key']) $args->name = $menu['menu_name_key'];
else $args->name = $menu['menu_name'];
$output = executeQuery('menu.updateMenuItem', $args);
$isMenuFixed = true;
}
//if menu type is module menu
//if(!empty($menu['url']) && !preg_match('/^http/i', $menu['url']))
if($menu['is_shortcut'] != 'Y')
{
unset($midInfo);
unset($moduleInfo);
$midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], $siteSrl);
$moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module);
if($midInfo)
{
$menu['module_srl'] = $midInfo->module_srl;
$menu['module'] = $midInfo->module;
if($midInfo->page_type)
{
$menu['module_type'] = $midInfo->page_type;
}
else
{
$menu['module_type'] = $midInfo->module;
}
}
if($moduleInfo->setup_index_act)
{
$menu['setup_index_act'] = $moduleInfo->setup_index_act;
}
else if($moduleInfo->default_index_act)
{
$menu['setup_index_act'] = $moduleInfo->default_index_act;
}
if($menu['is_shortcut'] == 'N' && $midInfo->mid == $start_module->mid)
{
$menu['is_start_module'] = true;
$this->menuSrlWithinHome = $menuSrl;
}
// setting layout srl for layout management
$menu['layout_srl'] = $midInfo->layout_srl;
$menu['browser_title'] = $midInfo->browser_title;
}
if(count($menu['list']) > 0)
{
foreach($menu['list'] AS $key=>$value)
{
$this->_menuInfoSetting($menu['list'][$key], $start_module, $isMenuFixed, $menuSrl);
}
}
}
}
/* End of file menu.admin.model.php */
/* Location: ./modules/menu/menu.admin.model.php */

View file

@ -1,274 +1,189 @@
<?php
/**
* menuAdminView class
* admin view class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
*/
class menuAdminView extends menu
{
var $tmpMenu = null;
/**
* menuAdminView class
* admin view class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
* Initialization
* @return void
*/
class menuAdminView extends menu {
var $tmpMenu = null;
function init()
{
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* Initialization
* @return void
*/
function init() {
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* Site map admin menu index page
* @return void
*/
function dispMenuAdminSiteMap()
{
Context::loadLang(_XE_PATH_.'modules/document/lang/');
Context::loadLang(_XE_PATH_.'modules/layout/lang/');
Context::loadLang(_XE_PATH_.'modules/autoinstall/lang/');
$site_srl = Context::get('site_srl');
$site_module_info = Context::get('site_module_info');
/**
* The first page of the menu admin
* @return void
*/
function dispMenuAdminContent() {
// Get a list of registered menus
$obj->page = Context::get('page');
$obj->sort_index = 'listorder';
$obj->list_count = 20;
$obj->page_count = 20;
$oMenuModel = &getAdminModel('menu');
$output = $oMenuModel->getMenuList($obj);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('menu_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
//Security
$security = new Security();
$security->encodeHTML('menu_list..title');
$this->setTemplateFile('index');
}
/**
* Page to insert a menu
* @return void
*/
function dispMenuAdminInsert() {
// Set the menu with menu information
$menu_srl = Context::get('menu_srl');
if($menu_srl) {
// Get information of the menu
$oMenuModel = &getAdminModel('menu');
$menu_info = $oMenuModel->getMenu($menu_srl);
if($menu_info->menu_srl == $menu_srl) Context::set('menu_info', $menu_info);
}
$this->setTemplateFile('menu_insert');
}
/**
* Menu admin page
* @return void
*/
function dispMenuAdminManagement() {
// Get information of the menu
$menu_srl = Context::get('menu_srl');
if(!$menu_srl) return $this->dispMenuAdminContent();
// Get information of the menu
$oMenuModel = &getAdminModel('menu');
$menu_info = $oMenuModel->getMenu($menu_srl);
if($menu_info->menu_srl != $menu_srl) return $this->dispMenuAdminContent();
Context::set('menu_info', $menu_info);
//Security
$security = new Security();
$security->encodeHTML('menu_info..title');
// Set the layout to be pop-up
$this->setTemplateFile('menu_management');
}
/**
* Display a mid list to be able to select on the menu
* Perphaps this method not use
* @return void
*/
function dispMenuAdminMidList() {
$oModuleModel = &getModel('module');
// Get a list of module categories
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
// Get a list of modules
$module_list = $oModuleModel->getModuleList();
Context::set('module_list', $module_list);
// Get a list of mid
$args->module_category_srl = Context::get('module_category_srl');
$args->module = Context::get('target_module');
$columnList = array('module_srl', 'module', 'module_category_srl', 'browser_title');
$mid_list = $oModuleModel->getMidList($args, $columnList);
Context::set('mid_list', $mid_list);
// Set the menu as a pop-up
$this->setLayoutFile('popup_layout');
//Security
$security = new Security();
$security->encodeHTML('module_category..title');
$security->encodeHTML('module_list..module');
$security->encodeHTML('mid_list..module');
$security->encodeHTML('mid_list..browser_title');
// Set a template file
$this->setTemplateFile('mid_list');
}
/**
* Site map admin menu index page
* @return void
*/
function dispMenuAdminSiteMap()
if(!$site_srl)
{
Context::loadLang(_XE_PATH_.'modules/document/lang/');
Context::loadLang(_XE_PATH_.'modules/layout/lang/');
$site_srl = Context::get('site_srl');
$site_module_info = Context::get('site_module_info');
if(!$site_srl)
{
if($logged_info->is_admin == 'Y' && !$site_keyword) $site_srl = 0;
else $site_srl = (int)$site_module_info->site_srl;
}
$oMenuAdminModel = &getAdminModel('menu');
$menuListFromDB = $oMenuAdminModel->getMenus();
if(is_array($menuListFromDB)) $output = array_reverse($menuListFromDB);
$menuList = array();
if(is_array($output))
{
$menuItems = array();
foreach($output AS $key=>$value)
{
if($value->title == '__XE_ADMIN__') unset($output[$key]);
else
{
unset($menu);
unset($menuItems);
//$value->xml_file = sprintf('./files/cache/menu/%s.xml.php',$value->menu_srl);
$value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl);
if(file_exists($value->php_file)) @include($value->php_file);
if(count($menu->list)>0)
{
foreach($menu->list AS $key2=>$value2)
{
$this->_menuInfoSetting($menu->list[$key2]);
}
}
//array_push($menuList, $value->xml_file);
$menuItems->menuSrl = $value->menu_srl;
$menuItems->title = $value->title;
$menuItems->menuItems = $menu;
array_push($menuList, $menuItems);
}
}
}
Context::set('menu_list', $menuList);
// get installed module list
$oPageController = &getController('page'); //for lang
$resultModuleList = $oMenuAdminModel->getModuleListInSitemap($site_srl);
Context::set('module_list', $resultModuleList);
$oLayoutModel = &getModel('layout');
$layoutList = $oLayoutModel->getLayoutList();
Context::set('layout_list', $layoutList);
// choice theme file
$theme_file = _XE_PATH_.'files/theme/theme_info.php';
if(is_readable($theme_file))
{
@include($theme_file);
Context::set('current_layout', $theme_info->layout);
}
else
{
$oModuleModel = &getModel('module');
$default_mid = $oModuleModel->getDefaultMid();
Context::set('current_layout', $default_mid->layout_srl);
}
// get default group list
$oMemberModel = &getModel('member');
$output = $oMemberModel->getGroups();
if(is_array($output))
{
$groupList = array();
foreach($output AS $key=>$value)
{
$groupList[$value->group_srl]->group_srl = $value->group_srl;
$groupList[$value->group_srl]->title = $value->title;
}
}
Context::set('group_list', $groupList);
$this->setTemplateFile('sitemap');
if($logged_info->is_admin == 'Y' && !$site_keyword) $site_srl = 0;
else $site_srl = (int)$site_module_info->site_srl;
}
/**
* Setting menu information(recursive)
* @param array $menu
* @return void
*/
function _menuInfoSetting(&$menu)
$oAdmin = &getClass('admin');
$oMenuAdminModel = &getAdminModel('menu');
$menuListFromDB = $oMenuAdminModel->getMenus();
if(is_array($menuListFromDB)) $output = array_reverse($menuListFromDB);
$menuList = array();
if(is_array($output))
{
$menuItems = array();
foreach($output AS $key=>$value)
{
if($value->title == $oAdmin->getAdminMenuName()) unset($output[$key]);
else
{
unset($menu);
unset($menuItems);
//$value->xml_file = sprintf('./files/cache/menu/%s.xml.php',$value->menu_srl);
$value->php_file = sprintf('./files/cache/menu/%s.php',$value->menu_srl);
if(file_exists($value->php_file)) @include($value->php_file);
if(count($menu->list)>0)
{
foreach($menu->list AS $key2=>$value2)
{
$this->_menuInfoSetting($menu->list[$key2]);
}
}
//array_push($menuList, $value->xml_file);
$menuItems = new stdClass();
$menuItems->menuSrl = $value->menu_srl;
$menuItems->title = $value->title;
$menuItems->menuItems = $menu;
array_push($menuList, $menuItems);
}
}
}
Context::set('menu_list', $menuList);
// get installed module list
$oPageController = &getController('page'); //for lang
$resultModuleList = $oMenuAdminModel->getModuleListInSitemap($site_srl);
Context::set('module_list', $resultModuleList);
$oLayoutModel = &getModel('layout');
$layoutList = $oLayoutModel->getLayoutList();
Context::set('layout_list', $layoutList);
// choice theme file
$theme_file = _XE_PATH_.'files/theme/theme_info.php';
if(is_readable($theme_file))
{
@include($theme_file);
Context::set('current_layout', $theme_info->layout);
}
else
{
$oModuleModel = &getModel('module');
if($menu['url'] && !preg_match('/^http/i', $menu['url']))
{
unset($midInfo);
unset($moduleInfo);
$midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0);
$moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module);
if($moduleInfo->setup_index_act)
{
$menu['module_srl'] = $midInfo->module_srl;
$menu['setup_index_act'] = $moduleInfo->setup_index_act;
}
// setting layout srl for layout management
$menu['layout_srl'] = $midInfo->layout_srl;
}
if(count($menu['list']) > 0)
{
foreach($menu['list'] AS $key=>$value)
{
$this->_menuInfoSetting($menu['list'][$key]);
}
}
$default_mid = $oModuleModel->getDefaultMid();
Context::set('current_layout', $default_mid->layout_srl);
}
/**
* Tree-shaped sorting
* @param array $menuItems
* @return array
*/
function _arrangeMenuItem($menuItems)
// get default group list
$oMemberModel = &getModel('member');
$output = $oMemberModel->getGroups();
if(is_array($output))
{
if(is_array($menuItems))
$groupList = array();
foreach($output AS $key=>$value)
{
$arrangedMenuItemList = array();
foreach($menuItems AS $key=>$value)
{
if($value->parent_srl == 0)
{
$arrangedMenuItemList[$value->menu_item_srl] = array('name'=>$value->name, 'subMenu'=>array());
}
$groupList[$value->group_srl] = new stdClass();
$groupList[$value->group_srl]->group_srl = $value->group_srl;
$groupList[$value->group_srl]->title = $value->title;
}
}
Context::set('group_list', $groupList);
if($value->parent_srl > 0 && isset($arrangedMenuItemList[$value->parent_srl]))
{
$arrangedMenuItemList[$value->parent_srl]['subMenu'][$value->menu_item_srl] = $value;
}
$this->setTemplateFile('sitemap');
}
/**
* Site design admin page
* @return void
*/
public function dispMenuAdminSiteDesign()
{
$this->setTemplateFile('sitemap');
}
/**
* Setting menu information(recursive)
* @param array $menu
* @return void
*/
function _menuInfoSetting(&$menu)
{
$oModuleModel = &getModel('module');
if($menu['url'] && !preg_match('/^http/i', $menu['url']))
{
unset($midInfo);
unset($moduleInfo);
$midInfo = $oModuleModel->getModuleInfoByMid($menu['url'], 0);
$moduleInfo = $oModuleModel->getModuleInfoXml($midInfo->module);
if($moduleInfo->setup_index_act)
{
$menu['module_srl'] = $midInfo->module_srl;
$menu['setup_index_act'] = $moduleInfo->setup_index_act;
}
// setting layout srl for layout management
$menu['layout_srl'] = $midInfo->layout_srl;
}
if(count($menu['list']) > 0)
{
foreach($menu['list'] AS $key=>$value)
{
$this->_menuInfoSetting($menu['list'][$key]);
}
}
}
/**
* Tree-shaped sorting
* @param array $menuItems
* @return array
*/
function _arrangeMenuItem($menuItems)
{
if(is_array($menuItems))
{
$arrangedMenuItemList = array();
foreach($menuItems AS $key=>$value)
{
if($value->parent_srl == 0)
{
$arrangedMenuItemList[$value->menu_item_srl] = array('name'=>$value->name, 'subMenu'=>array());
}
if($value->parent_srl > 0 && isset($arrangedMenuItemList[$value->parent_srl]))
{
$arrangedMenuItemList[$value->parent_srl]['subMenu'][$value->menu_item_srl] = $value;
}
}
return $arrangedMenuItemList;
}
}
?>
return $arrangedMenuItemList;
}
}
/* End of file menu.admin.view.php */
/* Location: ./modules/menu/menu.admin.view.php */

View file

@ -1,72 +1,193 @@
<?php
/**
* menu class
* high class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
*/
class menu extends ModuleObject
{
/**
* menu class
* high class of the menu module
*
* @author NHN (developers@xpressengine.com)
* @package /modules/menu
* @version 0.1
* Implement if additional tasks are necessary when installing
* @return Object
*/
class menu extends ModuleObject {
/**
* Implement if additional tasks are necessary when installing
* @return Object
*/
function moduleInstall() {
// Create a directory to use menu
FileHandler::makeDir('./files/cache/menu');
function moduleInstall()
{
// Create a directory to use menu
FileHandler::makeDir('./files/cache/menu');
return new Object();
}
return new Object();
}
/**
* A method to check if successfully installed
* @return bool
*/
function checkUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 menu added to the table site_srl
if(!$oDB->isColumnExists('menu', 'site_srl')) return true;
/**
* A method to check if successfully installed
* @return bool
*/
function checkUpdate()
{
$oDB = &DB::getInstance();
// 2009. 02. 11 menu added to the table site_srl
if(!$oDB->isColumnExists('menu', 'site_srl')) return true;
// 2012. 02. 01 title index check
if(!$oDB->isIndexExists("menu", "idx_title")) return true;
return false;
}
// 2012. 02. 01 title index check
if(!$oDB->isIndexExists("menu", "idx_title")) return true;
/**
* Execute update
* @return Object
*/
function moduleUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 menu added to the table site_srl
if(!$oDB->isColumnExists('menu', 'site_srl')) {
$oDB->addColumn('menu','site_srl','number',11,0,true);
}
if(!$oDB->isColumnExists('menu_item', 'is_shortcut'))
{
return TRUE;
}
return false;
}
// 2012. 02. 01 title index check
if(!$oDB->isIndexExists("menu","idx_title")) {
$oDB->addIndex('menu', 'idx_title', array('title'));
}
/**
* Execute update
* @return Object
*/
function moduleUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 menu added to the table site_srl
if(!$oDB->isColumnExists('menu', 'site_srl'))
{
$oDB->addColumn('menu','site_srl','number',11,0,true);
}
return new Object(0, 'success_updated');
}
// 2012. 02. 01 title index check
if(!$oDB->isIndexExists("menu","idx_title"))
{
$oDB->addIndex('menu', 'idx_title', array('title'));
}
/**
* Re-generate the cache file
* @return void
*/
function recompileCache() {
$oMenuAdminController = &getAdminController('menu');
// Wanted list of all the blog module
$output = executeQueryArray("menu.getMenus");
$list = $output->data;
if(!count($list)) return;
// The menu module is used in the re-create all the menu list
foreach($list as $menu_item) {
$menu_srl = $menu_item->menu_srl;
$oMenuAdminController->makeXmlFile($menu_srl);
}
}
}
?>
// 1.7(maserati) shortcut column add and mirgration
if(!$oDB->isColumnExists('menu_item', 'is_shortcut'))
{
$oDB->addColumn('menu_item', 'is_shortcut', 'char', 1, 'N');
// check empty url and change shortcut type
$oMenuAdminModel = &getAdminModel('menu');
$output = $oMenuAdminModel->getMenus();
if(is_array($output))
{
$menuItemUniqueList = array();
$menuItemAllList = array();
foreach($output AS $key=>$value)
{
unset($args);
$args->menu_srl = $value->menu_srl;
$output2 = executeQueryArray('menu.getMenuItems', $args);
if(is_array($output2->data))
{
foreach($output2->data AS $key2=>$value2)
{
$menuItemAllList[$value2->menu_item_srl] = $value2->url;
if(!in_array($value2->url, $menuItemUniqueList))
{
$menuItemUniqueList[$value2->menu_item_srl] = $value2->url;
}
// if url is empty, change type to shortcurt
if($value2->is_shortcut == 'N' && (!$value2->url || preg_match('/^http/i',$value2->url)))
{
$value2->is_shortcut = 'Y';
$output3 = executeQuery('menu.updateMenuItem', $value2);
}
}
}
}
$oModuleModel = &getModel('module');
// if duplicate reference, change type to shortcut
$shortcutItemList = array_diff_assoc($menuItemAllList, $menuItemUniqueList);
foreach($output AS $key=>$value)
{
unset($args);
$args->menu_srl = $value->menu_srl;
$output2 = executeQueryArray('menu.getMenuItems', $args);
if(is_array($output2->data))
{
foreach($output2->data AS $key2=>$value2)
{
if(!empty($value2->url) && !preg_match('/^http/i',$value2->url))
{
$moduleInfo = $oModuleModel->getModuleInfoByMid($value2->url);
if(!$moduleInfo->module_srl)
{
$value2->url = Context::getDefaultUrl();
if(!$value2->url) $value2->url = '#';
$value2->is_shortcut = 'Y';
$updateOutput = executeQuery('menu.updateMenuItem', $value2);
}
}
if($shortcutItemList[$value2->menu_item_srl])
{
$value2->is_shortcut = 'Y';
$output3 = executeQuery('menu.updateMenuItem', $value2);
}
}
}
}
}
$this->recompileCache();
}
return new Object(0, 'success_updated');
}
/**
* Re-generate the cache file
* @return void
*/
function recompileCache()
{
$oMenuAdminController = &getAdminController('menu');
$oMenuAdminModel = &getAdminModel('menu');
// get home module id
$oModuleModel = &getModel('module');
$columnList = array('modules.mid',);
$output = $oModuleModel->getSiteInfo(0, $columnList);
$homeModuleMid = $output->mid;
$homeMenuSrl = NULL;
// Wanted list of all the blog module
$output = executeQueryArray("menu.getMenus");
$list = $output->data;
if(!count($list)) return;
// The menu module is used in the re-create all the menu list
foreach($list as $menu_item)
{
$menu_srl = $menu_item->menu_srl;
$oMenuAdminController->makeXmlFile($menu_srl);
// for homeSitemap.php regenrate
if(!$homeMenuSrl)
{
$menuItemList = $oMenuAdminModel->getMenuItems($menu_srl);
if(is_array($menuItemList->data))
{
foreach($menuItemList->data AS $key=>$value)
{
if($homeModuleMid == $value->url)
{
$homeMenuSrl = $menu_srl;
break;
}
}
}
}
}
if($homeMenuSrl)
{
$oMenuAdminController->makeHomemenuCacheFile($homeMenuSrl);
}
}
}
/* End of file menu.class.php */
/* Location: ./modules/menu/menu.class.php */

View file

@ -7,7 +7,8 @@
* @package /modules/menu
* @version 0.1
*/
class menuMobile extends moduleObject {
class menuMobile extends moduleObject
{
/**
* Result data list
* @var array
@ -36,21 +37,38 @@ class menuMobile extends moduleObject {
* Display menu
* @return void
*/
function dispMenuMenu() {
function dispMenuMenu()
{
$menu_srl = Context::get('menu_srl');
$oAdminModel =& getAdminModel('menu');
$menu_info = $oAdminModel->getMenu($menu_srl);
if(file_exists($menu_info->php_file)) @include($menu_info->php_file);
foreach($menu->list as $menu_item)
if(!$menu_srl)
{
$this->straightenMenu($menu_item, 0);
$oMenuAdminController = getAdminController('menu');
$homeMenuCacheFile = $oMenuAdminController->getHomeMenuCacheFile();
if(file_exists($homeMenuCacheFile))
{
@include($homeMenuCacheFile);
}
$menu_info->php_file = './files/cache/menu/'.$homeMenuSrl.'.php';
}
if(file_exists($menu_info->php_file)) @include($menu_info->php_file);
if(is_array($menu->list))
{
foreach($menu->list as $menu_item)
{
$this->straightenMenu($menu_item, 0);
}
}
Context::set('menu', $this->result);
$this->setTemplatePath(sprintf("%stpl/",$this->module_path));
$this->setTemplateFile('menu.html');
}
}
?>
/* End of file menu.mobile.php */
/* Location: ./modules/menu/menu.mobile.php */

View file

@ -6,6 +6,7 @@
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="title" var="title" notnull="notnull" />
<condition operation="in" column="title" var="title" notnull="notnull" />
<condition operation="equal" column="site_srl" var="site_srl" default="0" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,23 @@
<query id="getMenuItemByUrl" action="select">
<tables>
<table name="menu_item" alias="MI"/>
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="MI.url" var="url" notnull="notnull" />
<condition operation="equal" column="MI.is_shortcut" var="is_shortcut" defaut="N" pipe="and" />
<query operation="in" column="MI.menu_srl" notnull="notnull" alias="getSiteSrl" pipe="and" >
<tables>
<table name="menu" alias="M" />
</tables>
<columns>
<column name="menu_srl" />
</columns>
<conditions>
<condition operation="equal" column="M.site_srl" var = "site_srl" defaut = "0" notnull="notnull" />
</conditions>
</query>
</conditions>
</query>

View file

@ -7,9 +7,9 @@
</columns>
<conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" />
<condition operation="notequal" column="title" default="__XE_ADMIN__" pipe="and" />
<condition operation="notequal" column="title" default="__ADMINMENU_V17__" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="listorder" order="asc" />
<index var="sort_index" default="listorder" order="desc" />
</navigation>
</query>

View file

@ -8,6 +8,7 @@
<column name="menu_srl" var="menu_srl" filter="number" notnull="notnull" />
<column name="name" var="name" notnull="notnull" />
<column name="url" var="url" />
<column name="is_shortcut" var="is_shortcut" notnull="notnull" default="N" />
<column name="open_window" var="open_window" />
<column name="expand" var="expand" />
<column name="normal_btn" var="normal_btn" />

View file

@ -3,8 +3,11 @@
<table name="menu_item" />
</tables>
<columns>
<column name="menu_srl" var="menu_srl" />
<column name="parent_srl" var="parent_srl" />
<column name="name" var="name" notnull="notnull" />
<column name="url" var="url" />
<column name="is_shortcut" var="is_shortcut" />
<column name="open_window" var="open_window" />
<column name="expand" var="expand" />
<column name="normal_btn" var="normal_btn" />

View file

@ -3,6 +3,7 @@
<table name="menu_item" />
</tables>
<columns>
<column name="menu_srl" var="menu_srl" />
<column name="parent_srl" var="parent_srl" />
<column name="listorder" var="listorder" />
</columns>

View file

@ -1,23 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
<rule name="mid" type="regex" test="/^[a-z][a-z0-9_]+$/i" />
</customrules>
<fields>
<field name="menu_srl" required="true" rule="number" />
<field name="menu_name" required="true" />
<field name="cType" required="true" />
<field name="module_type">
<if test="$cType == 'CREATE' || $cType == 'SELECT'" attr="required" value="true" />
</field>
<field name="create_menu_url">
<if test="$cType == 'CREATE'" attr="required" value="true" />
</field>
<field name="select_menu_url">
<if test="$cType == 'SELECT'" attr="required" value="true" />
</field>
<field name="menu_url">
<if test="$cType == 'URL'" attr="required" value="true" />
</field>
<field name="menu_open_window" required="true" />
<field name="module_id" length="0:40" rule="mid" />
</fields>
</ruleset>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
<rule name="mid" type="regex" test="/^[a-z][a-z0-9_]+$/i" />
</customrules>
<fields>
<field name="menu_name" required="true" />
<field name="module_id" length="0:40" rule="mid" />
</fields>
</ruleset>

View file

@ -4,6 +4,7 @@
<column name="menu_srl" type="number" size="12" notnull="notnull" index="idx_menu_srl" />
<column name="name" type="text" />
<column name="url" type="varchar" size="250" />
<column name="is_shortcut" type="char" size="1" default="N" />
<column name="open_window" type="char" size="1" default="N" />
<column name="expand" type="char" size="1" default="N" />
<column name="normal_btn" type="varchar" size="255" />

View file

@ -1,12 +0,0 @@
@charset "utf-8";
body { margin:10px; }
h3 { margin:0 20px 0 20px; }
.menuListZone { table-layout:fixed; }
.menuListZone td { vertical-align:top; }
.menuListZone td.category_zone { padding-right:10px; }
#category_list { padding:.5em 0 .5em 0; margin-bottom:2em; width:250px; overflow:hidden; float:left; position:absolute; left:10px;}
#menu_zone_info { width:560px; position:absolute; margin:0 auto; left:0; right:0; z-index:9999;}

View file

@ -0,0 +1,320 @@
@charset "utf-8";
/* Image Sprite */
.mapi .jstree-hovered>i,
.mapi .jstree-clicked>i,
.col .nav li>a:hover>i,
.col .nav li>a:focus>i,
.col .nav li.active>a>i,
.theme label>a:hover,
.theme label>a:focus,
.theme ul ul>li>a:hover>i,
.theme ul ul>li>a:focus>i,
#properties li>*:hover>i,
#properties li>*:active>i,
#properties li>*:focus>i,
#properties li.active>*>i{background-image:url(../../../../common/img/glyphicons-halflings-white.png);background-repeat:no-repeat}
/* Opacity 100% */
.col>.x_close:hover,
.col>.x_close:focus,
.mapi .jstree-hovered>i,
.mapi .jstree-clicked>i,
.col .nav li>a:hover>i,
.col .nav li>a:focus>i,
.col .nav li.active>a>i,
.download .done>i,
.download .update>i,
.download .x_icon-download-alt,
#properties li>*:hover>i,
#properties li>*:active>i,
#properties li>*:focus>i,
#properties li.active>*>i,
#add_menu .desc>a:hover,
#add_menu .desc>a:focus{opacity:1;filter:alpha(opacity=100)}
/* Site */
.x_icon-question-sign{height:0 !important;padding:14px 0 0 0 !important}
body>.x{max-width:none !important}
.x>.body{padding-bottom:10px !important}
.x>.body>.content{margin-bottom:0}
#site{position:relative;overflow-x:auto;overflow-y:hidden;white-space:nowrap;margin-top:10px;padding:3px;word-wrap:normal}
#site .btnBoth,
#site .x_btn-group{text-align:right}
#site .btnBoth:after{content:"";display:block;clear:both}
.col{display:inline-block;*display:inline;*zoom:1;vertical-align:top;position:relative;overflow:hidden;background-color:#ddd;white-space:normal;height:100%;min-width:245px;padding:10px;margin:0 4px 0 0;border-radius:5px;box-shadow:1px 1px 1px #999;background-image:-webkit-linear-gradient(top, #eee, #ddd 18px, #ccc 18px, #ddd 33px);background-image:-moz-linear-gradient(top, #eee, #ddd 18px, #ccc 18px, #ddd 33px);background-image:-o-linear-gradient(top, #eee, #ddd 18px, #ccc 18px, #ddd 33px);background-image:linear-gradient(top, #eee, #ddd 18px, #ccc 18px, #ddd 33px)}
.col>h1,
.col>*>h1{line-height:32px !important;font-size:16px !important;margin:-10px -10px 0 -10px;color:#000 !important;padding:0 8px;text-shadow:0 1px 0 #fff;max-width:240px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.col>*>h1>a{color:#000;text-decoration:none}
.col>*>h1>a[target="_blank"]:after{vertical-align:middle;opacity:.75;filter:alpha(opacity=75)}
.col>*>h1>a:hover,
.col>*>h1>a:focus{color:#06C}
.col>.x_close{position:absolute;top:0;right:0;width:30px;height:30px;color:#666;font-size:17px;opacity:.75;filter:alpha(opacity=75)}
.col input[type="checkbox"],
.col input[type="radio"]{margin:0}
.col .cnt{overflow-x:hidden;overflow-y:auto;padding:10px;margin:0 -6px;border-radius:5px;background:#fff;border:1px solid #999;border-right:0;border-bottom:0}
.col .cnt>ul{margin:0;padding:0;list-style:none}
.col .cnt label{font-weight:normal}
.col .cnt label:only-child{cursor:pointer}
.col .x_alert{margin:0 0 10px 0}
/* .mapi */
.col.map .x_btn-group{border-top:1px solid #ddd;padding:10px 0}
.col.map li._isCut a{color:#aaa}
.mapi{margin:3px 0 5px 0;min-width:200px;background-color:transparent !important}
.mapi ul{margin:0;padding:0;list-style:none}
.mapi li{padding:0;white-space:nowrap;position:relative;border-radius:3px;vertical-align:top}
.mapi li>ul{margin:0}
.mapi a{text-decoration:none}
.mapi>ul{padding:1px}
.mapi .jstree-rename-input{margin-left:-16px;z-index:2}
/* Root */
.mapi>ul>li{margin-top:30px;position:relative}
.mapi>ul>li:before{content:"";display:block;border-top:1px dotted #ccc;position:relative;top:-15px}
.mapi>ul>li:first-child{margin-top:0}
.mapi>ul>li:first-child:before{content:normal}
.mapi>ul>li>a{font-weight:bold;text-shadow:0 1px 0 #fff;vertical-align:middle}
.mapi>ul>li>a:hover,
.mapi>ul>li>a:focus,
.mapi>ul>li>a.jstree-clicked,
.mapi>ul>li>a.jstree-hovered{text-shadow:none}
.mapi>ul>li>ul{margin:0 0 0 18px}
.mapi>ul>li>ul>li{margin-left:0}
/* li>a */
.mapi li>a{border:0 !important;padding:0 8px !important;margin:0 0 1px 0;border-radius:3px;position:relative;z-index:2;height:23px;line-height:23px;max-width:160px;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.2s;-moz-transition:.2s;-o-transition:.2s;transition:.2s}
.mapi li>a>i{opacity:.5;filter:alpha(opacity=50)}
/* Plugin style override */
.mapi a>.jstree-icon{display:none}
.mapi .jstree-open>.jstree-icon,
.mapi .jstree-closed>.jstree-icon{background-color:#fff}
/* Nav */
.col .nav li{border-top:1px solid #ddd;position:relative;white-space:nowrap}
.col .nav li:first-child{border-top:0}
.col .nav li>a,
.col .nav li>button{text-align:left;color:#000;line-height:20px;background-color:transparent;border:0;display:block;padding:5px 20px 5px 8px;color:#333;text-decoration:none;background:#fff;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;transition:.3s}
.col .nav .themeName{font-size:11px;color:#666;font-weight:normal}
.col .nav li>a{max-width:240px}
.col .nav li>button{width:100%;max-width:268px}
.col .nav li>a:hover,
.col .nav li>a:focus,
.col .nav li.active>a,
.col .nav li>button:hover,
.col .nav li>button:focus{background:#666;color:#fff}
.col .nav li>a:hover>.themeName,
.col .nav li>a:focus>.themeName,
.col .nav li.active>a>.themeName,
.col .nav li>button:hover>.themeName,
.col .nav li>button:focus>.themeName{color:#ddd}
.col .nav li>a>i{position:absolute;top:50%;right:5px;margin:-7px 0 0 0;opacity:.5;filter:alpha(opacity=50)}
/* Menu Type */
.col .typePage{display:none}
.col .multilingual>label,
.col .typePage>label{line-height:30px;margin:0}
.col .typeUrl{display:none}
.col.page .typePage,
.col.url .typeUrl{display:block}
/* Menu Clone */
.col .clone li>a:before,
.col .clone ul ul li{background-image:url(../../../../modules/menu/tpl/css/themes/default/d.png)}
.col .clone{margin:0 0 15px 0}
.col .clone ul{margin:0 !important}
.col .clone li{list-style:none;line-height:18px}
.col .clone li>a:before{content:"";display:inline-block;width:18px;height:18px;background-position:-36px 0;vertical-align:top;margin:0 4px 0 0}
.col .clone>ul>li{padding:15px 0;border-top:1px dotted #ccc}
.col .clone>ul>li:first-child{border-top:0;padding-top:0}
.col .clone>ul>li>a:before{background-position:-72px 0}
.col .clone>ul>li>a:only-child:before{background-position:-54px -36px}
.col .clone>ul>li>ul{padding-left:0;margin-left:0 !important}
.col .clone ul ul{padding-left:8px;margin-left:8px !important}
.col .clone ul ul li{background-position:-90px 10px;background-repeat:repeat-y}
.col .clone ul ul li:only-child,
.col .clone ul ul li:last-child{background:none}
.col .clone ul ul li:only-child>a:before{background-position:-36px 0}
.col .clone li.x_disabled>a{color:#999;text-decoration:none;cursor:not-allowed}
.col .clone li.x_selected>a{color:#000;font-weight:bold;text-decoration:underline}
.col .clone .root{margin-top:15px}
.col .clone a{display:block;max-width:160px;white-space:nowrap;max-width:160px;text-overflow:ellipsis;overflow:hidden}
/* Download */
.download.col{max-width:600px;min-width:300px}
.download .list{margin-top:-10px}
.download .item{border-top:1px solid #ddd;padding:1px 0 1px 100px;position:relative;min-height:115px}
.download .item:first-child{border:0}
.download .item>img{position:absolute;top:15px;left:0;width:80px;height:80px;padding:4px;border:1px solid #ddd;border-radius:3px}
.download h2{margin:10px 0;line-height:normal !important}
.download h2>a{font-size:14px;color:#000}
.download .x_icon-download-alt{width:24px;height:24px;background-color:#94A55C;position:absolute;top:15px;right:0;border-radius:3px;margin:0;border:0;background-position:-90px -19px}
.download .x_icon-download-alt:hover,
.download .x_icon-download-alt:focus{background-color:#333}
.download p>i{font-style:normal;color:#ccc}
.download .item.installed ._install{display:none}
.download .item ._already_installed{display:none}
.download .item.installed ._already_installed{display:block}
.download .item.installed.up_to_date ._need_to_update{display:none}
.download .item.installed ._already_up_to_date{display:none}
.download .item.installed.up_to_date ._already_up_to_date{display:block}
.download .done,
.download .update{position:absolute;top:15px;right:0;border:0;background-color:transparent;border-radius:3px;color:#fff;overflow:visible;height:24px}
.download .done{background:#666}
.download .done:hover,
.download .done:focus{background:#333}
.download .update{background:#336}
.download .update:hover,
.download .update:focus{background:#333}
.download ._pagination{position:absolute;bottom:4px;left:4px;right:4px}
.download ._pagination>.x_pagination,
.download ._pagination>.search{margin:0}
.download ._pagination>.x_pagination{text-shadow:0 1px 0 #fff}
.download ._pagination>.x_pagination>ul{box-shadow:none}
.download ._pagination>.x_pagination a{background-color:transparent !important;color:#333}
.download ._pagination>.x_pagination a:hover,
.download ._pagination>.x_pagination a:focus{font-weight:bold}
.download ._pagination>.x_pagination .x_active>a{color:#000}
.download .starRating,
.download .starRating>i{display:inline-block;height:15px;background:transparent url(../../../admin/tpl/img/starRating.png) no-repeat;overflow:hidden}
.download .starRating{width:79px;vertical-align:middle}
.download .starRating>i{font-size:0;line-height:0;vertical-align:top;text-indent:-100px;*text-indent:0;background-position:0 -15px}
.download .starRating.score1>i{width:20%}
.download .starRating.score2>i{width:40%}
.download .starRating.score3>i{width:60%}
.download .starRating.score4>i{width:80%}
.download .starRating.score5>i{width:100%}
/* Theme(layout|skin) */
.theme label{margin:0;padding:8px 0;position:relative;border-bottom:1px solid #ddd}
.theme label>a{position:absolute;top:4px;right:0;width:24px;height:24px;border-radius:3px;background-position:-427px 5px;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s}
.theme label>a:hover,
.theme label>a:focus{background-color:#000}
.theme h2{font-size:14px;border-bottom:1px solid #ddd;margin:0;padding:15px 0 8px 0}
.theme ul button{background-color:transparent;border:0;padding:0;margin:0;overflow:visible}
.theme ul{margin:0;padding:0;list-style:none}
.theme li{zoom:1}
.theme li:after{content:"";display:block;clear:both}
.theme .list>ul>li{padding:8px 0 8px 120px;border-top:1px dashed #ddd;position:relative}
.theme .list>ul>li:first-child{border:0}
.theme .list>ul>li>label{position:relative;color:#333;font-size:13px;white-space:nowrap;line-height:15px;margin:0 0 0 -120px;padding:0;border-bottom:0;cursor:pointer;zoom:1}
.theme .item{position:relative;float:left;margin:5px -110px 0 -120px;display:inline;width:112px;height:85px;border:1px solid #ddd;overflow:hidden;border-radius:3px}
.theme .selected{background:#FFC}
.theme .selected>label{font-weight:bold}
.theme ul ul{white-space:nowrap;float:left;width:100%;margin:5px 0 0 0}
.theme ul ul a>i{position:absolute;top:2px;right:2px}
.theme ul ul>li>*{display:block;height:21px;line-height:21px;text-align:left;position:relative;text-decoration:none;padding:0 34px 0 5px;border-radius:3px;color:#000;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;white-space:nowrap}
.theme ul ul>li>*:hover,
.theme ul ul>li>*:focus{background:#666;color:#fff}
.theme ul ul>li>button{width:100%;padding-right:0}
.theme .x_btn-group{margin:0 !important;padding:0;position:absolute;left:4px;right:4px;bottom:4px}
/* Add Sitemap */
#add_sitemap [for="sitemapName"]{font-weight:bold}
#add_sitemap .btnBoth{position:absolute;margin:0;bottom:4px;left:4px;right:4px}
/* Sitemap General */
#sitemap_general [for="sitemapName2"]{font-weight:bold}
#sitemap_general .btnBoth{position:absolute;margin:0;bottom:4px;left:4px;right:4px}
/* Properties */
#properties ul{margin:0;padding:0 0 8px 0}
#properties li{position:relative;white-space:nowrap;border-top:1px solid #ddd}
#properties li:first-child{border:0}
#properties li>strong{margin:0 0 0 8px}
#properties li>a,
#properties li>button{color:#000;position:relative;display:block;padding:0 8px;line-height:30px;background-color:transparent;border:0;text-align:left;text-decoration:none;-webkit-transition:.3s;-moz-transition:.3s;-o-transition:.3s;*zoom:1}
#properties li>a{padding:0 24px 0 8px}
#properties li.type{height:30px;line-height:30px}
#properties li.homepage>label{line-height:30px}
#properties li.ex{border-top:0}
#properties li>button{width:100%}
#properties li>a:hover,
#properties li>button:hover,
#properties li>a:active,
#properties li>button:active,
#properties li>a:focus,
#properties li>button:focus,
#properties li.active>a{background-color:#666;color:#fff}
#properties li>*>i{position:absolute;top:50%;right:5px;margin:-7px 0 0 0;opacity:.5;filter:alpha(opacity=50)}
#properties.prop-shortcut li.homepage,
#properties.prop-shortcut li.design,
#properties.prop-shortcut li.details{display:none}
#properties ._hasFullSetupO{display:none}
#properties._hasFullSetup ._hasFullSetupO{display:block}
#properties._hasFullSetup ._hasFullSetupX{display:none}
#properties .homepage input[checked="checked"]+span{font-weight:bold}
/* Add */
#add>*>.x_btn-group{border:0;padding:0}
/* Add Menu */
#add_menu label{font-weight:bold}
#add_menu .x_tabbable{padding-top:8px}
#add_menu .desc{width:220px;min-height:50px;border-bottom:1px solid #ddd;color:#666;margin:0;padding:5px 0}
#add_menu .x_btn-group{position:absolute;margin:0;left:4px;right:4px;bottom:4px}
/* Default */
#default .menuType{border:1px solid #ddd;border-left:0;border-right:0}
#default [for="lang_menuName"],
#default [for="lang_pageTitle"],
#default [for="mid2"]{font-weight:bold}
#default .btnBoth{position:absolute;left:4px;right:4px;bottom:4px;margin:0}
/* Auth */
#auth li>label:first-child{font-weight:bold;line-height:30px;margin:0}
#auth select{height:26px;margin:0 0 5px 0;padding:0;width:100%}
#auth .x_btn-group{position:absolute;left:4px;right:4px;bottom:4px;margin:0}
/* Image Button */
#imgbtn form{padding:8px 0 0 0;margin:0}
#imgbtn figure{margin:0;text-align:center}
#imgbtn figcaption{font-weight:bold;text-align:left}
#imgbtn p{margin:0;text-align:left}
#imgbtn .btnBoth{border-top:0;border-bottom:1px solid #ddd;margin:0;padding:10px 0}
#imgbtn figure>img{max-width:220px}
#imgbtn figure>img,
#imgbtn .delete,
#imgbtn .modify{display:none}
#imgbtn form._imgUploaded figure>img,
#imgbtn form._imgUploaded .delete,
#imgbtn form._imgUploaded .modify{display:inline-block}
#imgbtn form._imgUploaded .noImg,
#imgbtn form._imgUploaded .upload{display:none}
#imgbtn form:last-child .btnBoth{border:0}
/* Design */
#design ._site{display:none}
#design ._preview_form{margin:0}
#design .mvOption{padding:10px 0 0 0}
#design>ul{margin-top:8px}
#design .x_nav{margin-bottom:14px}
#design .x_nav a{padding-top:5px;padding-bottom:4px}
#design .btnBoth{border:0}
#design img{width:220px}
#design .shadow{position:relative;box-shadow:0 0 4px #999 inset;padding:4px;height:160px;overflow:hidden;border-radius:3px;*border:1px solid #ddd}
#design .shadow>iframe{border:0;-webkit-transform-origin:0 0;-webkit-transform:scale(.20);-moz-transform-origin:0 0;-moz-transform:scale(.20);-0-transform-origin:0 0;-0-transform:scale(.20);-ms-transform-origin:0 0;-ms-transform:scale(.20);transform-origin:0 0;transform:scale(.20);position:absolute}
/*body{background:red}*/
#design #pc .shadow>iframe{width:1024px;height:768px;left:50%;margin-left:-102px}
#design #mobile .shadow>iframe{width:480px;height:800px;left:50%;margin-left:-48px}
#design .x_icon-zoom-in{position:absolute;right:4px;bottom:4px;width:24px;height:24px;border-radius:3px;background-color:#666;opacity:.75;filter:alpha(opacity:75);background-position:-331px 5px}
#design .x_icon-zoom-in:after{content:normal}
#design .mask{position:absolute;width:100%;height:100%;top:0;left:0}
#design .mask.on_message{background:#666;color:white}
#design .mask.loading{background:white}
#design .mask>span{display:block;padding:10px;text-align:center}
#design .btnBoth{position:absolute;bottom:4px;left:4px;right:4px;margin:0}
#design._mobile_view_disabled #mobile .shadow,
#design._mobile_view_disabled._mobileMode .nav,
#design._mobileMode .langDesktop,
#design._mobileMode._mobile_view_disabled .btnBoth,
#design._pcMode .langMobile{display:none}
#site._siteDesign #design .mvOption{display:none}
/* Layout */
#layout li ul._edit_menu {display:none}
#layout li.selected ul._edit_menu {display:block}
#layout .list,
#skin .list{position:relative}
#layout .mask,
#skin .mask{display:none;position:absolute;width:100%;height:100%;left:0;top:0;background:#fff;opacity:.5;filter:alpha(opacity=50);z-index:99}
#layout .disabled>.mask,
#skin .disabled>.mask{display:block;cursor:not-allowed}
/* Full Setup */
#fullSetup .x_btn-group{position:absolute;right:4px;bottom:4px}
/* Message Box */
#msgBox{width:600px;margin-left:-300px}
#msgBox._small{width:400px;margin-left:-200px}
#msgBox._nobody .x_modal-body,
#msgBox._type_alert ._cancel{display:none}
#msgBox._nobody .x_modal-footer{border-top:0}
/* Divide local/global settings view */
._siteDesign .siteMapUI {display:none}
._siteMap .siteDesignUI {display:none}
._siteDesign #design ._item,
._siteDesign #design .x_close,
._siteDesign #skin ul ul,
._siteDesign .theme .cnt>label:first-child{display:none !important}
._siteDesign #design ._site{display:block}
/* Help Alert */
._quick_help{display:none;position:fixed !important;*position:absolute !important;top:85px;left:226px;z-index:100;width:600px;box-shadow:0 0 3px #000;color:#333}
._quick_help>label{display:inline-block;cursor:pointer}

View file

@ -0,0 +1,2 @@
@charset "utf-8";
#design .shadow>iframe{zoom:0.2}

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

View file

@ -0,0 +1,61 @@
/*
* jsTree apple theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-apple > ul { background:url("bg.jpg") left top repeat; }
.jstree-apple li,
.jstree-apple ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-apple li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-apple li.jstree-last { background:transparent; }
.jstree-apple .jstree-open > ins { background-position:-72px 0; }
.jstree-apple .jstree-closed > ins { background-position:-54px 0; }
.jstree-apple .jstree-leaf > ins { background-position:-36px 0; }
.jstree-apple a { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; text-shadow:1px 1px 1px white; }
.jstree-apple .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 3px 0 1px; text-shadow:1px 1px 1px silver; }
.jstree-apple .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 3px 0 1px; }
.jstree-apple a .jstree-icon { background-position:-56px -20px; }
.jstree-apple a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-apple.jstree-focused { background:white; }
.jstree-apple .jstree-no-dots li,
.jstree-apple .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-apple .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-apple .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-apple .jstree-no-icons a .jstree-icon { display:none; }
.jstree-apple .jstree-search { font-style:italic; }
.jstree-apple .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-apple .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-apple .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-apple .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-apple .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-apple .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; }
.jstree-apple .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-apple .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-apple ins { background:transparent !important; }
#vakata-dragged.jstree-apple .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-apple .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-apple { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-apple a.jstree-search { color:aqua; }
.jstree-apple .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-apple-context,
#vakata-contextmenu.jstree-apple-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-apple-context li { }
#vakata-contextmenu.jstree-apple-context a { color:black; }
#vakata-contextmenu.jstree-apple-context a:hover,
#vakata-contextmenu.jstree-apple-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-apple-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-apple-context li ul { margin-left:-4px; }
/* TODO: IE6 support - the `>` selectors */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

View file

@ -0,0 +1,77 @@
/*
* jsTree classic theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-classic li,
.jstree-classic ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-classic li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-classic li.jstree-last { background:transparent; }
.jstree-classic .jstree-open > ins { background-position:-72px 0; }
.jstree-classic .jstree-closed > ins { background-position:-54px 0; }
.jstree-classic .jstree-leaf > ins { background-position:-36px 0; }
.jstree-classic .jstree-hovered { background:#e7f4f9; border:1px solid #e7f4f9; padding:0 2px 0 1px; }
.jstree-classic .jstree-clicked { background:navy; border:1px solid navy; padding:0 2px 0 1px; color:white; }
.jstree-classic a .jstree-icon { background-position:-56px -19px; }
.jstree-classic .jstree-open > a .jstree-icon { background-position:-56px -36px; }
.jstree-classic a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-classic.jstree-focused { background:white; }
.jstree-classic .jstree-no-dots li,
.jstree-classic .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-classic .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-classic .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-classic .jstree-no-icons a .jstree-icon { display:none; }
.jstree-classic .jstree-search { font-style:italic; }
.jstree-classic .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-classic .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-classic .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-classic .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-classic .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-classic .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
.jstree-classic .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-classic .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-classic ins { background:transparent !important; }
#vakata-dragged.jstree-classic .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-classic .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-classic { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-classic a.jstree-search { color:aqua; }
.jstree-classic .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-classic-context,
#vakata-contextmenu.jstree-classic-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-classic-context li { }
#vakata-contextmenu.jstree-classic-context a { color:black; }
#vakata-contextmenu.jstree-classic-context a:hover,
#vakata-contextmenu.jstree-classic-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-classic-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-classic-context li ul { margin-left:-4px; }
/* IE6 BEGIN */
.jstree-classic li,
.jstree-classic ins,
#vakata-dragged.jstree-classic .jstree-invalid,
#vakata-dragged.jstree-classic .jstree-ok,
#jstree-marker.jstree-classic { _background-image:url("d.gif"); }
.jstree-classic .jstree-open ins { _background-position:-72px 0; }
.jstree-classic .jstree-closed ins { _background-position:-54px 0; }
.jstree-classic .jstree-leaf ins { _background-position:-36px 0; }
.jstree-classic .jstree-open a ins.jstree-icon { _background-position:-56px -36px; }
.jstree-classic .jstree-closed a ins.jstree-icon { _background-position:-56px -19px; }
.jstree-classic .jstree-leaf a ins.jstree-icon { _background-position:-56px -19px; }
#vakata-contextmenu.jstree-classic-context ins { _display:none; }
#vakata-contextmenu.jstree-classic-context li { _zoom:1; }
.jstree-classic .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
.jstree-classic .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
.jstree-classic .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
/* IE6 END */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

View file

@ -0,0 +1,84 @@
/*
* jsTree default-rtl theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-default-rtl li,
.jstree-default-rtl ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
.jstree-default-rtl li { background-position:-90px 0; background-repeat:repeat-y; }
.jstree-default-rtl li.jstree-last { background:transparent; }
.jstree-default-rtl .jstree-open > ins { background-position:-72px 0; }
.jstree-default-rtl .jstree-closed > ins { background-position:-54px 0; }
.jstree-default-rtl .jstree-leaf > ins { background-position:-36px 0; }
.jstree-default-rtl .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
.jstree-default-rtl .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
.jstree-default-rtl a .jstree-icon { background-position:-56px -19px; }
.jstree-default-rtl a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
.jstree-default-rtl.jstree-focused { background:#ffffee; }
.jstree-default-rtl .jstree-no-dots li,
.jstree-default-rtl .jstree-no-dots .jstree-leaf > ins { background:transparent; }
.jstree-default-rtl .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
.jstree-default-rtl .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
.jstree-default-rtl .jstree-no-icons a .jstree-icon { display:none; }
.jstree-default-rtl .jstree-search { font-style:italic; }
.jstree-default-rtl .jstree-no-icons .jstree-checkbox { display:inline-block; }
.jstree-default-rtl .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
#vakata-dragged.jstree-default-rtl ins { background:transparent !important; }
#vakata-dragged.jstree-default-rtl .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
#vakata-dragged.jstree-default-rtl .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
#jstree-marker.jstree-default-rtl { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
.jstree-default-rtl a.jstree-search { color:aqua; }
.jstree-default-rtl .jstree-locked a { color:silver; cursor:default; }
#vakata-contextmenu.jstree-default-rtl-context,
#vakata-contextmenu.jstree-default-rtl-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
#vakata-contextmenu.jstree-default-rtl-context li { }
#vakata-contextmenu.jstree-default-rtl-context a { color:black; }
#vakata-contextmenu.jstree-default-rtl-context a:hover,
#vakata-contextmenu.jstree-default-rtl-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
#vakata-contextmenu.jstree-default-rtl-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
#vakata-contextmenu.jstree-default-rtl-context li ul { margin-left:-4px; }
/* IE6 BEGIN */
.jstree-default-rtl li,
.jstree-default-rtl ins,
#vakata-dragged.jstree-default-rtl .jstree-invalid,
#vakata-dragged.jstree-default-rtl .jstree-ok,
#jstree-marker.jstree-default-rtl { _background-image:url("d.gif"); }
.jstree-default-rtl .jstree-open ins { _background-position:-72px 0; }
.jstree-default-rtl .jstree-closed ins { _background-position:-54px 0; }
.jstree-default-rtl .jstree-leaf ins { _background-position:-36px 0; }
.jstree-default-rtl a ins.jstree-icon { _background-position:-56px -19px; }
#vakata-contextmenu.jstree-default-rtl-context ins { _display:none; }
#vakata-contextmenu.jstree-default-rtl-context li { _zoom:1; }
.jstree-default-rtl .jstree-undetermined a .jstree-checkbox { _background-position:-18px -19px; }
.jstree-default-rtl .jstree-checked a .jstree-checkbox { _background-position:-36px -19px; }
.jstree-default-rtl .jstree-unchecked a .jstree-checkbox { _background-position:0px -19px; }
/* IE6 END */
/* RTL part */
.jstree-default-rtl .jstree-hovered, .jstree-default-rtl .jstree-clicked { padding:0 1px 0 2px; }
.jstree-default-rtl li { background-image:url("dots.gif"); background-position: 100% 0px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-36px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:0px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-18px -19px; margin-left:2px; }
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-36px -37px; }
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:0px -37px; }
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-18px -37px; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -0,0 +1,81 @@
/*
* jsTree default theme 1.0
* Supported features: dots/no-dots, icons/no-icons, focused, loading
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
*/
.jstree-default li,
.jstree-default ins{background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent}
.jstree-default li{background-position:-90px 10px; background-repeat:repeat-y}
.jstree-default .jstree-open> ins,
.jstree-default .jstree-closed> ins{cursor:pointer}
.jstree-default .jstree-open>ins{background-position:-72px 0}
.jstree-default .jstree-closed>ins{background-position:-54px 0}
.jstree-default .jstree-leaf>ins{background-position:-36px 0; vertical-align:top}
.jstree-default>ul>li,
.jstree-default li.jstree-last{background:transparent}
.jstree-default>ul>li>ins{background-position:-54px -36px !important;vertical-align:baseline !important}
.jstree-default>ul>li.jstree-open>ins{background-position:-72px 0 !important}
.jstree-default>ul>li.jstree-closed>ins{background-position:-54px 0 !important}
.jstree-default .jstree-hovered{background:#666;color:#fff !important;text-decoration:none !important}
.jstree-default .jstree-clicked{background:#000;color:#fff !important;text-decoration:none !important}
.jstree-default a .jstree-icon{background-position:-56px -19px}
.jstree-default a.jstree-loading .jstree-icon{background:url("throbber.gif") center center no-repeat !important}
.jstree-default.jstree-focused{background:#ffffee}
.jstree-default .jstree-no-dots li,
.jstree-default .jstree-no-dots .jstree-leaf>ins{background:transparent}
.jstree-default .jstree-no-dots .jstree-open>ins{background-position:-18px 0}
.jstree-default .jstree-no-dots .jstree-closed>ins{background-position:0 0}
.jstree-default .jstree-no-icons a .jstree-icon{display:none}
.jstree-default .jstree-search{font-style:italic}
.jstree-default .jstree-no-icons .jstree-checkbox{display:inline-block}
.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none !important}
.jstree-default .jstree-checked>a>.jstree-checkbox{background-position:-38px -19px}
.jstree-default .jstree-unchecked>a>.jstree-checkbox{background-position:-2px -19px}
.jstree-default .jstree-undetermined>a>.jstree-checkbox{background-position:-20px -19px}
.jstree-default .jstree-checked>a>.jstree-checkbox:hover{background-position:-38px -37px}
.jstree-default .jstree-unchecked>a>.jstree-checkbox:hover{background-position:-2px -37px}
.jstree-default .jstree-undetermined>a>.jstree-checkbox:hover{background-position:-20px -37px}
#vakata-dragged.jstree-default ins{background:transparent !important}
#vakata-dragged.jstree-default .jstree-ok{background:url("d.png") -2px -53px no-repeat !important}
#vakata-dragged.jstree-default .jstree-invalid{background:url("d.png") -18px -53px no-repeat !important}
#jstree-marker.jstree-default{background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px}
.jstree-default a.jstree-search{color:aqua}
.jstree-default .jstree-locked a{color:silver; cursor:default}
#vakata-contextmenu.jstree-default-context,
#vakata-contextmenu.jstree-default-context li ul{background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999}
#vakata-contextmenu.jstree-default-context li{}
#vakata-contextmenu.jstree-default-context a{color:black}
#vakata-contextmenu.jstree-default-context a:hover,
#vakata-contextmenu.jstree-default-context .vakata-hover>a{padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px}
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a,
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a:hover{color:silver; background:transparent; border:0; padding:1px 4px}
#vakata-contextmenu.jstree-default-context li.vakata-separator{background:white; border-top:1px solid #e0e0e0; margin:0}
#vakata-contextmenu.jstree-default-context li ul{margin-left:-4px}
/* IE6 BEGIN */
.jstree-default li,
.jstree-default ins,
#vakata-dragged.jstree-default .jstree-invalid,
#vakata-dragged.jstree-default .jstree-ok,
#jstree-marker.jstree-default{_background-image:url("d.gif")}
.jstree-default .jstree-open ins{_background-position:-72px 0}
.jstree-default .jstree-closed ins{_background-position:-54px 0}
.jstree-default .jstree-leaf ins{_background-position:-36px 0}
.jstree-default a ins.jstree-icon{_background-position:-56px -19px}
#vakata-contextmenu.jstree-default-context ins{_display:none}
#vakata-contextmenu.jstree-default-context li{_zoom:1}
.jstree-default .jstree-undetermined a .jstree-checkbox{_background-position:-20px -19px}
.jstree-default .jstree-checked a .jstree-checkbox{_background-position:-38px -19px}
.jstree-default .jstree-unchecked a .jstree-checkbox{_background-position:-2px -19px}
/* IE6 END */

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -1,9 +0,0 @@
<filter name="delete_menu" module="menu" act="procMenuAdminDelete" confirm_msg_code="confirm_delete">
<form>
<node target="menu_srl" required="true" />
</form>
<response callback_func="completeDeleteMenu">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -1,13 +0,0 @@
<filter name="delete_menu_item" module="menu" act="procMenuAdminDeleteItem" confirm_msg_code="confirm_delete">
<form>
<node target="menu_srl" required="true" />
</form>
<response callback_func="completeDeleteMenuItem">
<tag name="error" />
<tag name="message" />
<tag name="menu_title" />
<tag name="xml_file" />
<tag name="menu_srl" />
<tag name="menu_item_srl" />
</response>
</filter>

View file

@ -1,10 +0,0 @@
<filter name="insert_menu" module="menu" act="procMenuAdminInsert" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" />
</form>
<response callback_func="completeInsertMenu">
<tag name="error" />
<tag name="message" />
<tag name="menu_srl" />
</response>
</filter>

View file

@ -1,14 +0,0 @@
<filter name="insert_menu_item" module="menu" act="procMenuAdminInsertItem" confirm_msg_code="confirm_submit">
<form>
<node target="menu_srl" required="true" />
</form>
<response callback_func="completeInsertMenuItem">
<tag name="error" />
<tag name="message" />
<tag name="menu_srl" />
<tag name="xml_file" />
<tag name="menu_title" />
<tag name="menu_item_srl" />
<tag name="parent_srl" />
</response>
</filter>

View file

@ -1,10 +0,0 @@
<filter name="move_menu_item" module="menu" act="procMenuAdminMoveItem" confirm_msg_code="confirm_move">
<form />
<parameter />
<response callback_func="completeMoveMenuItem">
<tag name="error" />
<tag name="message" />
<tag name="xml_file" />
<tag name="source_item_srl" />
</response>
</filter>

View file

@ -1,9 +0,0 @@
<filter name="update_menu_title" module="menu" act="procMenuAdminUpdate" confirm_msg_code="confirm_update">
<form>
<node target="menu_srl" required="true" />
</form>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -1,3 +0,0 @@
<h3 class="xeAdmin"><span class="gray">{$lang->menu_management}</span></h3>
<div class="infoText">{nl2br($lang->about_menu)}</div>

View file

@ -1,53 +0,0 @@
<!--%import("filter/delete_menu.xml")-->
<!--%import("js/menu_admin.js")-->
<!--#include("header.html")-->
<!-- 삭제를 위한 임시 form -->
<form id="fo_menu" action="./" method="get">
<input type="hidden" name="menu_srl" value="" />
</form>
<!-- 목록 -->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col" >{$lang->title}</th>
<th scope="col">{$lang->regdate}</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@foreach($menu_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td>{$no}</td>
<td >{$val->title}</td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td>
<a href="{getUrl('act','dispMenuAdminManagement','menu_srl',$val->menu_srl)}">{$lang->cmd_setup}</a>
<button type="button" onclick="doDeleteMenu('{$val->menu_srl}');return false;" title="{$lang->cmd_delete}" class="text">{$lang->cmd_delete}</button>
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn"><a href="{getUrl('act','dispMenuAdminInsert','module_srl','')}">{$lang->cmd_make}</a></span>
</div>
<!-- 페이지 네비게이션 -->
<div class="pagination">
<a href="{getUrl('page','','module_srl','')}" class="direction">&lsaquo; {$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} &rsaquo;</a>
</div>

View file

@ -0,0 +1,96 @@
/**
* Cookie plugin
*
* Copyright (c) 2006 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
/**
* Create a cookie with the given name and value and other optional parameters.
*
* @example $.cookie('the_cookie', 'the_value');
* @desc Set the value of a cookie.
* @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
* @desc Create a cookie with all available options.
* @example $.cookie('the_cookie', 'the_value');
* @desc Create a session cookie.
* @example $.cookie('the_cookie', null);
* @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
* used when the cookie was set.
*
* @param String name The name of the cookie.
* @param String value The value of the cookie.
* @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
* @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
* If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
* If set to null or omitted, the cookie will be a session cookie and will not be retained
* when the the browser exits.
* @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
* @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
* @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
* require a secure protocol (like HTTPS).
* @type undefined
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
/**
* Get the value of a cookie with the given name.
*
* @example $.cookie('the_cookie');
* @desc Get the value of a cookie.
*
* @param String name The name of the cookie.
* @return The value of the cookie.
* @type String
*
* @name $.cookie
* @cat Plugins/Cookie
* @author Klaus Hartl/klaus.hartl@stilbuero.de
*/
jQuery.cookie = function(name, value, options) {
if (typeof value != 'undefined') { // name and value given, set cookie
options = options || {};
if (value === null) {
value = '';
options.expires = -1;
}
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
}
// CAUTION: Needed to parenthesize options.path and options.domain
// in the following expressions, otherwise they evaluate to undefined
// in the packed version for some reason...
var path = options.path ? '; path=' + (options.path) : '';
var domain = options.domain ? '; domain=' + (options.domain) : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else { // only name given, get cookie
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};

View file

@ -0,0 +1,99 @@
/*
* jQuery Hotkeys Plugin
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* Based upon the plugin by Tzury Bar Yochay:
* http://github.com/tzuryby/hotkeys
*
* Original idea by:
* Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
*/
(function(jQuery){
jQuery.hotkeys = {
version: "0.8",
specialKeys: {
8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pause",
20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home",
37: "left", 38: "up", 39: "right", 40: "down", 45: "insert", 46: "del",
96: "0", 97: "1", 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7",
104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111 : "/",
112: "f1", 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8",
120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock", 145: "scroll", 191: "/", 224: "meta"
},
shiftNums: {
"`": "~", "1": "!", "2": "@", "3": "#", "4": "$", "5": "%", "6": "^", "7": "&",
"8": "*", "9": "(", "0": ")", "-": "_", "=": "+", ";": ": ", "'": "\"", ",": "<",
".": ">", "/": "?", "\\": "|"
}
};
function keyHandler( handleObj ) {
// Only care when a possible input has been specified
if ( typeof handleObj.data !== "string" ) {
return;
}
var origHandler = handleObj.handler,
keys = handleObj.data.toLowerCase().split(" ");
handleObj.handler = function( event ) {
// Don't fire in text-accepting inputs that we didn't directly bind to
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) ||
event.target.type === "text") ) {
return;
}
// Keypress represents characters, not special keys
var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[ event.which ],
character = String.fromCharCode( event.which ).toLowerCase(),
key, modif = "", possible = {};
// check combinations (alt|ctrl|shift+anything)
if ( event.altKey && special !== "alt" ) {
modif += "alt+";
}
if ( event.ctrlKey && special !== "ctrl" ) {
modif += "ctrl+";
}
// TODO: Need to make sure this works consistently across platforms
if ( event.metaKey && !event.ctrlKey && special !== "meta" ) {
modif += "meta+";
}
if ( event.shiftKey && special !== "shift" ) {
modif += "shift+";
}
if ( special ) {
possible[ modif + special ] = true;
} else {
possible[ modif + character ] = true;
possible[ modif + jQuery.hotkeys.shiftNums[ character ] ] = true;
// "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
if ( modif === "shift+" ) {
possible[ jQuery.hotkeys.shiftNums[ character ] ] = true;
}
}
for ( var i = 0, l = keys.length; i < l; i++ ) {
if ( possible[ keys[i] ] ) {
return origHandler.apply( this, arguments );
}
}
};
}
jQuery.each([ "keydown", "keyup", "keypress" ], function() {
jQuery.event.special[ this ] = { add: keyHandler };
});
})( jQuery );

8176
modules/menu/tpl/js/_lib/jquery.js vendored Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,215 @@
/**
* jQuery.ScrollTo
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 5/25/2009
*
* @projectDescription Easy element scrolling using jQuery.
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
* Works with jQuery +1.2.6. Tested on FF 2/3, IE 6/7/8, Opera 9.5/6, Safari 3, Chrome 1 on WinXP.
*
* @author Ariel Flesler
* @version 1.4.2
*
* @id jQuery.scrollTo
* @id jQuery.fn.scrollTo
* @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
* The different options for target are:
* - A number position (will be applied to all axes).
* - A string position ('44', '100px', '+=90', etc ) will be applied to all axes
* - A jQuery/DOM element ( logically, child of the element to scroll )
* - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
* - A hash { top:x, left:y }, x and y can be any kind of number/string like above.
* - A percentage of the container's dimension/s, for example: 50% to go to the middle.
* - The string 'max' for go-to-end.
* @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
* @param {Object,Function} settings Optional set of settings or the onAfter callback.
* @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
* @option {Number} duration The OVERALL length of the animation.
* @option {String} easing The easing method for the animation.
* @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
* @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
* @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
* @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
* @option {Function} onAfter Function to be called after the scrolling ends.
* @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
* @return {jQuery} Returns the same jQuery object, for chaining.
*
* @desc Scroll to a fixed position
* @example $('div').scrollTo( 340 );
*
* @desc Scroll relatively to the actual position
* @example $('div').scrollTo( '+=340px', { axis:'y' } );
*
* @dec Scroll using a selector (relative to the scrolled element)
* @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
*
* @ Scroll to a DOM element (same for jQuery object)
* @example var second_child = document.getElementById('container').firstChild.nextSibling;
* $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
* alert('scrolled!!');
* }});
*
* @desc Scroll on both axes, to different values
* @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
*/
;(function( $ ){
var $scrollTo = $.scrollTo = function( target, duration, settings ){
$(window).scrollTo( target, duration, settings );
};
$scrollTo.defaults = {
axis:'xy',
duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1
};
// Returns the element that needs to be animated to scroll the window.
// Kept for backwards compatibility (specially for localScroll & serialScroll)
$scrollTo.window = function( scope ){
return $(window)._scrollable();
};
// Hack, hack, hack :)
// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
$.fn._scrollable = function(){
return this.map(function(){
var elem = this,
isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
if( !isWin )
return elem;
var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem;
return $.browser.safari || doc.compatMode == 'BackCompat' ?
doc.body :
doc.documentElement;
});
};
$.fn.scrollTo = function( target, duration, settings ){
if( typeof duration == 'object' ){
settings = duration;
duration = 0;
}
if( typeof settings == 'function' )
settings = { onAfter:settings };
if( target == 'max' )
target = 9e9;
settings = $.extend( {}, $scrollTo.defaults, settings );
// Speed is still recognized for backwards compatibility
duration = duration || settings.speed || settings.duration;
// Make sure the settings are given right
settings.queue = settings.queue && settings.axis.length > 1;
if( settings.queue )
// Let's keep the overall duration
duration /= 2;
settings.offset = both( settings.offset );
settings.over = both( settings.over );
return this._scrollable().each(function(){
var elem = this,
$elem = $(elem),
targ = target, toff, attr = {},
win = $elem.is('html,body');
switch( typeof targ ){
// A number will pass the regex
case 'number':
case 'string':
if( /^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ) ){
targ = both( targ );
// We are done
break;
}
// Relative selector, no break!
targ = $(targ,this);
case 'object':
// DOMElement / jQuery
if( targ.is || targ.style )
// Get the real position of the target
toff = (targ = $(targ)).offset();
}
$.each( settings.axis.split(''), function( i, axis ){
var Pos = axis == 'x' ? 'Left' : 'Top',
pos = Pos.toLowerCase(),
key = 'scroll' + Pos,
old = elem[key],
max = $scrollTo.max(elem, axis);
if( toff ){// jQuery / DOMElement
attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );
// If it's a dom element, reduce the margin
if( settings.margin ){
attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
}
attr[key] += settings.offset[pos] || 0;
if( settings.over[pos] )
// Scroll to a fraction of its width/height
attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos];
}else{
var val = targ[pos];
// Handle percentage values
attr[key] = val.slice && val.slice(-1) == '%' ?
parseFloat(val) / 100 * max
: val;
}
// Number or 'number'
if( /^\d+$/.test(attr[key]) )
// Check the limits
attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max );
// Queueing axes
if( !i && settings.queue ){
// Don't waste time animating, if there's no need.
if( old != attr[key] )
// Intermediate animation
animate( settings.onAfterFirst );
// Don't animate this axis again in the next iteration.
delete attr[key];
}
});
animate( settings.onAfter );
function animate( callback ){
$elem.animate( attr, duration, settings.easing, callback && function(){
callback.call(this, target, settings);
});
};
}).end();
};
// Max scrolling position, works on quirks mode
// It only fails (not too badly) on IE, quirks mode.
$scrollTo.max = function( elem, axis ){
var Dim = axis == 'x' ? 'Width' : 'Height',
scroll = 'scroll'+Dim;
if( !$(elem).is('html,body') )
return elem[scroll] - $(elem)[Dim.toLowerCase()]();
var size = 'client' + Dim,
html = elem.ownerDocument.documentElement,
body = elem.ownerDocument.body;
return Math.max( html[scroll], body[scroll] )
- Math.min( html[size] , body[size] );
};
function both( val ){
return typeof val == 'object' ? val : { top:val, left:val };
};
})( jQuery );

View file

@ -0,0 +1,484 @@
/*!
* jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl
* Requires jQuery 1.4.2
*
* Copyright 2011, Software Freedom Conservancy, Inc.
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*/
(function( jQuery, undefined ){
var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,
newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = [];
function newTmplItem( options, parentItem, fn, data ) {
// Returns a template item data structure for a new rendered instance of a template (a 'template item').
// The content field is a hierarchical array of strings and nested items (to be
// removed and replaced by nodes field of dom elements, once inserted in DOM).
var newItem = {
data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}),
_wrap: parentItem ? parentItem._wrap : null,
tmpl: null,
parent: parentItem || null,
nodes: [],
calls: tiCalls,
nest: tiNest,
wrap: tiWrap,
html: tiHtml,
update: tiUpdate
};
if ( options ) {
jQuery.extend( newItem, options, { nodes: [], parent: parentItem });
}
if ( fn ) {
// Build the hierarchical content to be used during insertion into DOM
newItem.tmpl = fn;
newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem );
newItem.key = ++itemKey;
// Keep track of new template item, until it is stored as jQuery Data on DOM element
(stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem;
}
return newItem;
}
// Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core).
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems,
parent = this.length === 1 && this[0].parentNode;
appendToTmplItems = newTmplItems || {};
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
ret = this;
} else {
for ( i = 0, l = insert.length; i < l; i++ ) {
cloneIndex = i;
elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
cloneIndex = 0;
ret = this.pushStack( ret, name, insert.selector );
}
tmplItems = appendToTmplItems;
appendToTmplItems = null;
jQuery.tmpl.complete( tmplItems );
return ret;
};
});
jQuery.fn.extend({
// Use first wrapped element as template markup.
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( data, options, parentItem ) {
return jQuery.tmpl( this[0], data, options, parentItem );
},
// Find which rendered template item the first wrapped DOM element belongs to
tmplItem: function() {
return jQuery.tmplItem( this[0] );
},
// Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template.
template: function( name ) {
return jQuery.template( name, this[0] );
},
domManip: function( args, table, callback, options ) {
if ( args[0] && jQuery.isArray( args[0] )) {
var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem;
while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {}
if ( tmplItem && cloneIndex ) {
dmArgs[2] = function( fragClone ) {
// Handler called by oldManip when rendered template has been inserted into DOM.
jQuery.tmpl.afterManip( this, fragClone, callback );
};
}
oldManip.apply( this, dmArgs );
} else {
oldManip.apply( this, arguments );
}
cloneIndex = 0;
if ( !appendToTmplItems ) {
jQuery.tmpl.complete( newTmplItems );
}
return this;
}
});
jQuery.extend({
// Return wrapped set of template items, obtained by rendering template against data.
tmpl: function( tmpl, data, options, parentItem ) {
var ret, topLevel = !parentItem;
if ( topLevel ) {
// This is a top-level tmpl call (not from a nested template using {{tmpl}})
parentItem = topTmplItem;
tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl );
wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level
} else if ( !tmpl ) {
// The template item is already associated with DOM - this is a refresh.
// Re-evaluate rendered template for the parentItem
tmpl = parentItem.tmpl;
newTmplItems[parentItem.key] = parentItem;
parentItem.nodes = [];
if ( parentItem.wrapped ) {
updateWrapped( parentItem, parentItem.wrapped );
}
// Rebuild, without creating a new template item
return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) ));
}
if ( !tmpl ) {
return []; // Could throw...
}
if ( typeof data === "function" ) {
data = data.call( parentItem || {} );
}
if ( options && options.wrapped ) {
updateWrapped( options, options.wrapped );
}
ret = jQuery.isArray( data ) ?
jQuery.map( data, function( dataItem ) {
return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
}) :
[ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;
},
// Return rendered template item for an element.
tmplItem: function( elem ) {
var tmplItem;
if ( elem instanceof jQuery ) {
elem = elem[0];
}
while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {}
return tmplItem || topTmplItem;
},
// Set:
// Use $.template( name, tmpl ) to cache a named template,
// where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc.
// Use $( "selector" ).template( name ) to provide access by name to a script block template declaration.
// Get:
// Use $.template( name ) to access a cached template.
// Also $( selectorToScriptBlock ).template(), or $.template( null, templateString )
// will return the compiled template, without adding a name reference.
// If templateString includes at least one HTML tag, $.template( templateString ) is equivalent
// to $.template( null, templateString )
template: function( name, tmpl ) {
if (tmpl) {
// Compile template and associate with name
if ( typeof tmpl === "string" ) {
// This is an HTML string being passed directly in.
tmpl = buildTmplFn( tmpl );
} else if ( tmpl instanceof jQuery ) {
tmpl = tmpl[0] || {};
}
if ( tmpl.nodeType ) {
// If this is a template block, use cached copy, or generate tmpl function and cache.
tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML ));
// Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space.
// This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x.
// To correct this, include space in tag: foo="${ x }" -> foo="value of x"
}
return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl;
}
// Return named compiled template
return name ? (typeof name !== "string" ? jQuery.template( null, name ):
(jQuery.template[name] ||
// If not in map, and not containing at least on HTML tag, treat as a selector.
// (If integrated with core, use quickExpr.exec)
jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null;
},
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
}
});
jQuery.extend( jQuery.tmpl, {
tag: {
"tmpl": {
_default: { $2: "null" },
open: "if($notnull_1){__=__.concat($item.nest($1,$2));}"
// tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions)
// This means that {{tmpl foo}} treats foo as a template (which IS a function).
// Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}.
},
"wrap": {
_default: { $2: "null" },
open: "$item.calls(__,$1,$2);__=[];",
close: "call=$item.calls();__=call._.concat($item.wrap(call,__));"
},
"each": {
_default: { $2: "$index, $value" },
open: "if($notnull_1){$.each($1a,function($2){with(this){",
close: "}});}"
},
"if": {
open: "if(($notnull_1) && $1a){",
close: "}"
},
"else": {
_default: { $1: "true" },
open: "}else if(($notnull_1) && $1a){"
},
"html": {
// Unecoded expression evaluation.
open: "if($notnull_1){__.push($1a);}"
},
"=": {
// Encoded expression evaluation. Abbreviated form is ${}.
_default: { $1: "$data" },
open: "if($notnull_1){__.push($.encode($1a));}"
},
"!": {
// Comment tag. Skipped by parser
open: ""
}
},
// This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events
complete: function( items ) {
newTmplItems = {};
},
// Call this from code which overrides domManip, or equivalent
// Manage cloning/storing template items etc.
afterManip: function afterManip( elem, fragClone, callback ) {
// Provides cloned fragment ready for fixup prior to and after insertion into DOM
var content = fragClone.nodeType === 11 ?
jQuery.makeArray(fragClone.childNodes) :
fragClone.nodeType === 1 ? [fragClone] : [];
// Return fragment to original caller (e.g. append) for DOM insertion
callback.call( elem, fragClone );
// Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data.
storeTmplItems( content );
cloneIndex++;
}
});
//========================== Private helper functions, used by code above ==========================
function build( tmplItem, nested, content ) {
// Convert hierarchical content into flat string array
// and finally return array of fragments ready for DOM insertion
var frag, ret = content ? jQuery.map( content, function( item ) {
return (typeof item === "string") ?
// Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM.
(tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) :
// This is a child template item. Build nested template.
build( item, tmplItem, item._ctnt );
}) :
// If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}.
tmplItem;
if ( nested ) {
return ret;
}
// top-level template
ret = ret.join("");
// Support templates which have initial or final text nodes, or consist only of text
// Also support HTML entities within the HTML markup.
ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) {
frag = jQuery( middle ).get();
storeTmplItems( frag );
if ( before ) {
frag = unencode( before ).concat(frag);
}
if ( after ) {
frag = frag.concat(unencode( after ));
}
});
return frag ? frag : unencode( ret );
}
function unencode( text ) {
// Use createElement, since createTextNode will not render HTML entities correctly
var el = document.createElement( "div" );
el.innerHTML = text;
return jQuery.makeArray(el.childNodes);
}
// Generate a reusable function that will serve to render a template against data
function buildTmplFn( markup ) {
return new Function("jQuery","$item",
// Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10).
"var $=jQuery,call,__=[],$data=$item.data;" +
// Introduce the data as local variables using with(){}
"with($data){__.push('" +
// Convert the template into pure JavaScript
jQuery.trim(markup)
.replace( /([\\'])/g, "\\$1" )
.replace( /[\r\t\n]/g, " " )
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" )
.replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,
function( all, slash, type, fnargs, target, parens, args ) {
var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect;
if ( !tag ) {
throw "Unknown template tag: " + type;
}
def = tag._default || [];
if ( parens && !/\w$/.test(target)) {
target += parens;
parens = "";
}
if ( target ) {
target = unescape( target );
args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : "");
// Support for target being things like a.toLowerCase();
// In that case don't call with template item as 'this' pointer. Just evaluate...
expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target;
exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))";
} else {
exprAutoFnDetect = expr = def.$1 || "null";
}
fnargs = unescape( fnargs );
return "');" +
tag[ slash ? "close" : "open" ]
.split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" )
.split( "$1a" ).join( exprAutoFnDetect )
.split( "$1" ).join( expr )
.split( "$2" ).join( fnargs || def.$2 || "" ) +
"__.push('";
}) +
"');}return __;"
);
}
function updateWrapped( options, wrapped ) {
// Build the wrapped content.
options._wrap = build( options, true,
// Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string.
jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()]
).join("");
}
function unescape( args ) {
return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
}
function outerHtml( elem ) {
var div = document.createElement("div");
div.appendChild( elem.cloneNode(true) );
return div.innerHTML;
}
// Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance.
function storeTmplItems( content ) {
var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m;
for ( i = 0, l = content.length; i < l; i++ ) {
if ( (elem = content[i]).nodeType !== 1 ) {
continue;
}
elems = elem.getElementsByTagName("*");
for ( m = elems.length - 1; m >= 0; m-- ) {
processItemKey( elems[m] );
}
processItemKey( elem );
}
function processItemKey( el ) {
var pntKey, pntNode = el, pntItem, tmplItem, key;
// Ensure that each rendered template inserted into the DOM has its own template item,
if ( (key = el.getAttribute( tmplItmAtt ))) {
while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { }
if ( pntKey !== key ) {
// The next ancestor with a _tmplitem expando is on a different key than this one.
// So this is a top-level element within this template item
// Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment.
pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0;
if ( !(tmplItem = newTmplItems[key]) ) {
// The item is for wrapped content, and was copied from the temporary parent wrappedItem.
tmplItem = wrappedItems[key];
tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] );
tmplItem.key = ++itemKey;
newTmplItems[itemKey] = tmplItem;
}
if ( cloneIndex ) {
cloneTmplItem( key );
}
}
el.removeAttribute( tmplItmAtt );
} else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) {
// This was a rendered element, cloned during append or appendTo etc.
// TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem.
cloneTmplItem( tmplItem.key );
newTmplItems[tmplItem.key] = tmplItem;
pntNode = jQuery.data( el.parentNode, "tmplItem" );
pntNode = pntNode ? pntNode.key : 0;
}
if ( tmplItem ) {
pntItem = tmplItem;
// Find the template item of the parent element.
// (Using !=, not !==, since pntItem.key is number, and pntNode may be a string)
while ( pntItem && pntItem.key != pntNode ) {
// Add this element as a top-level node for this rendered template item, as well as for any
// ancestor items between this item and the item of its parent element
pntItem.nodes.push( el );
pntItem = pntItem.parent;
}
// Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering...
delete tmplItem._ctnt;
delete tmplItem._wrap;
// Store template item as jQuery data on the element
jQuery.data( el, "tmplItem", tmplItem );
}
function cloneTmplItem( key ) {
key = key + keySuffix;
tmplItem = newClonedItems[key] =
(newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent ));
}
}
}
//---- Helper functions for template item ----
function tiCalls( content, tmpl, data, options ) {
if ( !content ) {
return stack.pop();
}
stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options });
}
function tiNest( tmpl, data, options ) {
// nested template, using {{tmpl}} tag
return jQuery.tmpl( jQuery.template( tmpl ), data, options, this );
}
function tiWrap( call, wrapped ) {
// nested template, using {{wrap}} tag
var options = call.options || {};
options.wrapped = wrapped;
// Apply the template, which may incorporate wrapped content,
return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item );
}
function tiHtml( filter, textOnly ) {
var wrapped = this._wrap;
return jQuery.map(
jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ),
function(e) {
return textOnly ?
e.innerText || e.textContent :
e.outerHTML || outerHtml(e);
});
}
function tiUpdate() {
var coll = this.nodes;
jQuery.tmpl( null, null, null, this).insertBefore( coll[0] );
jQuery( coll ).remove();
}
})( jQuery );

View file

@ -1,10 +0,0 @@
<!--@if($error_message)-->
<script type="text/javascript">
alert("{$error_message}");
</script>
<!--@else-->
<script type="text/javascript">
top.completeMenuUploadButton("{$target}", "{$filename}");
</script>
<!--@end-->

View file

@ -1,28 +0,0 @@
<!--%import("js/menu_admin.js")-->
<!--#include("header.html")-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertMenu" action="./" method="post">
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="act" value="procMenuAdminInsert" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="col">{$lang->cmd_menu_insert}</th>
<td>{nl2br($lang->about_menu_management)}</td>
</tr>
<tr>
<th scope="col">{$lang->title}</th>
<td>
<input type="text" name="title" value="{$menu_info->title}" />
<p>{$lang->about_title}</p>
</td>
</tr>
</table>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_submit}" /></span>
</div>
</form>

View file

@ -1,123 +0,0 @@
<input type="hidden" name="menu_item_srl" value="{$item_info->menu_item_srl}" />
<input type="hidden" name="parent_srl" value="{$item_info->parent_srl}" />
<input type="hidden" name="normal_btn" value="{$item_info->normal_btn}" />
<input type="hidden" name="hover_btn" value="{$item_info->hover_btn}" />
<input type="hidden" name="active_btn" value="{$item_info->active_btn}" />
<div class="layer" style="display:block;">
<h3 class="h3">{$lang->menu}</h3>
<button type="button" onclick="hideCategoryInfo();return false" >{$lang->cmd_close}</button>
<div class="layerBody">
<div class="table">
<table width="100%" border="1" cellspacing="0">
<!--@if($item_info->parent_menu_name)-->
<tr class="row{$cycle_idx}">
<th scope="row">{$lang->parent_menu_name}</th>
<td>{$item_info->parent_menu_name}</td>
</tr>
<!--@end-->
<tr>
<th scope="row">{$lang->menu_name}</th>
<td>
<input type="text" name="menu_name" id="menu_name" value="{$item_info->name}" />
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','menu_name')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a> </td>
</tr>
<tr>
<th scope="row">{$lang->menu_url}</th>
<td>
<input type="text" name="menu_url" value="{$item_info->url}" />
<a href="{getUrl('module','menu','act','dispMenuAdminMidList')}" onclick="popopen(this.href);return false;" class="button black"><span>{$lang->cmd_search_mid}</span> </a>
<p>{$lang->about_menu_url}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_open_window}</th>
<td> <input type="checkbox" name="menu_open_window" value="Y" <!--@if($item_info->open_window=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_open_window}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_expand}</th>
<td> <input type="checkbox" name="menu_expand" value="Y" <!--@if($item_info->expand=="Y")-->checked="checked"<!--@end--> />
<p>{$lang->about_menu_expand}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_img_btn}</th>
<td>
<p>{$lang->about_menu_img_btn}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_normal_btn}</th>
<td> <div id="menu_normal_btn_zone" <!--@if(!$item_info->normal_btn)-->style="display:none;"<!--@end-->> <img src="{$item_info->normal_btn}" alt="" id="menu_normal_btn_img" /><br />
<button type="button" onclick="doDeleteButton('menu_normal_btn');">{$lang->cmd_delete}</button>
</div>
<input type="file" name="menu_normal_btn" value="" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_hover_btn}</th>
<td> <div id="menu_hover_btn_zone") <!--@if(!$item_info->hover_btn)-->style="display:none;"<!--@end-->> <img src="{$item_info->hover_btn}" alt="" id="menu_hover_btn_img" /><br />
<button type="button" onclick="doDeleteButton('menu_hover_btn');return false;">{$lang->cmd_delete}</button>
</div>
<input type="file" name="menu_hover_btn" value="" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_active_btn}</th>
<td> <div id="menu_active_btn_zone" <!--@if(!$item_info->active_btn)-->style="display:none;"<!--@end-->> <img src="{$item_info->active_btn}" alt="" id="menu_active_btn_img" /><br />
<button type="button" onclick="doDeleteButton('menu_active_btn');return false;">{$lang->cmd_delete}</button>
</div>
<input type="file" name="menu_active_btn" value="" onchange="doMenuUploadButton(this); return false;"/>
</td>
</tr>
<tr>
<th scope="row">{$lang->menu_group_srls}</th>
<td>
<!--@foreach($group_list as $key=>$val)-->
<input type="checkbox" name="group_srls[]" value="{$key}" id="group_{$key}" <!--@if(is_array($item_info->group_srls)&&in_array($key, $item_info->group_srls))-->checked="checked"<!--@end-->/>
<label for="group_{$key}">{$val->title}</label>
<!--@end-->
<p>{$lang->about_menu_group_srls}</p>
</td>
</tr>
</table>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
<script type="text/javascript">
(function($){
$("[name^=menu_name_]").bind("blur",function(e){
if($("[name=ck_"+$(this).attr("name")+"]:checked").size()>0){
$("[name^=ck_menu_name_]:checked").each(function(i){
$("[name="+$(this).attr("name").substring(3)+"]").val(e.target.value);
});
}
});
$('input#menu_name').focus();
})(jQuery);
</script>
</div>
</div>

View file

@ -1,97 +0,0 @@
<load target="filter/insert_menu_item.xml" />
<load target="filter/delete_menu_item.xml" />
<load target="filter/move_menu_item.xml" />
<load target="js/menu_admin.js" type="body" usecdn="true" />
<load target="js/menu_tree.js" type="body" usecdn="true" />
<!--// tree javascript plugin load -->
<!--%load_js_plugin("ui.tree")-->
<script type="text/javascript">
var alertImageOnly = "{$lang->alert_image_only}";
</script>
<div class="menuManagement">
<!--@if($module == 'admin')-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="updateMenuTitle" action="./" method="post">
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="act" value="procMenuAdminUpdate" />
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<h3 class="h3">{$lang->menu_management}</h3>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="col">{$lang->title}</th>
<td>
<input type="text" name="title" value="{$menu_info->title}" />
<input type="submit" value="{$lang->cmd_modify}" />
</td>
</tr>
<tr>
<th scope="col">{$lang->menu_management}</th>
<td >
{nl2br($lang->about_menu_management)}
<button type="button" onclick="doReloadTreeMenu('{$menu_info->menu_srl}');return false;">{$lang->cmd_remake_cache}</button>
</td>
</tr>
</table>
</div>
</form>
<!--@else-->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="col">{$lang->title}</th>
<td >
{$menu_info->title}
</td>
</tr>
<tr>
<th scope="col">{$lang->menu_management}</th>
<td >{nl2br($lang->about_menu_management)}</td>
</tr>
</table>
</div>
<!--@end-->
<form ruleset="insertMenuItem" id="fo_menu" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="act" value="procMenuAdminInsertItem" />
<input type="hidden" name="title" value="{$menu_info->title}" />
<input type="hidden" name="menu_srl" value="{$menu_info->menu_srl}" />
<input type="hidden" name="xml_file" value="{$menu_info->xml_file}" />
<input type="hidden" name="php_file" value="{$menu_info->php_file}" />
<input type="hidden" name="module" value="menu" />
<input type="hidden" name="target" value="" />
<div id="menu_zone_info"></div>
</form>
<div id="menu">
<ul class="simpleTree">
<li class="root" id='tree_0'><span>{$lang->menu}</span></li>
</ul>
</div>
</div>
<script type="text/javascript">//<![CDATA[
//언어파일 로드용
var lang_cmd_insert = "{htmlspecialchars($lang->cmd_insert)}";
var lang_cmd_delete = "{htmlspecialchars($lang->cmd_delete)}";
var lang_cmd_modify = "{htmlspecialchars($lang->cmd_modify)}";
var simpleTreeCollection;
var max_menu_depth = 999;
var xml_url = "{$menu_info->xml_file}";
var lang_confirm_delete = "{$lang->confirm_delete}";
jQuery(function(){
doMoveMenuInfo();
Tree(xml_url);
});
//]]>
</script>

View file

@ -1,49 +0,0 @@
<!--%import("js/menu_admin.js")-->
<h1 class="h1">{$lang->cmd_search_mid}</h1>
<form action="./" method="get">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<select name="module_category_srl">
<option value="">{$lang->module_category}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<select name="target_module">
<option value="">{$lang->module}</option>
<!--@foreach($module_list as $key => $val)-->
<option value="{$val->module}" <!--@if($target_module ==$val->module)-->selected="selected"<!--@end-->>{$val->module}</option>
<!--@end-->
</select>
<input type="submit" name="go_button" id="go_button" value="GO" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="row">{$lang->module_category}</th>
<th scope="row">{$lang->module}</th>
<th scope="row" >{$lang->mid}</th>
<th scope="row">{$lang->cmd_select}</th>
</tr>
</thead>
<tbody>
<!--@foreach($mid_list as $key => $val)-->
<tr>
<td>
<!--@if(!$val->module_category_srl)-->
{$lang->not_exists}
<!--@else-->
{$module_category[$val->module_category_srl]->title}
<!--@end-->
</td>
<td>{$val->module}</td>
<td>{$val->browser_title} ({$key})</td>
<td><button type="button" onclick="doInsertMid('{$key}','{$menu_id}'); return false;">{$lang->cmd_select}</button></td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
</form>

File diff suppressed because it is too large Load diff

View file

@ -1,21 +0,0 @@
<li>
<input type="hidden" name="parent_key[]" value="{$item['parent_srl']}" class="_parent_key" />
<input type="hidden" name="item_key[]" value="{$item['node_srl']}" class="_item_key" />
<input type="hidden" name="module_srl[]" value="{$item['module_srl']}" class="_module_srl_key" />
<input type="hidden" name="item_layout_key[]" value="{$item['node_srl']}" class="_item_layout_key" />
<!--@if($item['href'])--><a href="{$item['href']}" class="ms" target="_blank">{$item['text']}</a><!--@else-->{$item['text']}<!--@end-->
<span class="side">
<block cond="$item['layout_srl']"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $item['layout_srl'])}">{$lang->cmd_layout_management}</a> | </block>
<block cond="$item['setup_index_act']"><a href="{getUrl('', 'module', 'admin', 'act', $item['setup_index_act'], 'module_srl', $item['module_srl'])}">{$lang->cmd_module_manangement}</a> | </block>
<a href="#editMenu" class="modalAnchor _edit">{$lang->cmd_menu_management}</a> |
<a href="#delete" class="_delete">{$lang->cmd_delete}</a> |
<a href="#editMenu" class="modalAnchor _add _child">{$lang->add}</a>
</span>
<ul cond="count($item['list']>0)">
<block loop="$item['list']=>$idx,$val">
{@$item = $val}
<include target="sitemap.item.html" />
</block>
</ul>
</li>