From 11ade432290878b6829243ca99131bbf8bc23a66 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Thu, 14 Jul 2011 18:49:20 +0200 Subject: [PATCH 1/1] - Initial commit from WCF/LGPL SVN-Repository, skipped history --- com.woltlab.wcf/acpmenu.xml | 297 ++ com.woltlab.wcf/coreobject.xml | 17 + com.woltlab.wcf/cronjobs.xml | 69 + com.woltlab.wcf/eventlistener.xml | 26 + com.woltlab.wcf/groupoptions.xml | 200 + com.woltlab.wcf/options.xml | 326 ++ com.woltlab.wcf/package.xml | 29 + com.woltlab.wcf/pip.xml | 20 + com.woltlab.wcf/styleattributes.xml | 4185 +++++++++++++++++ com.woltlab.wcf/templates/documentHeader.tpl | 2 + com.woltlab.wcf/templates/footer.tpl | 5 + com.woltlab.wcf/templates/footerMenu.tpl | 11 + com.woltlab.wcf/templates/headInclude.tpl | 5 + com.woltlab.wcf/templates/header.tpl | 5 + com.woltlab.wcf/templates/headerMenu.tpl | 21 + com.woltlab.wcf/templates/imageViewer.tpl | 31 + .../templates/optionTypeBoolean.tpl | 3 + com.woltlab.wcf/templates/optionTypeDate.tpl | 26 + .../templates/optionTypeMultiselect.tpl | 5 + .../templates/optionTypeRadiobuttons.tpl | 10 + .../templates/optionTypeSelect.tpl | 5 + com.woltlab.wcf/templates/optionTypeText.tpl | 1 + .../templates/optionTypeTextarea.tpl | 1 + .../templates/permissionDenied.tpl | 17 + com.woltlab.wcf/templates/redirect.tpl | 21 + com.woltlab.wcf/templates/userException.tpl | 30 + com.woltlab.wcf/useroptions.xml | 18 + com.woltlab.wcf/woltlab-basic-style.tar | Bin 0 -> 45568 bytes wcfsetup/install.php | 756 +++ wcfsetup/install/files/acp/dereferrer.php | 28 + wcfsetup/install/files/acp/global.php | 20 + wcfsetup/install/files/acp/images/acpLogo.png | Bin 0 -> 3526 bytes wcfsetup/install/files/acp/index.php | 11 + wcfsetup/install/files/acp/install.php | 113 + wcfsetup/install/files/acp/js/WCF.ACP.js | 487 ++ .../files/acp/style/extra/setupStyle-rtl.css | 261 + .../files/acp/style/extra/setupStyle.css | 261 + .../acp/style/extra/setupWindowStyle-rtl.css | 213 + .../acp/style/extra/setupWindowStyle.css | 213 + wcfsetup/install/files/acp/style/style.css | 224 + .../install/files/acp/style/testing-reset.css | 48 + wcfsetup/install/files/acp/style/testing.css | 687 +++ wcfsetup/install/files/acp/style/wcfAcp.css | 455 ++ .../install/files/acp/templates/.htaccess | 1 + .../files/acp/templates/acpSessionLog.tpl | 57 + .../files/acp/templates/acpSessionLogList.tpl | 57 + .../files/acp/templates/ajaxException.tpl | 3 + .../install/files/acp/templates/cacheList.tpl | 90 + .../files/acp/templates/cronjobAdd.tpl | 186 + .../files/acp/templates/cronjobList.tpl | 141 + .../files/acp/templates/cronjobLogList.tpl | 76 + .../install/files/acp/templates/footer.tpl | 15 + .../install/files/acp/templates/header.tpl | 127 + .../files/acp/templates/imageViewer.tpl | 31 + .../install/files/acp/templates/index.tpl | 3 + .../files/acp/templates/languageServerAdd.tpl | 63 + .../acp/templates/languageServerList.tpl | 74 + .../install/files/acp/templates/login.tpl | 61 + .../files/acp/templates/masterPassword.tpl | 64 + .../acp/templates/masterPasswordInit.tpl | 92 + .../install/files/acp/templates/option.tpl | 71 + .../files/acp/templates/optionFieldList.tpl | 22 + .../files/acp/templates/optionImport.tpl | 80 + .../files/acp/templates/optionTypeBoolean.tpl | 3 + .../acp/templates/optionTypeCustomselect.tpl | 11 + .../files/acp/templates/optionTypeDate.tpl | 26 + .../acp/templates/optionTypeMultiselect.tpl | 5 + .../acp/templates/optionTypeRadiobuttons.tpl | 10 + .../files/acp/templates/optionTypeSelect.tpl | 5 + .../files/acp/templates/optionTypeText.tpl | 2 + .../acp/templates/optionTypeTextarea.tpl | 1 + .../acp/templates/packageAutoUpdateList.tpl | 106 + .../templates/packageInstallationConfirm.tpl | 140 + .../templates/packageInstallationSetup.tpl | 10 + .../packageInstallationStepPrepare.tpl | 15 + .../files/acp/templates/packageList.tpl | 105 + .../acp/templates/packageStartInstall.tpl | 102 + .../packageUninstallationDependencies.tpl | 137 + .../packageUninstallationStepPrepare.tpl | 15 + .../files/acp/templates/packageUpdate.tpl | 65 + .../files/acp/templates/packageUpdateAuth.tpl | 104 + .../acp/templates/packageUpdateSearch.tpl | 137 + .../templates/packageUpdateSearchResult.tpl | 119 + .../files/acp/templates/packageView.tpl | 234 + .../files/acp/templates/permissionDenied.tpl | 18 + .../files/acp/templates/setupFooter.tpl | 3 + .../files/acp/templates/setupHeader.tpl | 45 + .../files/acp/templates/setupWindowFooter.tpl | 3 + .../files/acp/templates/setupWindowHeader.tpl | 19 + .../install/files/acp/templates/success.tpl | 5 + .../files/acp/templates/updateServerAdd.tpl | 97 + .../files/acp/templates/updateServerList.tpl | 97 + .../install/files/acp/templates/userAdd.tpl | 261 + .../files/acp/templates/userAssignToGroup.tpl | 51 + .../acp/templates/userEmailAddressExport.tpl | 90 + .../files/acp/templates/userException.tpl | 21 + .../files/acp/templates/userGroupAdd.tpl | 129 + .../files/acp/templates/userGroupList.tpl | 100 + .../install/files/acp/templates/userList.tpl | 148 + .../install/files/acp/templates/userMail.tpl | 154 + .../files/acp/templates/userSearch.tpl | 238 + .../acp/templates/usersMassProcessing.tpl | 361 ++ .../install/files/acp/templates/worker.tpl | 70 + .../files/acp/templates/workerException.tpl | 14 + .../files/acp/templates/workerFinish.tpl | 23 + .../files/acp/templates/workerNext.tpl | 21 + wcfsetup/install/files/cache/.htaccess | 1 + .../files/cache/templateListener/.htaccess | 1 + wcfsetup/install/files/global.php | 15 + .../files/icon/imageViewer/closeHoverM.png | Bin 0 -> 355 bytes .../install/files/icon/imageViewer/closeM.png | Bin 0 -> 392 bytes .../files/icon/imageViewer/enlargeHoverM.png | Bin 0 -> 277 bytes .../files/icon/imageViewer/enlargeM.png | Bin 0 -> 264 bytes .../files/icon/imageViewer/nextHoverM.png | Bin 0 -> 309 bytes .../install/files/icon/imageViewer/nextM.png | Bin 0 -> 334 bytes .../files/icon/imageViewer/pauseHoverM.png | Bin 0 -> 260 bytes .../install/files/icon/imageViewer/pauseM.png | Bin 0 -> 269 bytes .../files/icon/imageViewer/playHoverM.png | Bin 0 -> 370 bytes .../install/files/icon/imageViewer/playM.png | Bin 0 -> 455 bytes .../files/icon/imageViewer/previousHoverM.png | Bin 0 -> 311 bytes .../files/icon/imageViewer/previousM.png | Bin 0 -> 339 bytes .../files/images/imageViewer/blank.png | Bin 0 -> 214 bytes .../install/files/images/imageViewer/menu.png | Bin 0 -> 526 bytes wcfsetup/install/files/images/spinner.gif | Bin 0 -> 3765 bytes .../files/js/3rdParty/jquery-ui.min.js | 406 ++ .../install/files/js/3rdParty/jquery.min.js | 16 + wcfsetup/install/files/js/WCF.js | 1403 ++++++ wcfsetup/install/files/language/.htaccess | 1 + .../lib/acp/action/AJAXProxyAction.class.php | 15 + .../acp/action/InstallPackageAction.class.php | 158 + .../lib/acp/action/LogoutAction.class.php | 41 + .../acp/action/OptionExportAction.class.php | 55 + .../action/UninstallPackageAction.class.php | 150 + .../files/lib/acp/form/ACPForm.class.php | 34 + .../acp/form/AbstractOptionListForm.class.php | 379 ++ .../lib/acp/form/CronjobAddForm.class.php | 179 + .../lib/acp/form/CronjobEditForm.class.php | 115 + .../acp/form/LanguageServerAddForm.class.php | 108 + .../acp/form/LanguageServerEditForm.class.php | 91 + .../files/lib/acp/form/LoginForm.class.php | 157 + .../lib/acp/form/MasterPasswordForm.class.php | 117 + .../acp/form/MasterPasswordInitForm.class.php | 143 + .../files/lib/acp/form/OptionForm.class.php | 154 + .../lib/acp/form/OptionImportForm.class.php | 123 + .../form/PackageStartInstallForm.class.php | 227 + .../acp/form/PackageUpdateAuthForm.class.php | 261 + .../lib/acp/form/PackageUpdateForm.class.php | 116 + .../form/PackageUpdateSearchForm.class.php | 226 + .../acp/form/UpdateServerAddForm.class.php | 126 + .../acp/form/UpdateServerEditForm.class.php | 95 + .../files/lib/acp/form/UserAddForm.class.php | 341 ++ .../acp/form/UserAssignToGroupForm.class.php | 139 + .../files/lib/acp/form/UserEditForm.class.php | 201 + .../form/UserEmailAddressExportForm.class.php | 133 + .../lib/acp/form/UserGroupAddForm.class.php | 229 + .../lib/acp/form/UserGroupEditForm.class.php | 144 + .../files/lib/acp/form/UserMailForm.class.php | 166 + .../lib/acp/form/UserOptionListForm.class.php | 89 + .../lib/acp/form/UserSearchForm.class.php | 310 ++ .../form/UsersMassProcessingForm.class.php | 403 ++ .../acp/page/ACPSessionLogListPage.class.php | 91 + .../lib/acp/page/ACPSessionLogPage.class.php | 127 + .../lib/acp/page/CacheListPage.class.php | 142 + .../lib/acp/page/CronjobListPage.class.php | 89 + .../lib/acp/page/CronjobLogListPage.class.php | 106 + .../files/lib/acp/page/IndexPage.class.php | 59 + .../acp/page/LanguageServerListPage.class.php | 62 + .../page/PackageAutoUpdateListPage.class.php | 64 + .../lib/acp/page/PackageListPage.class.php | 95 + .../files/lib/acp/page/PackagePage.class.php | 78 + .../PackageUpdateSearchResultPage.class.php | 193 + .../lib/acp/page/PackageViewPage.class.php | 78 + .../acp/page/UpdateServerListPage.class.php | 86 + .../lib/acp/page/UserGroupListPage.class.php | 96 + .../files/lib/acp/page/UserListPage.class.php | 316 ++ .../lib/action/AJAXProxyAction.class.php | 134 + .../files/lib/action/AbstractAction.class.php | 79 + .../lib/action/AbstractAjaxAction.class.php | 29 + .../lib/action/AbstractDialogAction.class.php | 73 + .../lib/action/AbstractSecureAction.class.php | 37 + .../AbstractSecureObjectAction.class.php | 90 + .../install/files/lib/action/Action.class.php | 26 + wcfsetup/install/files/lib/core.functions.php | 25 + .../AbstractDatabaseObjectAction.class.php | 311 ++ .../files/lib/data/DatabaseObject.class.php | 189 + .../lib/data/DatabaseObjectAction.class.php | 53 + .../data/DatabaseObjectDecorator.class.php | 105 + .../lib/data/DatabaseObjectEditor.class.php | 93 + .../lib/data/DatabaseObjectList.class.php | 213 + .../lib/data/EditableCachedObject.class.php | 20 + .../files/lib/data/EditableObject.class.php | 43 + .../files/lib/data/StorableObject.class.php | 59 + .../data/acp/menu/item/ACPMenuItem.class.php | 35 + .../acp/menu/item/ACPMenuItemAction.class.php | 21 + .../acp/menu/item/ACPMenuItemEditor.class.php | 21 + .../acp/menu/item/ACPMenuItemList.class.php | 21 + .../lib/data/acp/session/ACPSession.class.php | 32 + .../acp/session/ACPSessionAction.class.php | 21 + .../acp/session/ACPSessionEditor.class.php | 50 + .../data/acp/session/ACPSessionList.class.php | 20 + .../access/log/ACPSessionAccessLog.class.php | 39 + .../log/ACPSessionAccessLogAction.class.php | 21 + .../log/ACPSessionAccessLogEditor.class.php | 21 + .../log/ACPSessionAccessLogList.class.php | 32 + .../acp/session/data/ACPSessionData.class.php | 32 + .../data/ACPSessionDataAction.class.php | 21 + .../data/ACPSessionDataEditor.class.php | 21 + .../session/data/ACPSessionDataList.class.php | 21 + .../acp/session/log/ACPSessionLog.class.php | 76 + .../session/log/ACPSessionLogAction.class.php | 21 + .../session/log/ACPSessionLogEditor.class.php | 21 + .../session/log/ACPSessionLogList.class.php | 35 + .../data/acp/template/ACPTemplate.class.php | 26 + .../acp/template/ACPTemplateAction.class.php | 38 + .../acp/template/ACPTemplateEditor.class.php | 21 + .../acp/template/ACPTemplateList.class.php | 21 + .../data/application/Application.class.php | 26 + .../application/ApplicationAction.class.php | 21 + .../application/ApplicationEditor.class.php | 21 + .../application/ApplicationList.class.php | 21 + .../group/ApplicationGroup.class.php | 26 + .../group/ApplicationGroupAction.class.php | 21 + .../group/ApplicationGroupEditor.class.php | 21 + .../group/ApplicationGroupList.class.php | 21 + .../listener/CleanupListener.class.php | 26 + .../listener/CleanupListenerAction.class.php | 21 + .../listener/CleanupListenerEditor.class.php | 21 + .../listener/CleanupListenerList.class.php | 21 + .../lib/data/core/object/CoreObject.class.php | 26 + .../core/object/CoreObjectAction.class.php | 21 + .../core/object/CoreObjectEditor.class.php | 21 + .../data/core/object/CoreObjectList.class.php | 21 + .../files/lib/data/cronjob/Cronjob.class.php | 99 + .../lib/data/cronjob/CronjobAction.class.php | 103 + .../lib/data/cronjob/CronjobEditor.class.php | 31 + .../lib/data/cronjob/CronjobList.class.php | 21 + .../lib/data/cronjob/log/CronjobLog.class.php | 26 + .../cronjob/log/CronjobLogAction.class.php | 21 + .../cronjob/log/CronjobLogEditor.class.php | 38 + .../data/cronjob/log/CronjobLogList.class.php | 21 + .../event/listener/EventListener.class.php | 26 + .../listener/EventListenerAction.class.php | 21 + .../listener/EventListenerEditor.class.php | 21 + .../listener/EventListenerList.class.php | 21 + .../lib/data/language/Language.class.php | 146 + .../data/language/LanguageAction.class.php | 65 + .../data/language/LanguageEditor.class.php | 601 +++ .../lib/data/language/LanguageList.class.php | 21 + .../lib/data/language/SetupLanguage.class.php | 107 + .../category/LanguageCategory.class.php | 26 + .../category/LanguageCategoryAction.class.php | 38 + .../category/LanguageCategoryEditor.class.php | 21 + .../category/LanguageCategoryList.class.php | 21 + .../data/language/item/LanguageItem.class.php | 26 + .../item/LanguageItemAction.class.php | 38 + .../item/LanguageItemEditor.class.php | 21 + .../language/item/LanguageItemList.class.php | 21 + .../language/server/LanguageServer.class.php | 26 + .../server/LanguageServerAction.class.php | 36 + .../server/LanguageServerEditor.class.php | 21 + .../server/LanguageServerList.class.php | 21 + .../files/lib/data/option/Option.class.php | 161 + .../lib/data/option/OptionAction.class.php | 68 + .../lib/data/option/OptionEditor.class.php | 142 + .../lib/data/option/OptionList.class.php | 21 + .../option/category/OptionCategory.class.php | 26 + .../category/OptionCategoryAction.class.php | 38 + .../category/OptionCategoryEditor.class.php | 21 + .../category/OptionCategoryList.class.php | 21 + .../files/lib/data/package/Package.class.php | 537 +++ .../lib/data/package/PackageAction.class.php | 36 + .../lib/data/package/PackageEditor.class.php | 21 + .../lib/data/package/PackageList.class.php | 21 + .../PackageInstallationPlugin.class.php | 32 + .../PackageInstallationPluginAction.class.php | 21 + .../PackageInstallationPluginEditor.class.php | 22 + .../PackageInstallationPluginList.class.php | 21 + .../queue/PackageInstallationQueue.class.php | 41 + .../PackageInstallationQueueAction.class.php | 57 + .../PackageInstallationQueueEditor.class.php | 21 + .../PackageInstallationQueueList.class.php | 21 + .../package/update/PackageUpdate.class.php | 26 + .../update/PackageUpdateAction.class.php | 21 + .../update/PackageUpdateEditor.class.php | 21 + .../update/PackageUpdateList.class.php | 21 + .../server/PackageUpdateServer.class.php | 99 + .../PackageUpdateServerAction.class.php | 54 + .../PackageUpdateServerEditor.class.php | 22 + .../server/PackageUpdateServerList.class.php | 31 + .../version/PackageUpdateVersion.class.php | 26 + .../PackageUpdateVersionAction.class.php | 21 + .../PackageUpdateVersionEditor.class.php | 21 + .../PackageUpdateVersionList.class.php | 21 + .../lib/data/page/location/Location.class.php | 34 + .../data/page/location/PageLocation.class.php | 26 + .../location/PageLocationAction.class.php | 21 + .../location/PageLocationEditor.class.php | 21 + .../page/location/PageLocationList.class.php | 21 + .../page/menu/item/PageMenuItem.class.php | 69 + .../menu/item/PageMenuItemAction.class.php | 21 + .../menu/item/PageMenuItemEditor.class.php | 189 + .../page/menu/item/PageMenuItemList.class.php | 21 + .../files/lib/data/search/Search.class.php | 26 + .../lib/data/search/SearchAction.class.php | 21 + .../lib/data/search/SearchEditor.class.php | 21 + .../lib/data/search/SearchList.class.php | 21 + .../files/lib/data/session/Session.class.php | 26 + .../lib/data/session/SessionAction.class.php | 21 + .../lib/data/session/SessionEditor.class.php | 21 + .../lib/data/session/SessionList.class.php | 21 + .../data/session/data/SessionData.class.php | 26 + .../session/data/SessionDataAction.class.php | 21 + .../session/data/SessionDataEditor.class.php | 21 + .../session/data/SessionDataList.class.php | 21 + .../files/lib/data/spider/Spider.class.php | 26 + .../lib/data/spider/SpiderAction.class.php | 21 + .../lib/data/spider/SpiderEditor.class.php | 21 + .../lib/data/spider/SpiderList.class.php | 21 + .../lib/data/style/ActiveStyle.class.php | 70 + .../files/lib/data/style/Style.class.php | 56 + .../lib/data/style/StyleAction.class.php | 21 + .../lib/data/style/StyleEditor.class.php | 906 ++++ .../files/lib/data/style/StyleList.class.php | 21 + .../lib/data/template/Template.class.php | 161 + .../data/template/TemplateAction.class.php | 38 + .../data/template/TemplateEditor.class.php | 120 + .../lib/data/template/TemplateList.class.php | 21 + .../template/group/TemplateGroup.class.php | 80 + .../group/TemplateGroupAction.class.php | 38 + .../group/TemplateGroupEditor.class.php | 111 + .../group/TemplateGroupList.class.php | 21 + .../listener/TemplateListener.class.php | 26 + .../listener/TemplateListenerAction.class.php | 21 + .../listener/TemplateListenerEditor.class.php | 21 + .../listener/TemplateListenerList.class.php | 21 + .../files/lib/data/user/User.class.php | 273 ++ .../files/lib/data/user/UserAction.class.php | 119 + .../files/lib/data/user/UserEditor.class.php | 210 + .../files/lib/data/user/UserList.class.php | 21 + .../lib/data/user/group/UserGroup.class.php | 302 ++ .../data/user/group/UserGroupAction.class.php | 64 + .../data/user/group/UserGroupEditor.class.php | 214 + .../data/user/group/UserGroupList.class.php | 21 + .../group/option/UserGroupOption.class.php | 26 + .../option/UserGroupOptionAction.class.php | 21 + .../option/UserGroupOptionEditor.class.php | 21 + .../option/UserGroupOptionList.class.php | 21 + .../UserGroupOptionCategory.class.php | 26 + .../UserGroupOptionCategoryAction.class.php | 21 + .../UserGroupOptionCategoryEditor.class.php | 21 + .../UserGroupOptionCategoryList.class.php | 21 + .../lib/data/user/option/UserOption.class.php | 26 + .../user/option/UserOptionAction.class.php | 21 + .../user/option/UserOptionEditor.class.php | 141 + .../data/user/option/UserOptionList.class.php | 21 + .../user/option/UserOptionOutput.class.php | 46 + .../category/UserOptionCategory.class.php | 74 + .../UserOptionCategoryAction.class.php | 21 + .../UserOptionCategoryEditor.class.php | 31 + .../category/UserOptionCategoryList.class.php | 23 + .../files/lib/form/AbstractForm.class.php | 110 + .../lib/form/AbstractSecureForm.class.php | 35 + .../install/files/lib/form/Form.class.php | 36 + .../files/lib/page/AbstractPage.class.php | 144 + .../lib/page/AbstractSecurePage.class.php | 35 + .../files/lib/page/MultipleLinkPage.class.php | 209 + .../install/files/lib/page/Page.class.php | 45 + .../files/lib/page/SortablePage.class.php | 102 + .../lib/page/util/InlineCalendar.class.php | 59 + .../lib/system/SingletonFactory.class.php | 53 + .../install/files/lib/system/WCF.class.php | 565 +++ .../install/files/lib/system/WCFACP.class.php | 178 + .../files/lib/system/WCFSetup.class.php | 1099 +++++ .../application/AbstractApplication.class.php | 24 + .../system/application/Application.class.php | 24 + .../application/ApplicationHandler.class.php | 128 + .../files/lib/system/auth/UserAuth.class.php | 83 + .../lib/system/auth/UserAuthDefault.class.php | 100 + .../system/breadcrumb/Breadcrumb.class.php | 78 + .../system/breadcrumb/Breadcrumbs.class.php | 74 + .../lib/system/cache/CacheBuilder.class.php | 23 + .../cache/CacheBuilderACPMenu.class.php | 152 + .../cache/CacheBuilderApplication.class.php | 80 + .../CacheBuilderCleanupAdapter.class.php | 51 + .../cache/CacheBuilderCoreObject.class.php | 43 + .../cache/CacheBuilderCronjob.class.php | 40 + .../cache/CacheBuilderEventListener.class.php | 77 + .../system/cache/CacheBuilderIcon.class.php | 91 + .../cache/CacheBuilderLanguage.class.php | 90 + .../system/cache/CacheBuilderOption.class.php | 117 + .../cache/CacheBuilderPackage.class.php | 28 + .../CacheBuilderPackageDependency.class.php | 61 + .../cache/CacheBuilderPageMenu.class.php | 63 + .../system/cache/CacheBuilderSpider.class.php | 28 + .../system/cache/CacheBuilderStyle.class.php | 68 + .../cache/CacheBuilderTemplate.class.php | 58 + .../cache/CacheBuilderTemplateGroup.class.php | 27 + .../CacheBuilderTemplateListener.class.php | 39 + ...CacheBuilderTemplateListenerCode.class.php | 39 + .../cache/CacheBuilderUserGroup.class.php | 41 + .../CacheBuilderUserGroupPermission.class.php | 123 + .../lib/system/cache/CacheHandler.class.php | 170 + .../system/cache/SetupCacheHandler.class.php | 57 + .../system/cache/source/CacheSource.class.php | 58 + .../cache/source/DiskCacheSource.class.php | 222 + .../cache/source/MemcacheAdapter.class.php | 67 + .../source/MemcacheCacheSource.class.php | 192 + .../system/cleanup/CleanupAdapter.class.php | 22 + .../system/cleanup/CleanupHandler.class.php | 173 + .../CleanUpCronjobLogCronjob.class.php | 28 + .../CleanUpSessionLogCronjob.class.php | 41 + .../cronjob/CleanupListenerCronjob.class.php | 23 + .../lib/system/cronjob/Cronjob.class.php | 26 + .../system/cronjob/CronjobScheduler.class.php | 204 + .../cronjob/GetUpdateInfoCronjob.class.php | 24 + .../RefreshSearchRobotsCronjob.class.php | 79 + .../lib/system/database/Database.class.php | 339 ++ .../database/DatabaseException.class.php | 141 + .../system/database/MySQLDatabase.class.php | 95 + .../database/PostgreSQLDatabase.class.php | 119 + .../database/editor/DatabaseEditor.class.php | 124 + .../editor/MySQLDatabaseEditor.class.php | 223 + .../editor/PostgreSQLDatabaseEditor.class.php | 376 ++ .../statement/PreparedStatement.class.php | 161 + .../database/util/ConditionBuilder.class.php | 61 + ...reparedStatementConditionBuilder.class.php | 77 + .../system/database/util/SQLParser.class.php | 302 ++ .../lib/system/event/EventHandler.class.php | 191 + .../lib/system/event/EventListener.class.php | 24 + .../SessionAccessLogListener.class.php | 79 + .../system/exception/AJAXException.class.php | 31 + .../exception/IllegalLinkException.class.php | 31 + .../exception/NamedUserException.class.php | 39 + .../PermissionDeniedException.class.php | 31 + .../exception/PrintableException.class.php | 21 + .../exception/SystemException.class.php | 149 + .../system/exception/UserException.class.php | 22 + .../exception/UserInputException.class.php | 60 + .../ValidateActionException.class.php | 14 + .../lib/system/form/FormDocument.class.php | 127 + .../lib/system/form/FormElement.class.php | 66 + .../form/FormElementContainer.class.php | 88 + .../AbstractFormElementContainer.class.php | 119 + .../GroupFormElementContainer.class.php | 35 + ...pleSelectionFormElementContainer.class.php | 70 + .../SelectionFormElementContainer.class.php | 40 + ...gleSelectionFormElementContainer.class.php | 70 + .../element/AbstractFormElement.class.php | 81 + .../AbstractNamedFormElement.class.php | 66 + .../form/element/LabelFormElement.class.php | 60 + .../MultipleSelectionFormElement.class.php | 24 + .../PasswordInputFormElement.class.php | 35 + .../SingleSelectionFormElement.class.php | 24 + .../element/TextInputFormElement.class.php | 35 + .../lib/system/image/Thumbnail.class.php | 448 ++ .../install/files/lib/system/io/FTP.class.php | 51 + .../files/lib/system/io/File.class.php | 81 + .../files/lib/system/io/GZipFile.class.php | 78 + .../files/lib/system/io/RemoteFile.class.php | 81 + .../install/files/lib/system/io/Tar.class.php | 322 ++ .../files/lib/system/io/TarWriter.class.php | 272 ++ .../files/lib/system/io/ZipWriter.class.php | 213 + .../system/language/LanguageFactory.class.php | 358 ++ .../lib/system/mail/DebugMailSender.class.php | 47 + .../files/lib/system/mail/Mail.class.php | 460 ++ .../lib/system/mail/MailSender.class.php | 53 + .../lib/system/mail/PHPMailSender.class.php | 23 + .../lib/system/mail/SMTPMailSender.class.php | 215 + .../files/lib/system/menu/TreeMenu.class.php | 211 + .../lib/system/menu/TreeMenuItem.class.php | 22 + .../lib/system/menu/acp/ACPMenu.class.php | 31 + .../DefaultPageMenuItemProvider.class.php | 29 + .../lib/system/menu/page/PageMenu.class.php | 39 + .../menu/page/PageMenuItemProvider.class.php | 29 + .../lib/system/option/OptionType.class.php | 43 + .../system/option/OptionTypeBoolean.class.php | 65 + .../option/OptionTypeCustomselect.class.php | 47 + .../system/option/OptionTypeDate.class.php | 145 + .../system/option/OptionTypeFloat.class.php | 37 + .../system/option/OptionTypeInteger.class.php | 24 + .../option/OptionTypeMultiselect.class.php | 83 + .../option/OptionTypePassword.class.php | 30 + .../option/OptionTypeRadiobuttons.class.php | 91 + .../system/option/OptionTypeSelect.class.php | 75 + .../system/option/OptionTypeText.class.php | 69 + .../option/OptionTypeTextarea.class.php | 29 + .../option/OptionTypeTimezone.class.php | 53 + .../option/SearchableUserOption.class.php | 36 + .../option/group/GroupOptionType.class.php | 24 + .../group/GroupOptionTypeBoolean.class.php | 28 + .../group/GroupOptionTypeGroups.class.php | 82 + .../GroupOptionTypeInfiniteInteger.class.php | 24 + ...OptionTypeInfiniteInverseInteger.class.php | 28 + .../group/GroupOptionTypeInteger.class.php | 24 + .../GroupOptionTypeInverseInteger.class.php | 24 + .../group/GroupOptionTypeText.class.php | 31 + .../group/GroupOptionTypeTextarea.class.php | 31 + .../package/ACPTemplatesFileHandler.class.php | 109 + .../system/package/FilesFileHandler.class.php | 101 + .../system/package/PackageArchive.class.php | 881 ++++ .../PackageDependencyHandler.class.php | 81 + .../PackageInstallationDispatcher.class.php | 777 +++ .../PackageInstallationFileHandler.class.php | 27 + .../PackageInstallationFormManager.class.php | 150 + .../PackageInstallationNodeBuilder.class.php | 490 ++ .../PackageInstallationScheduler.class.php | 461 ++ .../package/PackageInstallationStep.class.php | 98 + .../PackageUninstallationDispatcher.class.php | 231 + ...PackageUninstallationNodeBuilder.class.php | 102 + ...teAuthorizationRequiredException.class.php | 77 + .../package/PackageUpdateDispatcher.class.php | 771 +++ .../package/TemplatesFileHandler.class.php | 17 + ...ACPMenuPackageInstallationPlugin.class.php | 30 + ...mplatesPackageInstallationPlugin.class.php | 82 + ...actMenuPackageInstallationPlugin.class.php | 92 + ...tOptionPackageInstallationPlugin.class.php | 270 ++ ...bstractPackageInstallationPlugin.class.php | 100 + ...ractXMLPackageInstallationPlugin.class.php | 310 ++ ...eObjectPackageInstallationPlugin.class.php | 93 + ...ronjobsPackageInstallationPlugin.class.php | 89 + ...istenerPackageInstallationPlugin.class.php | 104 + .../FilesPackageInstallationPlugin.class.php | 120 + ...OptionsPackageInstallationPlugin.class.php | 161 + ...nguagesPackageInstallationPlugin.class.php | 300 ++ ...OptionsPackageInstallationPlugin.class.php | 97 + .../PIPPackageInstallationPlugin.class.php | 66 + .../PackageInstallationPlugin.class.php | 37 + ...ocationPackageInstallationPlugin.class.php | 77 + ...ageMenuPackageInstallationPlugin.class.php | 56 + .../ScriptPackageInstallationPlugin.class.php | 70 + .../SqlPackageInstallationPlugin.class.php | 140 + ...ributesPackageInstallationPlugin.class.php | 145 + .../StylePackageInstallationPlugin.class.php | 90 + ...istenerPackageInstallationPlugin.class.php | 110 + ...mplatesPackageInstallationPlugin.class.php | 71 + ...OptionsPackageInstallationPlugin.class.php | 169 + .../lib/system/request/LinkHandler.class.php | 46 + .../lib/system/request/Request.class.php | 97 + .../system/request/RequestHandler.class.php | 93 + .../session/ACPSessionFactory.class.php | 68 + .../session/AbstractSessionHandler.class.php | 48 + .../system/session/SessionFactory.class.php | 67 + .../system/session/SessionHandler.class.php | 614 +++ .../lib/system/setup/FileHandler.class.php | 29 + .../lib/system/setup/Installer.class.php | 190 + .../lib/system/setup/Uninstaller.class.php | 126 + .../system/storage/StorageHandler.class.php | 200 + .../lib/system/style/StyleHandler.class.php | 107 + .../template/ACPTemplateEngine.class.php | 55 + .../system/template/SetupTemplate.class.php | 58 + .../template/SetupTemplateEngine.class.php | 59 + .../template/TemplateCompiler.class.php | 45 + .../system/template/TemplateEngine.class.php | 702 +++ .../template/TemplatePluginBlock.class.php | 41 + .../template/TemplatePluginCompiler.class.php | 32 + .../template/TemplatePluginFunction.class.php | 24 + .../template/TemplatePluginModifier.class.php | 25 + .../TemplatePluginPrefilter.class.php | 25 + .../TemplateScriptingCompiler.class.php | 1422 ++++++ .../plugin/TemplatePluginBlockLink.class.php | 58 + .../TemplatePluginCompilerAppend.class.php | 42 + .../TemplatePluginCompilerAssign.class.php | 42 + .../TemplatePluginCompilerFetch.class.php | 45 + .../TemplatePluginCompilerIcon.class.php | 38 + .../TemplatePluginCompilerImplode.class.php | 62 + .../TemplatePluginCompilerLang.class.php | 46 + .../TemplatePluginCompilerPrepend.class.php | 42 + ...TemplatePluginCompilerStaticlang.class.php | 39 + .../TemplatePluginFunctionCounter.class.php | 78 + .../TemplatePluginFunctionCycle.class.php | 93 + ...latePluginFunctionHtmlcheckboxes.class.php | 89 + ...emplatePluginFunctionHtmloptions.class.php | 129 + .../TemplatePluginFunctionPages.class.php | 221 + ...TemplatePluginFunctionSmallpages.class.php | 106 + ...platePluginModifierArrayfromlist.class.php | 34 + .../TemplatePluginModifierConcat.class.php | 38 + .../TemplatePluginModifierDate.class.php | 30 + .../TemplatePluginModifierDatediff.class.php | 34 + .../TemplatePluginModifierEncodejs.class.php | 42 + .../TemplatePluginModifierFilesize.class.php | 29 + ...latePluginModifierFilesizeBinary.class.php | 29 + .../TemplatePluginModifierPlainTime.class.php | 32 + .../TemplatePluginModifierTime.class.php | 37 + .../TemplatePluginModifierTruncate.class.php | 55 + .../TemplatePluginPrefilterEvent.class.php | 31 + ...emplatePluginPrefilterHascontent.class.php | 71 + .../TemplatePluginPrefilterIcon.class.php | 31 + .../TemplatePluginPrefilterLang.class.php | 35 + .../files/lib/util/ArrayUtil.class.php | 172 + .../files/lib/util/BasicFileUtil.class.php | 70 + .../files/lib/util/ClassUtil.class.php | 36 + .../files/lib/util/CronjobUtil.class.php | 585 +++ .../install/files/lib/util/DateUtil.class.php | 254 + .../install/files/lib/util/FileUtil.class.php | 568 +++ .../files/lib/util/HeaderUtil.class.php | 96 + .../files/lib/util/ImageUtil.class.php | 57 + .../install/files/lib/util/JSON.class.php | 47 + .../install/files/lib/util/MathUtil.class.php | 45 + .../files/lib/util/StringStack.class.php | 70 + .../files/lib/util/StringUtil.class.php | 565 +++ .../files/lib/util/StyleUtil.class.php | 161 + .../install/files/lib/util/UserUtil.class.php | 166 + wcfsetup/install/files/lib/util/XML.class.php | 195 + wcfsetup/install/files/options.inc.php | 26 + wcfsetup/install/files/style/buttons.css | 160 + wcfsetup/install/files/style/colorPicker.css | 132 + wcfsetup/install/files/style/containers.css | 182 + .../install/files/style/extra/ie6-fix-rtl.css | 723 +++ .../install/files/style/extra/ie6-fix.css | 723 +++ .../install/files/style/extra/ie7-fix-rtl.css | 428 ++ .../install/files/style/extra/ie7-fix.css | 428 ++ .../install/files/style/extra/ie8-fix-rtl.css | 66 + .../install/files/style/extra/ie8-fix.css | 66 + .../install/files/style/extra/print-rtl.css | 272 ++ wcfsetup/install/files/style/extra/print.css | 272 ++ wcfsetup/install/files/style/footer.css | 151 + wcfsetup/install/files/style/forms.css | 271 ++ wcfsetup/install/files/style/global.css | 639 +++ wcfsetup/install/files/style/header.css | 255 + wcfsetup/install/files/style/imageViewer.css | 65 + .../install/files/style/inlineCalendar.css | 87 + wcfsetup/install/files/style/layout.css | 131 + wcfsetup/install/files/style/messages.css | 929 ++++ wcfsetup/install/files/style/pageMenu.css | 128 + .../install/files/style/pageNavigation.css | 129 + wcfsetup/install/files/style/tabbedMenus.css | 190 + wcfsetup/install/files/style/tables.css | 128 + wcfsetup/install/files/templates/.htaccess | 1 + wcfsetup/install/lang/da.xml | 820 ++++ wcfsetup/install/lang/de-informal.xml | 903 ++++ wcfsetup/install/lang/de.xml | 1031 ++++ wcfsetup/install/lang/en.xml | 901 ++++ wcfsetup/install/lang/fr.xml | 815 ++++ wcfsetup/install/lang/hr.xml | 815 ++++ wcfsetup/install/lang/it.xml | 815 ++++ wcfsetup/install/lang/pt-BR.xml | 815 ++++ wcfsetup/install/lang/sv.xml | 815 ++++ wcfsetup/install/lang/tr.xml | 812 ++++ wcfsetup/install/lang/zh-CN.xml | 813 ++++ wcfsetup/install/lang/zh-TW.xml | 813 ++++ wcfsetup/setup/db/install.sql | 827 ++++ wcfsetup/setup/lang/setup_da.xml | 157 + wcfsetup/setup/lang/setup_de-informal.xml | 159 + wcfsetup/setup/lang/setup_de.xml | 164 + wcfsetup/setup/lang/setup_en.xml | 157 + wcfsetup/setup/lang/setup_fr.xml | 156 + wcfsetup/setup/lang/setup_hr.xml | 157 + wcfsetup/setup/lang/setup_it.xml | 160 + wcfsetup/setup/lang/setup_pt-BR.xml | 157 + wcfsetup/setup/lang/setup_sv.xml | 157 + wcfsetup/setup/lang/setup_tr.xml | 157 + wcfsetup/setup/lang/setup_zh-CN.xml | 156 + wcfsetup/setup/lang/setup_zh-TW.xml | 156 + wcfsetup/setup/license/license_en.txt | 165 + wcfsetup/setup/template/footer.tpl | 6 + wcfsetup/setup/template/header.tpl | 261 + wcfsetup/setup/template/stepConfigureDB.tpl | 78 + wcfsetup/setup/template/stepCreateUser.tpl | 82 + .../setup/template/stepInstallPackages.tpl | 25 + wcfsetup/setup/template/stepNext.tpl | 32 + wcfsetup/setup/template/stepSearchWcfDir.tpl | 117 + .../setup/template/stepSelectLanguages.tpl | 36 + .../template/stepSelectSetupLanguage.tpl | 36 + wcfsetup/setup/template/stepShowLicense.tpl | 29 + .../template/stepShowSystemRequirements.tpl | 80 + wcfsetup/test.php | 60 + 666 files changed, 83335 insertions(+) create mode 100644 com.woltlab.wcf/acpmenu.xml create mode 100644 com.woltlab.wcf/coreobject.xml create mode 100644 com.woltlab.wcf/cronjobs.xml create mode 100644 com.woltlab.wcf/eventlistener.xml create mode 100644 com.woltlab.wcf/groupoptions.xml create mode 100644 com.woltlab.wcf/options.xml create mode 100644 com.woltlab.wcf/package.xml create mode 100644 com.woltlab.wcf/pip.xml create mode 100644 com.woltlab.wcf/styleattributes.xml create mode 100644 com.woltlab.wcf/templates/documentHeader.tpl create mode 100644 com.woltlab.wcf/templates/footer.tpl create mode 100644 com.woltlab.wcf/templates/footerMenu.tpl create mode 100644 com.woltlab.wcf/templates/headInclude.tpl create mode 100644 com.woltlab.wcf/templates/header.tpl create mode 100644 com.woltlab.wcf/templates/headerMenu.tpl create mode 100644 com.woltlab.wcf/templates/imageViewer.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeBoolean.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeDate.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeMultiselect.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeRadiobuttons.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeSelect.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeText.tpl create mode 100644 com.woltlab.wcf/templates/optionTypeTextarea.tpl create mode 100644 com.woltlab.wcf/templates/permissionDenied.tpl create mode 100644 com.woltlab.wcf/templates/redirect.tpl create mode 100644 com.woltlab.wcf/templates/userException.tpl create mode 100644 com.woltlab.wcf/useroptions.xml create mode 100644 com.woltlab.wcf/woltlab-basic-style.tar create mode 100644 wcfsetup/install.php create mode 100644 wcfsetup/install/files/acp/dereferrer.php create mode 100644 wcfsetup/install/files/acp/global.php create mode 100644 wcfsetup/install/files/acp/images/acpLogo.png create mode 100644 wcfsetup/install/files/acp/index.php create mode 100644 wcfsetup/install/files/acp/install.php create mode 100644 wcfsetup/install/files/acp/js/WCF.ACP.js create mode 100644 wcfsetup/install/files/acp/style/extra/setupStyle-rtl.css create mode 100644 wcfsetup/install/files/acp/style/extra/setupStyle.css create mode 100644 wcfsetup/install/files/acp/style/extra/setupWindowStyle-rtl.css create mode 100644 wcfsetup/install/files/acp/style/extra/setupWindowStyle.css create mode 100644 wcfsetup/install/files/acp/style/style.css create mode 100644 wcfsetup/install/files/acp/style/testing-reset.css create mode 100644 wcfsetup/install/files/acp/style/testing.css create mode 100644 wcfsetup/install/files/acp/style/wcfAcp.css create mode 100644 wcfsetup/install/files/acp/templates/.htaccess create mode 100644 wcfsetup/install/files/acp/templates/acpSessionLog.tpl create mode 100644 wcfsetup/install/files/acp/templates/acpSessionLogList.tpl create mode 100644 wcfsetup/install/files/acp/templates/ajaxException.tpl create mode 100644 wcfsetup/install/files/acp/templates/cacheList.tpl create mode 100644 wcfsetup/install/files/acp/templates/cronjobAdd.tpl create mode 100644 wcfsetup/install/files/acp/templates/cronjobList.tpl create mode 100644 wcfsetup/install/files/acp/templates/cronjobLogList.tpl create mode 100644 wcfsetup/install/files/acp/templates/footer.tpl create mode 100644 wcfsetup/install/files/acp/templates/header.tpl create mode 100644 wcfsetup/install/files/acp/templates/imageViewer.tpl create mode 100644 wcfsetup/install/files/acp/templates/index.tpl create mode 100644 wcfsetup/install/files/acp/templates/languageServerAdd.tpl create mode 100644 wcfsetup/install/files/acp/templates/languageServerList.tpl create mode 100644 wcfsetup/install/files/acp/templates/login.tpl create mode 100644 wcfsetup/install/files/acp/templates/masterPassword.tpl create mode 100644 wcfsetup/install/files/acp/templates/masterPasswordInit.tpl create mode 100644 wcfsetup/install/files/acp/templates/option.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionFieldList.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionImport.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeBoolean.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeCustomselect.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeDate.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeMultiselect.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeRadiobuttons.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeSelect.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeText.tpl create mode 100644 wcfsetup/install/files/acp/templates/optionTypeTextarea.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageAutoUpdateList.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageInstallationConfirm.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageInstallationSetup.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageInstallationStepPrepare.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageList.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageStartInstall.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUninstallationStepPrepare.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUpdate.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl create mode 100644 wcfsetup/install/files/acp/templates/packageView.tpl create mode 100644 wcfsetup/install/files/acp/templates/permissionDenied.tpl create mode 100644 wcfsetup/install/files/acp/templates/setupFooter.tpl create mode 100644 wcfsetup/install/files/acp/templates/setupHeader.tpl create mode 100644 wcfsetup/install/files/acp/templates/setupWindowFooter.tpl create mode 100644 wcfsetup/install/files/acp/templates/setupWindowHeader.tpl create mode 100644 wcfsetup/install/files/acp/templates/success.tpl create mode 100644 wcfsetup/install/files/acp/templates/updateServerAdd.tpl create mode 100644 wcfsetup/install/files/acp/templates/updateServerList.tpl create mode 100644 wcfsetup/install/files/acp/templates/userAdd.tpl create mode 100644 wcfsetup/install/files/acp/templates/userAssignToGroup.tpl create mode 100644 wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl create mode 100644 wcfsetup/install/files/acp/templates/userException.tpl create mode 100644 wcfsetup/install/files/acp/templates/userGroupAdd.tpl create mode 100644 wcfsetup/install/files/acp/templates/userGroupList.tpl create mode 100644 wcfsetup/install/files/acp/templates/userList.tpl create mode 100644 wcfsetup/install/files/acp/templates/userMail.tpl create mode 100644 wcfsetup/install/files/acp/templates/userSearch.tpl create mode 100644 wcfsetup/install/files/acp/templates/usersMassProcessing.tpl create mode 100644 wcfsetup/install/files/acp/templates/worker.tpl create mode 100644 wcfsetup/install/files/acp/templates/workerException.tpl create mode 100644 wcfsetup/install/files/acp/templates/workerFinish.tpl create mode 100644 wcfsetup/install/files/acp/templates/workerNext.tpl create mode 100644 wcfsetup/install/files/cache/.htaccess create mode 100644 wcfsetup/install/files/cache/templateListener/.htaccess create mode 100644 wcfsetup/install/files/global.php create mode 100644 wcfsetup/install/files/icon/imageViewer/closeHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/closeM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/enlargeHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/enlargeM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/nextHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/nextM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/pauseHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/pauseM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/playHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/playM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/previousHoverM.png create mode 100644 wcfsetup/install/files/icon/imageViewer/previousM.png create mode 100644 wcfsetup/install/files/images/imageViewer/blank.png create mode 100644 wcfsetup/install/files/images/imageViewer/menu.png create mode 100644 wcfsetup/install/files/images/spinner.gif create mode 100644 wcfsetup/install/files/js/3rdParty/jquery-ui.min.js create mode 100644 wcfsetup/install/files/js/3rdParty/jquery.min.js create mode 100644 wcfsetup/install/files/js/WCF.js create mode 100644 wcfsetup/install/files/language/.htaccess create mode 100644 wcfsetup/install/files/lib/acp/action/AJAXProxyAction.class.php create mode 100644 wcfsetup/install/files/lib/acp/action/InstallPackageAction.class.php create mode 100644 wcfsetup/install/files/lib/acp/action/LogoutAction.class.php create mode 100644 wcfsetup/install/files/lib/acp/action/OptionExportAction.class.php create mode 100644 wcfsetup/install/files/lib/acp/action/UninstallPackageAction.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/ACPForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/AbstractOptionListForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/CronjobAddForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/CronjobEditForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/LanguageServerAddForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/LanguageServerEditForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/LoginForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/MasterPasswordForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/MasterPasswordInitForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/OptionForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/OptionImportForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/PackageStartInstallForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/PackageUpdateAuthForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/PackageUpdateForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/PackageUpdateSearchForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UpdateServerAddForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UpdateServerEditForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserAddForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserAssignToGroupForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserEditForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserEmailAddressExportForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserGroupAddForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserGroupEditForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserMailForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserOptionListForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UserSearchForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/form/UsersMassProcessingForm.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/ACPSessionLogListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/ACPSessionLogPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/CacheListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/CronjobListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/CronjobLogListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/IndexPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/LanguageServerListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/PackageAutoUpdateListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/PackageListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/PackagePage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/PackageUpdateSearchResultPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/PackageViewPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/UpdateServerListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/UserGroupListPage.class.php create mode 100644 wcfsetup/install/files/lib/acp/page/UserListPage.class.php create mode 100644 wcfsetup/install/files/lib/action/AJAXProxyAction.class.php create mode 100644 wcfsetup/install/files/lib/action/AbstractAction.class.php create mode 100644 wcfsetup/install/files/lib/action/AbstractAjaxAction.class.php create mode 100644 wcfsetup/install/files/lib/action/AbstractDialogAction.class.php create mode 100644 wcfsetup/install/files/lib/action/AbstractSecureAction.class.php create mode 100644 wcfsetup/install/files/lib/action/AbstractSecureObjectAction.class.php create mode 100644 wcfsetup/install/files/lib/action/Action.class.php create mode 100644 wcfsetup/install/files/lib/core.functions.php create mode 100644 wcfsetup/install/files/lib/data/AbstractDatabaseObjectAction.class.php create mode 100644 wcfsetup/install/files/lib/data/DatabaseObject.class.php create mode 100644 wcfsetup/install/files/lib/data/DatabaseObjectAction.class.php create mode 100644 wcfsetup/install/files/lib/data/DatabaseObjectDecorator.class.php create mode 100644 wcfsetup/install/files/lib/data/DatabaseObjectEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/DatabaseObjectList.class.php create mode 100644 wcfsetup/install/files/lib/data/EditableCachedObject.class.php create mode 100644 wcfsetup/install/files/lib/data/EditableObject.class.php create mode 100644 wcfsetup/install/files/lib/data/StorableObject.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/menu/item/ACPMenuItem.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/menu/item/ACPMenuItemAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/menu/item/ACPMenuItemEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/menu/item/ACPMenuItemList.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/ACPSession.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/ACPSessionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/ACPSessionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/ACPSessionList.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/access/log/ACPSessionAccessLog.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/access/log/ACPSessionAccessLogAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/access/log/ACPSessionAccessLogEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/access/log/ACPSessionAccessLogList.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/data/ACPSessionData.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/data/ACPSessionDataAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/data/ACPSessionDataEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/data/ACPSessionDataList.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/log/ACPSessionLog.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/log/ACPSessionLogAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/log/ACPSessionLogEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/session/log/ACPSessionLogList.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/template/ACPTemplate.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/template/ACPTemplateAction.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/template/ACPTemplateEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/acp/template/ACPTemplateList.class.php create mode 100644 wcfsetup/install/files/lib/data/application/Application.class.php create mode 100644 wcfsetup/install/files/lib/data/application/ApplicationAction.class.php create mode 100644 wcfsetup/install/files/lib/data/application/ApplicationEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/application/ApplicationList.class.php create mode 100644 wcfsetup/install/files/lib/data/application/group/ApplicationGroup.class.php create mode 100644 wcfsetup/install/files/lib/data/application/group/ApplicationGroupAction.class.php create mode 100644 wcfsetup/install/files/lib/data/application/group/ApplicationGroupEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/application/group/ApplicationGroupList.class.php create mode 100644 wcfsetup/install/files/lib/data/cleanup/listener/CleanupListener.class.php create mode 100644 wcfsetup/install/files/lib/data/cleanup/listener/CleanupListenerAction.class.php create mode 100644 wcfsetup/install/files/lib/data/cleanup/listener/CleanupListenerEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/cleanup/listener/CleanupListenerList.class.php create mode 100644 wcfsetup/install/files/lib/data/core/object/CoreObject.class.php create mode 100644 wcfsetup/install/files/lib/data/core/object/CoreObjectAction.class.php create mode 100644 wcfsetup/install/files/lib/data/core/object/CoreObjectEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/core/object/CoreObjectList.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/Cronjob.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/CronjobAction.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/CronjobEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/CronjobList.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/log/CronjobLog.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/log/CronjobLogAction.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/log/CronjobLogEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/cronjob/log/CronjobLogList.class.php create mode 100644 wcfsetup/install/files/lib/data/event/listener/EventListener.class.php create mode 100644 wcfsetup/install/files/lib/data/event/listener/EventListenerAction.class.php create mode 100644 wcfsetup/install/files/lib/data/event/listener/EventListenerEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/event/listener/EventListenerList.class.php create mode 100644 wcfsetup/install/files/lib/data/language/Language.class.php create mode 100644 wcfsetup/install/files/lib/data/language/LanguageAction.class.php create mode 100644 wcfsetup/install/files/lib/data/language/LanguageEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/language/LanguageList.class.php create mode 100644 wcfsetup/install/files/lib/data/language/SetupLanguage.class.php create mode 100644 wcfsetup/install/files/lib/data/language/category/LanguageCategory.class.php create mode 100644 wcfsetup/install/files/lib/data/language/category/LanguageCategoryAction.class.php create mode 100644 wcfsetup/install/files/lib/data/language/category/LanguageCategoryEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/language/category/LanguageCategoryList.class.php create mode 100644 wcfsetup/install/files/lib/data/language/item/LanguageItem.class.php create mode 100644 wcfsetup/install/files/lib/data/language/item/LanguageItemAction.class.php create mode 100644 wcfsetup/install/files/lib/data/language/item/LanguageItemEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/language/item/LanguageItemList.class.php create mode 100644 wcfsetup/install/files/lib/data/language/server/LanguageServer.class.php create mode 100644 wcfsetup/install/files/lib/data/language/server/LanguageServerAction.class.php create mode 100644 wcfsetup/install/files/lib/data/language/server/LanguageServerEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/language/server/LanguageServerList.class.php create mode 100644 wcfsetup/install/files/lib/data/option/Option.class.php create mode 100644 wcfsetup/install/files/lib/data/option/OptionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/option/OptionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/option/OptionList.class.php create mode 100644 wcfsetup/install/files/lib/data/option/category/OptionCategory.class.php create mode 100644 wcfsetup/install/files/lib/data/option/category/OptionCategoryAction.class.php create mode 100644 wcfsetup/install/files/lib/data/option/category/OptionCategoryEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/option/category/OptionCategoryList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/Package.class.php create mode 100644 wcfsetup/install/files/lib/data/package/PackageAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/PackageEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/PackageList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/plugin/PackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/plugin/PackageInstallationPluginAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/plugin/PackageInstallationPluginEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/plugin/PackageInstallationPluginList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/queue/PackageInstallationQueue.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/queue/PackageInstallationQueueAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/queue/PackageInstallationQueueEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/installation/queue/PackageInstallationQueueList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/PackageUpdate.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/PackageUpdateAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/PackageUpdateEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/PackageUpdateList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/server/PackageUpdateServer.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/server/PackageUpdateServerAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/server/PackageUpdateServerEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/server/PackageUpdateServerList.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/version/PackageUpdateVersion.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/version/PackageUpdateVersionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/version/PackageUpdateVersionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/package/update/version/PackageUpdateVersionList.class.php create mode 100644 wcfsetup/install/files/lib/data/page/location/Location.class.php create mode 100644 wcfsetup/install/files/lib/data/page/location/PageLocation.class.php create mode 100644 wcfsetup/install/files/lib/data/page/location/PageLocationAction.class.php create mode 100644 wcfsetup/install/files/lib/data/page/location/PageLocationEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/page/location/PageLocationList.class.php create mode 100644 wcfsetup/install/files/lib/data/page/menu/item/PageMenuItem.class.php create mode 100644 wcfsetup/install/files/lib/data/page/menu/item/PageMenuItemAction.class.php create mode 100644 wcfsetup/install/files/lib/data/page/menu/item/PageMenuItemEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/page/menu/item/PageMenuItemList.class.php create mode 100644 wcfsetup/install/files/lib/data/search/Search.class.php create mode 100644 wcfsetup/install/files/lib/data/search/SearchAction.class.php create mode 100644 wcfsetup/install/files/lib/data/search/SearchEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/search/SearchList.class.php create mode 100644 wcfsetup/install/files/lib/data/session/Session.class.php create mode 100644 wcfsetup/install/files/lib/data/session/SessionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/session/SessionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/session/SessionList.class.php create mode 100644 wcfsetup/install/files/lib/data/session/data/SessionData.class.php create mode 100644 wcfsetup/install/files/lib/data/session/data/SessionDataAction.class.php create mode 100644 wcfsetup/install/files/lib/data/session/data/SessionDataEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/session/data/SessionDataList.class.php create mode 100644 wcfsetup/install/files/lib/data/spider/Spider.class.php create mode 100644 wcfsetup/install/files/lib/data/spider/SpiderAction.class.php create mode 100644 wcfsetup/install/files/lib/data/spider/SpiderEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/spider/SpiderList.class.php create mode 100644 wcfsetup/install/files/lib/data/style/ActiveStyle.class.php create mode 100644 wcfsetup/install/files/lib/data/style/Style.class.php create mode 100644 wcfsetup/install/files/lib/data/style/StyleAction.class.php create mode 100644 wcfsetup/install/files/lib/data/style/StyleEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/style/StyleList.class.php create mode 100644 wcfsetup/install/files/lib/data/template/Template.class.php create mode 100644 wcfsetup/install/files/lib/data/template/TemplateAction.class.php create mode 100644 wcfsetup/install/files/lib/data/template/TemplateEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/template/TemplateList.class.php create mode 100644 wcfsetup/install/files/lib/data/template/group/TemplateGroup.class.php create mode 100644 wcfsetup/install/files/lib/data/template/group/TemplateGroupAction.class.php create mode 100644 wcfsetup/install/files/lib/data/template/group/TemplateGroupEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/template/group/TemplateGroupList.class.php create mode 100644 wcfsetup/install/files/lib/data/template/listener/TemplateListener.class.php create mode 100644 wcfsetup/install/files/lib/data/template/listener/TemplateListenerAction.class.php create mode 100644 wcfsetup/install/files/lib/data/template/listener/TemplateListenerEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/template/listener/TemplateListenerList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/User.class.php create mode 100644 wcfsetup/install/files/lib/data/user/UserAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/UserEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/UserList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/UserGroup.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/UserGroupAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/UserGroupEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/UserGroupList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/UserGroupOption.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/UserGroupOptionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/UserGroupOptionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/UserGroupOptionList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/category/UserGroupOptionCategory.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/category/UserGroupOptionCategoryAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/category/UserGroupOptionCategoryEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/group/option/category/UserGroupOptionCategoryList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/UserOption.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/UserOptionAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/UserOptionEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/UserOptionList.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/UserOptionOutput.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/category/UserOptionCategory.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/category/UserOptionCategoryAction.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/category/UserOptionCategoryEditor.class.php create mode 100644 wcfsetup/install/files/lib/data/user/option/category/UserOptionCategoryList.class.php create mode 100644 wcfsetup/install/files/lib/form/AbstractForm.class.php create mode 100644 wcfsetup/install/files/lib/form/AbstractSecureForm.class.php create mode 100644 wcfsetup/install/files/lib/form/Form.class.php create mode 100644 wcfsetup/install/files/lib/page/AbstractPage.class.php create mode 100644 wcfsetup/install/files/lib/page/AbstractSecurePage.class.php create mode 100644 wcfsetup/install/files/lib/page/MultipleLinkPage.class.php create mode 100644 wcfsetup/install/files/lib/page/Page.class.php create mode 100644 wcfsetup/install/files/lib/page/SortablePage.class.php create mode 100644 wcfsetup/install/files/lib/page/util/InlineCalendar.class.php create mode 100644 wcfsetup/install/files/lib/system/SingletonFactory.class.php create mode 100644 wcfsetup/install/files/lib/system/WCF.class.php create mode 100644 wcfsetup/install/files/lib/system/WCFACP.class.php create mode 100644 wcfsetup/install/files/lib/system/WCFSetup.class.php create mode 100644 wcfsetup/install/files/lib/system/application/AbstractApplication.class.php create mode 100644 wcfsetup/install/files/lib/system/application/Application.class.php create mode 100644 wcfsetup/install/files/lib/system/application/ApplicationHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/auth/UserAuth.class.php create mode 100644 wcfsetup/install/files/lib/system/auth/UserAuthDefault.class.php create mode 100644 wcfsetup/install/files/lib/system/breadcrumb/Breadcrumb.class.php create mode 100644 wcfsetup/install/files/lib/system/breadcrumb/Breadcrumbs.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilder.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderACPMenu.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderApplication.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderCleanupAdapter.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderCoreObject.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderEventListener.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderIcon.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderLanguage.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderOption.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderPackage.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderPackageDependency.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderPageMenu.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderSpider.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderStyle.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderTemplate.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderTemplateGroup.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderTemplateListener.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderTemplateListenerCode.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderUserGroup.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheBuilderUserGroupPermission.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/CacheHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/SetupCacheHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/source/CacheSource.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/source/DiskCacheSource.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/source/MemcacheAdapter.class.php create mode 100644 wcfsetup/install/files/lib/system/cache/source/MemcacheCacheSource.class.php create mode 100644 wcfsetup/install/files/lib/system/cleanup/CleanupAdapter.class.php create mode 100644 wcfsetup/install/files/lib/system/cleanup/CleanupHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/CleanUpCronjobLogCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/CleanUpSessionLogCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/CleanupListenerCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/Cronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/CronjobScheduler.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/GetUpdateInfoCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/cronjob/RefreshSearchRobotsCronjob.class.php create mode 100644 wcfsetup/install/files/lib/system/database/Database.class.php create mode 100644 wcfsetup/install/files/lib/system/database/DatabaseException.class.php create mode 100644 wcfsetup/install/files/lib/system/database/MySQLDatabase.class.php create mode 100644 wcfsetup/install/files/lib/system/database/PostgreSQLDatabase.class.php create mode 100644 wcfsetup/install/files/lib/system/database/editor/DatabaseEditor.class.php create mode 100644 wcfsetup/install/files/lib/system/database/editor/MySQLDatabaseEditor.class.php create mode 100644 wcfsetup/install/files/lib/system/database/editor/PostgreSQLDatabaseEditor.class.php create mode 100644 wcfsetup/install/files/lib/system/database/statement/PreparedStatement.class.php create mode 100644 wcfsetup/install/files/lib/system/database/util/ConditionBuilder.class.php create mode 100644 wcfsetup/install/files/lib/system/database/util/PreparedStatementConditionBuilder.class.php create mode 100644 wcfsetup/install/files/lib/system/database/util/SQLParser.class.php create mode 100644 wcfsetup/install/files/lib/system/event/EventHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/event/EventListener.class.php create mode 100644 wcfsetup/install/files/lib/system/event/listener/SessionAccessLogListener.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/AJAXException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/IllegalLinkException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/NamedUserException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/PermissionDeniedException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/PrintableException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/SystemException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/UserException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/UserInputException.class.php create mode 100644 wcfsetup/install/files/lib/system/exception/ValidateActionException.class.php create mode 100644 wcfsetup/install/files/lib/system/form/FormDocument.class.php create mode 100644 wcfsetup/install/files/lib/system/form/FormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/FormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/container/AbstractFormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/container/GroupFormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/container/MultipleSelectionFormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/container/SelectionFormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/container/SingleSelectionFormElementContainer.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/AbstractFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/AbstractNamedFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/LabelFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/MultipleSelectionFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/PasswordInputFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/SingleSelectionFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/form/element/TextInputFormElement.class.php create mode 100644 wcfsetup/install/files/lib/system/image/Thumbnail.class.php create mode 100644 wcfsetup/install/files/lib/system/io/FTP.class.php create mode 100644 wcfsetup/install/files/lib/system/io/File.class.php create mode 100644 wcfsetup/install/files/lib/system/io/GZipFile.class.php create mode 100644 wcfsetup/install/files/lib/system/io/RemoteFile.class.php create mode 100644 wcfsetup/install/files/lib/system/io/Tar.class.php create mode 100644 wcfsetup/install/files/lib/system/io/TarWriter.class.php create mode 100644 wcfsetup/install/files/lib/system/io/ZipWriter.class.php create mode 100644 wcfsetup/install/files/lib/system/language/LanguageFactory.class.php create mode 100644 wcfsetup/install/files/lib/system/mail/DebugMailSender.class.php create mode 100644 wcfsetup/install/files/lib/system/mail/Mail.class.php create mode 100644 wcfsetup/install/files/lib/system/mail/MailSender.class.php create mode 100644 wcfsetup/install/files/lib/system/mail/PHPMailSender.class.php create mode 100644 wcfsetup/install/files/lib/system/mail/SMTPMailSender.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/TreeMenu.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/TreeMenuItem.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/acp/ACPMenu.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/page/DefaultPageMenuItemProvider.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/page/PageMenu.class.php create mode 100644 wcfsetup/install/files/lib/system/menu/page/PageMenuItemProvider.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionType.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeBoolean.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeCustomselect.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeDate.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeFloat.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeInteger.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeMultiselect.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypePassword.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeRadiobuttons.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeSelect.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeText.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeTextarea.class.php create mode 100644 wcfsetup/install/files/lib/system/option/OptionTypeTimezone.class.php create mode 100644 wcfsetup/install/files/lib/system/option/SearchableUserOption.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionType.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeBoolean.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeGroups.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeInfiniteInteger.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeInfiniteInverseInteger.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeInteger.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeInverseInteger.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeText.class.php create mode 100644 wcfsetup/install/files/lib/system/option/group/GroupOptionTypeTextarea.class.php create mode 100644 wcfsetup/install/files/lib/system/package/ACPTemplatesFileHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/FilesFileHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageArchive.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageDependencyHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationDispatcher.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationFileHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationFormManager.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationNodeBuilder.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationScheduler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageInstallationStep.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageUninstallationDispatcher.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageUninstallationNodeBuilder.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageUpdateAuthorizationRequiredException.class.php create mode 100644 wcfsetup/install/files/lib/system/package/PackageUpdateDispatcher.class.php create mode 100644 wcfsetup/install/files/lib/system/package/TemplatesFileHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/ACPMenuPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/ACPTemplatesPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/AbstractMenuPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/AbstractOptionPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/AbstractPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/AbstractXMLPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/CoreObjectPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/CronjobsPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/EventListenerPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/FilesPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/GroupOptionsPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/LanguagesPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/OptionsPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/PIPPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/PackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/PageLocationPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/PageMenuPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/ScriptPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/SqlPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/StyleAttributesPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/StylePackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/TemplateListenerPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/TemplatesPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/package/plugin/UserOptionsPackageInstallationPlugin.class.php create mode 100644 wcfsetup/install/files/lib/system/request/LinkHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/request/Request.class.php create mode 100644 wcfsetup/install/files/lib/system/request/RequestHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/session/ACPSessionFactory.class.php create mode 100644 wcfsetup/install/files/lib/system/session/AbstractSessionHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/session/SessionFactory.class.php create mode 100644 wcfsetup/install/files/lib/system/session/SessionHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/setup/FileHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/setup/Installer.class.php create mode 100644 wcfsetup/install/files/lib/system/setup/Uninstaller.class.php create mode 100644 wcfsetup/install/files/lib/system/storage/StorageHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/style/StyleHandler.class.php create mode 100644 wcfsetup/install/files/lib/system/template/ACPTemplateEngine.class.php create mode 100644 wcfsetup/install/files/lib/system/template/SetupTemplate.class.php create mode 100644 wcfsetup/install/files/lib/system/template/SetupTemplateEngine.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplateCompiler.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplateEngine.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplatePluginBlock.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplatePluginCompiler.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplatePluginFunction.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplatePluginModifier.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplatePluginPrefilter.class.php create mode 100644 wcfsetup/install/files/lib/system/template/TemplateScriptingCompiler.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginBlockLink.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerAppend.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerAssign.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerFetch.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerIcon.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerImplode.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerLang.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerPrepend.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginCompilerStaticlang.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionCounter.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionCycle.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionHtmlcheckboxes.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionHtmloptions.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionPages.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginFunctionSmallpages.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierArrayfromlist.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierConcat.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierDate.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierDatediff.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierEncodejs.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierFilesize.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierFilesizeBinary.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierPlainTime.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierTime.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginModifierTruncate.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginPrefilterEvent.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginPrefilterHascontent.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginPrefilterIcon.class.php create mode 100644 wcfsetup/install/files/lib/system/template/plugin/TemplatePluginPrefilterLang.class.php create mode 100644 wcfsetup/install/files/lib/util/ArrayUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/BasicFileUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/ClassUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/CronjobUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/DateUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/FileUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/HeaderUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/ImageUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/JSON.class.php create mode 100644 wcfsetup/install/files/lib/util/MathUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/StringStack.class.php create mode 100644 wcfsetup/install/files/lib/util/StringUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/StyleUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/UserUtil.class.php create mode 100644 wcfsetup/install/files/lib/util/XML.class.php create mode 100644 wcfsetup/install/files/options.inc.php create mode 100644 wcfsetup/install/files/style/buttons.css create mode 100644 wcfsetup/install/files/style/colorPicker.css create mode 100644 wcfsetup/install/files/style/containers.css create mode 100644 wcfsetup/install/files/style/extra/ie6-fix-rtl.css create mode 100644 wcfsetup/install/files/style/extra/ie6-fix.css create mode 100644 wcfsetup/install/files/style/extra/ie7-fix-rtl.css create mode 100644 wcfsetup/install/files/style/extra/ie7-fix.css create mode 100644 wcfsetup/install/files/style/extra/ie8-fix-rtl.css create mode 100644 wcfsetup/install/files/style/extra/ie8-fix.css create mode 100644 wcfsetup/install/files/style/extra/print-rtl.css create mode 100644 wcfsetup/install/files/style/extra/print.css create mode 100644 wcfsetup/install/files/style/footer.css create mode 100644 wcfsetup/install/files/style/forms.css create mode 100644 wcfsetup/install/files/style/global.css create mode 100644 wcfsetup/install/files/style/header.css create mode 100644 wcfsetup/install/files/style/imageViewer.css create mode 100644 wcfsetup/install/files/style/inlineCalendar.css create mode 100644 wcfsetup/install/files/style/layout.css create mode 100644 wcfsetup/install/files/style/messages.css create mode 100644 wcfsetup/install/files/style/pageMenu.css create mode 100644 wcfsetup/install/files/style/pageNavigation.css create mode 100644 wcfsetup/install/files/style/tabbedMenus.css create mode 100644 wcfsetup/install/files/style/tables.css create mode 100644 wcfsetup/install/files/templates/.htaccess create mode 100644 wcfsetup/install/lang/da.xml create mode 100644 wcfsetup/install/lang/de-informal.xml create mode 100644 wcfsetup/install/lang/de.xml create mode 100644 wcfsetup/install/lang/en.xml create mode 100644 wcfsetup/install/lang/fr.xml create mode 100644 wcfsetup/install/lang/hr.xml create mode 100644 wcfsetup/install/lang/it.xml create mode 100644 wcfsetup/install/lang/pt-BR.xml create mode 100644 wcfsetup/install/lang/sv.xml create mode 100644 wcfsetup/install/lang/tr.xml create mode 100644 wcfsetup/install/lang/zh-CN.xml create mode 100644 wcfsetup/install/lang/zh-TW.xml create mode 100644 wcfsetup/setup/db/install.sql create mode 100644 wcfsetup/setup/lang/setup_da.xml create mode 100644 wcfsetup/setup/lang/setup_de-informal.xml create mode 100644 wcfsetup/setup/lang/setup_de.xml create mode 100644 wcfsetup/setup/lang/setup_en.xml create mode 100644 wcfsetup/setup/lang/setup_fr.xml create mode 100644 wcfsetup/setup/lang/setup_hr.xml create mode 100644 wcfsetup/setup/lang/setup_it.xml create mode 100644 wcfsetup/setup/lang/setup_pt-BR.xml create mode 100644 wcfsetup/setup/lang/setup_sv.xml create mode 100644 wcfsetup/setup/lang/setup_tr.xml create mode 100644 wcfsetup/setup/lang/setup_zh-CN.xml create mode 100644 wcfsetup/setup/lang/setup_zh-TW.xml create mode 100644 wcfsetup/setup/license/license_en.txt create mode 100644 wcfsetup/setup/template/footer.tpl create mode 100644 wcfsetup/setup/template/header.tpl create mode 100644 wcfsetup/setup/template/stepConfigureDB.tpl create mode 100644 wcfsetup/setup/template/stepCreateUser.tpl create mode 100644 wcfsetup/setup/template/stepInstallPackages.tpl create mode 100644 wcfsetup/setup/template/stepNext.tpl create mode 100644 wcfsetup/setup/template/stepSearchWcfDir.tpl create mode 100644 wcfsetup/setup/template/stepSelectLanguages.tpl create mode 100644 wcfsetup/setup/template/stepSelectSetupLanguage.tpl create mode 100644 wcfsetup/setup/template/stepShowLicense.tpl create mode 100644 wcfsetup/setup/template/stepShowSystemRequirements.tpl create mode 100644 wcfsetup/test.php diff --git a/com.woltlab.wcf/acpmenu.xml b/com.woltlab.wcf/acpmenu.xml new file mode 100644 index 0000000000..20ee7e9090 --- /dev/null +++ b/com.woltlab.wcf/acpmenu.xml @@ -0,0 +1,297 @@ + + + + + icon/systemL.png + 1 + + + + + wcf.acp.menu.link.system + 1 + admin.system.canEditOption + + + + wcf.acp.menu.link.option + 1 + + + + wcf.acp.menu.link.option + 2 + + + + wcf.acp.menu.link.option.management + 1 + index.php?form=OptionImport + + + + + + wcf.acp.menu.link.system + 2 + admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage,admin.system.package.canEditServer + + + + wcf.acp.menu.link.package + 1 + + + + icon/packageM.png + index.php?page=PackageList + wcf.acp.menu.link.package.management + admin.system.package.canUpdatePackage,admin.system.package.canUninstallPackage + 1 + + + + index.php?form=PackageStartInstall&action=install + wcf.acp.menu.link.package.management + admin.system.package.canInstallPackage + 2 + + + + wcf.acp.menu.link.package + 2 + + + + icon/updateM.png + index.php?page=PackageAutoUpdateList + wcf.acp.menu.link.package.update + admin.system.package.canUpdatePackage + 1 + + + + index.php?form=PackageUpdateSearch + wcf.acp.menu.link.package.update + admin.system.package.canInstallPackage,admin.system.package.canUpdatePackage + 2 + + + + wcf.acp.menu.link.package + 3 + + + + icon/updateServerM.png + index.php?page=UpdateServerList + wcf.acp.menu.link.package.server + admin.system.package.canEditServer + 1 + + + + index.php?form=UpdateServerAdd + wcf.acp.menu.link.package.server + admin.system.package.canEditServer + 2 + + + + + + wcf.acp.menu.link.system + 3 + + + + + + wcf.acp.menu.link.system + 4 + + + + wcf.acp.menu.link.log + + + + wcf.acp.menu.link.log + + + + icon/sessionLogM.png + index.php?page=ACPSessionLogList + wcf.acp.menu.link.log.system + admin.system.canViewLog + + + + index.php?page=CacheList + wcf.acp.menu.link.log.system + admin.system.canViewLog + + + + + + wcf.acp.menu.link.maintenance + + + + icon/cronjobsM.png + index.php?page=CronjobList + wcf.acp.menu.link.cronjobs + admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob,admin.system.cronjobs.canEnableDisableCronjob + 1 + + + + index.php?form=CronjobAdd + wcf.acp.menu.link.cronjobs + admin.system.cronjobs.canAddCronjob + 2 + + + + index.php?page=CronjobLogList + wcf.acp.menu.link.log.system + admin.system.cronjobs.canEditCronjob,admin.system.cronjobs.canDeleteCronjob + + + + + icon/usersL.png + 2 + + + + + wcf.acp.menu.link.user + 1 + + + + wcf.acp.menu.link.user.management + 1 + + + + icon/usersM.png + index.php?page=UserList + wcf.acp.menu.link.user.management.general + admin.user.canSearchUser + 1 + + + + icon/searchM.png + index.php?form=UserSearch + wcf.acp.menu.link.user.management.general + admin.user.canSearchUser + 2 + + + + index.php?form=UserAdd + wcf.acp.menu.link.user.management.general + admin.user.canAddUser + 3 + + + + wcf.acp.menu.link.user.management + 2 + + + + index.php?form=UsersMassProcessing + wcf.acp.menu.link.user.management.additional + admin.user.canEditUser,admin.user.canDeleteUser,admin.user.canMailUser + 1 + + + + index.php?form=UserMail&action=all + wcf.acp.menu.link.user.management.additional + admin.user.canMailUser + 2 + + + + + + wcf.acp.menu.link.user + 2 + + + + wcf.acp.menu.link.group + 1 + + + + icon/userGroupM.png + index.php?page=UserGroupList + wcf.acp.menu.link.group.general + admin.user.canEditGroup,admin.user.canDeleteGroup + 1 + + + + index.php?form=UserGroupAdd + wcf.acp.menu.link.group.general + admin.user.canAddGroup + 2 + + + + wcf.acp.menu.link.group + 2 + + + + icon/emailM.png + index.php?form=UserMail&action=group + wcf.acp.menu.link.group.additional + admin.user.canMailUser + 1 + + + + + icon/displayL.png + 3 + + + + + wcf.acp.menu.link.display + + + + wcf.acp.menu.link.language + + + + icon/languageServerM.png + index.php?page=LanguageServerList + wcf.acp.menu.link.language.server + admin.language.canEditServer + 1 + + + + index.php?form=LanguageServerAdd + wcf.acp.menu.link.language.server + admin.language.canEditServer + 2 + + + + + icon/contentL.png + 4 + + + diff --git a/com.woltlab.wcf/coreobject.xml b/com.woltlab.wcf/coreobject.xml new file mode 100644 index 0000000000..ef99971238 --- /dev/null +++ b/com.woltlab.wcf/coreobject.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/com.woltlab.wcf/cronjobs.xml b/com.woltlab.wcf/cronjobs.xml new file mode 100644 index 0000000000..29284d9567 --- /dev/null +++ b/com.woltlab.wcf/cronjobs.xml @@ -0,0 +1,69 @@ + + + + + lib/system/cronjob/GetUpdateInfoCronjob.class.php + Gets update package information + 0 + 2 + */2 + * + * + 1 + 1 + 1 + + + + lib/system/cronjob/RefreshSearchRobotsCronjob.class.php + Refreshes list of search robots + 0 + 3 + 1 + * + * + 1 + 1 + 1 + + + + lib/system/cronjob/CleanUpCronjobLogCronjob.class.php + Deletes old entries from cronjob log. + 0 + 12 + * + * + * + 1 + 1 + 1 + + + + lib/system/cronjob/CleanUpSessionLogCronjob.class.php + Deletes old entries from session log. + 0 + 10 + * + * + * + 1 + 0 + 0 + + + + lib/system/cronjob/CleanupListenerCronjob.class.php + Executes cleanup system. + 5,20,35,50 + * + * + * + * + 1 + 0 + 0 + + + \ No newline at end of file diff --git a/com.woltlab.wcf/eventlistener.xml b/com.woltlab.wcf/eventlistener.xml new file mode 100644 index 0000000000..e1ebdd122a --- /dev/null +++ b/com.woltlab.wcf/eventlistener.xml @@ -0,0 +1,26 @@ + + + + + wcf\page\AbstractPage + readParameters + admin + 1 + wcf\system\event\listener\SessionAccessLogListener + + + wcf\form\AbstractForm + readParameters + admin + 1 + wcf\system\event\listener\SessionAccessLogListener + + + wcf\action\AbstractAction + readParameters + admin + 1 + wcf\system\event\listener\SessionAccessLogListener + + + \ No newline at end of file diff --git a/com.woltlab.wcf/groupoptions.xml b/com.woltlab.wcf/groupoptions.xml new file mode 100644 index 0000000000..2ae959a904 --- /dev/null +++ b/com.woltlab.wcf/groupoptions.xml @@ -0,0 +1,200 @@ + + + + + + + + + admin + + + admin + + + admin.system + + + admin.system + + + admin.system + + + admin + + + admin.user + + + admin.user + + + + admin + + + admin + + + admin.display + + + admin.display + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/com.woltlab.wcf/options.xml b/com.woltlab.wcf/options.xml new file mode 100644 index 0000000000..e24eed6179 --- /dev/null +++ b/com.woltlab.wcf/options.xml @@ -0,0 +1,326 @@ + + + + + + + 1 + + + module + + + module + + + module + + + module + + + + + + message + + + + + + 2 + + + general + + + general + + + general + + + general.http + + + general.http + + + general.http + + + general + + + general + + + general.mail + + + general.mail + + + general + + + general.cache + + + general.cache + + + + + + 3 + + + + + + 4 + + + security + + + security.general + + + security + + + security + + + security + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.woltlab.wcf/package.xml b/com.woltlab.wcf/package.xml new file mode 100644 index 0000000000..7fd13fc63e --- /dev/null +++ b/com.woltlab.wcf/package.xml @@ -0,0 +1,29 @@ + + + + WoltLab Community Framework + Free web-framework, designed and developed for complex community applications. + 1 + 1 + 2.0.0 Alpha 1 + 2011-05-19 + + + + WoltLab GmbH + http://www.woltlab.com + + + + pip.xml + acpmenu.xml + groupoptions.xml + options.xml + useroptions.xml + templates.tar + eventlistener.xml + acp/install.php + cronjobs.xml + coreobject.xml + + diff --git a/com.woltlab.wcf/pip.xml b/com.woltlab.wcf/pip.xml new file mode 100644 index 0000000000..c67580cc8e --- /dev/null +++ b/com.woltlab.wcf/pip.xml @@ -0,0 +1,20 @@ + + + + wcf\system\package\plugin\ACPMenuPackageInstallationPlugin + wcf\system\package\plugin\ACPTemplatesPackageInstallationPlugin + wcf\system\package\plugin\CoreObjectPackageInstallationPlugin + wcf\system\package\plugin\CronjobsPackageInstallationPlugin + wcf\system\package\plugin\EventListenerPackageInstallationPlugin + wcf\system\package\plugin\FilesPackageInstallationPlugin + wcf\system\package\plugin\GroupOptionsPackageInstallationPlugin + wcf\system\package\plugin\LanguagesPackageInstallationPlugin + wcf\system\package\plugin\OptionsPackageInstallationPlugin + wcf\system\package\plugin\PageMenuPackageInstallationPlugin + wcf\system\package\plugin\ScriptPackageInstallationPlugin + wcf\system\package\plugin\SqlPackageInstallationPlugin + wcf\system\package\plugin\TemplateListenerPackageInstallationPlugin + wcf\system\package\plugin\TemplatesPackageInstallationPlugin + wcf\system\package\plugin\UserOptionsPackageInstallationPlugin + + diff --git a/com.woltlab.wcf/styleattributes.xml b/com.woltlab.wcf/styleattributes.xml new file mode 100644 index 0000000000..ef8401801a --- /dev/null +++ b/com.woltlab.wcf/styleattributes.xml @@ -0,0 +1,4185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .border > .itemList > li:last-child > .itemListTitle]]> + + + + + .border > .itemList > li:last-child > .itemListTitle]]> + + + + + .border > .itemList > li:last-child > .itemListTitle]]> + + + + + li > .itemList > li > .itemListTitle]]> + + + + + li > .itemList > li > .itemListTitle]]> + + + + + li > .itemList > li > .itemListTitle]]> + + + + + li > .itemList > li > .itemList]]> + + + + + li > .itemList > li > .itemList]]> + + + + + li > .itemList > li > .itemList]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + span]]> + + + + + span]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a]]> + + + + + a]]> + + + + + + + + + + + + + + + + + + + + a]]> + + + + + a]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/documentHeader.tpl b/com.woltlab.wcf/templates/documentHeader.tpl new file mode 100644 index 0000000000..e39f180c09 --- /dev/null +++ b/com.woltlab.wcf/templates/documentHeader.tpl @@ -0,0 +1,2 @@ + + diff --git a/com.woltlab.wcf/templates/footer.tpl b/com.woltlab.wcf/templates/footer.tpl new file mode 100644 index 0000000000..9f17042f6f --- /dev/null +++ b/com.woltlab.wcf/templates/footer.tpl @@ -0,0 +1,5 @@ +
+ +
\ No newline at end of file diff --git a/com.woltlab.wcf/templates/footerMenu.tpl b/com.woltlab.wcf/templates/footerMenu.tpl new file mode 100644 index 0000000000..8b2311933c --- /dev/null +++ b/com.woltlab.wcf/templates/footerMenu.tpl @@ -0,0 +1,11 @@ +{if $__wcf->getPageMenu()->getMenuItems('footer')|count > 0} +
+
+
    + {foreach from=$__wcf->getPageMenu()->getMenuItems('footer') item=menuItem} +
  • {$menuItem|print_r}
  • + {/foreach} +
+
+
+{/if} \ No newline at end of file diff --git a/com.woltlab.wcf/templates/headInclude.tpl b/com.woltlab.wcf/templates/headInclude.tpl new file mode 100644 index 0000000000..162c75db79 --- /dev/null +++ b/com.woltlab.wcf/templates/headInclude.tpl @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/header.tpl b/com.woltlab.wcf/templates/header.tpl new file mode 100644 index 0000000000..e63f3358e6 --- /dev/null +++ b/com.woltlab.wcf/templates/header.tpl @@ -0,0 +1,5 @@ + +
+ \ No newline at end of file diff --git a/com.woltlab.wcf/templates/headerMenu.tpl b/com.woltlab.wcf/templates/headerMenu.tpl new file mode 100644 index 0000000000..43ee6c78af --- /dev/null +++ b/com.woltlab.wcf/templates/headerMenu.tpl @@ -0,0 +1,21 @@ +{if $__wcf->getPageMenu()->getMenuItems('header')|count > 0} + +{/if} diff --git a/com.woltlab.wcf/templates/imageViewer.tpl b/com.woltlab.wcf/templates/imageViewer.tpl new file mode 100644 index 0000000000..a8dccce9a1 --- /dev/null +++ b/com.woltlab.wcf/templates/imageViewer.tpl @@ -0,0 +1,31 @@ + + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeBoolean.tpl b/com.woltlab.wcf/templates/optionTypeBoolean.tpl new file mode 100644 index 0000000000..971044f485 --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeBoolean.tpl @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeDate.tpl b/com.woltlab.wcf/templates/optionTypeDate.tpl new file mode 100644 index 0000000000..2668c3f569 --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeDate.tpl @@ -0,0 +1,26 @@ +
+ {foreach from=$dateInputOrder item=element} +
+ + + {if $element == 'day'} + + {/if} + + {if $element == 'month'} + + {/if} + + {if $element == 'year'} + + {/if} +
+ {/foreach} +
+{if !$yearRequired} +

{lang}wcf.global.date.year.notRequired{/lang}

+{/if} \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeMultiselect.tpl b/com.woltlab.wcf/templates/optionTypeMultiselect.tpl new file mode 100644 index 0000000000..5646331295 --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeMultiselect.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeRadiobuttons.tpl b/com.woltlab.wcf/templates/optionTypeRadiobuttons.tpl new file mode 100644 index 0000000000..d91419e0eb --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeRadiobuttons.tpl @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeSelect.tpl b/com.woltlab.wcf/templates/optionTypeSelect.tpl new file mode 100644 index 0000000000..7bb2ee14e9 --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeSelect.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeText.tpl b/com.woltlab.wcf/templates/optionTypeText.tpl new file mode 100644 index 0000000000..ef885f2e7f --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeText.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/optionTypeTextarea.tpl b/com.woltlab.wcf/templates/optionTypeTextarea.tpl new file mode 100644 index 0000000000..85fd945abe --- /dev/null +++ b/com.woltlab.wcf/templates/optionTypeTextarea.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/permissionDenied.tpl b/com.woltlab.wcf/templates/permissionDenied.tpl new file mode 100644 index 0000000000..0aeb5eb4af --- /dev/null +++ b/com.woltlab.wcf/templates/permissionDenied.tpl @@ -0,0 +1,17 @@ +{include file="documentHeader"} + + {lang}wcf.global.error.permissionDenied.title{/lang} - {lang}{PAGE_TITLE}{/lang} + {include file='headInclude' sandbox=false} + + +{include file='header' sandbox=false} + +
+ +

{lang}wcf.global.error.permissionDenied{/lang}

+ +
+ +{include file='footer' sandbox=false} + + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/redirect.tpl b/com.woltlab.wcf/templates/redirect.tpl new file mode 100644 index 0000000000..98bd676c73 --- /dev/null +++ b/com.woltlab.wcf/templates/redirect.tpl @@ -0,0 +1,21 @@ +{include file="documentHeader"} + + {lang}wcf.global.redirect.title{/lang} - {lang}{PAGE_TITLE}{/lang} + {include file='headInclude' sandbox=false} + + + +{include file='header' sandbox=false} + +
+ + + +
+ +{include file='footer' sandbox=false} + + \ No newline at end of file diff --git a/com.woltlab.wcf/templates/userException.tpl b/com.woltlab.wcf/templates/userException.tpl new file mode 100644 index 0000000000..d8afeeeb9d --- /dev/null +++ b/com.woltlab.wcf/templates/userException.tpl @@ -0,0 +1,30 @@ +{include file="documentHeader"} + + {lang}wcf.global.error.title{/lang} - {lang}{PAGE_TITLE}{/lang} + {include file='headInclude' sandbox=false} + + + +{include file='header' sandbox=false} + +
+

+ {@$message} +

+
+ + + +{include file='footer' sandbox=false} + + \ No newline at end of file diff --git a/com.woltlab.wcf/useroptions.xml b/com.woltlab.wcf/useroptions.xml new file mode 100644 index 0000000000..2ba47394e1 --- /dev/null +++ b/com.woltlab.wcf/useroptions.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/com.woltlab.wcf/woltlab-basic-style.tar b/com.woltlab.wcf/woltlab-basic-style.tar new file mode 100644 index 0000000000000000000000000000000000000000..58744e43e51abe88403672c131dd86664ede0da6 GIT binary patch literal 45568 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 literal 0 HcmV?d00001 diff --git a/wcfsetup/install.php b/wcfsetup/install.php new file mode 100644 index 0000000000..c4059d8dde --- /dev/null +++ b/wcfsetup/install.php @@ -0,0 +1,756 @@ + + */ +// define constants +define('INSTALL_SCRIPT_DIR', dirname(__FILE__).'/'); +define('SETUP_FILE', INSTALL_SCRIPT_DIR . 'WCFSetup.tar.gz'); +define('NO_IMPORTS', 1); + +// set exception handler +set_exception_handler('handleException'); +// set php error handler +set_error_handler('handleError', E_ALL); + +// define list of needed file +$neededFilesPattern = array( + '!^setup/.*!', + '!^install/files/lib/data/.*!', + '!^install/files/lib/system/.*!', + '!^install/files/lib/util/.*!', + '!^install/files/acp/images/setup.*!', + '!^install/lang/.*!', + '!^install/packages/.*!'); + +// define needed functions and classes +/** + * WCF::handleException() calls the show method on exceptions that implement this interface. + * + * @package com.woltlab.wcf.system.exception + * @author Marcel Werk + */ +interface PrintableException { + public function show(); +} + +// define needed classes +// needed are: +// SystemException, PrintableException, BasicFileUtil, Tar, File, ZipFile +/** + * A SystemException is thrown when an unexpected error occurs. + * + * @package com.woltlab.wcf.system.exception + * @author Marcel Werk + */ +class SystemException extends \Exception implements PrintableException { + protected $description; + protected $information = ''; + protected $functions = ''; + + /** + * Creates a new SystemException. + * + * @param message string error message + * @param code integer error code + * @param description string description of the error + */ + public function __construct($message = '', $code = 0, $description = '') { + parent::__construct($message, $code); + $this->description = $description; + } + + /** + * Returns the description of this exception. + * + * @return string + */ + public function getDescription() { + return $this->description; + } + + /** + * Prints this exception. + * This method is called by WCF::handleException(). + */ + public function show() { + ?> + + +Fatal error: <?php echo htmlspecialchars($this->getMessage()); ?> + + + +
+

Fatal error: getMessage()); ?>

+ +
+

getDescription(); ?>

+ getCode()) { ?>

You get more information about the problem in our knowledge base: http://www.woltlab.com/help/?code=getCode()); ?>

+ +

Information:

+

+ error message: getMessage()); ?>
+ error code: getCode()); ?>
+ information; ?> + file: getFile()); ?> (getLine(); ?>)
+ php version:
+ wcf version:
+ date:
+ request:
+ referer:
+

+ +

Stacktrace:

+
getTraceAsString()); ?>
+
+ + functions; ?> +
+ + + + 1) { + // remove 'wcf' component + array_shift($namespaces); + + $className = implode('/', $namespaces); + $classPath = TMP_DIR . 'install/files/lib/' . $className . '.class.php'; + if (file_exists($classPath)) { + require_once($classPath); + } + } +} + +/** + * Escapes strings for execution in sql queries. + */ +function escapeString($string) { + return \wcf\system\WCF::getDB()->escapeString($string); +} + +/** + * Calls the show method on the given exception. + * + * @param Exception $e + */ +function handleException(\Exception $e) { + if ($e instanceof PrintableException || $e instanceof \wcf\system\exception\PrintableException) { + $e->show(); + exit; + } + + print $e; +} + +/** + * Catches php errors and throws instead a system exception. + * + * @param integer $errorNo + * @param string $message + * @param string $filename + * @param integer $lineNo + */ +function handleError($errorNo, $message, $filename, $lineNo) { + if (error_reporting() != 0) { + $type = 'error'; + switch ($errorNo) { + case 2: $type = 'warning'; + break; + case 8: $type = 'notice'; + break; + } + + throw new SystemException('PHP '.$type.' in file '.$filename.' ('.$lineNo.'): '.$message, 0); + } +} + +/** + * BasicFileUtil contains file-related functions. + * + * @package com.woltlab.wcf.util + * @author Marcel Werk + */ +class BasicFileUtil { + /** + * Tries to find the temp folder. + * + * @return string + */ + public static function getTempFolder() { + $tmpDirName = TMP_FILE_PREFIX.'/'; + + // use tmp folder in document root by default + if (!empty($_SERVER['DOCUMENT_ROOT'])) { + if (!@file_exists($_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName)) { + @mkdir($_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName, 0777, true); + @chmod($_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName, 0777); + } + + if (@file_exists($_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName) && @is_writable($_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName)) { + return $_SERVER['DOCUMENT_ROOT'].'/tmp/'.$tmpDirName; + } + } + + foreach (array('TMP', 'TEMP', 'TMPDIR') as $tmpDir) { + if (isset($_ENV[$tmpDir]) && @is_writable($_ENV[$tmpDir])) { + $dir = $_ENV[$tmpDir] . '/' . $tmpDirName; + @mkdir($dir, 0777); + @chmod($dir, 0777); + + if (@file_exists($dir) && @is_writable($dir)) { + return $dir; + } + } + } + + $dir = INSTALL_SCRIPT_DIR . 'tmp/' . $tmpDir; + @mkdir($dir, 0777); + @chmod($dir, 0777); + + if (@file_exists($dir) && @is_writable($dir)) { + $tmpDir = explode('/', $dir); + array_pop($tmpDir); + $dir = implode('/', $tmpDir); + + throw new SystemException('There is no access to the system temporary folder due to an unknown reason and no user specific temporary folder exists in '.INSTALL_SCRIPT_DIR.'! This is a misconfiguration of your webserver software! Please create a folder called '.$dir.' using your favorite ftp program, make it writable and then retry this installation.', 10000); + } + + return $dir; + } +} + +/** + * Opens tar or tar.gz archives. + * + * Usage: + * ------ + * $tar = new Tar('archive.tar'); + * $contentList = $tar->getContentList(); + * foreach ($contentList as $key => $val) { + * $tar->extract($key, DESTINATION); + * } + */ +class Tar { + protected $archiveName = ''; + protected $contentList = array(); + protected $opened = false; + protected $read = false; + protected $file = null; + protected $isZipped = false; + protected $mode = 'rb'; + + /** + * Creates a new Tar object. + * archiveName must be tarball or gzipped tarball + * + * @param string $archiveName + */ + public function __construct($archiveName) { + $match = array(); + if (!is_file($archiveName)) { + throw new SystemException("unable to find tar archive '".$archiveName."'", 11002); + } + + $this->archiveName = $archiveName; + $this->open(); + $this->readContent(); + } + + /** + * Destructor of this class, closes tar archive. + */ + public function __destruct() { + $this->close(); + } + + /** + * Opens the tar archive and stores filehandle. + */ + public function open() { + if (!$this->opened) { + if ($this->isZipped) $this->file = new ZipFile($this->archiveName, $this->mode); + else { + // test compression + $this->file = new File($this->archiveName, $this->mode); + if ($this->file->read(2) == "\37\213") { + $this->file->close(); + $this->isZipped = true; + $this->file = new ZipFile($this->archiveName, $this->mode); + } + else { + $this->file->seek(0); + } + } + $this->opened = true; + } + } + + /** + * Closes the opened file. + */ + public function close() { + if ($this->opened) { + $this->file->close(); + $this->opened = false; + } + } + + /** + * Returns the table of contents (TOC) list for this tar archive. + * + * @return array list of content + */ + public function getContentList() { + if (!$this->read) { + $this->open(); + $this->readContent(); + } + return $this->contentList; + } + + /** + * Returns an associative array with information + * about a specific file in the archive. + * + * @param mixed $fileindex index or name of the requested file + * @return array $fileInfo + */ + public function getFileInfo($fileIndex) { + if (!is_int($fileIndex)) { + $fileIndex = $this->getIndexByFilename($fileIndex); + } + + if (!isset($this->contentList[$fileIndex])) { + throw new SystemException("Tar: could find file '$index' in archive", 11013); + } + return $this->contentList[$fileIndex]; + } + + /** + * Searchs a file in the tar archive + * and returns the numeric fileindex. + * Returns false if not found. + * + * @param string $filename + * @return integer index of the requested file + */ + public function getIndexByFilename($filename) { + foreach ($this->contentList as $index => $file) { + if ($file['filename'] == $filename) { + return $index; + } + } + return false; + } + + /** + * Extracts a specific file and returns the content as string. + * Returns false if extraction failed. + * + * @param mixed $index index or name of the requested file + * @return string content of the requested file + */ + public function extractToString($index) { + if (!$this->read) { + $this->open(); + $this->readContent(); + } + $header = $this->getFileInfo($index); + + // can not extract a folder + if ($header['type'] != 'file') { + return false; + } + + // seek to offset + $this->file->seek($header['offset']); + + // read data + $content = ''; + $n = floor($header['size'] / 512); + for($i = 0; $i < $n; $i++) { + $content .= $this->file->read(512); + } + if(($header['size'] % 512) != 0) { + $buffer = $this->file->read(512); + $content .= substr($buffer, 0, ($header['size'] % 512)); + } + + return $content; + } + + /** + * Extracts a specific file and writes it's content + * to the file specified with $destination. + * + * @param mixed $index index or name of the requested file + * @param string $destination + * @return boolean $success + */ + public function extract($index, $destination) { + if (!$this->read) { + $this->open(); + $this->readContent(); + } + $header = $this->getFileInfo($index); + + // can not extract a folder + if ($header['type'] != 'file') { + return false; + } + + // seek to offset + $this->file->seek($header['offset']); + + $targetFile = new File($destination); + + // read data + $n = floor($header['size'] / 512); + for ($i = 0; $i < $n; $i++) { + $content = $this->file->read(512); + $targetFile->write($content, 512); + } + if (($header['size'] % 512) != 0) { + $content = $this->file->read(512); + $targetFile->write($content, ($header['size'] % 512)); + } + + $targetFile->close(); + if (function_exists('apache_get_version') || !@$targetFile->is_writable()) { + @$targetFile->chmod(0777); + } + else { + @$targetFile->chmod(0755); + } + + if ($header['mtime']) { + @$targetFile->touch($header['mtime']); + } + + // check filesize + if (filesize($destination) != $header['size']) { + throw new SystemException("Could not untar file '".$header['filename']."' to '".$destination."'. Maybe disk quota exceeded in folder '".dirname($destination)."'.", 11015); + } + + return true; + } + + /** + * Reads table of contents (TOC) from tar archive. + * This does not get the entire to memory but only parts of it. + */ + protected function readContent() { + $this->contentList = array(); + $this->read = true; + $i = 0; + + // Read the 512 bytes header + while (strlen($binaryData = $this->file->read(512)) != 0) { + // read header + $header = $this->readHeader($binaryData); + if ($header === false) { + continue; + } + $this->contentList[$i] = $header; + $this->contentList[$i]['index'] = $i; + $i++; + + $this->file->seek($this->file->tell() + (512 * ceil(($header['size'] / 512)))); + } + } + + /** + * Unpacks file header for one file entry. + * + * @param string $binaryData + * @return array $fileheader + */ + protected function readHeader($binaryData) { + if (strlen($binaryData) != 512) { + return false; + } + + $header = array(); + $checksum = 0; + // First part of the header + for ($i = 0; $i < 148; $i++) { + $checksum += ord(substr($binaryData, $i, 1)); + } + // Calculate the checksum + // Ignore the checksum value and replace it by ' ' (space) + for ($i = 148; $i < 156; $i++) { + $checksum += ord(' '); + } + // Last part of the header + for ($i = 156; $i < 512; $i++) { + $checksum += ord(substr($binaryData, $i, 1)); + } + + // Extract the values + //$data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $binaryData); + $data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor/a155prefix", $binaryData); + + // Extract the properties + $header['checksum'] = octDec(trim($data['checksum'])); + if ($header['checksum'] == $checksum) { + $header['filename'] = trim($data['filename']); + $header['mode'] = octDec(trim($data['mode'])); + $header['uid'] = octDec(trim($data['uid'])); + $header['gid'] = octDec(trim($data['gid'])); + $header['size'] = octDec(trim($data['size'])); + $header['mtime'] = octDec(trim($data['mtime'])); + $header['prefix'] = trim($data['prefix']); + if ($header['prefix']) { + $header['filename'] = $header['prefix'].'/'.$header['filename']; + } + if (($header['typeflag'] = $data['typeflag']) == '5') { + $header['size'] = 0; + $header['type'] = 'folder'; + } + else { + $header['type'] = 'file'; + } + $header['offset'] = $this->file->tell(); + + return $header; + } + else { + return false; + } + } +} + +/** + * The File class handles all file operations. + * + * Example: + * using php functions: + * $fp = fopen('filename', 'wb'); + * fwrite($fp, '...'); + * fclose($fp); + * + * using this class: + * $file = new File('filename'); + * $file->write('...'); + * $file->close(); + * + * @author Marcel Werk + */ +class File { + protected $resource = null; + protected $filename; + + /** + * Opens a new file. + * + * @param string $filename + * @param string $mode + */ + public function __construct($filename, $mode = 'wb') { + $this->filename = $filename; + $this->resource = fopen($filename, $mode); + if ($this->resource === false) { + throw new SystemException('Can not open file ' . $filename, 11012); + } + } + + /** + * Calls the specified function on the open file. + * Do not call this function directly. Use $file->write('') instead. + * + * @param string $function + * @param array $arguments + */ + public function __call($function, $arguments) { + if (function_exists('f' . $function)) { + array_unshift($arguments, $this->resource); + return call_user_func_array('f' . $function, $arguments); + } + else if (function_exists($function)) { + array_unshift($arguments, $this->filename); + return call_user_func_array($function, $arguments); + } + else { + throw new SystemException('Can not call file method ' . $function, 11003); + } + } +} + +/** + * The File class handles all file operations on a zipped file. + * + * @author Marcel Werk + */ +class ZipFile extends File { + /** + * Opens a new zipped file. + * + * @param string $filename + * @param string $mode + */ + public function __construct($filename, $mode = 'wb') { + $this->filename = $filename; + if (!function_exists('gzopen')) { + throw new SystemException('Can not find functions of the zlib extension', 11004); + } + $this->resource = @gzopen($filename, $mode); + if ($this->resource === false) { + throw new SystemException('Can not open file ' . $filename, 11012); + } + } + + /** + * Calls the specified function on the open file. + * + * @param string $function + * @param array $arguments + */ + public function __call($function, $arguments) { + if (function_exists('gz' . $function)) { + array_unshift($arguments, $this->resource); + return call_user_func_array('gz' . $function, $arguments); + } + else if (function_exists($function)) { + array_unshift($arguments, $this->filename); + return call_user_func_array($function, $arguments); + } + else { + throw new SystemException('Can not call method ' . $function, 11003); + } + } + + /** + * Returns the filesize of the unzipped file + */ + public function getFileSize() { + $byteBlock = 1<<14; + $eof = $byteBlock; + + // the correction is for zip files that are too small + // to get in the first while loop + $correction = 1; + while ($this->seek($eof) == 0) { + $eof += $byteBlock; + $correction = 0; + } + + while ($byteBlock > 1) { + $byteBlock >>= 1; + $eof += $byteBlock * ($this->seek($eof) ? -1 : 1); + } + + if ($this->seek($eof) == -1) $eof -= 1; + + $this->rewind(); + return $eof - $correction; + } +} + +// let's go +// get temp file prefix +if (isset($_REQUEST['tmpFilePrefix'])) { + $prefix = preg_replace('/[^a-f0-9_]+/', '', $_REQUEST['tmpFilePrefix']); +} +else { + $prefix = substr(sha1(uniqid(microtime())), 0, 8); +} +define('TMP_FILE_PREFIX', $prefix); + +// try to find the temp folder +define('TMP_DIR', BasicFileUtil::getTempFolder()); + +// show image from temp folder +if (isset($_GET['showImage'])) { + if (preg_match('~[\w\-]+\.(jpg|png)~', $_GET['showImage'], $match)) { + if ($match[1] == 'jpg') header('Content-Type: image/jpg'); + else header('Content-Type: image/png'); + readfile(TMP_DIR . 'install/files/acp/images/' . $_GET['showImage']); + } + exit; +} + +// check whether setup files already unzipped +if (!file_exists(TMP_DIR . 'install/files/lib/system/WCFSetup.class.php')) { + // try to unzip all setup files into temp folder + $tar = new Tar(SETUP_FILE); + $contentList = $tar->getContentList(); + if (!count($contentList)) { + throw new SystemException("Can not unpack 'WCFSetup.tar.gz'. File is probably broken.", 11016); + } + + foreach ($contentList as $file) { + foreach ($neededFilesPattern as $pattern) { + if (preg_match($pattern, $file['filename'])) { + // create directory if not exists + $dir = TMP_DIR . dirname($file['filename']); + if (!@is_dir($dir)) { + @mkdir($dir, 0777, true); + @chmod($dir, 0777); + } + + $tar->extract($file['index'], TMP_DIR . $file['filename']); + } + } + } + $tar->close(); + + // create cache folders + @mkdir(TMP_DIR . 'setup/lang/cache/', 0777); + @chmod(TMP_DIR . 'setup/lang/cache/', 0777); + + @mkdir(TMP_DIR . 'setup/template/compiled/', 0777); + @chmod(TMP_DIR . 'setup/template/compiled/', 0777); +} + +if (!class_exists('wcf\system\WCFSetup')) { + throw new SystemException("Can not find class 'WCFSetup'", 11006); +} + +// start setup +new \wcf\system\WCFSetup(); +?> \ No newline at end of file diff --git a/wcfsetup/install/files/acp/dereferrer.php b/wcfsetup/install/files/acp/dereferrer.php new file mode 100644 index 0000000000..11ea0ce80a --- /dev/null +++ b/wcfsetup/install/files/acp/dereferrer.php @@ -0,0 +1,28 @@ + + * @package com.woltlab.wcf + * @category Community Framework + */ +// get url +$url = ''; +if (isset($_GET['url'])) $url = htmlspecialchars(str_replace(';', '', trim($_GET['url']))); +if (empty($url)) exit; +// check url +$testURL = preg_replace('/[^a-z0-9:\/]+/', '', strtolower($url)); +if (strpos($testURL, 'script:') !== false || !preg_match('/^https?:\/\//', $testURL)) { + exit; +} +echo ''; +?> + + + Dereferer + + + +

+ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/global.php b/wcfsetup/install/files/acp/global.php new file mode 100644 index 0000000000..936dc9c709 --- /dev/null +++ b/wcfsetup/install/files/acp/global.php @@ -0,0 +1,20 @@ + + * @package com.woltlab.wcf + * @category Community Framework + */ +// Constant to get relative path to the wcf-root-dir. +// This constant is already set in each package which got an own config.inc.php +if (!defined('RELATIVE_WCF_DIR')) define('RELATIVE_WCF_DIR', '../'); + +// define the wcf-root-dir +define('WCF_DIR', dirname(dirname(__FILE__)).'/'); + +// starting wcf acp +require_once(WCF_DIR.'lib/system/WCF.class.php'); +require_once(WCF_DIR.'lib/system/WCFACP.class.php'); +new wcf\system\WCFACP(); +?> \ No newline at end of file diff --git a/wcfsetup/install/files/acp/images/acpLogo.png b/wcfsetup/install/files/acp/images/acpLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..e8de213b1b3a25a41ec73fae6ddcd0b0420584b1 GIT binary patch literal 3526 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 + * @package com.woltlab.wcf + * @category Community Framework + */ +require_once('./global.php'); +wcf\system\request\RequestHandler::getInstance()->handle('wcf', true); +?> \ No newline at end of file diff --git a/wcfsetup/install/files/acp/install.php b/wcfsetup/install/files/acp/install.php new file mode 100644 index 0000000000..b368a403f0 --- /dev/null +++ b/wcfsetup/install/files/acp/install.php @@ -0,0 +1,113 @@ + + * @package com.woltlab.wcf + * @category Community Framework + */ +// make group names to language variables +$groupNames = array( + 'Everyone' => WCF::getLanguage()->get('wcf.acp.group.everyone'), + 'Guests' => WCF::getLanguage()->get('wcf.acp.group.guests'), + 'Users' => WCF::getLanguage()->get('wcf.acp.group.users'), + 'Administrators' => WCF::getLanguage()->get('wcf.acp.group.administrators'), + 'Moderators' => WCF::getLanguage()->get('wcf.acp.group.moderators'), + 'Super Moderators' => WCF::getLanguage()->get('wcf.acp.group.superModerators') +); + +$sql = "UPDATE wcf".WCF_N."_user_group + SET groupName = ? + WHERE groupName = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +foreach ($groupNames as $oldValue => $newValue) { + $statement->execute(array($newValue, $oldValue)); +} + +// change the priority of the PIP's to "1" +$sql = "UPDATE wcf".WCF_N."_package_installation_plugin + SET priority = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// change group options from admin group to true +$sql = "UPDATE wcf".WCF_N."_user_group_option_value + SET optionValue = ? + WHERE groupID = ? + AND optionValue = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1, 4, '0')); + +// update accessible groups +$sql = "UPDATE wcf".WCF_N."_user_group_option_value + SET optionValue = ? + WHERE groupID = ? + AND optionValue = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array('1,2,3,4,5,6', 4, '')); + +// reset sessions +SessionHandler::resetSessions(); + +// update acp session +$sql = "UPDATE wcf".WCF_N."_acp_session + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// update acp templates +$sql = "UPDATE wcf".WCF_N."_acp_template + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// update language +$sql = "UPDATE wcf".WCF_N."_language_item + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +$sql = "UPDATE wcf".WCF_N."_language_to_package + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// update installation logs +$sql = "UPDATE wcf".WCF_N."_package_installation_file_log + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +$sql = "UPDATE wcf".WCF_N."_package_installation_sql_log + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// update pips +$sql = "UPDATE wcf".WCF_N."_package_installation_plugin + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// group options +$sql = "UPDATE wcf".WCF_N."_user_group_option + SET packageID = ?"; +$statement = WCF::getDB()->prepareStatement($sql); +$statement->execute(array(1)); + +// reset all caches +CacheHandler::getInstance()->clear(WCF_DIR.'cache/', '*'); + +// delete language files +LanguageEditor::deleteLanguageFiles(); + +// delete all compiled templates +ACPTemplateEngine::deleteCompiledTemplates(WCF_DIR.'acp/templates/compiled/'); +?> diff --git a/wcfsetup/install/files/acp/js/WCF.ACP.js b/wcfsetup/install/files/acp/js/WCF.ACP.js new file mode 100644 index 0000000000..c5a2b6130a --- /dev/null +++ b/wcfsetup/install/files/acp/js/WCF.ACP.js @@ -0,0 +1,487 @@ +/** + * Class and function collection for WCF ACP + * + * @author Alexander Ebert + * @copyright 2001-2011 WoltLab GmbH + * @license GNU Lesser General Public License + */ + +/** + * Initialize WCF.ACP namespace + */ +WCF.ACP = {}; + +/** + * Handles ACPMenu. + * + * @param array activeMenuItems + */ +WCF.ACP.Menu = function(activeMenuItems) { this.init(activeMenuItems); }; +WCF.ACP.Menu.prototype = { + /** + * Initializes ACPMenu. + * + * @param array activeMenuItems + */ + init: function(activeMenuItems) { + this._headerNavigation = $('nav#navigationTop'); + this._sidebarNavigation = $('nav#navigationSide'); + + this._prepareElements(activeMenuItems); + }, + + /** + * Resets all elements and binds event listeners. + */ + _prepareElements: function(activeMenuItems) { + this._headerNavigation.find('li').removeClass('activeMenuItem'); + + this._sidebarNavigation.find('div.menuContainer h3').each($.proxy(function(index, menuHeader) { + $(menuHeader).click($.proxy(this._toggleItem, this)); + }, this)); + + // close all navigation groups + this._sidebarNavigation.find('div.menuContainer div').each(function() { + $(this).hide(); + }); + + this._headerNavigation.find('li').click($.proxy(this._toggleSidebar, this)); + + if (activeMenuItems.length === 0) { + this._renderSidebar(this._headerNavigation.find('li:first').data('menuItem'), []); + } + else { + this._renderSidebar('', activeMenuItems); + } + }, + + /** + * Toggles a navigation group entry. + */ + _toggleItem: function(event) { + var $menuItem = $(event.target); + + $menuItem.next().stop(true, true).toggle('blind', { }, 200).end().toggleClass('activeMenuItem'); + }, + + /** + * Handles clicks on top navigation. + * + * @param object event + */ + _toggleSidebar: function(event) { + if ($(event.target).hasClass('activeMenuItem')) { + return; + } + + this._renderSidebar($(event.target).data('menuItem'), []); + }, + + /** + * Renders sidebar including highlighting of currently active menu items. + * + * @param string menuItem + * @param array activeMenuItems + */ + _renderSidebar: function(menuItem, activeMenuItems) { + // reset visible and active items + this._headerNavigation.find('li').removeClass('activeMenuItem'); + this._sidebarNavigation.find('div.menuContainer').hide(); + + if (activeMenuItems.length === 0) { + // show active menu + this._headerNavigation.find('li[data-menuItem="' + menuItem + '"]').addClass('activeMenuItem'); + this._sidebarNavigation.find('div[data-parentMenuItem="' + menuItem + '"]').show(); + } + else { + // open menu by active menu items, first element is always a head navigation item + menuItem = activeMenuItems.shift(); + + this._headerNavigation.find('li[data-menuItem="' + menuItem + '"]').addClass('activeMenuItem'); + this._sidebarNavigation.find('div[data-parentMenuItem="' + menuItem + '"]').show(); + + for (var $i = 0, $size = activeMenuItems.length; $i < $size; $i++) { + var $item = activeMenuItems[$i]; + + if ($.wcfIsset($item)) { + var $menuItem = $('#' + $.wcfEscapeID($item)); + + if ($menuItem.getTagName() === 'ul') { + $menuItem.parent('div').show().prev().addClass('activeMenuItem'); + } + else { + $menuItem.addClass('activeMenuItem'); + } + } + } + } + } +}; + +/** + * Handles package installation dialog. + * + * @param string actionName + * @param integer queueID + * @param boolean initialize + */ +WCF.ACP.PackageInstallation = function(actionName, queueID, initialize) { this.init(actionName, queueID, initialize); }; +WCF.ACP.PackageInstallation.prototype = { + /** + * package installation type + * + * @var string + */ + _actionName: '', + + /** + * package installation dialog + * + * @var object + */ + _dialog: null, + + /** + * queue id + * + * @var integer + */ + _queueID: 0, + + /** + * Initializes package installation. + * + * @param string actionName + * @param integer queueID + * @param boolean initialize + */ + init: function(actionName, queueID, initialize) { + this._actionName = WCF.String.ucfirst(actionName) + 'Package'; + this._queueID = queueID; + + if (initialize) { + $('#submitButton').click($.proxy(function(event) { + this.prepareInstallation(); + return false; + }, this)); + } + }, + + /** + * Prepares installation dialog. + */ + prepareInstallation: function() { + WCF.showAJAXDialog('packageInstallationDialog', true, { + ajax: { + url: 'index.php?action=' + this._actionName + '&t=' + SECURITY_TOKEN + SID_ARG_2ND, + type: 'POST', + data: { queueID: this._queueID, step: 'prepare' }, + success: $.proxy(this._handleResponse, this) + }, + preventClose: true, + hideTitle: true + }); + }, + + /** + * Executes response instructions. + */ + _handleResponse: function() { + if (this._dialog == null) { + this._dialog = $('#packageInstallationDialog'); + } + + var $data = this._dialog.data('responseData'); + + // receive new queue id + if ($data.queueID) { + this._queueID = $data.queueID; + } + + // update progress + if ($data.progress) { + $('#packageInstallationProgress').attr('value', $data.progress).text($data.progress + '%'); + } + + // handle success + if ($data.step == 'success') { + var $id = WCF.getRandomID(); + $('#packageInstallationInnerContent').append('
'); + + $('#' + $id).click($.proxy(function() { + window.location.href = "index.php?page=PackageList" + SID_ARG_2ND; + }, this)); + + $('#packageInstallationInnerContentContainer').wcfBlindIn(); + + return; + } + + // update template + if ($data.template && !$data.ignoreTemplate) { + this._dialog.html($data.template); + } + + // update action + if ($data.currentAction) { + $('#packageInstallationAction').text($data.currentAction); + } + + // handle inner template + if ($data.innerTemplate) { + $('#packageInstallationInnerContent').html($data.innerTemplate); + + // create button to handle next step + if ($data.step && $data.node) { + var $id = WCF.getRandomID(); + $('#packageInstallationInnerContent').append('
'); + + $('#' + $id).click($.proxy(function() { + // collect form values + var $additionalData = {}; + $('#packageInstallationInnerContent').find('input').each(function(index, inputElement) { + $additionalData[$(inputElement).attr('name')] = $(inputElement).attr('value'); + }); + + this._executeStep($data.step, $data.node, $additionalData); + }, this)); + } + + $('#packageInstallationInnerContentContainer').wcfBlindIn(); + + this._dialog.wcfDialog('redraw'); + return; + } + + // purge content + if ($('#packageInstallationInnerContent').children().length > 1) { + $('#packageInstallationInnerContentContainer').wcfBlindOut('down', $.proxy(function() { + $('#packageInstallationInnerContent').empty(); + this._dialog.wcfDialog('redraw'); + + // execute next step + if ($data.step && $data.node) { + this._executeStep($data.step, $data.node); + } + }, this)); + } + else { + // execute next step + if ($data.step && $data.node) { + this._executeStep($data.step, $data.node); + } + } + }, + + /** + * Executes the next installation step. + * + * @param string step + * @param string node + * @param object additionalData + */ + _executeStep: function(step, node, additionalData) { + if (!additionalData) additionalData = {}; + + var $data = $.extend({ + node: node, + queueID: this._queueID, + step: step + }, additionalData); + + $.ajax({ + url: 'index.php?action=' + this._actionName + '&t=' + SECURITY_TOKEN + SID_ARG_2ND, + dataType: 'json', + type: 'POST', + data: $data, + success: $.proxy(function(data) { + this._dialog.data('responseData', data); + this._handleResponse(); + }, this), + error: function(transport) { + alert(transport.responseText); + } + }); + } +}; + +/** + * Handles package uninstallation. + * + * @param jQuery elements + */ +WCF.ACP.PackageUninstallation = function(elements) { this.init(elements); }; +WCF.ACP.PackageUninstallation.prototype = { + /** + * WCF.ACP.PackageInstallation object + * + * @var WCF.ACP.PackageInstallation + */ + _installation: null, + + /** + * Initializes package uninstallation. + * + * @param jQuery elements + */ + init: function(elements) { + if (elements.length == 0) return; + + // bind event listener + elements.each($.proxy(function(index, element) { + $(element).click($.proxy(this._createQueue, this)); + }, this)); + }, + + /** + * Creates a new package uninstallation process. + * + * @param object event + */ + _createQueue: function(event) { + var packageID = $(event.target).data('objectID'); + + this._installation = new WCF.ACP.PackageInstallation('uninstall', 0, false); + + // initialize dialog + WCF.showAJAXDialog('packageInstallationDialog', true, { + ajax: { + url: 'index.php?action=UninstallPackage&t=' + SECURITY_TOKEN + SID_ARG_2ND, + type: 'POST', + data: { packageID: packageID, step: 'prepare' }, + success: $.proxy(this._installation._handleResponse, this._installation) + }, + preventClose: true, + hideTitle: true + }); + } +}; + +/** + * Handles option selection. + */ +WCF.ACP.Options = function() { this.init(); }; +WCF.ACP.Options.prototype = { + /** + * Initializes options. + */ + init: function() { + $('.enablesOptions').each($.proxy(this._initOption, this)); + }, + + /** + * Initializes an option. + * + * @param integer index + * @param object option + */ + _initOption: function(index, option) { + // execute action on init + this._change(option); + + // bind event listener + $(option).change($.proxy(this._handleChange, this)); + }, + + /** + * Applies whenever an option is changed. + * + * @param object event + */ + _handleChange: function(event) { + this._change($(event.target)); + }, + + /** + * Enables or disables options on option value change. + * + * @param object option + */ + _change: function(option) { + option = $(option); + + var $disableOptions = eval(option.data('disableOptions')); + var $enableOptions = eval(option.data('enableOptions')); + + // determine action by type + switch(option.getTagName()) { + case 'input': + switch(option.attr('type')) { + case 'checkbox': + this._execute(option.attr('checked'), $disableOptions, $enableOptions); + break; + + case 'radio': + if (option.attr('checked')) { + this._execute(true, $disableOptions, $enableOptions); + } + break; + } + break; + + case 'select': + var $value = option.val(); + var $disableOptions = $enableOptions = []; + + if (option.data('disableOptions').length > 0) { + for (var $index in option.data('disableOptions')) { + var $item = option.data('disableOptions')[$index]; + + if ($item.value == $value) { + $disableOptions.push($item.option); + } + } + } + + if (option.data('enableOptions').length > 0) { + for (var $index in option.data('enableOptions')) { + var $item = option.data('enableOptions')[$index]; + + if ($item.value == $value) { + $enableOptions.push($item.option); + } + } + } + + this._execute(true, $disableOptions, $enableOptions); + break; + } + }, + + /** + * Enables or disables options. + * + * @param boolean isActive + * @param array disableOptions + * @param array enableOptions + */ + _execute: function(isActive, disableOptions, enableOptions) { + if (disableOptions.length > 0) { + for (var $i = 0, $size = disableOptions.length; $i < $size; $i++) { + var $target = disableOptions[$i]; + if ($.wcfIsset($target)) { + if (isActive) { + $('#' + $.wcfEscapeID($target)).disable().closest('dl').addClass('disabled'); + } + else { + $('#' + $.wcfEscapeID($target)).enable().closest('dl').removeClass('disabled'); + } + } + } + } + + if (enableOptions.length > 0) { + for (var $i = 0, $size = enableOptions.length; $i < $size; $i++) { + var $target = enableOptions[$i]; + if ($.wcfIsset($target)) { + if (isActive) { + $('#' + $.wcfEscapeID($target)).enable().closest('dl').removeClass('disabled'); + } + else { + $('#' + $.wcfEscapeID($target)).disable().closest('dl').addClass('disabled'); + } + } + } + } + } +}; \ No newline at end of file diff --git a/wcfsetup/install/files/acp/style/extra/setupStyle-rtl.css b/wcfsetup/install/files/acp/style/extra/setupStyle-rtl.css new file mode 100644 index 0000000000..7bb6a7a5b3 --- /dev/null +++ b/wcfsetup/install/files/acp/style/extra/setupStyle-rtl.css @@ -0,0 +1,261 @@ + +/* ### -- -- -- -- -- Setup Styles -- -- -- -- -- ### */ + +/* + +File: setupStyle.css +Copyright 2006-2009 by WoltLab GmbH. + +*/ + +/* ### -- -- -- -- -- Miscellaneous -- -- -- -- -- ### */ + +html, body { + background-color: #eee; + background-image: url("../../images/setupBackground-rtl.png"); + background-position: right; + background-repeat: repeat-y; + margin: 0; + padding: 0; +} + +body { + color: #333; + font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: .85em; +} + +.page { + background-color: #fff; + background-image: url("../../images/setupHeader-rtl.jpg"); + background-repeat: no-repeat; + padding: 153px 40px 20px 40px; + width: 720px; +} + +.inner { + padding: 0 20px 10px 20px; +} + +h1 { + color: #164369; + font-size: 1.9em; + font-weight: normal; + text-shadow: -0 2px 3px #bbb; + margin: 5px 0; + padding: 5px 0; +} + +h2 { + color: #164369; + font-size: 1.4em; + font-weight: bold; + margin: 0; + padding-top: 5px; +} + +.icon { + margin-left: 30px; + float: right; +} + +fieldset { + font-size: .82em; + border: 1px solid #8da4b7; + margin-bottom: 10px; + padding: 0; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +legend { + color: #164369; + font-size: 1em; + margin: 0 10px; + padding: 0 4px; +} + +fieldset p, fieldset div { + margin: 0; + padding: 8px 0 0 0; +} + +hr { + color: #8da4b7; + border: 0; + background-color: #8da4b7; + margin: 10px 0; + padding: 0; + clear: right; + height: 1px; + width: 100%; + position: relative; +} + +/* ### -- -- -- -- -- Links -- -- -- -- -- ### */ + +a { + color: #164369; +} + +a:hover, a:active, a:visited { + color: #000; +} + +/* ### -- -- -- -- -- Progress Bar -- -- -- -- -- ### */ + +.progress { + border: 1px solid #b2b2b2; + margin: 0 128px 25px 0; + padding: 1px; + width: 300px; + height: 16px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +.progressBar { + font-size: 7px; + border-bottom: 8px solid #ddd; + background-color: #f1f1f1; + height: 8px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; +} + +.progressText { + color: #333; + font-size: .75em; + text-shadow: -0 1px 1px #fff; + text-align: center; + margin-top: -15px; +} + +.shortInfo { + color: #666; + font-size: .85em; + margin: 0; +} + +fieldset #content .inner { + background-color: #f60; + margin-top: 0 !important; +} + +/* -- -- -- -- -- -- -- Forms -- -- -- -- -- -- -- */ + +form { + margin: 0; + padding: 0; +} + +label { + padding-bottom: 2px; + display: block; +} + +textarea, .inputText { + width: 100%; +} + +textarea, select, input[type="text"], input[type="password"] { + border-width: 1px; + border-style: solid; + border-color: #666 #999 #ccc #999; + background-color: #fafafa; + background-image: url("../../images/setupInputBackground.png"); + background-position: right top; + background-repeat: repeat-x; + padding: 2px; + min-height: 13px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; + background-image: url("../../images/setupInputBackground.png"); + background-repeat: repeat-x; + outline: 0; +} + +iframe { + border: 0; + background-color: #fff; + margin: 10px 0 0 0; + padding: 0; + width: 100%; + height: 300px; +} + +.nextButton { + float: left; +} + +/* ### -- -- -- -- -- System Messages (Success, Warning, Error) -- -- -- -- -- ### */ + +.success, .warning, .error { + border-width: 1px; + border-style: solid; + background-position: 10px center; + background-repeat: no-repeat; + padding: 7px 45px 7px 10px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.success { + color: #090; + border-color: #090; + background-color: #efe; + background-image: url("../../../icon/successM.png"); +} + +.success a, .success a:hover { + color: #333; +} + +.warning { + color: #660; + border-color: #660; + background-color: #ffd; + background-image: url("../../../icon/warningM.png"); +} + +.warning a, .warning a:hover { + color: #333; +} + +.error { + color: #c00; + border-color: #c00; + background-color: #fee; + background-image: url("../../../icon/errorM.png"); +} + +.error a, .error a:hover { + color: #333; +} + +.errorField { + color: #c00; +} + +.errorField .inputText, .errorField select, .errorField textarea { + border: 1px solid #c00; + background-color: #fee; +} + +.errorField img { + vertical-align: middle; +} + +#packageUrl { + text-decoration: underline; + border: none; + background: transparent; + padding: 0; +} + +/* ### -- -- -- -- -- EOF -- -- -- -- -- ### */ diff --git a/wcfsetup/install/files/acp/style/extra/setupStyle.css b/wcfsetup/install/files/acp/style/extra/setupStyle.css new file mode 100644 index 0000000000..accb5e9c6b --- /dev/null +++ b/wcfsetup/install/files/acp/style/extra/setupStyle.css @@ -0,0 +1,261 @@ + +/* ### -- -- -- -- -- Setup Styles -- -- -- -- -- ### */ + +/* + +File: setupStyle.css +Copyright 2006-2009 by WoltLab GmbH. + +*/ + +/* ### -- -- -- -- -- Miscellaneous -- -- -- -- -- ### */ + +html, body { + background-color: #eee; + background-image: url("../../images/setupBackground-ltr.png"); + background-position: left; + background-repeat: repeat-y; + margin: 0; + padding: 0; +} + +body { + color: #333; + font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: .85em; +} + +.page { + background-color: #fff; + background-image: url("../../images/setupHeader-ltr.jpg"); + background-repeat: no-repeat; + padding: 153px 40px 20px 40px; + width: 720px; +} + +.inner { + padding: 0 20px 10px 20px; +} + +h1 { + color: #164369; + font-size: 1.9em; + font-weight: normal; + text-shadow: 0 2px 3px #bbb; + margin: 5px 0; + padding: 5px 0; +} + +h2 { + color: #164369; + font-size: 1.4em; + font-weight: bold; + margin: 0; + padding-top: 5px; +} + +.icon { + margin-right: 30px; + float: left; +} + +fieldset { + font-size: .82em; + border: 1px solid #8da4b7; + margin-bottom: 10px; + padding: 0; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +legend { + color: #164369; + font-size: 1em; + margin: 0 10px; + padding: 0 4px; +} + +fieldset p, fieldset div { + margin: 0; + padding: 8px 0 0 0; +} + +hr { + color: #8da4b7; + border: 0; + background-color: #8da4b7; + margin: 10px 0; + padding: 0; + clear: left; + height: 1px; + width: 100%; + position: relative; +} + +/* ### -- -- -- -- -- Links -- -- -- -- -- ### */ + +a { + color: #164369; +} + +a:hover, a:active, a:visited { + color: #000; +} + +/* ### -- -- -- -- -- Progress Bar -- -- -- -- -- ### */ + +.progress { + border: 1px solid #b2b2b2; + margin: 0 0 25px 128px; + padding: 1px; + width: 300px; + height: 16px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +.progressBar { + font-size: 7px; + border-bottom: 8px solid #ddd; + background-color: #f1f1f1; + height: 8px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; +} + +.progressText { + color: #333; + font-size: .75em; + text-shadow: 0 1px 1px #fff; + text-align: center; + margin-top: -15px; +} + +.shortInfo { + color: #666; + font-size: .85em; + margin: 0; +} + +fieldset #content .inner { + background-color: #f60; + margin-top: 0 !important; +} + +/* -- -- -- -- -- -- -- Forms -- -- -- -- -- -- -- */ + +form { + margin: 0; + padding: 0; +} + +label { + padding-bottom: 2px; + display: block; +} + +textarea, .inputText { + width: 100%; +} + +textarea, select, input[type="text"], input[type="password"] { + border-width: 1px; + border-style: solid; + border-color: #666 #999 #ccc #999; + background-color: #fafafa; + background-image: url("../../images/setupInputBackground.png"); + background-position: left top; + background-repeat: repeat-x; + padding: 2px; + min-height: 13px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; + background-image: url("../../images/setupInputBackground.png"); + background-repeat: repeat-x; + outline: 0; +} + +iframe { + border: 0; + background-color: #fff; + margin: 10px 0 0 0; + padding: 0; + width: 100%; + height: 300px; +} + +.nextButton { + float: right; +} + +/* ### -- -- -- -- -- System Messages (Success, Warning, Error) -- -- -- -- -- ### */ + +.success, .warning, .error { + border-width: 1px; + border-style: solid; + background-position: 10px center; + background-repeat: no-repeat; + padding: 7px 10px 7px 45px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.success { + color: #090; + border-color: #090; + background-color: #efe; + background-image: url("../../../icon/successM.png"); +} + +.success a, .success a:hover { + color: #333; +} + +.warning { + color: #660; + border-color: #660; + background-color: #ffd; + background-image: url("../../../icon/warningM.png"); +} + +.warning a, .warning a:hover { + color: #333; +} + +.error { + color: #c00; + border-color: #c00; + background-color: #fee; + background-image: url("../../../icon/errorM.png"); +} + +.error a, .error a:hover { + color: #333; +} + +.errorField { + color: #c00; +} + +.errorField .inputText, .errorField select, .errorField textarea { + border: 1px solid #c00; + background-color: #fee; +} + +.errorField img { + vertical-align: middle; +} + +#packageUrl { + text-decoration: underline; + border: none; + background: transparent; + padding: 0; +} + +/* ### -- -- -- -- -- EOF -- -- -- -- -- ### */ diff --git a/wcfsetup/install/files/acp/style/extra/setupWindowStyle-rtl.css b/wcfsetup/install/files/acp/style/extra/setupWindowStyle-rtl.css new file mode 100644 index 0000000000..e11c61251b --- /dev/null +++ b/wcfsetup/install/files/acp/style/extra/setupWindowStyle-rtl.css @@ -0,0 +1,213 @@ + +/* ### -- -- -- -- -- Setup Window Styles -- -- -- -- -- ### */ + +/* + +File: setupWindowStyle.css +Copyright 2006-2009 by WoltLab GmbH. + +*/ + +/* -- -- -- -- -- -- -- Miscellaneous -- -- -- -- -- -- -- */ + +body { + color: #333; + font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: .82em; + background-color: #fff; + margin: 0; + padding: 0; +} + +.inner { + padding: 0 20px 10px 20px; +} + +fieldset { + font-size: .82em; + border: 1px solid #8da4b7; + margin-bottom: 10px; + padding: 0; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +legend { + color: #164369; + font-size: 1em; + margin: 0 10px; + padding: 0 4px; +} + +fieldset p, fieldset div { + margin: 8px 0 0 0; + padding: 0; +} + +/* -- -- -- -- -- -- -- Forms -- -- -- -- -- -- -- */ + +form { + margin: 0; + padding: 0; +} + +label { + margin-bottom: 2px; + display: block; +} + +textarea, .inputText { + width: 99%; +} + +textarea, select, input[type="text"], input[type="password"] { + border-width: 1px; + border-style: solid; + border-color: #666 #999 #ccc #999; + background-color: #fafafa; + background-image: url("../../images/setupInputBackground.png"); + background-position: right top; + background-repeat: repeat-x; + padding: 2px; + min-height: 13px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; + background-image: url("../../images/setupInputBackground.png"); + background-repeat: repeat-x; + outline: 0; +} + +textarea, select, .inputText { + border: 1px solid #8da4b7; + background-color: #fafafa; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; +} + +input[type="file"] { + width: 100%; +} + +textarea, select, input[type="text"], input[type="password"] { + padding: 2px; +} + +.select label { + margin-bottom: 5px; + padding-right: 25px; +} + +.select input { + float: right; +} + +.nextButton { + text-align: left; +} + +.disabled { + color: #b2b2b2; +} + +/* ### -- -- -- -- -- System Messages (Success, Warning, Error) -- -- -- -- -- ### */ + +.success, .warning, .error { + border-width: 1px; + border-style: solid; + background-position: 10px center; + background-repeat: no-repeat; + padding: 7px 45px 7px 10px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.success { + color: #090; + border-color: #090; + background-color: #efe; + background-image: url("../../../icon/successM.png"); +} + +.success a, .success a:hover { + color: #333; +} + +.warning { + color: #660; + border-color: #660; + background-color: #ffd; + background-image: url("../../../icon/warningM.png"); +} + +.warning a, .warning a:hover { + color: #333; +} + +.error { + color: #c00; + border-color: #c00; + background-color: #fee; + background-image: url("../../../icon/errorM.png"); +} + +.error a, .error a:hover { + color: #333; +} + +.errorField { + color: #c00; +} + +.errorField img { + vertical-align: middle; +} + +/* ### -- -- -- -- -- System Exception -- -- -- -- -- ### */ + +#systemException { + font-family: Verdana, Helvetica, sans-serif; + font-size: 1em; + border: 1px outset lightgrey; + background-color: lightgrey; + padding: 3px; +} + +#systemException div { + border: 1px inset lightgrey; + padding: 4px; +} + +#systemException h1 { + color: #fff; + font-size: 1.2em; + background-color: #154268; + margin: 0 0 3px 0; + padding: 4px; +} + +#systemException h2 { + font-size: 1.1em; + margin-bottom: 0; +} + +#systemException pre, #systemException p { + font-size: 1em; + margin: 0; +} + +#packageUrl { + text-decoration: underline; + border: none; + background: transparent; + padding: 0; +} + +/* ### -- -- -- -- -- EOF -- -- -- -- -- ### */ diff --git a/wcfsetup/install/files/acp/style/extra/setupWindowStyle.css b/wcfsetup/install/files/acp/style/extra/setupWindowStyle.css new file mode 100644 index 0000000000..65ea041ff7 --- /dev/null +++ b/wcfsetup/install/files/acp/style/extra/setupWindowStyle.css @@ -0,0 +1,213 @@ + +/* ### -- -- -- -- -- Setup Window Styles -- -- -- -- -- ### */ + +/* + +File: setupWindowStyle.css +Copyright 2006-2009 by WoltLab GmbH. + +*/ + +/* -- -- -- -- -- -- -- Miscellaneous -- -- -- -- -- -- -- */ + +body { + color: #333; + font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; + font-size: .82em; + background-color: #fff; + margin: 0; + padding: 0; +} + +.inner { + padding: 0 20px 10px 20px; +} + +fieldset { + font-size: .82em; + border: 1px solid #8da4b7; + margin-bottom: 10px; + padding: 0; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +legend { + color: #164369; + font-size: 1em; + margin: 0 10px; + padding: 0 4px; +} + +fieldset p, fieldset div { + margin: 8px 0 0 0; + padding: 0; +} + +/* -- -- -- -- -- -- -- Forms -- -- -- -- -- -- -- */ + +form { + margin: 0; + padding: 0; +} + +label { + margin-bottom: 2px; + display: block; +} + +textarea, .inputText { + width: 99%; +} + +textarea, select, input[type="text"], input[type="password"] { + border-width: 1px; + border-style: solid; + border-color: #666 #999 #ccc #999; + background-color: #fafafa; + background-image: url("../../images/setupInputBackground.png"); + background-position: left top; + background-repeat: repeat-x; + padding: 2px; + min-height: 13px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; + background-image: url("../../images/setupInputBackground.png"); + background-repeat: repeat-x; + outline: 0; +} + +textarea, select, .inputText { + border: 1px solid #8da4b7; + background-color: #fafafa; +} + +textarea:focus, select:focus, .inputText:focus { + border: 1px solid #fa2; + background-color: #fff9f4; +} + +input[type="file"] { + width: 100%; +} + +textarea, select, input[type="text"], input[type="password"] { + padding: 2px; +} + +.select label { + margin-bottom: 5px; + padding-left: 25px; +} + +.select input { + float: left; +} + +.nextButton { + text-align: right; +} + +.disabled { + color: #b2b2b2; +} + +/* ### -- -- -- -- -- System Messages (Success, Warning, Error) -- -- -- -- -- ### */ + +.success, .warning, .error { + border-width: 1px; + border-style: solid; + background-position: 10px center; + background-repeat: no-repeat; + padding: 7px 10px 7px 45px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.success { + color: #090; + border-color: #090; + background-color: #efe; + background-image: url("../../../icon/successM.png"); +} + +.success a, .success a:hover { + color: #333; +} + +.warning { + color: #660; + border-color: #660; + background-color: #ffd; + background-image: url("../../../icon/warningM.png"); +} + +.warning a, .warning a:hover { + color: #333; +} + +.error { + color: #c00; + border-color: #c00; + background-color: #fee; + background-image: url("../../../icon/errorM.png"); +} + +.error a, .error a:hover { + color: #333; +} + +.errorField { + color: #c00; +} + +.errorField img { + vertical-align: middle; +} + +/* ### -- -- -- -- -- System Exception -- -- -- -- -- ### */ + +#systemException { + font-family: Verdana, Helvetica, sans-serif; + font-size: 1em; + border: 1px outset lightgrey; + background-color: lightgrey; + padding: 3px; +} + +#systemException div { + border: 1px inset lightgrey; + padding: 4px; +} + +#systemException h1 { + color: #fff; + font-size: 1.2em; + background-color: #154268; + margin: 0 0 3px 0; + padding: 4px; +} + +#systemException h2 { + font-size: 1.1em; + margin-bottom: 0; +} + +#systemException pre, #systemException p { + font-size: 1em; + margin: 0; +} + +#packageUrl { + text-decoration: underline; + border: none; + background: transparent; + padding: 0; +} + +/* ### -- -- -- -- -- EOF -- -- -- -- -- ### */ diff --git a/wcfsetup/install/files/acp/style/style.css b/wcfsetup/install/files/acp/style/style.css new file mode 100644 index 0000000000..dac5cd3e1a --- /dev/null +++ b/wcfsetup/install/files/acp/style/style.css @@ -0,0 +1,224 @@ + +/* dynamic style attributes */ + +.largeButtons li a,.pmEditFolders a{background-image:url("../images/WoltLab Blue Sunrise/largeButtons-ltr.png")} +.largeButtons li a:hover,.pmEditFolders a:hover{background-image:url("../images/WoltLab Blue Sunrise/largeButtons-ltr.png")} +.largeButtons li a,.pmEditFolders a{border-style:solid} +.largeButtons li a{border-width:0px} +.largeButtons li{border-style:solid} +.largeButtons li{border-width:0px} +.largeButtons li a,.pmEditFolders a{color:#fff} +.largeButtons li a:hover,.pmEditFolders a:hover{color:#fff} +.memberList li .memberName,.messageNumber,.optionButtons a,.smallButtons a,li.extraButton a{background-color:#d9e5ef} +.memberList li .memberName{border-color:#d9e5ef} +.memberList li .memberName:hover,.messageNumber:hover,.optionButtons a:hover,.pageNavigation li ul,.smallButtons a:hover,li.extraButton a:hover{background-color:#ffe0b8} +.memberList li .memberName,.messageNumber,.optionButtons a,.smallButtons a,li.extraButton a{background-image:url("../images/WoltLab Blue Sunrise/smallButtons.png")} +.memberList li .memberName:hover,.messageNumber:hover,.optionButtons a:hover,.smallButtons a:hover,li.extraButton a:hover{background-image:url("../images/WoltLab Blue Sunrise/smallButtonsHover.png")} +.memberList li,.memberList li .memberRemove{background-color:#fff} +.optionButtons a,.pageNavigation a,.pageNavigation li span,.smallButtons a,li.extraButton a{border-color:#fff} +.memberList li .memberRemove:hover,.memberList li:hover{background-color:#fff} +.optionButtons a:hover,.pageNavigation a:hover,.smallButtons a:hover,li.extraButton a:hover{border-color:#fff} +.pageNavigation li.children:hover > span{border-color:#fff} +.optionButtons a,.pageNavigation a,.pageNavigation li span,.smallButtons a,li.extraButton a{border-style:solid} +.optionButtons a,.pageNavigation a,.pageNavigation li span,.smallButtons a,li.extraButton a{border-width:1px} +.footerOptions li.extraButton,.memberList li,.messageNumber,.optionButtons li,.pageNavigation li,.smallButtons li,li.extraButton{border-color:#8da4b7} +.memberList li:hover,.messageNumber:hover,.optionButtons li:hover,.pageNavigation li:hover,.smallButtons li:hover,li.extraButton:hover{border-color:#fa2} +.memberList li,.messageNumber,.optionButtons li,.smallButtons li,li.extraButton{border-style:solid} +.li.extraButton,.memberList li,.messageNumber,.optionButtons li,.smallButtons li{border-width:1px} +.container-1 .smallButtons a,.container-2 .smallButtons a,.container-3 .smallButtons a,.memberList li .memberName,.messageInner .color-1 .smallButtons a,.messageInner .color-2 .smallButtons a,.messageNumber,.optionButtons a,.smallButtons a,li.extraButton a{color:#666} +.container-1 .smallButtons a:hover,.container-2 .smallButtons a:hover,.container-3 .smallButtons a:hover,.memberList li .memberName:hover,.messageInner .color-1 .smallButtons a:hover,.messageInner .color-2 .smallButtons a:hover,.messageNumber:hover,.optionButtons a:hover,.smallButtons a:hover,li.extraButton a:hover{color:#333} +.border,.mceResizeBox,.pmEditFolders,.pmUsageBar,.popupMenu,.quoteBox,.subTabMenu{background-color:#fff} +#logo,#search,.attachmentPreview ul li a,.border .tableList td,.border .tableList th,.columnContainer,.dividers .messageAuthor,.dividers .tocHeadline,.dividers .userAvatar,.dividers .userCredits,.dividers .userMessenger,.dividers .userSymbols,.inlineCalendarFooter td a,.inlineCalendarFooter td span,.inlineCalendarHeader td a,.inlineCalendarHeader td span,.mainMenu .mainMenuInner,.mainMenu a,.mceEditor .mceColors li,.messageContent,.messageInner,.subTabMenu div.containerHead,.tabMenu li a,.userAvatar,.userAvatarFramed{border-color:#fff} +#footer,#header,.attachmentFile ul li,.attachmentPreview ul li:hover,.avatarDisplay div,.avatarSelect li label,.border,.footerMenu li,.footerOptions li,.galleryIndex li.floatedElement:hover,.inlineCalendarFooter,.inlineCalendarHeader,.inlineCalendarTable,.mainMenu,.marked,.mceResizeBox,.message,.messageContentInner,.messageNumber,.pageNavigation li ul,.pmEditFolders,.pmUsageBar,.popupMenu,.quoteBox,.searchContainer,.subTabMenu,.tabMenu li,.userAvatar a,.userAvatarFramed a,fieldset{border-color:#8da4b7} +.border,.error,.info,.inlineCalendarFooter,.inlineCalendarHeader,.inlineCalendarTable,.message,.pageNavigation li ul,.pmEditFolders,.pmUsageBar,.popupMenu,.quoteBox,.searchContainer,.subTabMenu,.success,.tabMenu li,.warning,fieldset{border-style:solid} +.border,.error,.info,.inlineCalendarFooter,.inlineCalendarHeader,.inlineCalendarTable,.message,.quoteBox,.searchContainer,.success,.warning,fieldset{border-width:1px} +.containerHead,.inlineCalendarFooter td,.inlineCalendarHeader td,.tabMenu li.activeTabMenu a,.tabMenu li.activeTabMenu a:hover{background-color:#164369} +.containerHead,.inlineCalendarFooter td,.inlineCalendarHeader td{background-image:url("../images/WoltLab Blue Sunrise/containerHead.png")} +.containerHead .light,.containerHead .light a{color:#fff} +.containerHead,.inlineCalendarFooter td a,.inlineCalendarFooter td span,.inlineCalendarHeader td a,.inlineCalendarHeader td span{color:#fff} +.containerHead a,.tabMenu li.activeTabMenu a,.tabMenu li.activeTabMenu a:hover{color:#fff} +.containerHead a:hover{color:#fff} +.container-1,.container-1 fieldset fieldset,.container-2 fieldset,.dynBoxInner,.inlineCalendarTable,.messageInner .color-1,.pageNavigation li ul,div.pageMenu li.container-1 a,fieldset{background-color:#f8fafb} +.inlineCalendarTable a{border-color:#f8fafb} +.container-1 fieldset,.container-1 fieldset fieldset.noJavaScript fieldset,.container-2,.container-2 fieldset fieldset,.container-3 fieldset,.messageInner .color-2,.weekDays,div.pageMenu li.container-2 a,fieldset fieldset{background-color:#f2f6fa} +.container-3,.container-3 fieldset fieldset,.itemList .itemListCategory,.tableList tbody tr:hover,.threadStarterPost .poll .container-3{background-color:#d8e7f5} +.messageContainer,.messageContainerFooter{border-color:#d8e7f5} +.container-4,.galleryAlbumCover img,.userAvatarFramed{background-color:#fff} +#userCardCredits,.attachmentPreview ul li,.buttonBar,.deleteNote,.editNote,.friendsConnection,.friendsNetwork,.friendsNone,.galleryIndex li.floatedElement,.guestAdvice,.itemList .itemListTitle,.mainMenu div.pageMenu .bottomSeparator a,.mainMenu div.pageMenu .topSeparator a,.messageFooter,.messageFooterLeft,.messageFooterRight,.messageHeader,.signature,.subHeadline,div.pageMenu .bottomSeparator a,div.pageMenu .topSeparator a{border-color:#c5d0da} +.buttonBar,.deleteNote,.editNote,.itemList .itemListTitle,.mainMenu div.pageMenu .bottomSeparator a,.mainMenu div.pageMenu .topSeparator a,.messageFooter,.messageFooterLeft,.messageFooterRight,.messageHeader,.signature,.subHeadline,div.pageMenu .bottomSeparator a,div.pageMenu .topSeparator a{border-style:solid} +.mainMenu div.pageMenu .bottomSeparator a,div.pageMenu .bottomSeparator a{border-bottom-width:1px} +.mainMenu div.pageMenu .topSeparator a,div.pageMenu .topSeparator a{border-top-width:1px} +.deleteNote,.editNote,.itemList .itemListTitle,.messageFooter,.messageFooterLeft,.messageFooterRight,.messageHeader,.signature,.subHeadline{border-width:1px} +#logo h1{position: absolute; top: -9000px; left: -9000px;} +.inputText,select,textarea{background-color:#fff} +.inputText:focus,select:focus,textarea:focus{background-color:#fff9f4} +.inputText,select,textarea{border-color:#8da4b7} +.inputText:focus,select:focus,textarea:focus{border-color:#fa2} +.inputText,select,textarea{border-style:solid} +.inputText,.inputText:focus,select,select:focus,textarea,textarea:focus{border-width:1px} +.editor textarea,.inputText,select,textarea{font-family:'Trebuchet MS', Arial, sans-serif} +.editor textarea,.inputText,select,textarea{color:#333} +.editor textarea:focus,.inputText:focus,select:focus,textarea:focus{color:#000} +.editor textarea,.inputText,select,textarea{font-size:.85em} +.mainMenu div.pageMenu a,.optionButtons li,.pageNavigation a,.pageNavigation li.children span,div.messageInner div.pageMenu a,div.messageInner div.smallButtons div.pageMenu a,div.pageMenu a,div.smallButtons div.pageMenu a{background-color:#f8fafb} +.mainMenu div.pageMenu a:hover,.pageNavigation a:hover,.pageNavigation li.children:hover span,div.messageInner div.pageMenu a:hover,div.messageInner div.smallButtons div.pageMenu a:hover,div.pageMenu .twoRows a:hover,div.pageMenu a:hover,div.smallButtons div.pageMenu a:hover{background-color:#ffe0b8} +.mainMenu div.pageMenu a:hover,.pageNavigation a:hover,.pageNavigation li span:hover,div.messageInner div.pageMenu a:hover,div.messageInner div.smallButtons div.pageMenu a:hover,div.pageMenu a:hover,div.smallButtons div.pageMenu a:hover{background-image:url("../images/WoltLab Blue Sunrise/tableHeadHover.png")} +.pageNavigation li.children:hover > span{background-image:url("../images/WoltLab Blue Sunrise/tableHeadHover.png")} +.mainMenu div.pageMenu a,.pageNavigation a,.pageNavigation li.children span,.tableList div.pageMenu a,div.messageInner div.pageMenu a,div.messageInner div.smallButtons div.pageMenu a,div.pageMenu a,div.smallButtons div.pageMenu a{color:#333} +.mainMenu div.pageMenu a:hover,.pageNavigation a:hover,.pageNavigation li.children:hover span,.tableList div.pageMenu a:hover,div.messageInner div.pageMenu a:hover,div.messageInner div.smallButtons div.pageMenu a:hover,div.pageMenu a:hover,div.smallButtons div.pageMenu a:hover{color:#333} +.mainMenu .active a,.mainMenu .firstActive a,.mainMenu .lastActive a{background-color:#154268} +.mainMenu .active a:hover,.mainMenu .firstActive a:hover,.mainMenu .lastActive a:hover{background-color:#154268} +.mainMenu .active a,.mainMenu .firstActive a,.mainMenu .lastActive a{color:#d9e5ef} +.mainMenu .active a:hover,.mainMenu .firstActive a:hover,.mainMenu .lastActive a:hover{color:#fff} +.mainMenu a:hover{background-color:#ffe0b8} +.mainMenu .active a,.mainMenu .firstActive a,.mainMenu .lastActive a,.mainMenu a:hover{background-image:url("../images/WoltLab Blue Sunrise/menuActive.png")} +.mainMenu{background-color:transparent} +.mainMenu a{color:#154268} +.mainMenu a:hover{color:#333} +.mainMenu div{text-align:left;margin:0 auto 0 0} +.tabMenu ul li.activeTabMenu a{background-color:#164369} +.tabMenu ul li.activeTabMenu a:hover{background-color:#164369} +.tabMenu ul li.activeTabMenu a{color:#fff} +.tabMenu li a,.tabMenu li.disabled a:hover{background-color:#e8e8e8} +.tabMenu li a:hover{background-color:#8da4b7} +.tabMenu li a,.tabMenu li.disabled a:hover{background-image:url("../images/WoltLab Blue Sunrise/tab.png")} +.tabMenu li a:hover,.tabMenu li.activeTabMenu a,.tabMenu ul li.activeTabMenu a:hover{background-image:url("../images/WoltLab Blue Sunrise/tabActive.png")} +.subTabMenu ul .activeSubTabMenu a{background-color:#17354e} +.subTabMenu ul .activeSubTabMenu a:hover{background-color:#487397} +.subTabMenu ul .activeSubTabMenu a{color:#fff} +.subTabMenu ul .activeSubTabMenu a:hover{color:#fff} +.subTabMenu ul li a:hover{background-color:#487397} +.subTabMenu ul .activeSubTabMenu a,.subTabMenu ul li a{border-color:#487397} +.subTabMenu ul .activeSubTabMenu a:hover,.subTabMenu ul li a:hover{border-color:#8da4b7} +.subTabMenu ul .activeSubTabMenu a,.subTabMenu ul li a:hover{border-style:solid} +#search .searchContainer p a,.subTabMenu ul li a{color:#ddd} +#search .searchContainer p a:hover,.subTabMenu ul li a:hover{color:#fff} +.tabMenu li a,.tabMenu li.disabled a:hover{color:#666} +.tabMenu li a:hover{color:#fff} +.message .messageSidebar{text-align:center} +#footer,#header,#main,#mainMenu,#userPanel{margin-left:auto;margin-right:auto;} +body,html{background-color:#fff} +.iframeBody,body,textarea{font-family:'Trebuchet MS', Arial, sans-serif} +.formFieldDesc,.light{color:#858789} +#footer,#search .searchContainer p a,.boardlistCounter,.boardlistDescription,.boardlistLastPost,.boardlistSubboards,.boardlistUsersOnline,.deleteNote,.editNote,.firstPost,.formField label,.formFieldDesc,.loginPopup,.messageNumber,.moderators,.pageNavigation,.pageNavigation input,.pmMove p,.pmUsage,.popupMenu,.smallButtons li span,.smallFont,.statusDisplay,.subTabMenu ul li,.tableList th,.userCredits,.userExtras,.userPanel,div.inlineCalendar,td.columnLastActivity,td.columnLocation,td.columnRegistrationDate,td.columnUserAgent{font-size:.85em} +.userPanel a,body,legend{color:#57595a} +.breadCrumbs,.error,.info,.message h3,.message h4,.messageBody,.success,.warning{line-height:1.5} +.iframeBody,body{font-size:.8em} +#logo{height:90px} +a,div.pageMenu .twoRows a span{color:#154268} +a:hover,div.pageMenu .twoRows a:hover span{color:#000} +* a.externalURL{color:#154268} +* a.externalURL:hover{color:#08f} +#logo .pageLogo{text-align:left} +#logo .pageLogo img{margin-left:0px} +#logo .pageLogo img{margin-right:0px} +#logo .pageLogo img{margin-top:5px} +h2{font-family:'Trebuchet MS', Arial, sans-serif} +h2,h2 a,h2 a:hover{color:#173f61} +h2{font-size:1.5em} +h2{font-style:normal} +h2{font-weight:normal} +#footer,#header,#main,#mainMenu,#userPanel{max-width:80%} +#footer,#header,#main,#mainMenu,#userPanel{min-width:760px} +.activeContainer,.activeMessage,.mainMenu div.pageMenu .active a,.markedDayField a,.pageNavigation .active span,div.pageMenu li.active a{background-color:#d8e7f5} +.activeContainer,.avatarSelect li label:hover,.inlineCalendarTable a:hover,.markedDayField a,.pageNavigation .active{border-color:#487397} +.activeContainer,.avatarDisplay div,.avatarSelect li label,.avatarSelect li label:hover,.inlineCalendarTable a:hover,.markedDayField a,.pageNavigation .active{border-style:solid} +.activeContainer,.avatarDisplay div,.avatarSelect li label,.avatarSelect li label:hover,.inlineCalendarTable a:hover,.markedDayField a,.pageNavigation .active{border-width:1px} +.activeContainer .light,.activeContainer .light a,.activeContainer a:hover{color:#333} +.activeContainer,.mainMenu div.pageMenu .active a,.markedDayField a,.pageNavigation .active span,div.pageMenu li.active a{color:#333} +.activeContainer a{color:#333} +.tableHead .active .emptyHead,.tableHead .active a{background-color:#ffe0b8} +.tableHead .active a:hover{background-color:#ffe0b8} +.tableHead .active .emptyHead,.tableHead .active a{border-color:#fa2} +.tableHead .active a:hover{border-color:#f60} +.tableHead .active .emptyHead,.tableHead .active a{color:#000} +.tableHead .active a:hover{color:#000} +.tableHead .emptyHead,.tableHead a{background-color:#eee} +.tableHead a:hover{background-color:#ffe0b8} +.tableHead .emptyHead,.tableHead a{background-image:url("../images/WoltLab Blue Sunrise/tableHead.png")} +.tableHead .active .emptyHead,.tableHead .active a,.tableHead .active a:hover,.tableHead a:hover{background-image:url("../images/WoltLab Blue Sunrise/tableHeadHover.png")} +.tableHead .emptyHead,.tableHead a{border-color:#8da4b7} +.tableHead a:hover{border-color:#154268} +.tableHead .emptyHead,.tableHead a{color:#154268} +.tableHead a:hover{color:#000} + +/* user.additional.style.input1.use */ + +html {background-color: #eee;} +#main {padding-top: 0;} +h1 {text-shadow: 0 -1px 1px #000;} +h2, h2 a {text-shadow: 0 2px 3px #bbb;} +legend {color: #487397;} +#headerContainer {background-color: #164369;background-image: url("../images/WoltLab Blue Sunrise/header.jpg");background-repeat: repeat-x;background-position: left top;} +#header {border-width: 0 !important;} +#logo {margin: 0;border-width: 0 !important;} +#userPanel {background-image: url("../images/WoltLab Blue Sunrise/userPanel.png");background-repeat: repeat-x;background-position: left bottom;max-width: 100%;min-width: 100%;width: 100%;} +.userPanelInner {max-width: 80%;min-width: 770px;margin: 0 auto;} +.userPanel, .userPanel a {color: #ebf1f6;} +.userPanel a:hover {color: #fff;} +.userPanel .border, .userPanel .popupMenu a {color: #57595a;} +#search {right: 0;top: 23px;} +#search .searchContainer {text-align: center;background-color: transparent;background-image: url("../images/WoltLab Blue Sunrise/searchContainer.png");background-repeat: no-repeat;background-position: right top;padding-left: 40px;min-height: 24px;} +#mainMenu {max-width: 100%;min-width: 100%;width: 100%;} +.mainMenu {min-height: 31px;background-color: transparent;background-image: url("../images/WoltLab Blue Sunrise/menuBar.png");background-repeat: repeat-x;background-position: left bottom;padding-bottom: 6px;border-width: 0 !important;} +.mainMenu .mainMenuInner {max-width: 80%;min-width: 770px;margin: 0 auto;border-width: 0 !important;} +.mainMenu a {text-shadow: 0 1px 0 #fff;border: 1px solid #c2c2c2;border-width: 0 1px 1px 1px;padding: 3px 5px 4px 5px;line-height: 1;} +.mainMenu a:hover {background-image: url("../images/WoltLab Blue Sunrise/menuHover.png");} +.mainMenu .active a, .mainMenu .firstActive a, .mainMenu .lastActive a {text-shadow: 0 -1px 0 #036;background-image: url("../images/WoltLab Blue Sunrise/menuActive.png") !important;} +#mainMenu span {position: relative;top: 5px;} +.mainMenu img {float: left;padding-right: 4px;} +#footerContainer {background-color: #eee;border-top: 1px solid #8da4b7;} +#footer {border: 0 !important;} +.pageNavigation a:hover {background-image: url("../images/WoltLab Blue Sunrise/smallButtonsHover.png");} +.messageLeft, .messageRight, .messageFramedLeft, .messageFramedRight, .messageTop, .messageFramedTop {background-image: url("../images/WoltLab Blue Sunrise/messageSidebar.jpg");background-repeat: repeat-x;} +.userName a span, .quickReply h3 a {text-shadow: 0 1px 0 #fff;} +.poll .pollQuestion {background-image: url("../images/WoltLab Blue Sunrise/poll.jpg");background-repeat: repeat-x;} +.threadStarterPost .messageLeft, .threadStarterPost .messageRight, .threadStarterPost .messageFramedLeft, .threadStarterPost .messageFramedRight, .threadStarterPost .messageTop, .threadStarterPost .messageFramedTop {background-image: url("../images/WoltLab Blue Sunrise/messageSidebarThreadStarter.jpg");background-repeat: repeat-x;} +.threadStarterPost .container-3 {background-color: #ffddb7;} +.threadStarterPost .codeBox .container-3 {background-color: #d8e7f5;} +.firstPost a {color: #858789;} +.smallButtons span {text-shadow: 0 1px 0 #fff;} +.largeButtons a {line-height: 1;background-image: url("../images/WoltLab Blue Sunrise/largeButtons-ltr.png");background-position: right 0;background-repeat: no-repeat;padding: 0 7px 0 0;} +.largeButtons a img {margin-top: 5px;margin-left: 7px;position: absolute;} +.largeButtons a span {color: #fff;text-shadow: 0 -1px 0 #036;background-image: url("../images/WoltLab Blue Sunrise/largeButtons-ltr.png");background-position: left 0;background-repeat: no-repeat;padding: 9px 3px 0 36px;display: block;height: 25px;cursor: pointer;} +.largeButtons a:hover {background-position: right -86px;} +.largeButtons a:hover span {color: #000;text-shadow: 0 1px 0 #fff;background-position: left -86px;} +.tabMenu a span, .tabMenu li.disabled a span {text-shadow: 0 1px 0 #fff;} +.tabMenu .activeTabMenu a span, .tabMenu a:hover span, .subTabMenu a span {text-shadow: 0 -1px 0 #036;} +.containerHead, .containerHead a {text-shadow: 0 -1px 0 #036;} +.subHeadline {text-shadow: 0 1px 0 #fff;} +.memberList li span {text-shadow: 0 1px 0 #fff;} +.galleryIndex li span {text-shadow: 0 1px 0 #fff;} +select, textarea, input[type="text"], input[type="password"] {border-width: 1px;border-style: solid;border-color: #666 #999 #ccc #999;background-image: url("../images/WoltLab Blue Sunrise/inputBackground.png");background-position: left top;background-repeat: repeat-x;min-height: 13px;} +select, textarea:focus, input[type="text"]:focus, input[type="password"]:focus {background-image: url("../images/WoltLab Blue Sunrise/inputBackground.png");background-repeat: repeat-x;outline: 0;} + +/* user.additional.style.input2.use */ + +* {-o-text-overflow: ellipsis;} +.message, .messageInner, .quoteBox, fieldset, .info, .success, .warning, .error, .help, #userCard, .userCardInner, .second .border, .second .border .content, .avatarSelect li.container-4, .avatarSelect li label, .floatedElement, .popupMenu, .loginPopup, .loginPopup .container-1 {-webkit-border-radius: 5px; -moz-border-radius: 5px;} +.messageLeft .messageContent, .messageLeft .messageContentInner {-webkit-border-top-right-radius: 5px; -moz-border-radius-topright: 5px; -webkit-border-bottom-right-radius: 5px; -moz-border-radius-bottomright: 5px;} +.messageRight .messageContent, .messageRight .messageContentInner {-webkit-border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px;} +.messageFramedLeft .messageContent, .messageFramedLeft .messageContentInner, .messageFramedRight .messageContent, .messageFramedRight .messageContentInner {-webkit-border-radius: 5px; -moz-border-radius: 5px;} +.messageTop .messageContent, .messageTop .messageContentInner {-webkit-border-radius: 0; -moz-border-radius: 0;} +.messageFramedTop .messageContent, .messageFramedTop .messageContentInner {-webkit-border-radius: 5px; -moz-border-radius: 5px;} +textarea, select, input[type="text"], input[type="password"], .memberList li, .smallButtons > ul > li, .smallButtons > ul > li > a, .extraButton, .extraButton a, .optionButtons > ul > li, .optionButtons > ul > li > a, .subTabMenu .containerHead li a, .pmUsageBar, .statBar, .userAvatarFramed, .userAvatarFramed a, .userAvatarFramed img {-webkit-border-radius: 3px; -moz-border-radius: 3px;} +.pmUsageBar > div, .statBar > div {-webkit-border-radius: 1px; -moz-border-radius: 1px;} +.popupMenu li:first-child a, #boardlist .border, .titleBarPanel, .titleBarPanel .containerHead, .messagePreview, .subTabMenu, .subTabMenu .containerHead, .containerHead, .messageTop .messageSidebar, .messageFramedTop .messageSidebar, .thumbnailButtons {-webkit-border-top-left-radius: 5px; -moz-border-radius-topleft: 5px; -webkit-border-top-right-radius: 5px; -moz-border-radius-topright: 5px;} +.codeBox {-webkit-border-top-left-radius: 3px; -webkit-border-top-right-radius: 3px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px;} +.tabMenu li:first-child, .tabMenu li:first-child a {-webkit-border-top-left-radius: 5px; -moz-border-radius-topleft: 5px;} +.tabMenu li:last-child, .tabMenu li:last-child a {-webkit-border-top-right-radius: 5px; -moz-border-radius-topright: 5px;} +.searchInputMenu .pageMenu, .popupMenu li:last-child a, .twoRows li:last-child {-webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-right-radius: 5px; -moz-border-radius-bottomright: 5px;} +#boardlist .border .boardlistInner, .twoRows li:last-child a, .datalist li:last-child {-webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;} +.popupMenu li a, #boardlist .border .boardlistInner:first-child {-webkit-border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; -webkit-border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0;} +.mceToolbar .popupMenu, .mceToolbar .popupMenu li, .mceToolbar .popupMenu li a, .second fieldset .editor, .second fieldset .border, .attachmentPreview, .attachmentPreview li, .tableList td.containerHead {-webkit-border-top-left-radius: 0 !important; -webkit-border-top-right-radius: 0 !important; -webkit-border-bottom-right-radius: 0 !important; -moz-border-radius-topleft: 0 !important; -webkit-border-bottom-left-radius: 0 !important; -moz-border-radius-topright: 0 !important; -moz-border-radius-bottomleft: 0 !important; -moz-border-radius-bottomright: 0 !important;} +.loginPopup input#quickLoginUsername {-webkit-border-top-right-radius: 0; -webkit-border-bottom-right-radius: 0; -moz-border-radius-topright: 0; -moz-border-radius-bottomright: 0;} +.loginPopup input#quickLoginPassword {-webkit-border-top-left-radius: 0; -webkit-border-bottom-left-radius: 0; -moz-border-radius-topleft: 0; -moz-border-radius-bottomleft: 0;} +input#searchInput {-webkit-border-radius: 12px; -moz-border-radius: 12px;} +#searchInput {background-image: url("../images/WoltLab Blue Sunrise/searchBack-ltr.png"); background-position: -2px top; padding-left: 33px; width: 154px; height: 16px;} +.searchOptions {background-image: url("../images/WoltLab Blue Sunrise/searchBackOptions-ltr.png") !important;} +.searchOptions:focus {background-image: url("../images/WoltLab Blue Sunrise/searchBackOptionsActive-ltr.png") !important;} +.galleryPhotoEdit img, .galleryAlbumCover img {-webkit-box-shadow: 0 3px 7px #666; -moz-box-shadow: 0 3px 7px #666;} +.galleryIndex li.floatedElement .thumbnail img, .squared .thumbnail img {-webkit-box-shadow: 0 1px 3px #666; -moz-box-shadow: 0 1px 3px #666;} +.galleryIndex li.floatedElement:hover, .avatarSelect li label:hover {-webkit-box-shadow: 0 1px 3px #999; -moz-box-shadow: 0 1px 3px #999;} +.galleryPhoto img {-webkit-box-shadow: 0 3px 7px #666; -moz-box-shadow: 0 3px 7px #666; margin: 10px;} +.imageViewerCurrentImage {-webkit-box-shadow: 0 3px 23px #000; -moz-box-shadow: 0 3px 23px #000;} diff --git a/wcfsetup/install/files/acp/style/testing-reset.css b/wcfsetup/install/files/acp/style/testing-reset.css new file mode 100644 index 0000000000..e9e771a842 --- /dev/null +++ b/wcfsetup/install/files/acp/style/testing-reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/style/testing.css b/wcfsetup/install/files/acp/style/testing.css new file mode 100644 index 0000000000..270d566946 --- /dev/null +++ b/wcfsetup/install/files/acp/style/testing.css @@ -0,0 +1,687 @@ +body { + font-family: "Lucida Sans", "Lucida Grande", "Monaco", "Geneva", sans-serif; + font-size: 0.8em; +} + +a { + color: #00c; + text-decoration: none; +} + +a:hover { + color: #f80; + text-decoration: underline; +} + +header { + border-bottom: 1px solid #ccc; + margin: 21px; + padding: 21px; + padding-bottom: 0; +} + +header div#logo h1 { + font-size: 160%; + position: relative; + top: 45px; +} + +header div#logo img { + float: left; +} + +header div#logo a { + display: block; + height: 100px; + margin-bottom: 21px; + text-align: right; +} + +aside { + float: left; + margin: 0 0 21px 21px; + width: 300px; +} + +nav#navigationTop li { + background-color: #eee; + border: 1px solid #ccc; + border-bottom: 0; + cursor: pointer; + display: inline-block; + padding: 7px; +} + +nav#navigationTop li.activeMenuItem { + background-color: #faebd7; + border-color: #ff8800; +} + +nav#navigationSide div.menuContainer h3 { + background-color: #eee; + background-image: url(../../icon/testing/arrowRightS.png); + background-position: 7px center; + background-repeat: no-repeat; + border: 1px solid #ccc; + border-top-width: 0; + cursor: pointer; + font-size: 120%; + padding: 7px; + padding-left: 28px; + position: relative; +} + +nav#navigationSide div.menuContainer h3.activeMenuItem { + background-image: url(../../icon/testing/arrowDownS.png); +} + +nav#navigationSide div.menuContainer h3:first-child { + border-top: 1px solid #ccc; +} + +nav#navigationSide div.menuContainer div { + background-color: #fefefe; + border: 1px solid #ccc; + border-top-width: 0; +} + +nav#navigationSide div.menuContainer ul li { + padding: 7px 7px 7px 21px; +} + +nav#navigationSide div.menuContainer ul li.activeMenuItem { + background-color: #faebd7; +} + +nav#navigationSide div.menuContainer ul li.activeMenuItem a { + color: #ff8800; + font-weight: bold; +} + +nav#navigationSide div.menuContainer ul li a { + text-decoration: none !important; +} + +nav#navigationSide div.menuContainer ul li a:hover { + text-decoration: underline !important; +} + +div#content { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#eee, #fefefe); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#eee, #fefefe); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fefefe)); + + border: 1px solid #ccc; + margin: 0 21px 21px 340px; + padding: 21px; +} + +footer { + background-color: #eee; + border: 1px solid #ccc; + border-bottom-width: 0; + clear: both; + margin: 0 21px 0 21px; + padding: 7px; +} + +footer p.copyright { + display: inline-block; +} + +footer nav#navigationFooter { + float: right; +} + +footer nav#navigationFooter a span { + display: none; +} + +footer nav#navigationFooter ul li { + display: inline-block; +} + +div.wcfDimensions { + display: inline-block; +} + +div.overlayLoading { + background-color: #fff; + background-image: url(../../images/spinner.gif); + background-position: center center; + background-repeat: no-repeat; +} + +div.ui-dialog { + border: 10px solid rgba(0,0,0,0.2); + border-radius: 15px; + display: inline-block !important; + width: auto !important; + min-width: 80px; +} + +div.ui-dialog-content p { + background-color: #fff; + padding: 7px; +} + +div.ui-dialog-titlebar { + background-color: #ccc; + border-bottom: 5px solid rgba(0,0,0,0.6); + padding: 7px; + position: relative; +} + +span.ui-dialog-title { + color: #fff; + text-shadow: #000 0 0 5px; +} + +a.ui-dialog-titlebar-close { + background-image: url(../../icon/deleteM.png); + background-position: top left; + background-repeat: no-repeat; + height: 24px; + position: absolute !important; + right: -16px; + top: -16px; + width: 24px; +} + +a.ui-dialog-titlebar-close span { + display: none; + visibility: hidden; +} + +div.ui-widget-overlay { + background-color: #000; + left: 0px; + opacity: 0.6; + position: fixed; + top: 0px; +} + +div.mainHeadline { + height: 48px; + margin-bottom: 7px; + position: relative; +} + +div.mainHeadline img { + position: absolute; + top: -4px; + left: 0px; +} + +div.mainHeadline div.headlineContainer { + height: 48px; + padding-left: 60px; + vertical-align: middle; +} + +div.mainHeadline div.headlineContainer h2 { + border-bottom: 1px solid #ccc; + font-size: 140%; + padding-bottom: 3px; +} + +div.mainHeadline div.headlineContainer p { + padding-top: 3px; +} + +h3.subHeadline { + border-bottom: 2px solid #000; + font-size: 120%; + margin: 14px 0 14px 0; + padding: 7px; +} + +fieldset { + border: 1px solid #ccc; + border-radius: 10px; + margin: 7px 0 7px 0; + padding: 14px; +} + +fieldset legend { + padding: 0 7px 0 7px; +} + +fieldset p.description { + color: #777; + font-size: 90%; +} + +fieldset > ul { + margin: 7px 0 21px 21px; +} + +fieldset > ul li { + list-style-type: circle; +} + +div.formElement { + clear: both; + margin-bottom: 14px; +} + +div.formFieldLabel { + float: left; + text-align: right; + width: 230px; +} + +div.formField { + margin-left: 250px; +} + +div.formFieldDesc { + color: #777; + font-size: 90%; + margin: 3px 0 7px 250px; +} + +div.formGroupLabel label { + display: none; +} + +div.formGroupField div.formField label { + display: block; +} + +.border { + border: 1px solid #ccc; + border-radius: 5px; + margin: 14px 0 14px 0; +} + +.borderMarginRemove { + border-radius: 0 0 5px 5px; + margin-top: 0; +} + +.titleBarPanel { + background-color: #eee; + border-radius: 5px 5px 0 0; + border-bottom-width: 0; + margin-bottom: 0; + padding: 7px; +} + +.tabMenuContent, +.content { + border-width: 0 !important; +} + +table { + border-radius: 0 0 5px 5px; + width: 100% !important; +} + +th { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#fefefe, #eee); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#fefefe, #eee); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#fefefe), to(#eee)); + + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + padding: 7px; +} + +th.active { + background-color: #faebd7; + + /* Opera */ + background: -o-linear-gradient(#faebd7, #fa0); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#faebd7, #fa0); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#faebd7), to(#fa0)); +} + +th.active:hover { + background-color: #fa0; + + /* Opera */ + background: -o-linear-gradient(#fa0, #faebd7); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#fa0, #faebd7); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#fa0), to(#faebd7)); +} + +th:hover { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#eee, #fefefe); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#eee, #fefefe); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fefefe)); +} + +th:last-child { + border-right-width: 0; +} + +th a { + display: block; + text-decoration: none; +} + +th a:hover { + color: #00c !important; + text-decoration: none !important; +} + +td { + border-right: 1px solid #fff; + padding: 5px; +} + +td:last-child { + border-right-width: 0; +} + +tbody tr { + border-bottom: 1px solid #fff; +} + +tbody tr:last-child { + border-bottom-width: 0; +} + +tr.container-1:hover td, +tr.container-2:hover td { + background-color: #ddd; +} + +tr.container-1 td { + background-color: #fefefe; +} + +tr.container-2 td { + background-color: #eee; +} + +.pageNavigation ul li { + display: inline-block; +} + +.pageNavigation ul li:not(.skip) { + background-color: #eee; + border: 1px solid #ccc; + padding: 3px; +} + +.pageNavigation ul li.active, +.pageNavigation ul li:not(.skip):hover { + background-color: #faebd7; + border-color: #ff8800; + color: #ff8800; +} + +.pageNavigation ul li a { + text-decoration: none; +} + +.pageNavigation ul li:not(.skip):hover a { + color: #ff8800; +} + +.pageNavigation ul li.skip { + vertical-align: middle; +} + +div.largeButtons { + text-align: right; +} + +div.largeButtons ul li { + display: inline; +} + +input[type='reset'], +input[type='submit'], +div.largeButtons ul li a { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#fefefe, #eee); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#fefefe, #eee); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#fefefe), to(#eee)); + + border: 1px solid #ccc; + border-radius: 10px; + display: inline-block; + padding: 7px; +} + +input[type='reset']:hover, +input[type='submit']:hover, +div.largeButtons ul li a:hover { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#eee, #fefefe); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#eee, #fefefe); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#eee), to(#fefefe)); + + text-decoration: none; +} + +div.largeButtons ul li a img { + vertical-align: middle; +} + +div.formSubmit { + text-align: center; +} + +input[type='reset'], +input[type='submit'] { + cursor: pointer; +} + +div#packageInstallationDialogContainer { + background-color: #fefefe; + + /* Opera */ + background: -o-linear-gradient(#fefefe, #eee); + + /* Fuckyoufox */ + background: -moz-linear-gradient(#fefefe, #eee); + + /* Chrome/Safari */ + background: -webkit-gradient(linear, center top, center bottom, from(#fefefe), to(#eee)); + + height: 100%; + max-width: 600px; + padding: 21px; +} + +div#ajaxExceptionStacktrace { + overflow: scroll; + overflow-y: hidden; + white-space: nowrap; +} + +div#packageInstallationInnerContentContainer { + border-top: 2px solid #999 !important; + border-radius: 0 !important; + margin-top: 21px; + padding-top: 14px; +} + +div#packageInstallationInnerContent p.error { + background-color: #fdd; + border: 3px solid #ed1c24; + border-radius: 5px; + margin-bottom: 14px; + padding: 7px; +} + +div#ajaxExceptionStacktrace { + border: 1px solid #ccc; + font-family: monospace; + font-size: 90%; + line-height: 1.2em; + padding: 3px; +} + +p.success { + background-color: #b5e61d; + border: 1px solid #22b14c; + border-radius: 5px; + margin-bottom: 14px; + padding: 7px; +} + +hr { + display: none; +} + +#actionProxyLoading { + background-color: #faebd7; + border: 1px solid #f80; + border-top-width: 0; + border-radius: 0 0 5px 5px; + left: 43%; + padding: 7px 21px 7px 21px; + position: fixed; + top: 0; +} + +fieldset legend ~ p { + margin-bottom: 14px; +} + +dl { + clear: both; + margin-bottom: 7px; +} + +dt /* is op */ { + float: left; + text-align: right; + width: 230px; +} + +dd { + margin-left: 250px; +} + +dl dd ~ p { + color: #777; + font-size: 90%; + margin: 3px 0 7px 250px; +} + +dl.disabled dt { + color: #777; +} + +/* Taken from jQuery UI @ themes/base/jquery.ui.tabs.css */ +.ui-tabs { + position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: 3px; + zoom: 1; +} +.ui-tabs .ui-tabs-nav { + height: 18px !important; /* Fix for some cruel clearing problem */ + margin: 0 0 0 14px; + + background-color: none; + padding: 3px 3px 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 1px; + margin: 0 3px 1px 0; + border-bottom: 0 !important; + padding: 0; + white-space: nowrap; + z-index: 90; /* Prevent border overlay during transition */ +} +.ui-tabs .ui-tabs-nav li a { + background-color: #fefefe; + background: -o-linear-gradient(#fefefe, #eee); + border: 1px solid #ccc; + border-bottom-width: 0; + border-radius: 10px 10px 0 0; + + float: left; + padding: 7px 14px; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { + margin-bottom: 0; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a { + background-color: #fefefe; + background: -o-linear-gradient(#eee, #fefefe); + border-bottom: 1px solid #fefefe; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-state-processing a { + cursor: default; +} +.ui-tabs .ui-tabs-nav li a, +.ui-tabs .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + background-color: #fefefe; + border: 1px solid #ccc !important; + z-index: 89; /* Prevent border overlay during transition */ + + display: block; + padding: 14px 21px; +} +.ui-tabs .ui-tabs-hide { + display: none !important; +} + +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } \ No newline at end of file diff --git a/wcfsetup/install/files/acp/style/wcfAcp.css b/wcfsetup/install/files/acp/style/wcfAcp.css new file mode 100644 index 0000000000..851ea39344 --- /dev/null +++ b/wcfsetup/install/files/acp/style/wcfAcp.css @@ -0,0 +1,455 @@ + +/* ### -- -- -- -- -- ACP Special Styles -- -- -- -- -- ### */ + +/* + +File: acp.css +Copyright 2006-2010 by WoltLab GmbH. + +*/ +/* ### -- -- -- -- -- Miscellaneous -- -- -- -- -- ### */ + +body, html { + background-color: #fff; + background-image: url("../images/WoltLab Blue Sunrise/body-ltr.png"); + background-position: left; + background-repeat: repeat-y; + background-attachment: scroll; + margin: 0; + padding: 0; +} + +#content { + padding: 30px 0 20px 180px; + min-width: 800px; + max-width: 75%; +} + +.userPanelInner, #header, #menuBar .mainMenuInner { + margin: 0; + padding: 0; + width: 100%; + min-width: 100%; + max-width: 100%; +} + +#userNote { + padding-left: 23px; +} + +.logoInner { + padding-left: 5px; +} + +#date { + padding: 10px 23px 3px 5px; + position: absolute; + right: 0; +} + +#header { + background-color: transparent !important; +} + +#logo .pageLogo img { + margin-left: 20px; +} + +h1 { + text-shadow: 0 -1px 1px #000; +} + +#logo h1{ + font-family: 'Trebuchet MS', Arial, sans-serif; + text-align: right; + position: absolute; + top: 0; + left: 0; +} + +#logo h1, #logo h1 a{ + color: #fff; +} + +#logo h1 a{ + padding-top: 35px; + padding-right: 23px; +} + +#logo h1{ + font-size: 1.5em; + font-weight: bold; +} + +h2, h2 a { + text-shadow: 0 2px 3px #bbb; +} + +#tplStyleList .styleList .subHeadline { + text-shadow: 0 1px 0 #fff; +} + +#tplStyleList .styleList .messageBody { + padding-top: 0; +} + +#footer { + margin: 0; + width: 100%; + min-width: 100%; + max-width: 100%; +} + +#footer:after { + display: block; + clear: both; + content: ""; + height: 0; +} + +#footerContainer { + background-color: transparent; + margin: 0 0 0 180px; + min-width: 800px; + max-width: 75%; +} + +.contentHeader form.quickJump div { + margin-top: 5px; + float: left; + display: inline; +} + +.copyright { + padding-top: 5px; + float: left; + clear: none; +} + +/* ### -- -- -- -- -- Sidebar -- -- -- -- -- ### */ + +#sidebar { + background-color: transparent; + background-image: url("../images/WoltLab Blue Sunrise/sidebar.png"); + background-repeat: repeat-x; + background-position: left top; + border-right: 1px solid #8da4b7; + position: absolute; + left: 0; + width: 129px; + min-height: 400px; +} + +#sidebar ul { + list-style: none; + margin: 0 0 0 8px; + padding: 0; +} + +#sidebar li { + text-align: center; + margin: 10px 0 0 0; + float: left; + width: 114px; +} + +#sidebar a { + text-align: center; + text-decoration: none; + float: left; + clear: left; + width: 100%; +} + +#sidebar img { + margin: 14px auto 3px auto; + height: 48px; + width: 48px; + display: block; +} + +#sidebar span { + font-weight: bold; + text-shadow: 0 1px 0 #fff; + padding: 0 0 10px 0; + display: block; +} + +#sidebar li:hover { + background-image: url("../images/WoltLab Blue Sunrise/sidebarHoverTop.png"); + background-position: left top; + background-repeat: no-repeat; +} + +#sidebar li:hover span { + background-image: url("../images/WoltLab Blue Sunrise/sidebarHoverBottom.png"); + background-position: left bottom; +} + +#sidebar li:active, #sidebar li.active { + background-image: url("../images/WoltLab Blue Sunrise/sidebarActiveTop.png"); + background-repeat: no-repeat; +} + +#sidebar li:active span, #sidebar li.active span { + color: #fff; + text-shadow: 0 -1px 0 #000; + background-image: url("../images/WoltLab Blue Sunrise/sidebarActiveBottom.png"); + background-position: left bottom; +} + +/* ### -- -- -- -- -- Menu -- -- -- -- -- ### */ + +/* ToDo: Clean up this mess */ + +#menuBar { + min-height: 31px; +} + +#menuBar .mainMenuInner > ul { + padding-left: 129px; +} + +.mainMenu { + border: 0; +} + +.mainMenu a { + padding: 2px 5px 4px 5px; +} + +.mainMenu ul { + margin: 0; +} + +.mainMenu .mainMenuInner > ul > li > a { + min-height: 24px; +} + +.mainMenu .mainMenuInner > ul > li > a > span { + padding: 2px 5px; + display: block; +} + +.mainMenu .popupMenu { + border-top-width: 0; +} + +.mainMenu .popupMenu a { + color: #164369; + text-shadow: none !important; + background-color: #154268; + background-image: none !important; + min-height: 20px; +} + +.mainMenu .popupMenu a:hover { + background-color: #ffe0b8; +} + +#menuBar span { + position: relative; + top: 4px; +} + +#menuBar li div span { + position: relative; + top: 0; +} + +/* #### -- -- -- -- -- Sitemap -- -- -- -- -- #### */ + +.sitemap { + padding: 20px 0 20px 180px; + width: 800px; +} + +.sitemap ul { + list-style: none; + margin: 0; + padding: 0; + min-height: 0; +} + +.sitemap h2 img { + margin-right: 7px; +} + +.sitemap h2 { + padding: 20px 0 10px 0; +} + +.sitemap h3 { + margin-bottom: 5px; +} + +.sitemap h4, .sitemap h5 { + padding: 5px 0; +} + +.sitemap h4 img, .sitemap h5 img { + position: absolute; +} + +.sitemap h4 a, .sitemap h4 span, .sitemap h5 a, .sitemap h5 span { + margin-left: 30px; + display: block; +} + +.sitemap .border { + padding-bottom: 1px; +} + +.sitemap .container-1 { + margin-right: 1px; + padding: 4px; +} + +.sitemap .sitemapDepth-1 li { + margin-right: 2%; + float: left; + width: 30%; +} + +.sitemap .sitemapDepth-1:after { + content: ""; + display: block; + clear: both; + height: 0; +} + +.sitemap .sitemapDepth-2 li { + float: none; + width: auto; +} + +.sitemap .clear { + clear: both; +} + +/* ### -- -- -- -- Access Rights -- -- -- -- ### */ + +.allow, .deny { + font-size: .85em; + font-weight: normal; + text-align: center; + float: right; + width: 80px; + height: 10px; +} + +.accessRightsHeader { + margin-right: 20px; + min-height: 20px; +} + +.accessRights { + border: 1px solid #999; + margin: 0; + padding: 0; + height: auto; + min-height: 100px; + overflow: auto; +} + +.accessRights ul { + list-style: none; + margin: 0; + padding: 0; +} + +.accessRights ul li { + min-height: 0; +} + +.formField .accessRights li span { + margin-left: 0; + float: none; +} + +.accessRights ul li span { + padding: 2px 4px; + display: block; + vertical-align: middle; +} + +.accessRights ul li a { + text-decoration: none; + padding: 2px 4px; + display: block; +} + +.accessRights ul li a:hover { + background-color: #d8e7f5; +} + +.accessRights ul li.selected a { + background-color: #8da4b7; +} + +.accessRights ul li a img { + padding-right: 4px; + vertical-align: middle; +} + +.accessRights ul li a.remove { + float: right; + display: inline; +} + +.accessRights ul li a.remove:hover { + background-color: #c00; +} + +.accessRights ul li a.remove img { + padding-right: 0; +} + +.formField .accessRights label { + clear: none; +} + +.accessRightsInput { + width: 300px !important; +} + +.accessRightsTitle { + margin-top: 20px; +} + +#permissions-content div.popupMenu a, #permissions-content div.popupMenu a:hover, #moderators-content div.popupMenu a, #moderators-content div.popupMenu a:hover, #tplGroupAdd div.popupMenu a, #tplGroupAdd div.popupMenu a:hover { + padding: 5px 7px 5px 35px !important; +} + +/* ### -- -- -- -- Special Styles -- -- -- -- ### */ + +* {-o-text-overflow: ellipsis;} + +.sitemap .container-1 { + -webkit-border-bottom-left-radius: 5px; + -webkit-border-bottom-right-radius: 5px; + -moz-border-radius-bottomleft: 5px; + -moz-border-radius-bottomright: 5px; + + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; +} + +.mainMenu .popupMenu, .mainMenu .popupMenu li a { + -webkit-border-top-left-radius: 0; + -webkit-border-top-right-radius: 0; + -moz-border-radius-topleft: 0; + -moz-border-radius-topright: 0; + + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.sitemap .border { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + + border-radius: 5px; +} + +/* ### -- -- -- -- -- EOF -- -- -- -- -- ### */ diff --git a/wcfsetup/install/files/acp/templates/.htaccess b/wcfsetup/install/files/acp/templates/.htaccess new file mode 100644 index 0000000000..3418e55a68 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/acpSessionLog.tpl b/wcfsetup/install/files/acp/templates/acpSessionLog.tpl new file mode 100644 index 0000000000..f437813edb --- /dev/null +++ b/wcfsetup/install/files/acp/templates/acpSessionLog.tpl @@ -0,0 +1,57 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.sessionLog.access.view{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=ACPSessionLog&sessionLogID=$sessionLogID&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} +
+ +{if $sessionAccessLogs|count} +
+

{lang}wcf.acp.sessionLog.access.view.count{/lang}

+
+
+ + + + + + + + + + + + {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} + + + + {foreach from=$sessionAccessLogs item=sessionAccessLog} + + + + + + + + + + {if $additionalColumns.$sessionAccessLog->sessionAccessLogID|isset}{@$additionalColumns.$sessionAccessLog->sessionAccessLogID}{/if} + + {/foreach} + +
{@$sessionAccessLog->sessionAccessLogID}ipAddress != $sessionLog->ipAddress} style="color: red"{/if}>{$sessionAccessLog->ipAddress}{@$sessionAccessLog->time|time}{$sessionAccessLog->packageName}{$sessionAccessLog->className}{if !$sessionAccessLog->hasProtectedURI()}{$sessionAccessLog->requestURI|truncate:50}{else}{$sessionAccessLog->requestURI|truncate:50}{/if}{$sessionAccessLog->requestMethod}
+
+ + +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl b/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl new file mode 100644 index 0000000000..06ce005277 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/acpSessionLogList.tpl @@ -0,0 +1,57 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.sessionLog.view{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=ACPSessionLogList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} +
+ +{if $sessionLogs|count} +
+

{lang}wcf.acp.sessionLog.view.count{/lang}

+
+
+ + + + + + + + + + + + {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} + + + + {foreach from=$sessionLogs item=sessionLog} + active} activeContainer{/if}"> + + + + + + + + + {if $additionalColumns.$sessionLog->sessionLogID|isset}{@$additionalColumns.$sessionLog->sessionLogID}{/if} + + {/foreach} + +
{@$sessionLog->sessionLogID}{if $__wcf->user->userID == $sessionLog->userID}{/if} {$sessionLog->username}{$sessionLog->ipAddress}
{$sessionLog->hostname}
{$sessionLog->userAgent}{@$sessionLog->time|time}{@$sessionLog->lastActivityTime|time}{#$sessionLog->accesses}
+
+ + +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/ajaxException.tpl b/wcfsetup/install/files/acp/templates/ajaxException.tpl new file mode 100644 index 0000000000..147a1de86c --- /dev/null +++ b/wcfsetup/install/files/acp/templates/ajaxException.tpl @@ -0,0 +1,3 @@ +

{$message}

+ +
{$stacktrace}
\ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/cacheList.tpl b/wcfsetup/install/files/acp/templates/cacheList.tpl new file mode 100644 index 0000000000..9722809832 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/cacheList.tpl @@ -0,0 +1,90 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.cache.list{/lang}

+
+
+ +{if $cleared} +

{lang}wcf.acp.cache.clear.success{/lang}

+{/if} + +
+ {lang}wcf.acp.cache.data{/lang} + +
+

{lang}wcf.acp.cache.data.source{/lang}

+

{$cacheData.source}

+
+ {if $cacheData.version} +
+

{lang}wcf.acp.cache.data.version{/lang}

+

{$cacheData.version}

+
+ {/if} +
+

{lang}wcf.acp.cache.data.size{/lang}

+

{@$cacheData.size|filesize}

+
+
+

{lang}wcf.acp.cache.data.files{/lang}

+

{#$cacheData.files}

+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ +
+
+ +
+
+ +{foreach from=$caches key=cache item=files} + {if $files|count} +
+
+
+ +
+
+

{$cache} ({#$files|count})

+
+
+
+
+ + + + + + + + + + + {foreach from=$files item=file} + + + + + + + {/foreach} + +
{lang}wcf.acp.cache.list.name{/lang}
{lang}wcf.acp.cache.list.size{/lang}
{lang}wcf.acp.cache.list.mtime{/lang}
{lang}wcf.acp.cache.list.perm{/lang}
{$file.filename}{@$file.filesize|filesize}{if $file.mtime > 1}{@$file.mtime|time}{/if}{@$file.perm}
+
+ + {/if} +{/foreach} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/cronjobAdd.tpl b/wcfsetup/install/files/acp/templates/cronjobAdd.tpl new file mode 100644 index 0000000000..b09961ba6b --- /dev/null +++ b/wcfsetup/install/files/acp/templates/cronjobAdd.tpl @@ -0,0 +1,186 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.cronjob.{$action}{/lang}

+

{lang}wcf.acp.cronjob.subtitle{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $success|isset} +

{lang}wcf.acp.cronjob.{$action}.success{/lang}

+{/if} + +

{lang}wcf.acp.cronjob.intro{/lang}

+ + +
+
+
+
+ {lang}wcf.acp.cronjob.edit.data{/lang} + +
+
+ +
+
+ + {if $errorField == 'className'} +

+ {if $errorType == 'empty'}{lang}wcf.acp.cronjob.error.empty{/lang}{/if} + {if $errorType == 'doesNotExist'}{lang}wcf.acp.cronjob.error.doesNotExist{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ +
+ +
+ +
+ +
+ {lang}wcf.acp.cronjob.edit.timing{/lang} +
+
+ +
+
+ + {if $errorField == 'startMinute'} +

+ {if $errorType == 'notValid'}{lang}wcf.acp.cronjob.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'startHour'} +

+ {if $errorType == 'notValid'}{lang}wcf.acp.cronjob.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'startDom'} +

+ {if $errorType == 'notValid'}{lang}wcf.acp.cronjob.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'startMonth'} +

+ {if $errorType == 'notValid'}{lang}wcf.acp.cronjob.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'startDow'} +

+ {if $errorType == 'notValid'}{lang}wcf.acp.cronjob.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+
+ + + {@SID_INPUT_TAG} + {if $cronjobID|isset}{/if} +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/cronjobList.tpl b/wcfsetup/install/files/acp/templates/cronjobList.tpl new file mode 100644 index 0000000000..86004e95f8 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/cronjobList.tpl @@ -0,0 +1,141 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.cronjob.list{/lang}

+

{lang}wcf.acp.cronjob.subtitle{/lang}

+
+ + +
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=CronjobList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} + + {if $__wcf->session->getPermission('admin.system.cronjobs.canAddCronjob')} + + {/if} +
+ +{if !$items} +
+
+

{lang}wcf.acp.cronjob.noneAvailable{/lang}

+
+
+{else} +
+

{lang}wcf.acp.cronjob.list.count{/lang}

+
+
+ + + + + + + + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} + + + + {foreach from=$cronjobs item=cronjob} + + + + + + + + + + + + {if $additionalColumns[$cronjob->cronjobID]|isset}{@$additionalColumns[$cronjob->cronjobID]}{/if} + + {/foreach} + +
+ {if $__wcf->session->getPermission('admin.system.cronjobs.canEditCronjob')} + + {/if} + + {if $cronjob->canBeDisabled()} + + {else} + {if $cronjob->active} + + {else} + + {/if} + {/if} + + {if $cronjob->isEditable()} + + {else} + + {/if} + {if $cronjob->isDeletable()} + + {else} + + {/if} + {if $additionalButtons[$cronjob->cronjobID]|isset}{@$additionalButtons[$cronjob->cronjobID]}{/if} + {@$cronjob->cronjobID}{$cronjob->startMinute|truncate:30:' ...'}{$cronjob->startHour|truncate:30:' ...'}{$cronjob->startDom|truncate:30:' ...'}{$cronjob->startMonth|truncate:30:' ...'}{$cronjob->startDow|truncate:30:' ...'} + {if $cronjob->editable} + {$cronjob->description|truncate:50:" ..."} + {else} + {$cronjob->description|truncate:50:' ...'} + {/if} + + {if $cronjob->active && $cronjob->nextExec != 1} + {@$cronjob->nextExec|plaintime} + {/if} +
+
+ + +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/cronjobLogList.tpl b/wcfsetup/install/files/acp/templates/cronjobLogList.tpl new file mode 100644 index 0000000000..2328099faa --- /dev/null +++ b/wcfsetup/install/files/acp/templates/cronjobLogList.tpl @@ -0,0 +1,76 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.cronjob.log{/lang}

+

{lang}wcf.acp.cronjob.subtitle{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=CronjobLogList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} +
+ +{hascontent} +
+
+

{lang}wcf.acp.cronjob.log.data{/lang}

+
+
+ + + + + + + + + {if $additionalColumns|isset}{@$additionalColumns}{/if} + + + + {content} + {foreach from=$cronjobLogs item=cronjobLog} + + + + + {if $cronjobLog->success} + + {elseif $cronjobLog->error} + + {else} + + {/if} + + {if $cronjobLog->additionalColumns|isset}{@$cronjobLog->additionalColumns}{/if} + + {/foreach} + {/content} + +
{@$cronjobLog->cronjobID}{$cronjobLog->classPath}{$cronjobLog->description}{@$cronjobLog->execTime|time} {lang}wcf.acp.cronjob.log.success{/lang} + {@$cronjobLog->execTime|time} {lang}wcf.acp.cronjob.log.error{/lang}
+ {@$cronjobLog->error} +
+
+ +
+ {@SID_INPUT_TAG} + +
+
+ + +{hascontentelse} +
+
+

{lang}wcf.acp.cronjob.log.noEntries{/lang}

+
+
+{/hascontent} + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/footer.tpl b/wcfsetup/install/files/acp/templates/footer.tpl new file mode 100644 index 0000000000..104f6a5c96 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/footer.tpl @@ -0,0 +1,15 @@ +
+ + + + + + + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/header.tpl b/wcfsetup/install/files/acp/templates/header.tpl new file mode 100644 index 0000000000..b44bbc9971 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/header.tpl @@ -0,0 +1,127 @@ + + + + + {if $pageTitle|isset}{@$pageTitle}{else}{lang}wcf.global.pageTitle{/lang}{/if} - {lang}wcf.acp{/lang} + + + + + + + + {* + {if $specialStyles|isset} + + {@$specialStyles} + {/if} + *} + + + + + + + {* + + + + *} + + + + +
+ + + + + + + + + + + + +
+ + +
+ + +
diff --git a/wcfsetup/install/files/acp/templates/imageViewer.tpl b/wcfsetup/install/files/acp/templates/imageViewer.tpl new file mode 100644 index 0000000000..be642a90c3 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/imageViewer.tpl @@ -0,0 +1,31 @@ + + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/index.tpl b/wcfsetup/install/files/acp/templates/index.tpl new file mode 100644 index 0000000000..cff6ff88ed --- /dev/null +++ b/wcfsetup/install/files/acp/templates/index.tpl @@ -0,0 +1,3 @@ +{include file='header'} + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/languageServerAdd.tpl b/wcfsetup/install/files/acp/templates/languageServerAdd.tpl new file mode 100644 index 0000000000..1dc70ac07a --- /dev/null +++ b/wcfsetup/install/files/acp/templates/languageServerAdd.tpl @@ -0,0 +1,63 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.languageServer.{$action}{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $success|isset} +

{lang}wcf.acp.languageServer.{$action}.success{/lang}

+{/if} + + +
+
+
+ +
+ {lang}wcf.acp.languageServer.data{/lang} + +
+
+ +
+
+ + {if $errorField == 'server'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'notValid'}{lang}wcf.acp.languageServer.server.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/languageServerList.tpl b/wcfsetup/install/files/acp/templates/languageServerList.tpl new file mode 100644 index 0000000000..e2ddfa003b --- /dev/null +++ b/wcfsetup/install/files/acp/templates/languageServerList.tpl @@ -0,0 +1,74 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.languageServer.view{/lang}

+
+
+ + + +{if !$languageServers|count} +
+
+

{lang}wcf.acp.languageServer.view.noneAvailable{/lang}

+
+
+{else} +
+

{lang}wcf.acp.languageServer.list.available{/lang}

+
+
+ + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} + + + + {foreach from=$languageServers item=languageServer} + + + + + {if $additionalColumns[$languageServer->languageServerID]|isset}{@$additionalColumns[$languageServer->languageServerID]}{/if} + + {/foreach} + +
+ + + + + {if $additionalButtons[$languageServer->languageServerID]|isset}{@$additionalButtons[$languageServer->languageServerID]}{/if} + {@$languageServer->languageServerID} + + {@$languageServer->serverURL} + +
+
+ +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/login.tpl b/wcfsetup/install/files/acp/templates/login.tpl new file mode 100644 index 0000000000..1ae856c113 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/login.tpl @@ -0,0 +1,61 @@ +{capture assign='pageTitle'}{lang}wcf.acp.login{/lang}{/capture} +{include file='setupHeader'} + + + + + +

{@$pageTitle}

+ +
+ +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+ {lang}wcf.acp.login.data{/lang} + +
+ + + + {if $errorField == 'username'} +

+ + {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'notFound'}{lang}wcf.user.error.username.notFound{/lang}{/if} +

+ {/if} +
+ + + + + + {if $errorField == 'password'} +

+ + {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'false'}{lang}wcf.user.error.password.false{/lang}{/if} +

+ {/if} +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ + +
+ + + {@SID_INPUT_TAG} +
+ + +{include file='setupFooter'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/masterPassword.tpl b/wcfsetup/install/files/acp/templates/masterPassword.tpl new file mode 100644 index 0000000000..97867733c3 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/masterPassword.tpl @@ -0,0 +1,64 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.masterPassword.enter{/lang}

+
+
+ + +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+
+
+ {lang}wcf.acp.masterPassword.enter{/lang} + +
+
+ +
+
+ + {if $errorField == 'masterPassword'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'invalid'}{lang}wcf.acp.masterPassword.error.invalid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} + +
+
+ + + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/masterPasswordInit.tpl b/wcfsetup/install/files/acp/templates/masterPasswordInit.tpl new file mode 100644 index 0000000000..315e3165df --- /dev/null +++ b/wcfsetup/install/files/acp/templates/masterPasswordInit.tpl @@ -0,0 +1,92 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.masterPassword.init{/lang}

+
+
+ + +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+
+
+ {lang}wcf.acp.masterPassword.init{/lang} + +
+
+ +
+
+ + {if $errorField == 'masterPassword'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'notSecure'}{lang}wcf.acp.masterPassword.error.notSecure{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'confirmMasterPassword'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'notEqual'}{lang}wcf.acp.masterPassword.error.notEqual{/lang}{/if} +

+ {/if} +
+
+ +
+
+ +
+ +
+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/option.tpl b/wcfsetup/install/files/acp/templates/option.tpl new file mode 100644 index 0000000000..7d270fc9f9 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/option.tpl @@ -0,0 +1,71 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.option.category.{$category->categoryName}{/lang}

+

{lang}wcf.acp.option.category.{$category->categoryName}.description{/lang}

+
+
+ +{if $success|isset} +

{lang}wcf.acp.option.success{/lang}

+{/if} + +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+ + + {foreach from=$optionTree item=categoryLevel1} + + {/foreach} +
+ +
+ + + {@SID_INPUT_TAG} + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionFieldList.tpl b/wcfsetup/install/files/acp/templates/optionFieldList.tpl new file mode 100644 index 0000000000..f0a147459a --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionFieldList.tpl @@ -0,0 +1,22 @@ +{foreach from=$options item=optionData} + {assign var=option value=$optionData[object]} + {if $errorType|is_array && $errorType[$option->optionName]|isset} + {assign var=error value=$errorType[$option->optionName]} + {else} + {assign var=error value=''} + {/if} +
+
+
{@$optionData[html]}
+ {if $error} +

+ {if $error == 'empty'} + {lang}wcf.global.error.empty{/lang} + {else} + {lang}wcf.user.option.error.{$error}{/lang} + {/if} +

+ {/if} +

{lang}{@$langPrefix}{$option->optionName}.description{/lang}

+
+{/foreach} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionImport.tpl b/wcfsetup/install/files/acp/templates/optionImport.tpl new file mode 100644 index 0000000000..0ef37c1b1c --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionImport.tpl @@ -0,0 +1,80 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.option.importAndExport{/lang}

+
+
+ +{if $success|isset} +

{lang}wcf.acp.option.import.success{/lang}

+{/if} + +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+
+
+ {lang}wcf.acp.option.import{/lang} + +
+
+ +
+
+ + {if $errorField == 'optionImport'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'importFailed'}{lang}wcf.acp.option.import.error.importFailed{/lang}{/if} + {if $errorType == 'uploadFailed'}{lang}wcf.acp.option.import.error.uploadFailed{/lang}{/if} +

+ {/if} +
+ +
+ +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +
+
+
+ {lang}wcf.acp.option.export{/lang} + +
+ + +
+ +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeBoolean.tpl b/wcfsetup/install/files/acp/templates/optionTypeBoolean.tpl new file mode 100644 index 0000000000..7e61779562 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeBoolean.tpl @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeCustomselect.tpl b/wcfsetup/install/files/acp/templates/optionTypeCustomselect.tpl new file mode 100644 index 0000000000..0c4b9d6f70 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeCustomselect.tpl @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeDate.tpl b/wcfsetup/install/files/acp/templates/optionTypeDate.tpl new file mode 100644 index 0000000000..2668c3f569 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeDate.tpl @@ -0,0 +1,26 @@ +
+ {foreach from=$dateInputOrder item=element} +
+ + + {if $element == 'day'} + + {/if} + + {if $element == 'month'} + + {/if} + + {if $element == 'year'} + + {/if} +
+ {/foreach} +
+{if !$yearRequired} +

{lang}wcf.global.date.year.notRequired{/lang}

+{/if} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeMultiselect.tpl b/wcfsetup/install/files/acp/templates/optionTypeMultiselect.tpl new file mode 100644 index 0000000000..5646331295 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeMultiselect.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeRadiobuttons.tpl b/wcfsetup/install/files/acp/templates/optionTypeRadiobuttons.tpl new file mode 100644 index 0000000000..c115f199f6 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeRadiobuttons.tpl @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeSelect.tpl b/wcfsetup/install/files/acp/templates/optionTypeSelect.tpl new file mode 100644 index 0000000000..43f398bb99 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeSelect.tpl @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeText.tpl b/wcfsetup/install/files/acp/templates/optionTypeText.tpl new file mode 100644 index 0000000000..d23c0341d5 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeText.tpl @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/optionTypeTextarea.tpl b/wcfsetup/install/files/acp/templates/optionTypeTextarea.tpl new file mode 100644 index 0000000000..f9d93fa164 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/optionTypeTextarea.tpl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageAutoUpdateList.tpl b/wcfsetup/install/files/acp/templates/packageAutoUpdateList.tpl new file mode 100644 index 0000000000..5cb8751ae0 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageAutoUpdateList.tpl @@ -0,0 +1,106 @@ +{include file='header'} + + + +
+
+ +
+

{lang}wcf.acp.packageUpdate{/lang}

+ {if $availableUpdates|count}

{/if} +
+
+ + {if !$availableUpdates|count} +
+
+

{lang}wcf.acp.packageUpdate.noneAvailable{/lang}

+
+
+ {else} + {foreach from=$availableUpdates item=availableUpdate} +
+
+

+ +

+ +
+
+
+ +
+
+ {$availableUpdate.packageVersion} +
+
+ +
+
+ +
+
+ +
+
+ + {if $availableUpdate.author} +
+
+ +
+
+ {if $availableUpdate.authorURL}{$availableUpdate.author}{else}{$availableUpdate.author}{/if} +
+
+ {/if} + + {if $availableUpdate.packageDescription} +
+

{lang}wcf.acp.package.description{/lang}

+

{$availableUpdate.packageDescription}

+
+ {/if} + +
+ +
+
+
+ {/foreach} + +
+ + + {@SID_INPUT_TAG} +
+ {/if} +
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageInstallationConfirm.tpl b/wcfsetup/install/files/acp/templates/packageInstallationConfirm.tpl new file mode 100644 index 0000000000..32914537b3 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageInstallationConfirm.tpl @@ -0,0 +1,140 @@ +{include file='header'} + + + +
+ +
+

{$archive->getPackageInfo('packageName')}

+

{$archive->getPackageInfo('packageDescription')}

+
+
+ +{if $missingPackages > 0} +

{lang}wcf.acp.package.install.error{/lang}

+{/if} + +{if $excludingPackages|count > 0} +
{lang}wcf.acp.package.install.error.excludingPackages{/lang} +
    + {foreach from=$excludingPackages item=excludingPackage} +
  • {lang}wcf.acp.package.install.error.excludingPackages.excludingPackage{/lang}
  • + {/foreach} +
+
+{/if} + +{if $excludedPackages|count > 0} +
{lang}wcf.acp.package.install.error.excludedPackages{/lang} +
    + {foreach from=$excludedPackages item=excludedPackage} +
  • {lang}wcf.acp.package.install.error.excludedPackages.excludedPackage{/lang}
  • + {/foreach} +
+
+{/if} + +
+ {lang}wcf.acp.package.view.properties{/lang} + +
+

{lang}wcf.acp.package.view.identifier{/lang}

+

{$archive->getPackageInfo('name')}

+
+ +
+

{lang}wcf.acp.package.install.version{/lang}

+

{$archive->getPackageInfo('version')}

+
+ +
+

{lang}wcf.acp.package.view.date{/lang}

+

{@$archive->getPackageInfo('date')|date}

+
+ + {if $archive->getPackageInfo('packageURL') != ''} +
+

{lang}wcf.acp.package.view.url{/lang}

+

{$archive->getPackageInfo('packageURL')}

+
+ {/if} + +
+

{lang}wcf.acp.package.view.author{/lang}

+

{if $archive->getPackageInfo('authorURL')}{$archive->getPackageInfo('author')}{else}{$archive->getPackageInfo('author')}{/if}

+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ +{if $updatableInstances|count > 0} +

{lang}wcf.acp.package.install.updatableInstances.warning{/lang}

+ +
+
+

{lang}wcf.acp.package.install.updatableInstances{/lang}

+

{lang}wcf.acp.package.install.updatableInstances.description{/lang}

+
+
+
+ + + + + + + + + {foreach from=$updatableInstances item=$package} + + + + + {/foreach} + +
{lang}wcf.acp.package.list.name{/lang}
{lang}wcf.acp.package.list.version{/lang}
{$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}{$package.packageVersion}
+
+{/if} + +{if $requiredPackages|count > 0} +
+
+

{lang}wcf.acp.package.view.requiredPackages{/lang}

+

{lang}wcf.acp.package.view.requiredPackages.description{/lang}

+
+
+
+ + + + + + + + + {foreach from=$requiredPackages item=$package} + + + + + {/foreach} + +
{lang}wcf.acp.package.list.name{/lang}
{lang}wcf.acp.package.list.version{/lang}
{lang}wcf.acp.package.install.packageName{/lang}{if $package.minversion|isset}{$package.minversion}{/if}
+
+{/if} + +
+ + + {if $missingPackages == 0 && $excludingPackages|count == 0 && $excludedPackages|count == 0} + + {/if} +
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageInstallationSetup.tpl b/wcfsetup/install/files/acp/templates/packageInstallationSetup.tpl new file mode 100644 index 0000000000..aaf131d9b7 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageInstallationSetup.tpl @@ -0,0 +1,10 @@ +{include file='header' templateName='packageInstallationSetup'} + + + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageInstallationStepPrepare.tpl b/wcfsetup/install/files/acp/templates/packageInstallationStepPrepare.tpl new file mode 100644 index 0000000000..a6eedf13db --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageInstallationStepPrepare.tpl @@ -0,0 +1,15 @@ +
+
+ +
+

Paket »{$queue->packageName}« wird installiert …

+

Aktueller Schritt: {lang}wcf.package.installation.step.prepare{/lang}

+

0%

+
+
+ + + +
\ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageList.tpl b/wcfsetup/install/files/acp/templates/packageList.tpl new file mode 100644 index 0000000000..487834913a --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageList.tpl @@ -0,0 +1,105 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.package.list{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=PackageList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} + + {if $__wcf->session->getPermission('admin.system.package.canInstallPackage') || $additionalLargeButtons|isset} +
+ +
+ {/if} +
+ +{if $packages|count > 0} +
+

{lang}wcf.acp.package.list.count{/lang}

+
+
+ + + + + +
{lang}wcf.acp.package.list.author{/lang}{if $sortField == 'author'} {/if}
+ + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} +
+ + + {foreach from=$packages item=$package} + + + + + + + + + + {if $additionalColumns[$package->packageID]|isset}{@$additionalColumns[$package->packageID]}{/if} + + {/foreach} + +
+ {if $__wcf->session->getPermission('admin.system.package.canUpdatePackage')} + + {else} + + {/if} + {if $__wcf->session->getPermission('admin.system.package.canUninstallPackage') && $package->package != 'com.woltlab.wcf' && $package->packageID != PACKAGE_ID} + + {else} + + {/if} + + {if $additionalButtons[$package->packageID]|isset}{@$additionalButtons[$package->packageID]}{/if} + {@$package->packageID} + {if $package->standalone} + + {elseif $package->isPlugin()} + + {else} + + {/if} + + {$package->getName()}{if $package->instanceNo > 1 && $package->instanceName == ''} (#{#$package->instanceNo}){/if} + {if $package->authorURL}{$package->author}{else}{$package->author}{/if}{$package->packageVersion}{@$package->updateDate|time}
+
+{/if} + + + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageStartInstall.tpl b/wcfsetup/install/files/acp/templates/packageStartInstall.tpl new file mode 100644 index 0000000000..40795c9605 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageStartInstall.tpl @@ -0,0 +1,102 @@ +{include file='header'} + +{if $packageID == 0} +
+ +
+

{lang}wcf.acp.package.startInstall{/lang}

+
+
+{else} +
+ +
+

{lang}wcf.acp.package.startUpdate{/lang}

+
+
+{/if} + +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+ +
+
+
+
+
+
+ {lang}wcf.acp.package.startInstall.source{/lang} + +
+
+ +
+
+ + {if $errorField == 'uploadPackage'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'noValidPackage'}{lang}wcf.acp.package.startInstall.error.noValidPackage{/lang}{/if} + {if $errorType == 'noValidUpdate'}{lang}wcf.acp.package.startInstall.error.noValidUpdate{/lang}{/if} + {if $errorType == 'noValidInstall'}{lang}wcf.acp.package.startInstall.error.noValidInstall{/lang}{/if} + {if $errorType == 'uploadFailed'}{lang}wcf.acp.package.startInstall.error.uploadFailed{/lang}{/if} + {if $errorType == 'uniqueAlreadyInstalled'}{lang}wcf.acp.package.startInstall.error.uniqueAlreadyInstalled{/lang}{/if} + {if $errorType == 'phpRequirements'}

{$phpRequirements|print_r}
{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'downloadPackage'} +

+ {if $errorType == 'notFound'}{lang}wcf.acp.package.startInstall.error.notFound{/lang}{/if} + {if $errorType == 'noValidPackage'}{lang}wcf.acp.package.startInstall.error.noValidPackage{/lang}{/if} + {if $errorType == 'noValidUpdate'}{lang}wcf.acp.package.startInstall.error.noValidUpdate{/lang}{/if} + {if $errorType == 'noValidInstall'}{lang}wcf.acp.package.startInstall.error.noValidInstall{/lang}{/if} + {if $errorType == 'uniqueAlreadyInstalled'}{lang}wcf.acp.package.startInstall.error.uniqueAlreadyInstalled{/lang}{/if} +

+ {/if} +
+ +
+ + +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} + + {if $packageID != 0}{/if} +
+
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl b/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl new file mode 100644 index 0000000000..02dabd785f --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUninstallationDependencies.tpl @@ -0,0 +1,137 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.package.uninstall{/lang}: {$packageObj->getName()}

+

{$packageObj->packageDescription}

+
+
+ +
+ {lang}wcf.acp.package.view.properties{/lang} +
+

{lang}wcf.acp.package.view.identifier{/lang}

+

{$packageObj->package}

+
+
+

{lang}wcf.acp.package.view.version{/lang}

+

{$packageObj->packageVersion}

+
+ {if $packageObj->instanceNo > 0} +
+

{lang}wcf.acp.package.view.instanceNo{/lang}

+

{$packageObj->instanceNo}

+
+ {/if} + {if $packageObj->packageDir != ''} +
+

{lang}wcf.acp.package.view.dir{/lang}

+

{$packageObj->packageDir}

+
+ {/if} +
+

{lang}wcf.acp.package.view.date{/lang}

+

{@$packageObj->packageDate|date}

+
+ {if $packageObj->packageURL != ''} +
+

{lang}wcf.acp.package.view.url{/lang}

+

{$packageObj->packageURL}

+
+ {/if} + {if $packageObj->parentPackageID} +
+

{lang}wcf.acp.package.view.parent{/lang}

+

{$packageObj->getParentPackage()->getName()}

+
+ {/if} +
+

{lang}wcf.acp.package.view.author{/lang}

+

{if $packageObj->authorURL}{$packageObj->author}{else}{$packageObj->author}{/if}

+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ +{if $dependentPackages|count > 0} + {if $uninstallAvailable} +

{lang}wcf.acp.package.uninstall.dependentPackages.warning{/lang}

+ {else} +

{lang}wcf.acp.package.uninstall.dependentPackages.error{/lang}

+ {/if} + +
+

{lang}wcf.acp.package.view.dependentPackages{/lang}

+
+
+ + + + + + + + + + {if $additionalColumns|isset}{@$additionalColumns}{/if} + + + + {foreach from=$dependentPackages item=package} + + + + + + + + + + {if $package.additionalColumns|isset}{@$package.additionalColumns}{/if} + + {/foreach} + +
{lang}wcf.acp.package.list.id{/lang}
{lang}wcf.acp.package.list.name{/lang}
{lang}wcf.acp.package.list.author{/lang}
{lang}wcf.acp.package.list.version{/lang}
{lang}wcf.acp.package.list.date{/lang}
+ {if $__wcf->user->getPermission('admin.system.package.canUpdatePackage')} + + {else} + + {/if} + {if $__wcf->user->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} + + {else} + + {/if} + + {if $package.additionalButtons|isset}{@$package.additionalButtons}{/if} + {@$package.packageID} + {if $package.standalone} + + {elseif $package.parentPackageID} + + {else} + + {/if} + {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}{if $package.authorURL}{$package.author}{else}{$package.author}{/if}{$package.packageVersion}{@$package.packageDate|date}
+
+{/if} + +
+ {@SID_INPUT_TAG} + + + + + +
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageUninstallationStepPrepare.tpl b/wcfsetup/install/files/acp/templates/packageUninstallationStepPrepare.tpl new file mode 100644 index 0000000000..9ce2068083 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUninstallationStepPrepare.tpl @@ -0,0 +1,15 @@ +
+
+ +
+

Paket »{$queue->packageName}« wird deinstalliert …

+

Aktueller Schritt: {lang}wcf.package.uninstallation.step.prepare{/lang}

+

0%

+
+
+ + + +
\ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageUpdate.tpl b/wcfsetup/install/files/acp/templates/packageUpdate.tpl new file mode 100644 index 0000000000..9e0d915e9b --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUpdate.tpl @@ -0,0 +1,65 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.packageUpdate{/lang}

+
+
+ +{if $errorField == 'updates'} + {if $errorType === 'empty'} +

{lang}wcf.acp.packageUpdate.noneSelected{/lang}

+ {else} +

{lang}wcf.acp.packageUpdate.error{/lang} {$errorType->getMessage()} ({@$errorType->getCode()})

+ + {/if} +{/if} + +{if $errorField == 'excludedPackages'} +
{lang}wcf.acp.packageUpdate.excludedPackages{/lang} +
    + {foreach from=$excludedPackages item=excludedPackage} +
  • {if $excludedPackage.conflict == 'existingPackageExcludesNewPackage'}{lang}wcf.acp.packageUpdate.excludedPackages.existingPackageExcludesNewPackage{/lang}{else}{lang}wcf.acp.packageUpdate.excludedPackages.newPackageExcludesExistingPackage{/lang}{/if}
  • + {/foreach} +
+
+{/if} + +{if $packageInstallationStack|count} +
+
+
+
+ {lang}wcf.acp.packageUpdate.updates{/lang} + +
    + {foreach from=$packageInstallationStack item=package} +
  • + {if $package.action == 'install'} + {lang}wcf.acp.packageUpdate.install{/lang} + {else} + {lang}wcf.acp.packageUpdate.update{/lang} + {/if} +
  • + {/foreach} +
+
+
+
+ +
+ {if !$errorField}{/if} + {**} + {@SID_INPUT_TAG} + + + {foreach from=$updates key=package item=version} + + {/foreach} +
+
+{/if} + + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl b/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl new file mode 100644 index 0000000000..183dbe12fe --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUpdateAuth.tpl @@ -0,0 +1,104 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.packageUpdate.auth{/lang}

+
+
+ +{if $errorField != ''} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+
+
+ {lang}wcf.acp.packageUpdate.auth.data{/lang} + +
+

{lang}wcf.acp.packageUpdate.auth.url{/lang}

+

{$url}

+
+ {if $realm} +
+

{lang}wcf.acp.packageUpdate.auth.realm{/lang}

+

{$realm}

+
+ {/if} + {if $message} +
+

{lang}wcf.acp.packageUpdate.auth.message{/lang}

+

{@$message}

+
+ {/if} +
+ +
+ {lang}wcf.acp.packageUpdate.auth.input{/lang} + +
+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'loginPassword'} +

+ {if $errorType == 'invalid'}{lang}wcf.acp.packageUpdate.auth.error{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+ +
+ +
+ +
+
+ +
+ + + + + {@SID_INPUT_TAG} + + + {@$postParameters} +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl b/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl new file mode 100644 index 0000000000..1a9991eb36 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUpdateSearch.tpl @@ -0,0 +1,137 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.packageUpdate.search{/lang}

+
+
+ +{if $errorField != ''} +

{lang}wcf.acp.packageUpdate.noneAvailable{/lang}

+{/if} + +{if !$updateServers|count} +

{lang}wcf.acp.updateServer.view.noneAvailable{/lang}

+{else} +
+
+
+ +
+ {lang}wcf.acp.packageUpdate.search.server{/lang} + +
+
+
+ +
+
+ +
+ {foreach from=$updateServers item=updateServer} +
+
+ +
+
+ {/foreach} +
+
+
+ +
+ {lang}wcf.acp.packageUpdate.search.conditions{/lang} + +
+
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl b/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl new file mode 100644 index 0000000000..08ac297693 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageUpdateSearchResult.tpl @@ -0,0 +1,119 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.packageUpdate.search{/lang}

+
+
+ +
+ {pages print=true assign=pagesLinks link="index.php?page=PackageUpdateSearchResult&searchID=$searchID&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} +
+ +
+ {foreach from=$packages item=package} +
+
+

+ {if $package.standalone == 1} + + {elseif $package.plugin != ''} + + {else} + + {/if} + {$package.packageName} +

+ +
+
+
+ +
+
+ + +
+
+ + {if $package.author != ''} +
+
+ +
+
+ {if $package.authorURL}{$package.author}{else}{$package.author}{/if} +
+
+ {/if} + + {if $package.packageDescription} +
+

{lang}wcf.acp.package.description{/lang}

+

{$package.packageDescription}

+
+ {/if} + +
+ {lang}wcf.acp.packageUpdate.options{/lang} + +
+
    + {* new installation *} + {if $package.isUnique && !$package.updatableInstances|count} +
  • {lang}wcf.acp.packageUpdate.options.alreadyInstalledUnique{/lang}
  • + {/if} + {if !$package.isUnique} +
  • + {/if} + + {* update *} + {foreach from=$package.updatableInstances item=updatableInstance} +
  • + {/foreach} + +
+
+
+ +
+
+
+ {/foreach} + +
+ + + + {@SID_INPUT_TAG} + +
+
+ + + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/packageView.tpl b/wcfsetup/install/files/acp/templates/packageView.tpl new file mode 100644 index 0000000000..8aa426c740 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/packageView.tpl @@ -0,0 +1,234 @@ +{include file='header'} + +
+ +
+

{$package->getName()}

+

{$package->packageDescription}

+
+
+ +
+ {lang}wcf.acp.package.view.properties{/lang} +
+

{lang}wcf.acp.package.view.identifier{/lang}

+

{$package->package}

+
+
+

{lang}wcf.acp.package.view.version{/lang}

+

{$package->packageVersion}

+
+ {if $package->instanceNo > 1} +
+

{lang}wcf.acp.package.view.instanceNo{/lang}

+

{#$package->instanceNo}

+
+ {elseif $package->package == 'com.woltlab.wcf' && WCF_N != 1} +
+

{lang}wcf.acp.package.view.instanceNo{/lang}

+

{#WCF_N}

+
+ {/if} + {if $package->packageDir != ''} +
+

{lang}wcf.acp.package.view.dir{/lang}

+

{$package->packageDir}

+
+ {elseif $package->package == 'com.woltlab.wcf'} +
+

{lang}wcf.acp.package.view.dir{/lang}

+

{WCF_DIR}

+
+ {/if} +
+

{lang}wcf.acp.package.view.date{/lang}

+

{@$package->packageDate|date}

+
+
+

{lang}wcf.acp.package.installDate{/lang}

+

{@$package->installDate|time}

+
+
+

{lang}wcf.acp.package.updateDate{/lang}

+

{@$package->updateDate|time}

+
+ {if $package->packageURL != ''} +
+

{lang}wcf.acp.package.view.url{/lang}

+

{$package->packageURL}

+
+ {/if} + {if $package->parentPackageID} +
+

{lang}wcf.acp.package.view.parent{/lang}

+

{$package->parentPackage()->getName()}

+
+ {/if} +
+

{lang}wcf.acp.package.view.author{/lang}

+

{if $package->authorURL}{$package->author}{else}{$package->author}{/if}

+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ +{assign var=noDependentIsActive value=true} +{foreach from=$dependentPackages item=dependentPackage} + {if $dependentPackage.package != 'com.woltlab.wcf' && $dependentPackage.packageID == PACKAGE_ID} + {assign var=noDependentIsActive value=false} + {* TODO: maybe show user that this package can't be uninstalled because a dependent package is the active standalone application *} + {/if} +{/foreach} + +
+
+ +
+
+ +{if $requiredPackages|count > 0} +
+
+
+
+

{lang}wcf.acp.package.view.requiredPackages{/lang}

+

{lang}wcf.acp.package.view.requiredPackages.description{/lang}

+
+
+
+
+ + + + + + + + + + {if $additionalColumns|isset}{@$additionalColumns}{/if} + + + + {foreach from=$requiredPackages item=$package} + + + + + + + + + + {if $package.additionalColumns|isset}{@$package.additionalColumns}{/if} + + {/foreach} + +
{lang}wcf.acp.package.list.id{/lang}
{lang}wcf.acp.package.list.name{/lang}
{lang}wcf.acp.package.list.author{/lang}
{lang}wcf.acp.package.list.version{/lang}
{lang}wcf.acp.package.list.date{/lang}
+ {if $__wcf->user->getPermission('admin.system.package.canUpdatePackage')} + + {else} + + {/if} + {if $__wcf->user->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} + + {else} + + {/if} + + {if $package.additionalButtons|isset}{@$package.additionalButtons}{/if} + {@$package.packageID} + {if $package.standalone} + + {elseif $package.parentPackageID} + + {else} + + {/if} + {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}{if $package.authorURL}{$package.author}{else}{$package.author}{/if}{$package.packageVersion}{@$package.packageDate|date}
+
+ + +{/if} + +{if $dependentPackages|count > 0} +
+
+
+
+

{lang}wcf.acp.package.view.dependentPackages{/lang}

+

{lang}wcf.acp.package.view.dependentPackages.description{/lang}

+
+
+
+
+ + + + + + + + + + {if $additionalColumns|isset}{@$additionalColumns}{/if} + + + + {foreach from=$dependentPackages item=$package} + + + + + + + + + + {if $package.additionalColumns|isset}{@$package.additionalColumns}{/if} + + {/foreach} + +
{lang}wcf.acp.package.list.id{/lang}
{lang}wcf.acp.package.list.name{/lang}
{lang}wcf.acp.package.list.author{/lang}
{lang}wcf.acp.package.list.version{/lang}
{lang}wcf.acp.package.list.date{/lang}
+ {if $__wcf->user->getPermission('admin.system.package.canUpdatePackage')} + + {else} + + {/if} + {if $__wcf->user->getPermission('admin.system.package.canUninstallPackage') && $package.package != 'com.woltlab.wcf' && $package.packageID != PACKAGE_ID} + + {else} + + {/if} + + {if $package.additionalButtons|isset}{@$package.additionalButtons}{/if} + {@$package.packageID} + {if $package.standalone} + + {elseif $package.parentPackageID} + + {else} + + {/if} + {$package.packageName}{if $package.instanceNo > 1 && $package.instanceName == ''} (#{#$package.instanceNo}){/if}{if $package.authorURL}{$package.author}{else}{$package.author}{/if}{$package.packageVersion}{@$package.packageDate|date}
+
+ + +{/if} + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/permissionDenied.tpl b/wcfsetup/install/files/acp/templates/permissionDenied.tpl new file mode 100644 index 0000000000..7869663509 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/permissionDenied.tpl @@ -0,0 +1,18 @@ +{if $__wcf->session->getPermission('admin.general.canUseAcp')}{include file='header' templateName='permissionDenied'} + +

{lang}wcf.global.error.permissionDenied{/lang}

+ +{include file='footer'} +{else}{capture assign='pageTitle'}{lang}wcf.global.error.permissionDenied.title{/lang}{/capture} +{include file='setupHeader'} + + + +

{@$pageTitle}

+ +
+ +

{lang}wcf.global.error.permissionDenied{/lang}

+ +{include file='setupFooter'} +{/if} diff --git a/wcfsetup/install/files/acp/templates/setupFooter.tpl b/wcfsetup/install/files/acp/templates/setupFooter.tpl new file mode 100644 index 0000000000..b034bf680b --- /dev/null +++ b/wcfsetup/install/files/acp/templates/setupFooter.tpl @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/setupHeader.tpl b/wcfsetup/install/files/acp/templates/setupHeader.tpl new file mode 100644 index 0000000000..4de4001c56 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/setupHeader.tpl @@ -0,0 +1,45 @@ + + + + + {@$pageTitle} - {lang}wcf.global.pageTitle{/lang} + + + + + + + + + + + + + +
+ diff --git a/wcfsetup/install/files/acp/templates/setupWindowFooter.tpl b/wcfsetup/install/files/acp/templates/setupWindowFooter.tpl new file mode 100644 index 0000000000..b034bf680b --- /dev/null +++ b/wcfsetup/install/files/acp/templates/setupWindowFooter.tpl @@ -0,0 +1,3 @@ +
+ + \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/setupWindowHeader.tpl b/wcfsetup/install/files/acp/templates/setupWindowHeader.tpl new file mode 100644 index 0000000000..283925bcc0 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/setupWindowHeader.tpl @@ -0,0 +1,19 @@ + + + + + + + + + + +
diff --git a/wcfsetup/install/files/acp/templates/success.tpl b/wcfsetup/install/files/acp/templates/success.tpl new file mode 100644 index 0000000000..3fa06c2c97 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/success.tpl @@ -0,0 +1,5 @@ +{include file='header'} + +

{lang}{@$message}{/lang}

+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/updateServerAdd.tpl b/wcfsetup/install/files/acp/templates/updateServerAdd.tpl new file mode 100644 index 0000000000..65e597263e --- /dev/null +++ b/wcfsetup/install/files/acp/templates/updateServerAdd.tpl @@ -0,0 +1,97 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.updateServer.{$action}{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $success|isset} +

{lang}wcf.acp.updateServer.{$action}.success{/lang}

+{/if} + +{if $packageUpdateServer|isset && $packageUpdateServer->errorMessage} +

{lang}wcf.acp.updateServer.lastErrorMessage{/lang}
{$packageUpdateServer->errorMessage}

+{/if} + + +
+
+
+ +
+ {lang}wcf.acp.updateServer.data{/lang} + +
+
+ +
+
+ + {if $errorField == 'server'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType == 'notValid'}{lang}wcf.acp.updateServer.server.error.notValid{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + +
+
+ +
+
+ +
+ +
+ + + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/updateServerList.tpl b/wcfsetup/install/files/acp/templates/updateServerList.tpl new file mode 100644 index 0000000000..6bfebfeddf --- /dev/null +++ b/wcfsetup/install/files/acp/templates/updateServerList.tpl @@ -0,0 +1,97 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.updateServer.view{/lang}

+
+
+ +{if $deletedPackageUpdateServerID} +

{lang}wcf.acp.updateServer.delete.success{/lang}

+{/if} + + + +{if !$updateServers|count} +
+
+

{lang}wcf.acp.updateServer.view.noneAvailable{/lang}

+
+
+{else} +
+

{lang}wcf.acp.updateServer.list.available{/lang}

+
+
+ + + + + + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} + + + + {foreach from=$updateServers item=updateServer} + + + + + + + + + + {if $additionalColumns[$updateServer->packageUpdateServerID]|isset}{@$additionalColumns[$updateServer->packageUpdateServerID]}{/if} + + {/foreach} + +
+ + + + + {if $additionalButtons[$updateServer->packageUpdateServerID]|isset}{@$additionalButtons[$updateServer->packageUpdateServerID]}{/if} + {@$updateServer->packageUpdateServerID} + + {@$updateServer->serverURL} + + + {#$updateServer->packages} + + {@$updateServer->status} + +
+ {@$updateServer->errorMessage|truncate:"30"} +
+
+ {if $updateServer->lastUpdateTime}{@$updateServer->lastUpdateTime|time}{/if} +
+
+ +{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/userAdd.tpl b/wcfsetup/install/files/acp/templates/userAdd.tpl new file mode 100644 index 0000000000..368b5f7d4a --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userAdd.tpl @@ -0,0 +1,261 @@ +{include file='header'} + +{if $userID|isset} + + + +{/if} + + +
+ +
+

{lang}wcf.acp.user.{@$action}{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $success|isset} +

{lang}wcf.acp.user.{@$action}.success{/lang}

+{/if} + +{if $userID|isset && $__wcf->user->userID == $userID} +

{lang}wcf.acp.user.edit.warning.selfEdit{/lang}

+{/if} + +
+
+ +
+
+
+
+
+
+
+ +
+
+ + {if $errorType.username|isset} +

+ {if $errorType.username == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType.username == 'notValid'}{lang}wcf.user.error.username.notValid{/lang}{/if} + {if $errorType.username == 'notUnique'}{lang}wcf.user.error.username.notUnique{/lang}{/if} +

+ {/if} +
+
+ + {if $availableGroups|count} +
+
+ +
+
+
+ {lang}wcf.acp.user.groups{/lang} + +
+ {htmlCheckboxes options=$availableGroups name=groupIDs selected=$groupIDs} +
+
+
+
+ {/if} + + {if $action == 'add' || $__wcf->session->getPermission('admin.user.canEditMailAddress')} +
+ {lang}wcf.user.email{/lang} +
+
+ +
+
+ + {if $errorType.email|isset} +

+ {if $errorType.email == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} + {if $errorType.email == 'notValid'}{lang}wcf.user.error.email.notValid{/lang}{/if} + {if $errorType.email == 'notUnique'}{lang}wcf.user.error.email.notUnique{/lang}{/if} +

+ {/if} +
+
+ +
+
+ +
+
+ + {if $errorType.confirmEmail|isset} +

+ {if $errorType.confirmEmail == 'notEqual'}{lang}wcf.user.error.confirmEmail.notEqual{/lang}{/if} +

+ {/if} +
+
+
+ {/if} + + {if $action == 'add' || $__wcf->session->getPermission('admin.user.canEditPassword')} +
+ {lang}wcf.user.password{/lang} +
+
+ +
+
+ + {if $errorType.password|isset} +

+ {if $errorType.password == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+
+ +
+
+ +
+
+ + {if $errorType.confirmPassword|isset} +

+ {if $errorType.confirmPassword == 'notEqual'}{lang}wcf.user.error.confirmPassword.notEqual{/lang}{/if} +

+ {/if} +
+
+
+ {/if} + + {if $additionalFields|isset}{@$additionalFields}{/if} + + {if $optionTree|count || $additionalTabs|isset} +
+ +
+
+
+
+ + {foreach from=$optionTree item=categoryLevel1} + + {/foreach} + {/if} + + {if $additionalTabContents|isset}{@$additionalTabContents}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} + + {if $userID|isset}{/if} +
+
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl b/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl new file mode 100644 index 0000000000..403e91e5ee --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userAssignToGroup.tpl @@ -0,0 +1,51 @@ +{include file='header'} + +
+ +
+

{lang}wcf.acp.user.assignToGroup{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+ +
+
+
+ {lang}wcf.acp.user.assignToGroup.markedUsers{/lang} + +
+ {implode from=$users item=$user}{$user}{/implode} +
+
+ +
+ {lang}wcf.acp.user.groups{/lang} + +
+
+ {htmlCheckboxes options=$groups name=groupIDs selected=$groupIDs} + {if $errorField == 'groupIDs'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+
+
+
+
+ +
+ + + {@SID_INPUT_TAG} + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl b/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl new file mode 100644 index 0000000000..ed7c2e206d --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userEmailAddressExport.tpl @@ -0,0 +1,90 @@ +{include file='header'} + + +
+ +
+

{lang}wcf.acp.user.exportEmailAddress{/lang}

+
+
+ +
+ +
+
+
+ {lang}wcf.acp.user.exportEmailAddress.markedUsers{/lang} + +
+ {implode from=$users item=$user}{$user}{/implode} +
+
+ +
+ {lang}wcf.acp.user.exportEmailAddress.format{/lang} + +
+
+
+ +
+
+
+ {lang}wcf.acp.user.exportEmailAddress.fileType{/lang} + +
+
    +
  • +
  • +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+ + + {@SID_INPUT_TAG} + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userException.tpl b/wcfsetup/install/files/acp/templates/userException.tpl new file mode 100644 index 0000000000..1da9bae441 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userException.tpl @@ -0,0 +1,21 @@ +{include file='header' templateName='userException'} + +

+ {@$message} +

+ + + + + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userGroupAdd.tpl b/wcfsetup/install/files/acp/templates/userGroupAdd.tpl new file mode 100644 index 0000000000..625a2aaac1 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userGroupAdd.tpl @@ -0,0 +1,129 @@ +{include file='header'} + + + +
+ +
+

{lang}wcf.acp.group.{@$action}{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $success|isset} +

{lang}wcf.acp.group.{@$action}.success{/lang}

+{/if} + +{if $warningSelfEdit|isset} +

{lang}wcf.acp.group.edit.warning.selfIsMember{/lang}

+{/if} + +
+
+ +
+
+
+
+
+
+ {lang}wcf.acp.group.data{/lang} + +
+
+ +
+
+ + {if $errorType.groupName|isset} +

+ {if $errorType.groupName == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + + {if $additionalFields|isset}{@$additionalFields}{/if} +
+ + {if $additionalFieldSets|isset}{@$additionalFieldSets}{/if} + +
+ +
+
+
+ {foreach from=$optionTree item=categoryLevel1} + + {/foreach} +
+
+ + {foreach from=$optionTree item=categoryLevel1} + {foreach from=$categoryLevel1[categories] item=categoryLevel2} + + {/foreach} + {/foreach} +
+
+ +
+ + + {@SID_INPUT_TAG} + + {if $groupID|isset}{/if} + + + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userGroupList.tpl b/wcfsetup/install/files/acp/templates/userGroupList.tpl new file mode 100644 index 0000000000..f878807c89 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userGroupList.tpl @@ -0,0 +1,100 @@ +{include file='header'} + + + + + +
+ +
+

{lang}wcf.acp.group.list{/lang}

+
+
+ +{if $deletedGroups} +

{lang}wcf.acp.group.delete.success{/lang}

+{/if} + +
+ {pages print=true assign=pagesLinks link="index.php?page=UserGroupList&pageNo=%d&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} +
+ +
+
+ +{if $groups|count} +
+

{lang}wcf.acp.group.list.data{/lang}

+
+
+ + + + + + + + {if $additionalHeadColumns|isset}{@$additionalHeadColumns}{/if} + + + + {foreach from=$groups item=group} + + + + + + + {if $additionalColumns[$group->groupID]|isset}{@$additionalColumns[$group->groupID]}{/if} + + {/foreach} + +
+ {if $group->isEditable()} + + {else} + + {/if} + {if $group->isDeletable()} + + + {else} + + {/if} + + {if $additionalButtons[$group->groupID]|isset}{@$additionalButtons[$group->groupID]}{/if} + {@$group->groupID}{if $group->isEditable()}{$group->groupName}{else}{$group->groupName}{/if}{#$group->members}
+
+{/if} + + + +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userList.tpl b/wcfsetup/install/files/acp/templates/userList.tpl new file mode 100644 index 0000000000..c91ce1d159 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userList.tpl @@ -0,0 +1,148 @@ +{include file='header'} + + + + + + +
+ +
+

{lang}wcf.acp.user.{if $searchID}search{else}list{/if}{/lang}

+

{if $searchID}{lang}wcf.acp.user.search.matches{/lang}{else}{lang}wcf.acp.user.list.count{/lang}{/if}

+
+
+ +{assign var=encodedURL value=$url|rawurlencode} +{assign var=encodedAction value=$action|rawurlencode} +
+ {pages print=true assign=pagesLinks link="index.php?page=UserList&pageNo=%d&searchID=$searchID&action=$encodedAction&sortField=$sortField&sortOrder=$sortOrder&packageID="|concat:SID_ARG_2ND_NOT_ENCODED} + +
+ +
+
+ +
+
+ +
+
+{if $users|count} +
+ + + + + + + + {foreach from=$columnHeads key=column item=columnLanguageVariable} + + {/foreach} + + {if $additionalColumnHeads|isset}{@$additionalColumnHeads}{/if} + + + + {foreach from=$users item=user} + + + + + + + {foreach from=$columnHeads key=column item=columnLanguageVariable} + + {/foreach} + + {if $additionalColumns[$user->userID]|isset}{@$additionalColumns[$user->userID]}{/if} + + {/foreach} + +
+ + + {if $user->editable} + + {else} + + {/if} + {if $user->deletable} + + {else} + + {/if} + + {if $additionalButtons[$user->userID]|isset}{@$additionalButtons[$user->userID]}{/if} + {@$user->userID}{if $user->editable}{$user->username}{else}{$user->username}{/if}{if $columnValues[$user->userID][$column]|isset}{@$columnValues[$user->userID][$column]}{/if}
+
+ +{else} +
+
{lang}wcf.acp.user.search.error.noMatches{/lang}
+
+{/if} + +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/userMail.tpl b/wcfsetup/install/files/acp/templates/userMail.tpl new file mode 100644 index 0000000000..25969b4f17 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userMail.tpl @@ -0,0 +1,154 @@ +{include file='header'} + +
+ +
+

+ {if $action == 'all'} + {lang}wcf.acp.user.sendMail.all{/lang} + {elseif $action == 'group'} + {lang}wcf.acp.user.sendMail.group{/lang} + {else} + {lang}wcf.acp.user.sendMail{/lang} + {/if} +

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +
+
+ +
+
+
+
+
+ + {if $action == ''} +
+ {lang}wcf.acp.user.sendMail.markedUsers{/lang} + +
+ {implode from=$users item=$user}{$user}{/implode} +
+
+ {/if} + {if $action == 'group'} +
+ {lang}wcf.acp.user.sendMail.groups{/lang} + +
+
+ +
+
+
+ {lang}wcf.acp.user.groups{/lang} + +
+ {htmlCheckboxes options=$groups name=groupIDs selected=$groupIDs} +
+
+ {if $errorField == 'groupIDs'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+
+
+ {/if} +
+ {lang}wcf.acp.user.sendMail.mail{/lang} + +
+
+
+ +
+
+ + {if $errorField == 'subject'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'from'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'text'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+
+ + {if $additionalFields|isset}{@$additionalFields}{/if} +
+
+
+ +
+ + + + {@SID_INPUT_TAG} + +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/userSearch.tpl b/wcfsetup/install/files/acp/templates/userSearch.tpl new file mode 100644 index 0000000000..23273f57b2 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/userSearch.tpl @@ -0,0 +1,238 @@ +{include file='header'} + + + + + +
+ +
+

{lang}wcf.acp.user.search{/lang}

+
+
+ +{if $errorField == 'search'} +

{lang}wcf.acp.user.search.error.noMatches{/lang}

+{/if} + +{*if $deletedUsers} +

{lang}wcf.acp.user.delete.success{/lang}

+{elseif $deletedUsers === 0} +

{lang}wcf.acp.user.delete.error{/lang}

+{/if*} + +
+
+ +
+
+ +
+
+
+
+ {lang}wcf.acp.user.search.conditions.general{/lang} +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ + {if $__wcf->session->getPermission('admin.user.canEditMailAddress')} +
+
+ +
+
+ +
+
+ {/if} + + {if $availableGroups|count} +
+
+ +
+
+
+ {lang}wcf.acp.user.groups{/lang} + +
+ {htmlCheckboxes options=$availableGroups name='groupIDs' selected=$groupIDs} + + +
+
+
+
+ {/if} + + {if $availableLanguages|count > 1} +
+
+ +
+
+
+ {lang}wcf.acp.user.language{/lang} + +
+ {htmlCheckboxes options=$availableLanguages name='languageIDs' selected=$languageIDs disableEncoding=true} +
+
+
+
+ {/if} +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} + +
+ +
+
+
+
+ + {if $optionTree|count} + + {/if} + + {if $additionalTabContents|isset}{@$additionalTabContents}{/if} + + + +
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +{include file='footer'} diff --git a/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl b/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl new file mode 100644 index 0000000000..4434bb5da4 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/usersMassProcessing.tpl @@ -0,0 +1,361 @@ +{include file='header'} + + + + + +
+ +
+

{lang}wcf.acp.user.massProcessing{/lang}

+
+
+ +{if $errorField} +

{lang}wcf.global.form.error{/lang}

+{/if} + +{if $affectedUsers|isset} +

{lang}wcf.acp.user.massProcessing.success{/lang}

+{/if} + +

{lang}wcf.acp.user.massProcessing.warning{/lang}

+ +
+
+
+

{lang}wcf.acp.user.massProcessing.conditions{/lang}

+ +
+ {lang}wcf.acp.user.search.conditions.general{/lang} + +
+
+ +
+
+ + +
+
+ + {if $__wcf->user->getPermission('admin.user.canEditMailAddress')} +
+
+ +
+
+ +
+
+ {/if} + + {if $availableGroups|count} +
+
+ +
+
+
+ {lang}wcf.acp.user.groups{/lang} + +
+ {htmlCheckboxes options=$availableGroups name='groupIDArray' selected=$groupIDArray} + + +
+
+
+
+ {/if} + + {if $availableLanguages|count > 1} +
+
+ +
+
+
+ {lang}wcf.acp.user.language{/lang} + +
+ {htmlCheckboxes options=$availableLanguages name='languageIDArray' selected=$languageIDArray disableEncoding=true} +
+
+
+
+ {/if} +
+ + {if $additionalFields|isset}{@$additionalFields}{/if} + +
+ +
+
+
+
+ + {if $options|count} + + {/if} + + {if $additionalTabContents|isset}{@$additionalTabContents}{/if} +
+
+
+
+

{lang}wcf.acp.user.massProcessing.action{/lang}

+ +
+
+ +
+
+
+ {lang}wcf.acp.user.massProcessing.action{/lang} +
+
    + {if $__wcf->user->getPermission('admin.user.canMailUser')} +
  • +
  • + {/if} + {if $__wcf->user->getPermission('admin.user.canEditUser')} +
  • + {/if} + {if $__wcf->user->getPermission('admin.user.canDeleteUser')} +
  • + {/if} + {if $additionalActions|isset}{@$additionalActions}{/if} +
+
+ {if $errorField == 'action'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+
+
+ +
+
+ {lang}wcf.acp.user.sendMail.mail{/lang} + +
+
+
+ +
+
+ + {if $errorField == 'subject'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'from'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+ + {if $errorField == 'text'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+ +
+ + +
+
+ +
+
+
+
+
+ +
+
+ {lang}wcf.acp.user.exportEmailAddress.format{/lang} + +
+
+
+ +
+
+
+ {lang}wcf.acp.user.exportEmailAddress.fileType{/lang} + +
+
    +
  • +
  • +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ +
+
+ {lang}wcf.acp.user.groups{/lang} + +
+
+ {htmlCheckboxes options=$availableGroups name=assignToGroupIDArray selected=$assignToGroupIDArray} + {if $errorField == 'assignToGroupIDArray'} +

+ {if $errorType == 'empty'}{lang}wcf.global.error.empty{/lang}{/if} +

+ {/if} +
+
+
+
+ + {if $additionalActionSettings|isset}{@$additionalActionSettings}{/if} +
+
+ +
+ + + {@SID_INPUT_TAG} +
+
+ +{include file='footer'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/worker.tpl b/wcfsetup/install/files/acp/templates/worker.tpl new file mode 100644 index 0000000000..bcd2aa67f5 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/worker.tpl @@ -0,0 +1,70 @@ +{if !$progress|isset}{assign var="progress" value=0}{/if} +{assign var="actionTitle" value=$pageTitle} +{capture assign="pageTitle"}{lang}wcf.acp.worker.progressBar{/lang} - {@$pageTitle}{/capture} +{include file='setupHeader'} + + + + + +

{lang}wcf.global.pageTitle{/lang}
{@$actionTitle}

+ +
+
+
{lang}wcf.acp.worker.progressBar{/lang}
+
+ +
+ +

{lang}wcf.acp.worker.title{/lang}

+ +

{lang}wcf.acp.worker.description{/lang}

+ +
+ {lang}wcf.acp.worker.currentStep{/lang} + +
+
+ + +
+
+ +{include file='setupFooter'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/workerException.tpl b/wcfsetup/install/files/acp/templates/workerException.tpl new file mode 100644 index 0000000000..f2e46bb67f --- /dev/null +++ b/wcfsetup/install/files/acp/templates/workerException.tpl @@ -0,0 +1,14 @@ +{include file='setupWindowHeader'} + + + +{$e->show()} + +{include file='setupWindowFooter'} \ No newline at end of file diff --git a/wcfsetup/install/files/acp/templates/workerFinish.tpl b/wcfsetup/install/files/acp/templates/workerFinish.tpl new file mode 100644 index 0000000000..f5e86f00a5 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/workerFinish.tpl @@ -0,0 +1,23 @@ +{include file='setupWindowHeader'} + +
+ +
+ + + +{if $message|isset} + {@$message} +{/if} + +{include file='setupWindowFooter'} + diff --git a/wcfsetup/install/files/acp/templates/workerNext.tpl b/wcfsetup/install/files/acp/templates/workerNext.tpl new file mode 100644 index 0000000000..98eff2a149 --- /dev/null +++ b/wcfsetup/install/files/acp/templates/workerNext.tpl @@ -0,0 +1,21 @@ +{include file='setupWindowHeader'} + +

Step: {@$stepTitle}

+ +
+ +
+ + + +{include file='setupWindowFooter'} \ No newline at end of file diff --git a/wcfsetup/install/files/cache/.htaccess b/wcfsetup/install/files/cache/.htaccess new file mode 100644 index 0000000000..3418e55a68 --- /dev/null +++ b/wcfsetup/install/files/cache/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/wcfsetup/install/files/cache/templateListener/.htaccess b/wcfsetup/install/files/cache/templateListener/.htaccess new file mode 100644 index 0000000000..3418e55a68 --- /dev/null +++ b/wcfsetup/install/files/cache/templateListener/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/wcfsetup/install/files/global.php b/wcfsetup/install/files/global.php new file mode 100644 index 0000000000..376d4679a4 --- /dev/null +++ b/wcfsetup/install/files/global.php @@ -0,0 +1,15 @@ + + * @package com.woltlab.wcf + * @category Community Framework + */ +// define the wcf-root-dir +define('WCF_DIR', dirname(__FILE__).'/'); + +// initiate wcf core +require_once(WCF_DIR.'lib/system/WCF.class.php'); +new wcf\system\WCF(); +?> \ No newline at end of file diff --git a/wcfsetup/install/files/icon/imageViewer/closeHoverM.png b/wcfsetup/install/files/icon/imageViewer/closeHoverM.png new file mode 100644 index 0000000000000000000000000000000000000000..d34a88862fcf79f5f8978dd207a268dfc1abaecd GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=3*z$5DpHG+YkL80J(AjJ|V9E zF~HlmZ*SeYb>_^O!-o$W2Vb8HRLNBm(tZA0si0N&{_k{e zHnZbWaVzgLir$>sJdrnQQ^2c}g4Jx6A6Vk&a82mgy7`6U?5F^T#NMEWsb9AJec;Ws zFVdQ&MBb@02HE?7XSbN literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/closeM.png b/wcfsetup/install/files/icon/imageViewer/closeM.png new file mode 100644 index 0000000000000000000000000000000000000000..be83a0fc53f8c306f9bbb0d35afc67d0842709a1 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=3*z$5DpHG+YkL80J&NLJ|V9E zF~Ixx?^{}0ii(QT($cJ~tc;C~Wo2c7%Cjqe9RyN*B|(0{4900Q&%kv`9pRn_l;JG! zh%9Dc;1&X5#!GkW{s0B#OI#yLg7ec#$`gxH8GI9yi}G_*Q!*13+%k(&%kzt}ixn)k zW?ZTOD&64e;us<^)%U_iu0swyY!CkbVqyQzB)g=V{o=a3M=#WNln5Wsi>+1OXY^s_jgIY^Vs)i+E^;$cOVxaGcIQ%$B>~+s z8wCS{1a>OSi$7BLw3J4nJa0`Jj-aSV}|nw-GE*^M6VNP1n#^z|Dz&3~3i1S?I$wyBb o=4diJZD?fDlu`6BXyj#Ji1C#DQ_i;JD9~&MPgg&ebxsLQ0Ls!+_y7O^ literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/nextHoverM.png b/wcfsetup/install/files/icon/imageViewer/nextHoverM.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7d9d4e1afe043fe5e1e99511049c0340d05434 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=3*z$5DpHG+YkL80J-V`J|V9E zv4JmNzPx$!=E;*M4<9}}bLPz9!-t+A4G^ah+Z9vomEYj6U0@pPQqn=ISKl*>sT0v&oU!v#D_@yW+tE4;m*paA`4o X?Y3HG%<(xAXc>d2tDnm{r-UW|``v}( literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/nextM.png b/wcfsetup/install/files/icon/imageViewer/nextM.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb6b8082b76ef8be4a77583d0805ad20bd62397 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF&8^|hH!9j+ty?#9=FGafIyW~rD=RB)ZEaauSpfk7pc$I4@BRc* zq9s9o!3@Ts9W&pdnYZG)^J}02&H|6fVg?3oArNM~bhqvgP*A?aHKHUqKdq!Zu_%?n zH!-;=KQ}ccGf}}UvnaJZzbLy{!D4I1r3#?ZC{Gv15RHjvFBu9oDDb#kY+2CI#q#lA z`qWNQWAE2Hp4O*2eL1(jTVTfhtt<+AwS~5?begy(!eUD2iTN$=9bY$HwP;vUb~|d4 szO}#A$xiE?%-`#7_3Y++^PpCa;T=!as@F-8KwB6*UHx3vIVCg!03LUg{r~^~ literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/pauseHoverM.png b/wcfsetup/install/files/icon/imageViewer/pauseHoverM.png new file mode 100644 index 0000000000000000000000000000000000000000..3dadf5f3d45df7063801fb4a0fa2d89d49e35b19 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=3*z$5DpHG+YkL80J)+8J|V9E zk-(!zkItMqbNKLKog9{_Kn3h2L4Lsu9q&L&-rZ2$02JaZ@Q5sCVBi)4Va7{$>;3=* zovY3H^TL^?1FWs&C z0~C}mag8Vm&QB{TPb^Ah@J&oE%Fj(r$xKvm%PdMQ&o9a@RS0<3D+1Jn(Uo0wc_urx8Lcwmv1naOr0GxKCZpR0R2W3jut oajfMl*|%IiqOz_Dd`c@A*2-J*9F1J`3}`5Wr>mdKI;Vst0AW2>_5c6? literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/playHoverM.png b/wcfsetup/install/files/icon/imageViewer/playHoverM.png new file mode 100644 index 0000000000000000000000000000000000000000..70135c7e6cbaca675e01d896513a2a85db32905f GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF&8^|hH!9j+({TJIdkUl;ln$8*D3>z5-kbx3uX{Bb_q=@@0hu2_nEse zW2Y^P<_0R@EbxddW?mdKI;Vst00}Rv*Z=?k literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/playM.png b/wcfsetup/install/files/icon/imageViewer/playM.png new file mode 100644 index 0000000000000000000000000000000000000000..9896ebc7d11b1afdb385769b8bb2ab2a4a0e9725 GIT binary patch literal 455 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF&8^|hH!9j+!YiVhztE($7FHcKL3l0wU^768` zx3{vgGB!4rmzNh15CGby@a|^|kWwxQ@(X4VG2X;@V&U-5sJLo;;rp0FR2RAo6X=m?4`22WQ%mvv4FO#t=f-0%PZ literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/previousHoverM.png b/wcfsetup/install/files/icon/imageViewer/previousHoverM.png new file mode 100644 index 0000000000000000000000000000000000000000..99af8eff77b7c901e720c4ff1b955770c60ebb83 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w=3*z$5DpHG+YkL80J-V`J|V9E zv4JmNzPx$!=E;*M4<9}}bLPz9!-t5_% literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/icon/imageViewer/previousM.png b/wcfsetup/install/files/icon/imageViewer/previousM.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad653988b9eda2afd4fce9515c210bec280b5eb GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaAF&8^|hH!9j+ty?#9=FGafIyW~rD=RB)ZEaauSpfk7pc$I4@BRc* zq9s9o!3@Ts9W&pdnYZG)^J}02&H|6fVg?3oArNM~bhqvgP*A?aHKHUqKdq!Zu_%?n zH!-;=KQ}ccGf}}UvnaJZzbLy{!D4I1r3#?ZcuyC{5RHjPCwcQVDDbdGzh)0v((&DX zb=O6X%AC?^#xGw@)o|XmPql$3PCdYH{eqad(wq(9>NkEjYRB#S67%th+M3RUPYy|s xr*(Y$e`x9^5q1BW-3#A6y70o?@!wxN>kr{PRojd#1AtaBc)I$ztaD0e0sy+!myG}b literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/images/imageViewer/blank.png b/wcfsetup/install/files/images/imageViewer/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..bf62eddaa7ded2b3c15fe0d5f499cacbc32b23c1 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%*9TgAsieWw;%dH0CL#^d_r9R zgF$G`*Bqb-Q%R6t@PCG<+YP*cJkA1-$YKTtZXpn6ymYtj4^U9P#5JNMI6tkVJh3R1 z!8b9vC_gtfB{NaMEwd=KJijQrSixdz#-$3NQVEb!=c3falFa-(g^?VfB)54n)fh-13S3j3^P6R?@ilU;T0s;a&JUl@2csP%5 z0aB7BL4Lsuf=b3|9jnf~LpOeVTQ0~&oCO|{#S9GGLLkg|>2BR0prCw-YeY$Kep*R+ zVo@rCZ(?#$er{??W}<>yW>IQ+eo=O@g2mR1OBD4-BrI<^ z(lGnbyF=gpspnR#e9M~C`LVo7QquL0#G=@a&fVURMVM^KXkk>GF%` z@0s0JV{L7&bFFX-hxzfjKlA3go}c?YI(>%qdX@bA8wqoruLs0$J|K{PCGMyDmwoxPf9=8E z_75vEMdGAdr@K8|8VF=ASX#O9+=ARhuf?Stxyg$(t|@NuTykJ@DOap9`y#P7S2mqx zE8ci+;mRk;Hs3e+EqY$q^L$0(jOgjbYCHLoSRa|rernrsciDNPxIg--l25aL^_Uga aGj1>3KksY#rr*E-WbkzLb6Mw<&;$S+Zt?#B literal 0 HcmV?d00001 diff --git a/wcfsetup/install/files/images/spinner.gif b/wcfsetup/install/files/images/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..dd3e85069bbff93a6a379efcdd91c1ef6df7c9dd GIT binary patch literal 3765 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 mJIvtN2Mj{QYFzO~=0)&&b(g).is(":focusable")}}); +b(function(){var g=document.body,f=g.appendChild(f=document.createElement("div"));b.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});b.support.minHeight=f.offsetHeight===100;b.support.selectstart="onselectstart"in f;g.removeChild(f).style.display="none"});b.extend(b.ui,{plugin:{add:function(g,f,a){g=b.ui[g].prototype;for(var c in a){g.plugins[c]=g.plugins[c]||[];g.plugins[c].push([f,a[c]])}},call:function(g,f,a){if((f=g.plugins[f])&&g.element[0].parentNode)for(var c=0;c0)return true;g[f]=1;a=g[f]>0;g[f]=0;return a},isOverAxis:function(g,f,a){return g>f&&g=9)&&!d.button)return this._mouseUp(d);if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,d)!==false)?this._mouseDrag(d):this._mouseUp(d);return!this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate); +if(this._mouseStarted){this._mouseStarted=false;d.target==this._mouseDownEvent.target&&b.data(d.target,this.widgetName+".preventClickEvent",true);this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +(function(b){b.widget("ui.draggable",b.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var e= +this.options;if(this.helper||e.disabled||b(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;return true},_mouseStart:function(d){var e=this.options;this.helper=this._createHelper(d);this._cacheHelperProportions();if(b.ui.ddmanager)b.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- +this.margins.top,left:this.offset.left-this.margins.left};b.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt);e.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions(); +b.ui.ddmanager&&!e.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);return true},_mouseDrag:function(d,e){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!e){e=this._uiHash();if(this._trigger("drag",d,e)===false){this._mouseUp({});return false}this.position=e.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| +this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";b.ui.ddmanager&&b.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var e=false;if(b.ui.ddmanager&&!this.options.dropBehaviour)e=b.ui.ddmanager.drop(this,d);if(this.dropped){e=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!e||this.options.revert=="valid"&&e||this.options.revert===true||b.isFunction(this.options.revert)&& +this.options.revert.call(this.element,e)){var g=this;b(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){g._trigger("stop",d)!==false&&g._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var e=!this.options.handle||!b(this.options.handle,this.element).length?true:false;b(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +d.target)e=true});return e},_createHelper:function(d){var e=this.options;d=b.isFunction(e.helper)?b(e.helper.apply(this.element[0],[d])):e.helper=="clone"?this.element.clone():this.element;d.parents("body").length||d.appendTo(e.appendTo=="parent"?this.element[0].parentNode:e.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(b.isArray(d))d={left:+d[0],top:+d[1]|| +0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0], +this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&b.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(), +height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[(d.containment=="document"?0:b(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(d.containment=="document"?0:b(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(d.containment=="document"?0:b(window).scrollLeft())+b(d.containment=="document"? +document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:b(window).scrollTop())+(b(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){var e=b(d.containment)[0];if(e){d=b(d.containment).offset();var g=b(e).css("overflow")!="hidden";this.containment=[d.left+(parseInt(b(e).css("borderLeftWidth"), +10)||0)+(parseInt(b(e).css("paddingLeft"),10)||0),d.top+(parseInt(b(e).css("borderTopWidth"),10)||0)+(parseInt(b(e).css("paddingTop"),10)||0),d.left+(g?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(b(e).css("borderLeftWidth"),10)||0)-(parseInt(b(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,d.top+(g?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(b(e).css("borderTopWidth"),10)||0)-(parseInt(b(e).css("paddingBottom"), +10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom]}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,e){if(!e)e=this.position;d=d=="absolute"?1:-1;var g=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(g[0].tagName);return{top:e.top+this.offset.relative.top*d+this.offset.parent.top*d-(b.browser.safari&& +b.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:g.scrollTop())*d),left:e.left+this.offset.relative.left*d+this.offset.parent.left*d-(b.browser.safari&&b.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:g.scrollLeft())*d)}},_generatePosition:function(d){var e=this.options,g=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&b.ui.contains(this.scrollParent[0], +this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(g[0].tagName),a=d.pageX,c=d.pageY;if(this.originalPosition){if(this.containment){if(d.pageX-this.offset.click.leftthis.containment[2])a=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])c= +this.containment[3]+this.offset.click.top}if(e.grid){c=this.originalPageY+Math.round((c-this.originalPageY)/e.grid[1])*e.grid[1];c=this.containment?!(c-this.offset.click.topthis.containment[3])?c:!(c-this.offset.click.topthis.containment[2])? +a:!(a-this.offset.click.left
').css({width:this.offsetWidth+ +"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(b(this).offset()).appendTo("body")})},stop:function(){b("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});b.ui.plugin.add("draggable","opacity",{start:function(d,e){d=b(e.helper);e=b(this).data("draggable").options;if(d.css("opacity"))e._opacity=d.css("opacity");d.css("opacity",e.opacity)},stop:function(d,e){d=b(this).data("draggable").options;d._opacity&&b(e.helper).css("opacity", +d._opacity)}});b.ui.plugin.add("draggable","scroll",{start:function(){var d=b(this).data("draggable");if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML")d.overflowOffset=d.scrollParent.offset()},drag:function(d){var e=b(this).data("draggable"),g=e.options,f=false;if(e.scrollParent[0]!=document&&e.scrollParent[0].tagName!="HTML"){if(!g.axis||g.axis!="x")if(e.overflowOffset.top+e.scrollParent[0].offsetHeight-d.pageY=0;n--){var p=g.snapElements[n].left,l=p+g.snapElements[n].width,k=g.snapElements[n].top,m=k+g.snapElements[n].height;if(p-a=n&&c<=p||h>=n&&h<=p||cp)&&(f>= +i&&f<=j||a>=i&&a<=j||fj);default:return false}};b.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,e){var g=b.ui.ddmanager.droppables[d.options.scope]||[],f=e?e.type:null,a=(d.currentItem||d.element).find(":data(droppable)").andSelf(),c=0;a:for(;c').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=f.handles||(!b(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var a=this.handles.split(",");this.handles={};for(var c=0;c');/sw|se|ne|nw/.test(h)&&i.css({zIndex:++f.zIndex});"se"==h&&i.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[h]=".ui-resizable-"+h;this.element.append(i)}}this._renderAxis=function(j){j=j||this.element;for(var n in this.handles){if(this.handles[n].constructor== +String)this.handles[n]=b(this.handles[n],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var p=b(this.handles[n],this.element),l=0;l=/sw|ne|nw|se|n|s/.test(n)?p.outerHeight():p.outerWidth();p=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");j.css(p,l);this._proportionallyResize()}b(this.handles[n])}};this._renderAxis(this.element);this._handles=b(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!g.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);g.axis=j&&j[1]?j[1]:"se"}});if(f.autoHide){this._handles.hide();b(this.element).addClass("ui-resizable-autohide").hover(function(){b(this).removeClass("ui-resizable-autohide");g._handles.show()},function(){if(!g.resizing){b(this).addClass("ui-resizable-autohide");g._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var g=function(a){b(a).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){g(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);g(this.originalElement);return this},_mouseCapture:function(g){var f=false;for(var a in this.handles)if(b(this.handles[a])[0]==g.target)f=true;return!this.options.disabled&&f},_mouseStart:function(g){var f=this.options,a=this.element.position(), +c=this.element;this.resizing=true;this.documentScroll={top:b(document).scrollTop(),left:b(document).scrollLeft()};if(c.is(".ui-draggable")||/absolute/.test(c.css("position")))c.css({position:"absolute",top:a.top,left:a.left});b.browser.opera&&/relative/.test(c.css("position"))&&c.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();a=d(this.helper.css("left"));var h=d(this.helper.css("top"));if(f.containment){a+=b(f.containment).scrollLeft()||0;h+=b(f.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:a,top:h};this.size=this._helper?{width:c.outerWidth(),height:c.outerHeight()}:{width:c.width(),height:c.height()};this.originalSize=this._helper?{width:c.outerWidth(),height:c.outerHeight()}:{width:c.width(),height:c.height()};this.originalPosition={left:a,top:h};this.sizeDiff={width:c.outerWidth()-c.width(),height:c.outerHeight()-c.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=typeof f.aspectRatio=="number"?f.aspectRatio: +this.originalSize.width/this.originalSize.height||1;f=b(".ui-resizable-"+this.axis).css("cursor");b("body").css("cursor",f=="auto"?this.axis+"-resize":f);c.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(g){var f=this.helper,a=this.originalMousePosition,c=this._change[this.axis];if(!c)return false;a=c.apply(this,[g,g.pageX-a.left||0,g.pageY-a.top||0]);if(this._aspectRatio||g.shiftKey)a=this._updateRatio(a,g);a=this._respectSize(a,g);this._propagate("resize", +g);f.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(a);this._trigger("resize",g,this.ui());return false},_mouseStop:function(g){this.resizing=false;var f=this.options,a=this;if(this._helper){var c=this._proportionallyResizeElements,h=c.length&&/textarea/i.test(c[0].nodeName);c=h&&b.ui.hasScroll(c[0],"left")?0:a.sizeDiff.height; +h=h?0:a.sizeDiff.width;h={width:a.helper.width()-h,height:a.helper.height()-c};c=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var i=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;f.animate||this.element.css(b.extend(h,{top:i,left:c}));a.helper.height(a.size.height);a.helper.width(a.size.width);this._helper&&!f.animate&&this._proportionallyResize()}b("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing"); +this._propagate("stop",g);this._helper&&this.helper.remove();return false},_updateCache:function(g){this.offset=this.helper.offset();if(e(g.left))this.position.left=g.left;if(e(g.top))this.position.top=g.top;if(e(g.height))this.size.height=g.height;if(e(g.width))this.size.width=g.width},_updateRatio:function(g){var f=this.position,a=this.size,c=this.axis;if(g.height)g.width=a.height*this.aspectRatio;else if(g.width)g.height=a.width/this.aspectRatio;if(c=="sw"){g.left=f.left+(a.width-g.width);g.top= +null}if(c=="nw"){g.top=f.top+(a.height-g.height);g.left=f.left+(a.width-g.width)}return g},_respectSize:function(g){var f=this.options,a=this.axis,c=e(g.width)&&f.maxWidth&&f.maxWidthg.width,j=e(g.height)&&f.minHeight&&f.minHeight>g.height;if(i)g.width=f.minWidth;if(j)g.height=f.minHeight;if(c)g.width=f.maxWidth;if(h)g.height=f.maxHeight;var n=this.originalPosition.left+this.originalSize.width,p=this.position.top+ +this.size.height,l=/sw|nw|w/.test(a);a=/nw|ne|n/.test(a);if(i&&l)g.left=n-f.minWidth;if(c&&l)g.left=n-f.maxWidth;if(j&&a)g.top=p-f.minHeight;if(h&&a)g.top=p-f.maxHeight;if((f=!g.width&&!g.height)&&!g.left&&g.top)g.top=null;else if(f&&!g.top&&g.left)g.left=null;return g},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var g=this.helper||this.element,f=0;f');var f=b.browser.msie&&b.browser.version<7,a=f?1:0;f=f?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+f,height:this.element.outerHeight()+f,position:"absolute",left:this.elementOffset.left-a+"px",top:this.elementOffset.top-a+"px",zIndex:++g.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(g, +f){return{width:this.originalSize.width+f}},w:function(g,f){return{left:this.originalPosition.left+f,width:this.originalSize.width-f}},n:function(g,f,a){return{top:this.originalPosition.top+a,height:this.originalSize.height-a}},s:function(g,f,a){return{height:this.originalSize.height+a}},se:function(g,f,a){return b.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,a]))},sw:function(g,f,a){return b.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f, +a]))},ne:function(g,f,a){return b.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,a]))},nw:function(g,f,a){return b.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,a]))}},_propagate:function(g,f){b.ui.plugin.call(this,g,[f,this.ui()]);g!="resize"&&this._trigger(g,f,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize, +originalPosition:this.originalPosition}}});b.extend(b.ui.resizable,{version:"1.8.11"});b.ui.plugin.add("resizable","alsoResize",{start:function(){var g=b(this).data("resizable").options,f=function(a){b(a).each(function(){var c=b(this);c.data("resizable-alsoresize",{width:parseInt(c.width(),10),height:parseInt(c.height(),10),left:parseInt(c.css("left"),10),top:parseInt(c.css("top"),10),position:c.css("position")})})};if(typeof g.alsoResize=="object"&&!g.alsoResize.parentNode)if(g.alsoResize.length){g.alsoResize= +g.alsoResize[0];f(g.alsoResize)}else b.each(g.alsoResize,function(a){f(a)});else f(g.alsoResize)},resize:function(g,f){var a=b(this).data("resizable");g=a.options;var c=a.originalSize,h=a.originalPosition,i={height:a.size.height-c.height||0,width:a.size.width-c.width||0,top:a.position.top-h.top||0,left:a.position.left-h.left||0},j=function(n,p){b(n).each(function(){var l=b(this),k=b(this).data("resizable-alsoresize"),m={},o=p&&p.length?p:l.parents(f.originalElement[0]).length?["width","height"]:["width", +"height","top","left"];b.each(o,function(q,s){if((q=(k[s]||0)+(i[s]||0))&&q>=0)m[s]=q||null});if(b.browser.opera&&/relative/.test(l.css("position"))){a._revertToRelativePosition=true;l.css({position:"absolute",top:"auto",left:"auto"})}l.css(m)})};typeof g.alsoResize=="object"&&!g.alsoResize.nodeType?b.each(g.alsoResize,function(n,p){j(n,p)}):j(g.alsoResize)},stop:function(){var g=b(this).data("resizable"),f=g.options,a=function(c){b(c).each(function(){var h=b(this);h.css({position:h.data("resizable-alsoresize").position})})}; +if(g._revertToRelativePosition){g._revertToRelativePosition=false;typeof f.alsoResize=="object"&&!f.alsoResize.nodeType?b.each(f.alsoResize,function(c){a(c)}):a(f.alsoResize)}b(this).removeData("resizable-alsoresize")}});b.ui.plugin.add("resizable","animate",{stop:function(g){var f=b(this).data("resizable"),a=f.options,c=f._proportionallyResizeElements,h=c.length&&/textarea/i.test(c[0].nodeName),i=h&&b.ui.hasScroll(c[0],"left")?0:f.sizeDiff.height;h={width:f.size.width-(h?0:f.sizeDiff.width),height:f.size.height- +i};i=parseInt(f.element.css("left"),10)+(f.position.left-f.originalPosition.left)||null;var j=parseInt(f.element.css("top"),10)+(f.position.top-f.originalPosition.top)||null;f.element.animate(b.extend(h,j&&i?{top:j,left:i}:{}),{duration:a.animateDuration,easing:a.animateEasing,step:function(){var n={width:parseInt(f.element.css("width"),10),height:parseInt(f.element.css("height"),10),top:parseInt(f.element.css("top"),10),left:parseInt(f.element.css("left"),10)};c&&c.length&&b(c[0]).css({width:n.width, +height:n.height});f._updateCache(n);f._propagate("resize",g)}})}});b.ui.plugin.add("resizable","containment",{start:function(){var g=b(this).data("resizable"),f=g.element,a=g.options.containment;if(f=a instanceof b?a.get(0):/parent/.test(a)?f.parent().get(0):a){g.containerElement=b(f);if(/document/.test(a)||a==document){g.containerOffset={left:0,top:0};g.containerPosition={left:0,top:0};g.parentData={element:b(document),left:0,top:0,width:b(document).width(),height:b(document).height()||document.body.parentNode.scrollHeight}}else{var c= +b(f),h=[];b(["Top","Right","Left","Bottom"]).each(function(n,p){h[n]=d(c.css("padding"+p))});g.containerOffset=c.offset();g.containerPosition=c.position();g.containerSize={height:c.innerHeight()-h[3],width:c.innerWidth()-h[1]};a=g.containerOffset;var i=g.containerSize.height,j=g.containerSize.width;j=b.ui.hasScroll(f,"left")?f.scrollWidth:j;i=b.ui.hasScroll(f)?f.scrollHeight:i;g.parentData={element:f,left:a.left,top:a.top,width:j,height:i}}}},resize:function(g){var f=b(this).data("resizable"),a=f.options, +c=f.containerOffset,h=f.position;g=f._aspectRatio||g.shiftKey;var i={top:0,left:0},j=f.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))i=c;if(h.left<(f._helper?c.left:0)){f.size.width+=f._helper?f.position.left-c.left:f.position.left-i.left;if(g)f.size.height=f.size.width/a.aspectRatio;f.position.left=a.helper?c.left:0}if(h.top<(f._helper?c.top:0)){f.size.height+=f._helper?f.position.top-c.top:f.position.top;if(g)f.size.width=f.size.height*a.aspectRatio;f.position.top=f._helper? +c.top:0}f.offset.left=f.parentData.left+f.position.left;f.offset.top=f.parentData.top+f.position.top;a=Math.abs((f._helper?f.offset.left-i.left:f.offset.left-i.left)+f.sizeDiff.width);c=Math.abs((f._helper?f.offset.top-i.top:f.offset.top-c.top)+f.sizeDiff.height);h=f.containerElement.get(0)==f.element.parent().get(0);i=/relative|absolute/.test(f.containerElement.css("position"));if(h&&i)a-=f.parentData.left;if(a+f.size.width>=f.parentData.width){f.size.width=f.parentData.width-a;if(g)f.size.height= +f.size.width/f.aspectRatio}if(c+f.size.height>=f.parentData.height){f.size.height=f.parentData.height-c;if(g)f.size.width=f.size.height*f.aspectRatio}},stop:function(){var g=b(this).data("resizable"),f=g.options,a=g.containerOffset,c=g.containerPosition,h=g.containerElement,i=b(g.helper),j=i.offset(),n=i.outerWidth()-g.sizeDiff.width;i=i.outerHeight()-g.sizeDiff.height;g._helper&&!f.animate&&/relative/.test(h.css("position"))&&b(this).css({left:j.left-c.left-a.left,width:n,height:i});g._helper&&!f.animate&& +/static/.test(h.css("position"))&&b(this).css({left:j.left-c.left-a.left,width:n,height:i})}});b.ui.plugin.add("resizable","ghost",{start:function(){var g=b(this).data("resizable"),f=g.options,a=g.size;g.ghost=g.originalElement.clone();g.ghost.css({opacity:0.25,display:"block",position:"relative",height:a.height,width:a.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof f.ghost=="string"?f.ghost:"");g.ghost.appendTo(g.helper)},resize:function(){var g=b(this).data("resizable"); +g.ghost&&g.ghost.css({position:"relative",height:g.size.height,width:g.size.width})},stop:function(){var g=b(this).data("resizable");g.ghost&&g.helper&&g.helper.get(0).removeChild(g.ghost.get(0))}});b.ui.plugin.add("resizable","grid",{resize:function(){var g=b(this).data("resizable"),f=g.options,a=g.size,c=g.originalSize,h=g.originalPosition,i=g.axis;f.grid=typeof f.grid=="number"?[f.grid,f.grid]:f.grid;var j=Math.round((a.width-c.width)/(f.grid[0]||1))*(f.grid[0]||1);f=Math.round((a.height-c.height)/ +(f.grid[1]||1))*(f.grid[1]||1);if(/^(se|s|e)$/.test(i)){g.size.width=c.width+j;g.size.height=c.height+f}else if(/^(ne)$/.test(i)){g.size.width=c.width+j;g.size.height=c.height+f;g.position.top=h.top-f}else{if(/^(sw)$/.test(i)){g.size.width=c.width+j;g.size.height=c.height+f}else{g.size.width=c.width+j;g.size.height=c.height+f;g.position.top=h.top-f}g.position.left=h.left-j}}});var d=function(g){return parseInt(g,10)||0},e=function(g){return!isNaN(parseInt(g,10))}})(jQuery); +(function(b){b.widget("ui.selectable",b.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var e;this.refresh=function(){e=b(d.options.filter,d.element[0]);e.each(function(){var g=b(this),f=g.offset();b.data(this,"selectable-item",{element:this,$element:g,left:f.left,top:f.top,right:f.left+g.outerWidth(),bottom:f.top+g.outerHeight(),startselected:false,selected:g.hasClass("ui-selected"), +selecting:g.hasClass("ui-selecting"),unselecting:g.hasClass("ui-unselecting")})})};this.refresh();this.selectees=e.addClass("ui-selectee");this._mouseInit();this.helper=b("
")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var e=this;this.opos=[d.pageX, +d.pageY];if(!this.options.disabled){var g=this.options;this.selectees=b(g.filter,this.element[0]);this._trigger("start",d);b(g.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});g.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var f=b.data(this,"selectable-item");f.startselected=true;if(!d.metaKey){f.$element.removeClass("ui-selected");f.selected=false;f.$element.addClass("ui-unselecting");f.unselecting=true;e._trigger("unselecting", +d,{unselecting:f.element})}});b(d.target).parents().andSelf().each(function(){var f=b.data(this,"selectable-item");if(f){var a=!d.metaKey||!f.$element.hasClass("ui-selected");f.$element.removeClass(a?"ui-unselecting":"ui-selected").addClass(a?"ui-selecting":"ui-unselecting");f.unselecting=!a;f.selecting=a;(f.selected=a)?e._trigger("selecting",d,{selecting:f.element}):e._trigger("unselecting",d,{unselecting:f.element});return false}})}},_mouseDrag:function(d){var e=this;this.dragged=true;if(!this.options.disabled){var g= +this.options,f=this.opos[0],a=this.opos[1],c=d.pageX,h=d.pageY;if(f>c){var i=c;c=f;f=i}if(a>h){i=h;h=a;a=i}this.helper.css({left:f,top:a,width:c-f,height:h-a});this.selectees.each(function(){var j=b.data(this,"selectable-item");if(!(!j||j.element==e.element[0])){var n=false;if(g.tolerance=="touch")n=!(j.left>c||j.righth||j.bottomf&&j.righta&&j.bottom *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable"); +this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,e){if(d==="disabled"){this.options[d]= +e;this.widget()[e?"addClass":"removeClass"]("ui-sortable-disabled")}else b.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,e){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var g=null,f=this;b(d.target).parents().each(function(){if(b.data(this,"sortable-item")==f){g=b(this);return false}});if(b.data(d.target,"sortable-item")==f)g=b(d.target);if(!g)return false;if(this.options.handle&&!e){var a=false; +b(this.options.handle,g).find("*").andSelf().each(function(){if(this==d.target)a=true});if(!a)return false}this.currentItem=g;this._removeCurrentsFromItems();return true},_mouseStart:function(d,e,g){e=this.options;var f=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left- +this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");b.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;e.cursorAt&&this._adjustOffsetFromHelper(e.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]}; +this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();e.containment&&this._setContainment();if(e.cursor){if(b("body").css("cursor"))this._storedCursor=b("body").css("cursor");b("body").css("cursor",e.cursor)}if(e.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",e.opacity)}if(e.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",e.zIndex)}if(this.scrollParent[0]!= +document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!g)for(g=this.containers.length-1;g>=0;g--)this.containers[g]._trigger("activate",d,f._uiHash(this));if(b.ui.ddmanager)b.ui.ddmanager.current=this;b.ui.ddmanager&&!e.dropBehaviour&&b.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d); +return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var e=this.options,g=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY=0;e--){g=this.items[e];var f=g.item[0],a=this._intersectsWithPointer(g);if(a)if(f!=this.currentItem[0]&&this.placeholder[a==1?"next":"prev"]()[0]!=f&&!b.ui.contains(this.placeholder[0],f)&&(this.options.type=="semi-dynamic"?!b.ui.contains(this.element[0], +f):true)){this.direction=a==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(g))this._rearrange(d,g);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);b.ui.ddmanager&&b.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,e){if(d){b.ui.ddmanager&&!this.options.dropBehaviour&&b.ui.ddmanager.drop(this,d);if(this.options.revert){var g=this;e=g.placeholder.offset(); +g.reverting=true;b(this.helper).animate({left:e.left-this.offset.parent.left-g.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-g.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){g._clear(d)})}else this._clear(d,e);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"): +this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--){this.containers[e]._trigger("deactivate",null,d._uiHash(this));if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",null,d._uiHash(this));this.containers[e].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();b.extend(this,{helper:null, +dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?b(this.domPosition.prev).after(this.currentItem):b(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var e=this._getItemsAsjQuery(d&&d.connected),g=[];d=d||{};b(e).each(function(){var f=(b(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(f)g.push((d.key||f[1]+"[]")+"="+(d.key&&d.expression?f[1]:f[2]))});!g.length&&d.key&&g.push(d.key+"=");return g.join("&")}, +toArray:function(d){var e=this._getItemsAsjQuery(d&&d.connected),g=[];d=d||{};e.each(function(){g.push(b(d.item||this).attr(d.attribute||"id")||"")});return g},_intersectsWith:function(d){var e=this.positionAbs.left,g=e+this.helperProportions.width,f=this.positionAbs.top,a=f+this.helperProportions.height,c=d.left,h=c+d.width,i=d.top,j=i+d.height,n=this.offset.click.top,p=this.offset.click.left;n=f+n>i&&f+nc&&e+pd[this.floating?"width":"height"]?n:c0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var e=[],g=[],f=this._connectWith(); +if(f&&d)for(d=f.length-1;d>=0;d--)for(var a=b(f[d]),c=a.length-1;c>=0;c--){var h=b.data(a[c],"sortable");if(h&&h!=this&&!h.options.disabled)g.push([b.isFunction(h.options.items)?h.options.items.call(h.element):b(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}g.push([b.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):b(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), +this]);for(d=g.length-1;d>=0;d--)g[d][0].each(function(){e.push(this)});return b(e)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),e=0;e=0;a--)for(var c=b(f[a]),h=c.length-1;h>=0;h--){var i=b.data(c[h],"sortable");if(i&&i!=this&&!i.options.disabled){g.push([b.isFunction(i.options.items)?i.options.items.call(i.element[0],d,{item:this.currentItem}):b(i.options.items,i.element),i]);this.containers.push(i)}}for(a=g.length-1;a>=0;a--){d=g[a][1];f=g[a][0];h=0;for(c=f.length;h=0;e--){var g=this.items[e],f=this.options.toleranceElement?b(this.options.toleranceElement,g.item):g.item;if(!d){g.width=f.outerWidth();g.height=f.outerHeight()}f=f.offset();g.left=f.left;g.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(e=this.containers.length-1;e>=0;e--){f=this.containers[e].element.offset();this.containers[e].containerCache.left= +f.left;this.containers[e].containerCache.top=f.top;this.containers[e].containerCache.width=this.containers[e].element.outerWidth();this.containers[e].containerCache.height=this.containers[e].element.outerHeight()}return this},_createPlaceholder:function(d){var e=d||this,g=e.options;if(!g.placeholder||g.placeholder.constructor==String){var f=g.placeholder;g.placeholder={element:function(){var a=b(document.createElement(e.currentItem[0].nodeName)).addClass(f||e.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0]; +if(!f)a.style.visibility="hidden";return a},update:function(a,c){if(!(f&&!g.forcePlaceholderSize)){c.height()||c.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10));c.width()||c.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10))}}}}e.placeholder=b(g.placeholder.element.call(e.element,e.currentItem));e.currentItem.after(e.placeholder); +g.placeholder.update(e,e.placeholder)},_contactContainers:function(d){for(var e=null,g=null,f=this.containers.length-1;f>=0;f--)if(!b.ui.contains(this.currentItem[0],this.containers[f].element[0]))if(this._intersectsWith(this.containers[f].containerCache)){if(!(e&&b.ui.contains(this.containers[f].element[0],e.element[0]))){e=this.containers[f];g=f}}else if(this.containers[f].containerCache.over){this.containers[f]._trigger("out",d,this._uiHash(this));this.containers[f].containerCache.over=0}if(e)if(this.containers.length=== +1){this.containers[g]._trigger("over",d,this._uiHash(this));this.containers[g].containerCache.over=1}else if(this.currentContainer!=this.containers[g]){e=1E4;f=null;for(var a=this.positionAbs[this.containers[g].floating?"left":"top"],c=this.items.length-1;c>=0;c--)if(b.ui.contains(this.containers[g].element[0],this.items[c].item[0])){var h=this.items[c][this.containers[g].floating?"left":"top"];if(Math.abs(h-a)this.containment[2])a=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])c=this.containment[3]+this.offset.click.top}if(e.grid){c=this.originalPageY+Math.round((c-this.originalPageY)/e.grid[1])*e.grid[1];c=this.containment?!(c-this.offset.click.top< +this.containment[1]||c-this.offset.click.top>this.containment[3])?c:!(c-this.offset.click.topthis.containment[2])?a:!(a-this.offset.click.left=0;f--)if(b.ui.contains(this.containers[f].element[0], +this.currentItem[0])&&!e){g.push(function(a){return function(c){a._trigger("receive",c,this._uiHash(this))}}.call(this,this.containers[f]));g.push(function(a){return function(c){a._trigger("update",c,this._uiHash(this))}}.call(this,this.containers[f]))}}for(f=this.containers.length-1;f>=0;f--){e||g.push(function(a){return function(c){a._trigger("deactivate",c,this._uiHash(this))}}.call(this,this.containers[f]));if(this.containers[f].containerCache.over){g.push(function(a){return function(c){a._trigger("out", +c,this._uiHash(this))}}.call(this,this.containers[f]));this.containers[f].containerCache.over=0}}this._storedCursor&&b("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(f=0;f").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});l.wrap(m);m=l.parent();if(l.css("position")=="static"){m.css({position:"relative"});l.css({position:"relative"})}else{b.extend(k,{position:l.css("position"),zIndex:l.css("z-index")});b.each(["top","left","bottom","right"],function(o,q){k[q]=l.css(q);if(isNaN(parseInt(k[q],10)))k[q]="auto"});l.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(l){if(l.parent().is(".ui-effects-wrapper"))return l.parent().replaceWith(l); +return l},setTransition:function(l,k,m,o){o=o||{};b.each(k,function(q,s){unit=l.cssUnit(s);if(unit[0]>0)o[s]=unit[0]*m+unit[1]});return o}});b.fn.extend({effect:function(l){var k=h.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var o=b.effects[l];if(b.fx.off||!o)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});return o.call(this,m)},_show:b.fn.show,show:function(l){if(i(l))return this._show.apply(this,arguments); +else{var k=h.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:b.fn.hide,hide:function(l){if(i(l))return this._hide.apply(this,arguments);else{var k=h.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:b.fn.toggle,toggle:function(l){if(i(l)||typeof l==="boolean"||b.isFunction(l))return this.__toggle.apply(this,arguments);else{var k=h.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(l){var k=this.css(l), +m=[];b.each(["em","px","%","pt"],function(o,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});b.easing.jswing=b.easing.swing;b.extend(b.easing,{def:"easeOutQuad",swing:function(l,k,m,o,q){return b.easing[b.easing.def](l,k,m,o,q)},easeInQuad:function(l,k,m,o,q){return o*(k/=q)*k+m},easeOutQuad:function(l,k,m,o,q){return-o*(k/=q)*(k-2)+m},easeInOutQuad:function(l,k,m,o,q){if((k/=q/2)<1)return o/2*k*k+m;return-o/2*(--k*(k-2)-1)+m},easeInCubic:function(l,k,m,o,q){return o*(k/=q)*k*k+m},easeOutCubic:function(l, +k,m,o,q){return o*((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(l,k,m,o,q){if((k/=q/2)<1)return o/2*k*k*k+m;return o/2*((k-=2)*k*k+2)+m},easeInQuart:function(l,k,m,o,q){return o*(k/=q)*k*k*k+m},easeOutQuart:function(l,k,m,o,q){return-o*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(l,k,m,o,q){if((k/=q/2)<1)return o/2*k*k*k*k+m;return-o/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(l,k,m,o,q){return o*(k/=q)*k*k*k*k+m},easeOutQuint:function(l,k,m,o,q){return o*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(l, +k,m,o,q){if((k/=q/2)<1)return o/2*k*k*k*k*k+m;return o/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(l,k,m,o,q){return-o*Math.cos(k/q*(Math.PI/2))+o+m},easeOutSine:function(l,k,m,o,q){return o*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(l,k,m,o,q){return-o/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(l,k,m,o,q){return k==0?m:o*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(l,k,m,o,q){return k==q?m+o:o*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(l,k,m,o,q){if(k==0)return m;if(k== +q)return m+o;if((k/=q/2)<1)return o/2*Math.pow(2,10*(k-1))+m;return o/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(l,k,m,o,q){return-o*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(l,k,m,o,q){return o*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(l,k,m,o,q){if((k/=q/2)<1)return-o/2*(Math.sqrt(1-k*k)-1)+m;return o/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(l,k,m,o,q){l=1.70158;var s=0,r=o;if(k==0)return m;if((k/=q)==1)return m+o;s||(s=q*0.3);if(r").css({position:"absolute",visibility:"visible",left:-j*(c/g),top:-i*(h/e)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:c/g,height:h/e,left:a.left+j*(c/g)+(d.options.mode=="show"?(j-Math.floor(g/2))*(c/g):0),top:a.top+i*(h/e)+(d.options.mode=="show"?(i-Math.floor(e/2))*(h/e):0),opacity:d.options.mode=="show"?0:1}).animate({left:a.left+j*(c/g)+(d.options.mode=="show"?0:(j-Math.floor(g/2))*(c/g)),top:a.top+ +i*(h/e)+(d.options.mode=="show"?0:(i-Math.floor(e/2))*(h/e)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?f.css({visibility:"visible"}):f.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(f[0]);f.dequeue();b("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery); +(function(b){b.effects.fade=function(d){return this.queue(function(){var e=b(this),g=b.effects.setMode(e,d.options.mode||"hide");e.animate({opacity:g},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);e.dequeue()}})})}})(jQuery); +(function(b){b.effects.fold=function(d){return this.queue(function(){var e=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(e,d.options.mode||"hide"),a=d.options.size||15,c=!!d.options.horizFirst,h=d.duration?d.duration/2:b.fx.speeds._default/2;b.effects.save(e,g);e.show();var i=b.effects.createWrapper(e).css({overflow:"hidden"}),j=f=="show"!=c,n=j?["width","height"]:["height","width"];j=j?[i.width(),i.height()]:[i.height(),i.width()];var p=/([0-9]+)%/.exec(a);if(p)a=parseInt(p[1], +10)/100*j[f=="hide"?0:1];if(f=="show")i.css(c?{height:0,width:a}:{height:a,width:0});c={};p={};c[n[0]]=f=="show"?j[0]:a;p[n[1]]=f=="show"?j[1]:0;i.animate(c,h,d.options.easing).animate(p,h,d.options.easing,function(){f=="hide"&&e.hide();b.effects.restore(e,g);b.effects.removeWrapper(e);d.callback&&d.callback.apply(e[0],arguments);e.dequeue()})})}})(jQuery); +(function(b){b.effects.highlight=function(d){return this.queue(function(){var e=b(this),g=["backgroundImage","backgroundColor","opacity"],f=b.effects.setMode(e,d.options.mode||"show"),a={backgroundColor:e.css("backgroundColor")};if(f=="hide")a.opacity=0;b.effects.save(e,g);e.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(a,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&e.hide();b.effects.restore(e,g);f=="show"&&!b.support.opacity&& +this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);e.dequeue()}})})}})(jQuery); +(function(b){b.effects.pulsate=function(d){return this.queue(function(){var e=b(this),g=b.effects.setMode(e,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:b.fx.speeds._default/2;isVisible=e.is(":visible");animateTo=0;if(!isVisible){e.css("opacity",0).show();animateTo=1}if(g=="hide"&&isVisible||g=="show"&&!isVisible)times--;for(g=0;g').appendTo(document.body).addClass(d.options.className).css({top:f.top,left:f.left,height:e.innerHeight(),width:e.innerWidth(),position:"absolute"}).animate(g,d.duration,d.options.easing,function(){a.remove();d.callback&&d.callback.apply(e[0],arguments); +e.dequeue()})})}})(jQuery); +(function(b){b.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,e=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers= +d.element.find(e.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){e.disabled||b(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){e.disabled||b(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){e.disabled||b(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){e.disabled||b(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom"); +if(e.navigation){var g=d.element.find("a").filter(e.navigationFilter).eq(0);if(g.length){var f=g.closest(".ui-accordion-header");d.active=f.length?f:g.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||e.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion", +function(a){return d._keydown(a)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);b.browser.safari||d.headers.find("a").attr("tabIndex",-1);e.event&&d.headers.bind(e.event.split(" ").join(".accordion ")+".accordion",function(a){d._clickHandler.call(d,a,this);a.preventDefault()})},_createIcons:function(){var d= +this.options;if(d.icons){b("").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex"); +this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var e=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)e.css("height","");return b.Widget.prototype.destroy.call(this)},_setOption:function(d,e){b.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(e);if(d=="icons"){this._destroyIcons(); +e&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[e?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var e=b.ui.keyCode,g=this.headers.length,f=this.headers.index(d.target),a=false;switch(d.keyCode){case e.RIGHT:case e.DOWN:a=this.headers[(f+1)%g];break;case e.LEFT:case e.UP:a=this.headers[(f-1+g)%g];break;case e.SPACE:case e.ENTER:this._clickHandler({target:d.target},d.target); +d.preventDefault()}if(a){b(d.target).attr("tabIndex",-1);b(a).attr("tabIndex",0);a.focus();return false}return true}},resize:function(){var d=this.options,e;if(d.fillSpace){if(b.browser.msie){var g=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}e=this.element.parent().height();b.browser.msie&&this.element.parent().css("overflow",g);this.headers.each(function(){e-=b(this).outerHeight(true)});this.headers.next().each(function(){b(this).height(Math.max(0,e-b(this).innerHeight()+ +b(this).height()))}).css("overflow","auto")}else if(d.autoHeight){e=0;this.headers.next().each(function(){e=Math.max(e,b(this).height("").height())}).height(e)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?b([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,e){var g=this.options; +if(!g.disabled)if(d.target){d=b(d.currentTarget||e);e=d[0]===this.active[0];g.active=g.collapsible&&e?false:this.headers.index(d);if(!(this.running||!g.collapsible&&e)){var f=this.active;i=d.next();c=this.active.next();h={options:g,newHeader:e&&g.collapsible?b([]):d,oldHeader:this.active,newContent:e&&g.collapsible?b([]):i,oldContent:c};var a=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=e?b([]):d;this._toggle(i,c,h,e,a);f.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(g.icons.headerSelected).addClass(g.icons.header); +if(!e){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(g.icons.header).addClass(g.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(g.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(g.icons.headerSelected).addClass(g.icons.header);this.active.next().addClass("ui-accordion-content-active");var c=this.active.next(), +h={options:g,newHeader:b([]),oldHeader:g.active,newContent:b([]),oldContent:c},i=this.active=b([]);this._toggle(i,c,h)}},_toggle:function(d,e,g,f,a){var c=this,h=c.options;c.toShow=d;c.toHide=e;c.data=g;var i=function(){if(c)return c._completed.apply(c,arguments)};c._trigger("changestart",null,c.data);c.running=e.size()===0?d.size():e.size();if(h.animated){g={};g=h.collapsible&&f?{toShow:b([]),toHide:e,complete:i,down:a,autoHeight:h.autoHeight||h.fillSpace}:{toShow:d,toHide:e,complete:i,down:a,autoHeight:h.autoHeight|| +h.fillSpace};if(!h.proxied)h.proxied=h.animated;if(!h.proxiedDuration)h.proxiedDuration=h.duration;h.animated=b.isFunction(h.proxied)?h.proxied(g):h.proxied;h.duration=b.isFunction(h.proxiedDuration)?h.proxiedDuration(g):h.proxiedDuration;f=b.ui.accordion.animations;var j=h.duration,n=h.animated;if(n&&!f[n]&&!b.easing[n])n="slide";f[n]||(f[n]=function(p){this.slide(p,{easing:n,duration:j||700})});f[n](g)}else{if(h.collapsible&&f)d.toggle();else{e.hide();d.show()}i(true)}e.prev().attr({"aria-expanded":"false", +"aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});b.extend(b.ui.accordion,{version:"1.8.11", +animations:{slide:function(d,e){d=b.extend({easing:"swing",duration:300},d,e);if(d.toHide.size())if(d.toShow.size()){var g=d.toShow.css("overflow"),f=0,a={},c={},h;e=d.toShow;h=e[0].style.width;e.width(parseInt(e.parent().width(),10)-parseInt(e.css("paddingLeft"),10)-parseInt(e.css("paddingRight"),10)-(parseInt(e.css("borderLeftWidth"),10)||0)-(parseInt(e.css("borderRightWidth"),10)||0));b.each(["height","paddingTop","paddingBottom"],function(i,j){c[j]="hide";i=(""+b.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/); +a[j]={value:i[1],unit:i[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(c,{step:function(i,j){if(j.prop=="height")f=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=f*a[j.prop].value+a[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:h,overflow:g});d.complete()}})}else d.toHide.animate({height:"hide", +paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery); +(function(b){var d=0;b.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var e=this,g=this.element[0].ownerDocument,f;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(a){if(!(e.options.disabled||e.element.attr("readonly"))){f= +false;var c=b.ui.keyCode;switch(a.keyCode){case c.PAGE_UP:e._move("previousPage",a);break;case c.PAGE_DOWN:e._move("nextPage",a);break;case c.UP:e._move("previous",a);a.preventDefault();break;case c.DOWN:e._move("next",a);a.preventDefault();break;case c.ENTER:case c.NUMPAD_ENTER:if(e.menu.active){f=true;a.preventDefault()}case c.TAB:if(!e.menu.active)return;e.menu.select(a);break;case c.ESCAPE:e.element.val(e.term);e.close(a);break;default:clearTimeout(e.searching);e.searching=setTimeout(function(){if(e.term!= +e.element.val()){e.selectedItem=null;e.search(null,a)}},e.options.delay);break}}}).bind("keypress.autocomplete",function(a){if(f){f=false;a.preventDefault()}}).bind("focus.autocomplete",function(){if(!e.options.disabled){e.selectedItem=null;e.previous=e.element.val()}}).bind("blur.autocomplete",function(a){if(!e.options.disabled){clearTimeout(e.searching);e.closing=setTimeout(function(){e.close(a);e._change(a)},150)}});this._initSource();this.response=function(){return e._response.apply(e,arguments)}; +this.menu=b("
    ").addClass("ui-autocomplete").appendTo(b(this.options.appendTo||"body",g)[0]).mousedown(function(a){var c=e.menu.element[0];b(a.target).closest(".ui-menu-item").length||setTimeout(function(){b(document).one("mousedown",function(h){h.target!==e.element[0]&&h.target!==c&&!b.ui.contains(c,h.target)&&e.close()})},1);setTimeout(function(){clearTimeout(e.closing)},13)}).menu({focus:function(a,c){c=c.item.data("item.autocomplete");false!==e._trigger("focus",a,{item:c})&&/^key/.test(a.originalEvent.type)&& +e.element.val(c.value)},selected:function(a,c){var h=c.item.data("item.autocomplete"),i=e.previous;if(e.element[0]!==g.activeElement){e.element.focus();e.previous=i;setTimeout(function(){e.previous=i;e.selectedItem=h},1)}false!==e._trigger("select",a,{item:h})&&e.element.val(h.value);e.term=e.element.val();e.close(a);e.selectedItem=h},blur:function(){e.menu.element.is(":visible")&&e.element.val()!==e.term&&e.element.val(e.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu"); +b.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();b.Widget.prototype.destroy.call(this)},_setOption:function(e,g){b.Widget.prototype._setOption.apply(this,arguments);e==="source"&&this._initSource();if(e==="appendTo")this.menu.element.appendTo(b(g||"body",this.element[0].ownerDocument)[0]);e==="disabled"&& +g&&this.xhr&&this.xhr.abort()},_initSource:function(){var e=this,g,f;if(b.isArray(this.options.source)){g=this.options.source;this.source=function(a,c){c(b.ui.autocomplete.filter(g,a.term))}}else if(typeof this.options.source==="string"){f=this.options.source;this.source=function(a,c){e.xhr&&e.xhr.abort();e.xhr=b.ajax({url:f,data:a,dataType:"json",autocompleteRequest:++d,success:function(h){this.autocompleteRequest===d&&c(h)},error:function(){this.autocompleteRequest===d&&c([])}})}}else this.source= +this.options.source},search:function(e,g){e=e!=null?e:this.element.val();this.term=this.element.val();if(e.length").data("item.autocomplete",g).append(b("").text(g.label)).appendTo(e)},_move:function(e,g){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(e)||this.menu.last()&&/^next/.test(e)){this.element.val(this.term);this.menu.deactivate()}else this.menu[e](g);else this.search(null,g)},widget:function(){return this.menu.element}});b.extend(b.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, +"\\$&")},filter:function(e,g){var f=new RegExp(b.ui.autocomplete.escapeRegex(g),"i");return b.grep(e,function(a){return f.test(a.label||a.value||a)})}})})(jQuery); +(function(b){b.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(e){if(b(e.target).closest(".ui-menu-item a").length){e.preventDefault();d.select(e)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex", +-1).mouseenter(function(e){d.activate(e,b(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,e){this.deactivate();if(this.hasScroll()){var g=e.offset().top-this.element.offset().top,f=this.element.attr("scrollTop"),a=this.element.height();if(g<0)this.element.attr("scrollTop",f+g);else g>=a&&this.element.attr("scrollTop",f+g-a+e.height())}this.active=e.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:e})}, +deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,e,g){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0); +d.length?this.activate(g,d):this.activate(g,this.element.children(e))}else this.activate(g,this.element.children(e))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var e=this.active.offset().top,g=this.element.height(),f=this.element.children(".ui-menu-item").filter(function(){var a=b(this).offset().top-e-g+b(this).height();return a<10&&a>-10});f.length||(f=this.element.children(".ui-menu-item:last"));this.activate(d, +f)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var e=this.active.offset().top,g=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var f=b(this).offset().top-e+g-b(this).height();return f<10&&f>-10});result.length||(result=this.element.children(".ui-menu-item:first")); +this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()").addClass("ui-button-text").html(this.options.label).appendTo(f.empty()).text(),c=this.options.icons,h=c.primary&&c.secondary,i=[];if(c.primary||c.secondary){if(this.options.text)i.push("ui-button-text-icon"+(h?"s":c.primary?"-primary":"-secondary"));c.primary&&f.prepend("");c.secondary&&f.append("");if(!this.options.text){i.push(h?"ui-button-icons-only": +"ui-button-icon-only");this.hasTitle||f.attr("title",a)}}else i.push("ui-button-text-only");f.addClass(i.join(" "))}}});b.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(f,a){f==="disabled"&&this.buttons.button("option",f,a);b.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()}, +destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return b(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");b.Widget.prototype.destroy.call(this)}})})(jQuery); +(function(b,d){function e(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass= +"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su", +"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10", +minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};b.extend(this._defaults,this.regional[""]);this.dpDiv=b('
    ')}function g(a,c){b.extend(a,c);for(var h in c)if(c[h]== +null||c[h]==d)a[h]=c[h];return a}b.extend(b.ui,{datepicker:{version:"1.8.11"}});var f=(new Date).getTime();b.extend(e.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){g(this._defaults,a||{});return this},_attachDatepicker:function(a,c){var h=null;for(var i in this._defaults){var j=a.getAttribute("date:"+i);if(j){h=h||{};try{h[i]=eval(j)}catch(n){h[i]=j}}}i=a.nodeName.toLowerCase(); +j=i=="div"||i=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var p=this._newInst(b(a),j);p.settings=b.extend({},c||{},h||{});if(i=="input")this._connectDatepicker(a,p);else j&&this._inlineDatepicker(a,p)},_newInst:function(a,c){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:c,dpDiv:!c?this.dpDiv:b('
    ')}}, +_connectDatepicker:function(a,c){var h=b(a);c.append=b([]);c.trigger=b([]);if(!h.hasClass(this.markerClassName)){this._attachments(h,c);h.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(i,j,n){c.settings[j]=n}).bind("getData.datepicker",function(i,j){return this._get(c,j)});this._autoSize(c);b.data(a,"datepicker",c)}},_attachments:function(a,c){var h=this._get(c,"appendText"),i=this._get(c,"isRTL");c.append&& +c.append.remove();if(h){c.append=b(''+h+"");a[i?"before":"after"](c.append)}a.unbind("focus",this._showDatepicker);c.trigger&&c.trigger.remove();h=this._get(c,"showOn");if(h=="focus"||h=="both")a.focus(this._showDatepicker);if(h=="button"||h=="both"){h=this._get(c,"buttonText");var j=this._get(c,"buttonImage");c.trigger=b(this._get(c,"buttonImageOnly")?b("").addClass(this._triggerClass).attr({src:j,alt:h,title:h}):b('').addClass(this._triggerClass).html(j== +""?h:b("").attr({src:j,alt:h,title:h})));a[i?"before":"after"](c.trigger);c.trigger.click(function(){b.datepicker._datepickerShowing&&b.datepicker._lastInput==a[0]?b.datepicker._hideDatepicker():b.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var c=new Date(2009,11,20),h=this._get(a,"dateFormat");if(h.match(/[DM]/)){var i=function(j){for(var n=0,p=0,l=0;ln){n=j[l].length;p=l}return p};c.setMonth(i(this._get(a, +h.match(/MM/)?"monthNames":"monthNamesShort")));c.setDate(i(this._get(a,h.match(/DD/)?"dayNames":"dayNamesShort"))+20-c.getDay())}a.input.attr("size",this._formatDate(a,c).length)}},_inlineDatepicker:function(a,c){var h=b(a);if(!h.hasClass(this.markerClassName)){h.addClass(this.markerClassName).append(c.dpDiv).bind("setData.datepicker",function(i,j,n){c.settings[j]=n}).bind("getData.datepicker",function(i,j){return this._get(c,j)});b.data(a,"datepicker",c);this._setDate(c,this._getDefaultDate(c), +true);this._updateDatepicker(c);this._updateAlternate(c);c.dpDiv.show()}},_dialogDatepicker:function(a,c,h,i,j){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=b('');this._dialogInput.keydown(this._doKeyDown);b("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};b.data(this._dialogInput[0],"datepicker",a)}g(a.settings,i||{}); +c=c&&c.constructor==Date?this._formatDate(a,c):c;this._dialogInput.val(c);this._pos=j?j.length?j:[j.pageX,j.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=h;this._inDialog=true;this.dpDiv.addClass(this._dialogClass); +this._showDatepicker(this._dialogInput[0]);b.blockUI&&b.blockUI(this.dpDiv);b.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var c=b(a),h=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var i=a.nodeName.toLowerCase();b.removeData(a,"datepicker");if(i=="input"){h.append.remove();h.trigger.remove();c.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup", +this._doKeyUp)}else if(i=="div"||i=="span")c.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var c=b(a),h=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var i=a.nodeName.toLowerCase();if(i=="input"){a.disabled=false;h.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(i=="div"||i=="span")c.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=b.map(this._disabledInputs, +function(j){return j==a?null:j})}},_disableDatepicker:function(a){var c=b(a),h=b.data(a,"datepicker");if(c.hasClass(this.markerClassName)){var i=a.nodeName.toLowerCase();if(i=="input"){a.disabled=true;h.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(i=="div"||i=="span")c.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=b.map(this._disabledInputs,function(j){return j==a?null: +j});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var c=0;c-1}},_doKeyUp:function(a){a=b.datepicker._getInst(a.target); +if(a.input.val()!=a.lastVal)try{if(b.datepicker.parseDate(b.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,b.datepicker._getFormatConfig(a))){b.datepicker._setDateFromField(a);b.datepicker._updateAlternate(a);b.datepicker._updateDatepicker(a)}}catch(c){b.datepicker.log(c)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=b("input",a.parentNode)[0];if(!(b.datepicker._isDisabledDatepicker(a)||b.datepicker._lastInput==a)){var c=b.datepicker._getInst(a); +b.datepicker._curInst&&b.datepicker._curInst!=c&&b.datepicker._curInst.dpDiv.stop(true,true);var h=b.datepicker._get(c,"beforeShow");g(c.settings,h?h.apply(a,[a,c]):{});c.lastVal=null;b.datepicker._lastInput=a;b.datepicker._setDateFromField(c);if(b.datepicker._inDialog)a.value="";if(!b.datepicker._pos){b.datepicker._pos=b.datepicker._findPos(a);b.datepicker._pos[1]+=a.offsetHeight}var i=false;b(a).parents().each(function(){i|=b(this).css("position")=="fixed";return!i});if(i&&b.browser.opera){b.datepicker._pos[0]-= +document.documentElement.scrollLeft;b.datepicker._pos[1]-=document.documentElement.scrollTop}h={left:b.datepicker._pos[0],top:b.datepicker._pos[1]};b.datepicker._pos=null;c.dpDiv.empty();c.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});b.datepicker._updateDatepicker(c);h=b.datepicker._checkOffset(c,h,i);c.dpDiv.css({position:b.datepicker._inDialog&&b.blockUI?"static":i?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"});if(!c.inline){h=b.datepicker._get(c,"showAnim"); +var j=b.datepicker._get(c,"duration"),n=function(){b.datepicker._datepickerShowing=true;var p=c.dpDiv.find("iframe.ui-datepicker-cover");if(p.length){var l=b.datepicker._getBorders(c.dpDiv);p.css({left:-l[0],top:-l[1],width:c.dpDiv.outerWidth(),height:c.dpDiv.outerHeight()})}};c.dpDiv.zIndex(b(a).zIndex()+1);b.effects&&b.effects[h]?c.dpDiv.show(h,b.datepicker._get(c,"showOptions"),j,n):c.dpDiv[h||"show"](h?j:null,n);if(!h||!j)n();c.input.is(":visible")&&!c.input.is(":disabled")&&c.input.focus();b.datepicker._curInst= +c}}},_updateDatepicker:function(a){var c=this,h=b.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var i=a.dpDiv.find("iframe.ui-datepicker-cover");i.length&&i.css({left:-h[0],top:-h[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){b(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&b(this).removeClass("ui-datepicker-prev-hover"); +this.className.indexOf("ui-datepicker-next")!=-1&&b(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!c._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){b(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");b(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&b(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&b(this).addClass("ui-datepicker-next-hover")}}).end().find("."+ +this._dayOverClass+" a").trigger("mouseover").end();h=this._getNumberOfMonths(a);i=h[1];i>1?a.dpDiv.addClass("ui-datepicker-multi-"+i).css("width",17*i+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(h[0]!=1||h[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==b.datepicker._curInst&&b.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&& +a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var j=a.yearshtml;setTimeout(function(){j===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);j=a.yearshtml=null},0)}},_getBorders:function(a){var c=function(h){return{thin:1,medium:2,thick:3}[h]||h};return[parseFloat(c(a.css("border-left-width"))),parseFloat(c(a.css("border-top-width")))]},_checkOffset:function(a,c,h){var i=a.dpDiv.outerWidth(),j=a.dpDiv.outerHeight(),n=a.input?a.input.outerWidth(): +0,p=a.input?a.input.outerHeight():0,l=document.documentElement.clientWidth+b(document).scrollLeft(),k=document.documentElement.clientHeight+b(document).scrollTop();c.left-=this._get(a,"isRTL")?i-n:0;c.left-=h&&c.left==a.input.offset().left?b(document).scrollLeft():0;c.top-=h&&c.top==a.input.offset().top+p?b(document).scrollTop():0;c.left-=Math.min(c.left,c.left+i>l&&l>i?Math.abs(c.left+i-l):0);c.top-=Math.min(c.top,c.top+j>k&&k>j?Math.abs(j+p):0);return c},_findPos:function(a){for(var c=this._get(this._getInst(a), +"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||b.expr.filters.hidden(a));)a=a[c?"previousSibling":"nextSibling"];a=b(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var c=this._curInst;if(!(!c||a&&c!=b.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(c,"showAnim");var h=this._get(c,"duration"),i=function(){b.datepicker._tidyDialog(c);this._curInst=null};b.effects&&b.effects[a]?c.dpDiv.hide(a,b.datepicker._get(c,"showOptions"),h,i):c.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"? +"fadeOut":"hide"](a?h:null,i);a||i();if(a=this._get(c,"onClose"))a.apply(c.input?c.input[0]:null,[c.input?c.input.val():"",c]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(b.blockUI){b.unblockUI();b("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(b.datepicker._curInst){a= +b(a.target);a[0].id!=b.datepicker._mainDivId&&a.parents("#"+b.datepicker._mainDivId).length==0&&!a.hasClass(b.datepicker.markerClassName)&&!a.hasClass(b.datepicker._triggerClass)&&b.datepicker._datepickerShowing&&!(b.datepicker._inDialog&&b.blockUI)&&b.datepicker._hideDatepicker()}},_adjustDate:function(a,c,h){a=b(a);var i=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(i,c+(h=="M"?this._get(i,"showCurrentAtPos"):0),h);this._updateDatepicker(i)}},_gotoToday:function(a){a= +b(a);var c=this._getInst(a[0]);if(this._get(c,"gotoCurrent")&&c.currentDay){c.selectedDay=c.currentDay;c.drawMonth=c.selectedMonth=c.currentMonth;c.drawYear=c.selectedYear=c.currentYear}else{var h=new Date;c.selectedDay=h.getDate();c.drawMonth=c.selectedMonth=h.getMonth();c.drawYear=c.selectedYear=h.getFullYear()}this._notifyChange(c);this._adjustDate(a)},_selectMonthYear:function(a,c,h){a=b(a);var i=this._getInst(a[0]);i._selectingMonthYear=false;i["selected"+(h=="M"?"Month":"Year")]=i["draw"+(h== +"M"?"Month":"Year")]=parseInt(c.options[c.selectedIndex].value,10);this._notifyChange(i);this._adjustDate(a)},_clickMonthYear:function(a){var c=this._getInst(b(a)[0]);c.input&&c._selectingMonthYear&&setTimeout(function(){c.input.focus()},0);c._selectingMonthYear=!c._selectingMonthYear},_selectDay:function(a,c,h,i){var j=b(a);if(!(b(i).hasClass(this._unselectableClass)||this._isDisabledDatepicker(j[0]))){j=this._getInst(j[0]);j.selectedDay=j.currentDay=b("a",i).html();j.selectedMonth=j.currentMonth= +c;j.selectedYear=j.currentYear=h;this._selectDate(a,this._formatDate(j,j.currentDay,j.currentMonth,j.currentYear))}},_clearDate:function(a){a=b(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,c){a=this._getInst(b(a)[0]);c=c!=null?c:this._formatDate(a);a.input&&a.input.val(c);this._updateAlternate(a);var h=this._get(a,"onSelect");if(h)h.apply(a.input?a.input[0]:null,[c,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker(); +this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var c=this._get(a,"altField");if(c){var h=this._get(a,"altFormat")||this._get(a,"dateFormat"),i=this._getDate(a),j=this.formatDate(h,i,this._getFormatConfig(a));b(c).each(function(){b(this).val(j)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var c=a.getTime();a.setMonth(0); +a.setDate(1);return Math.floor(Math.round((c-a)/864E5)/7)+1},parseDate:function(a,c,h){if(a==null||c==null)throw"Invalid arguments";c=typeof c=="object"?c.toString():c+"";if(c=="")return null;var i=(h?h.shortYearCutoff:null)||this._defaults.shortYearCutoff;i=typeof i!="string"?i:(new Date).getFullYear()%100+parseInt(i,10);for(var j=(h?h.dayNamesShort:null)||this._defaults.dayNamesShort,n=(h?h.dayNames:null)||this._defaults.dayNames,p=(h?h.monthNamesShort:null)||this._defaults.monthNamesShort,l=(h? +h.monthNames:null)||this._defaults.monthNames,k=h=-1,m=-1,o=-1,q=false,s=function(x){(x=y+1-1){k=1;m=o;do{i=this._getDaysInMonth(h,k-1);if(m<=i)break;k++;m-=i}while(1)}B=this._daylightSavingAdjust(new Date(h,k-1,m));if(B.getFullYear()!=h||B.getMonth()+1!=k||B.getDate()!=m)throw"Invalid date";return B},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y", +RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,c,h){if(!c)return"";var i=(h?h.dayNamesShort:null)||this._defaults.dayNamesShort,j=(h?h.dayNames:null)||this._defaults.dayNames,n=(h?h.monthNamesShort:null)||this._defaults.monthNamesShort;h=(h?h.monthNames:null)||this._defaults.monthNames;var p=function(s){(s=q+112?a.getHours()+2:0);return a},_setDate:function(a,c,h){var i=!c,j=a.selectedMonth,n=a.selectedYear;c=this._restrictMinMax(a,this._determineDate(a,c,new Date));a.selectedDay= +a.currentDay=c.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=c.getMonth();a.drawYear=a.selectedYear=a.currentYear=c.getFullYear();if((j!=a.selectedMonth||n!=a.selectedYear)&&!h)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(i?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var c=new Date;c=this._daylightSavingAdjust(new Date(c.getFullYear(), +c.getMonth(),c.getDate()));var h=this._get(a,"isRTL"),i=this._get(a,"showButtonPanel"),j=this._get(a,"hideIfNoPrevNext"),n=this._get(a,"navigationAsDateFormat"),p=this._getNumberOfMonths(a),l=this._get(a,"showCurrentAtPos"),k=this._get(a,"stepMonths"),m=p[0]!=1||p[1]!=1,o=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),q=this._getMinMaxDate(a,"min"),s=this._getMinMaxDate(a,"max");l=a.drawMonth-l;var r=a.drawYear;if(l<0){l+=12;r--}if(s){var u= +this._daylightSavingAdjust(new Date(s.getFullYear(),s.getMonth()-p[0]*p[1]+1,s.getDate()));for(u=q&&uu;){l--;if(l<0){l=11;r--}}}a.drawMonth=l;a.drawYear=r;u=this._get(a,"prevText");u=!n?u:this.formatDate(u,this._daylightSavingAdjust(new Date(r,l-k,1)),this._getFormatConfig(a));u=this._canAdjustMonth(a,-1,r,l)?''+u+"":j?"":''+u+"";var v=this._get(a,"nextText");v=!n?v:this.formatDate(v,this._daylightSavingAdjust(new Date(r,l+k,1)),this._getFormatConfig(a));j=this._canAdjustMonth(a,+1,r,l)?''+v+"":j?"":''+v+"";k=this._get(a,"currentText");v=this._get(a,"gotoCurrent")&&a.currentDay?o:c;k=!n?k:this.formatDate(k,v,this._getFormatConfig(a));n=!a.inline?'":"";i=i?'
    '+(h?n:"")+(this._isInRange(a,v)?'":"")+(h?"":n)+"
    ":"";n=parseInt(this._get(a,"firstDay"),10);n=isNaN(n)?0:n;k=this._get(a,"showWeek");v=this._get(a,"dayNames");this._get(a,"dayNamesShort");var w=this._get(a,"dayNamesMin"),y= +this._get(a,"monthNames"),B=this._get(a,"monthNamesShort"),x=this._get(a,"beforeShowDay"),C=this._get(a,"showOtherMonths"),J=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),K="",G=0;G1)switch(H){case 0:D+=" ui-datepicker-group-first";A=" ui-corner-"+(h?"right":"left");break;case p[1]- +1:D+=" ui-datepicker-group-last";A=" ui-corner-"+(h?"left":"right");break;default:D+=" ui-datepicker-group-middle";A="";break}D+='">'}D+='
    '+(/all|left/.test(A)&&G==0?h?j:u:"")+(/all|right/.test(A)&&G==0?h?u:j:"")+this._generateMonthYearHeader(a,l,r,q,s,G>0||H>0,y,B)+'
    ';var E=k?'":"";for(A=0;A<7;A++){var z= +(A+n)%7;E+="=5?' class="ui-datepicker-week-end"':"")+'>'+w[z]+""}D+=E+"";E=this._getDaysInMonth(r,l);if(r==a.selectedYear&&l==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,E);A=(this._getFirstDayOfMonth(r,l)-n+7)%7;E=m?6:Math.ceil((A+E)/7);z=this._daylightSavingAdjust(new Date(r,l,1-A));for(var P=0;P";var Q=!k?"":'";for(A=0;A<7;A++){var I= +x?x.apply(a.input?a.input[0]:null,[z]):[true,""],F=z.getMonth()!=l,L=F&&!J||!I[0]||q&&zs;Q+='";z.setDate(z.getDate()+1);z=this._daylightSavingAdjust(z)}D+= +Q+""}l++;if(l>11){l=0;r++}D+="
    '+this._get(a,"weekHeader")+"
    '+this._get(a,"calculateWeek")(z)+""+(F&&!C?" ":L?''+z.getDate()+"":''+z.getDate()+"")+"
    "+(m?""+(p[0]>0&&H==p[1]-1?'
    ':""):"");N+=D}K+=N}K+=i+(b.browser.msie&&parseInt(b.browser.version,10)<7&&!a.inline?'':"");a._keyEvent=false;return K},_generateMonthYearHeader:function(a,c,h,i,j,n,p,l){var k=this._get(a,"changeMonth"),m=this._get(a,"changeYear"),o=this._get(a,"showMonthAfterYear"),q='
    ', +s="";if(n||!k)s+=''+p[c]+"";else{p=i&&i.getFullYear()==h;var r=j&&j.getFullYear()==h;s+='"}o||(q+=s+(n||!(k&& +m)?" ":""));a.yearshtml="";if(n||!m)q+=''+h+"";else{l=this._get(a,"yearRange").split(":");var v=(new Date).getFullYear();p=function(w){w=w.match(/c[+-].*/)?h+parseInt(w.substring(1),10):w.match(/[+-].*/)?v+parseInt(w,10):parseInt(w,10);return isNaN(w)?v:w};c=p(l[0]);l=Math.max(c,p(l[1]||""));c=i?Math.max(c,i.getFullYear()):c;l=j?Math.min(l,j.getFullYear()):l;for(a.yearshtml+='";if(b.browser.mozilla)q+='";else{q+=a.yearshtml;a.yearshtml=null}}q+=this._get(a,"yearSuffix");if(o)q+=(n||!(k&&m)?" ":"")+s;q+="
    ";return q},_adjustInstDate:function(a,c,h){var i= +a.drawYear+(h=="Y"?c:0),j=a.drawMonth+(h=="M"?c:0);c=Math.min(a.selectedDay,this._getDaysInMonth(i,j))+(h=="D"?c:0);i=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(i,j,c)));a.selectedDay=i.getDate();a.drawMonth=a.selectedMonth=i.getMonth();a.drawYear=a.selectedYear=i.getFullYear();if(h=="M"||h=="Y")this._notifyChange(a)},_restrictMinMax:function(a,c){var h=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");c=h&&ca?a:c},_notifyChange:function(a){var c=this._get(a, +"onChangeMonthYear");if(c)c.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,c){return this._determineDate(a,this._get(a,c+"Date"),null)},_getDaysInMonth:function(a,c){return 32-this._daylightSavingAdjust(new Date(a,c,32)).getDate()},_getFirstDayOfMonth:function(a,c){return(new Date(a,c,1)).getDay()},_canAdjustMonth:function(a,c,h,i){var j=this._getNumberOfMonths(a); +h=this._daylightSavingAdjust(new Date(h,i+(c<0?c:j[0]*j[1]),1));c<0&&h.setDate(this._getDaysInMonth(h.getFullYear(),h.getMonth()));return this._isInRange(a,h)},_isInRange:function(a,c){var h=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!h||c.getTime()>=h.getTime())&&(!a||c.getTime()<=a.getTime())},_getFormatConfig:function(a){var c=this._get(a,"shortYearCutoff");c=typeof c!="string"?c:(new Date).getFullYear()%100+parseInt(c,10);return{shortYearCutoff:c,dayNamesShort:this._get(a, +"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,c,h,i){if(!c){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}c=c?typeof c=="object"?c:this._daylightSavingAdjust(new Date(i,h,c)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),c,this._getFormatConfig(a))}});b.fn.datepicker= +function(a){if(!this.length)return this;if(!b.datepicker.initialized){b(document).mousedown(b.datepicker._checkExternalClick).find("body").append(b.datepicker.dpDiv);b.datepicker.initialized=true}var c=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this[0]].concat(c));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return b.datepicker["_"+a+"Datepicker"].apply(b.datepicker, +[this[0]].concat(c));return this.each(function(){typeof a=="string"?b.datepicker["_"+a+"Datepicker"].apply(b.datepicker,[this].concat(c)):b.datepicker._attachDatepicker(this,a)})};b.datepicker=new e;b.datepicker.initialized=false;b.datepicker.uuid=(new Date).getTime();b.datepicker.version="1.8.11";window["DP_jQuery_"+f]=b})(jQuery); +(function(b,d){var e={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},g={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};b.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(f){var a=b(this).css(f).offset().top;a<0&& +b(this).css("top",f.top-a)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var f=this,a=f.options,c=a.title||" ",h=b.ui.dialog.getTitleId(f.element),i=(f.uiDialog=b("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+a.dialogClass).css({zIndex:a.zIndex}).attr("tabIndex", +-1).css("outline",0).keydown(function(p){if(a.closeOnEscape&&p.keyCode&&p.keyCode===b.ui.keyCode.ESCAPE){f.close(p);p.preventDefault()}}).attr({role:"dialog","aria-labelledby":h}).mousedown(function(p){f.moveToTop(false,p)});f.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(i);var j=(f.uiDialogTitlebar=b("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(i),n=b('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", +"button").hover(function(){n.addClass("ui-state-hover")},function(){n.removeClass("ui-state-hover")}).focus(function(){n.addClass("ui-state-focus")}).blur(function(){n.removeClass("ui-state-focus")}).click(function(p){f.close(p);return false}).appendTo(j);(f.uiDialogTitlebarCloseText=b("")).addClass("ui-icon ui-icon-closethick").text(a.closeText).appendTo(n);b("").addClass("ui-dialog-title").attr("id",h).html(c).prependTo(j);if(b.isFunction(a.beforeclose)&&!b.isFunction(a.beforeClose))a.beforeClose= +a.beforeclose;j.find("*").add(j).disableSelection();a.draggable&&b.fn.draggable&&f._makeDraggable();a.resizable&&b.fn.resizable&&f._makeResizable();f._createButtons(a.buttons);f._isOpen=false;b.fn.bgiframe&&i.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var f=this;f.overlay&&f.overlay.destroy();f.uiDialog.hide();f.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");f.uiDialog.remove();f.originalTitle&& +f.element.attr("title",f.originalTitle);return f},widget:function(){return this.uiDialog},close:function(f){var a=this,c,h;if(false!==a._trigger("beforeClose",f)){a.overlay&&a.overlay.destroy();a.uiDialog.unbind("keypress.ui-dialog");a._isOpen=false;if(a.options.hide)a.uiDialog.hide(a.options.hide,function(){a._trigger("close",f)});else{a.uiDialog.hide();a._trigger("close",f)}b.ui.dialog.overlay.resize();if(a.options.modal){c=0;b(".ui-dialog").each(function(){if(this!==a.uiDialog[0]){h=b(this).css("z-index"); +isNaN(h)||(c=Math.max(c,h))}});b.ui.dialog.maxZ=c}return a}},isOpen:function(){return this._isOpen},moveToTop:function(f,a){var c=this,h=c.options;if(h.modal&&!f||!h.stack&&!h.modal)return c._trigger("focus",a);if(h.zIndex>b.ui.dialog.maxZ)b.ui.dialog.maxZ=h.zIndex;if(c.overlay){b.ui.dialog.maxZ+=1;c.overlay.$el.css("z-index",b.ui.dialog.overlay.maxZ=b.ui.dialog.maxZ)}f={scrollTop:c.element.attr("scrollTop"),scrollLeft:c.element.attr("scrollLeft")};b.ui.dialog.maxZ+=1;c.uiDialog.css("z-index",b.ui.dialog.maxZ); +c.element.attr(f);c._trigger("focus",a);return c},open:function(){if(!this._isOpen){var f=this,a=f.options,c=f.uiDialog;f.overlay=a.modal?new b.ui.dialog.overlay(f):null;f._size();f._position(a.position);c.show(a.show);f.moveToTop(true);a.modal&&c.bind("keypress.ui-dialog",function(h){if(h.keyCode===b.ui.keyCode.TAB){var i=b(":tabbable",this),j=i.filter(":first");i=i.filter(":last");if(h.target===i[0]&&!h.shiftKey){j.focus(1);return false}else if(h.target===j[0]&&h.shiftKey){i.focus(1);return false}}}); +b(f.element.find(":tabbable").get().concat(c.find(".ui-dialog-buttonpane :tabbable").get().concat(c.get()))).eq(0).focus();f._isOpen=true;f._trigger("open");return f}},_createButtons:function(f){var a=this,c=false,h=b("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),i=b("
    ").addClass("ui-dialog-buttonset").appendTo(h);a.uiDialog.find(".ui-dialog-buttonpane").remove();typeof f==="object"&&f!==null&&b.each(f,function(){return!(c=true)});if(c){b.each(f,function(j, +n){n=b.isFunction(n)?{click:n,text:j}:n;j=b('').attr(n,true).unbind("click").click(function(){n.click.apply(a.element[0],arguments)}).appendTo(i);b.fn.button&&j.button()});h.appendTo(a.uiDialog)}},_makeDraggable:function(){function f(j){return{position:j.position,offset:j.offset}}var a=this,c=a.options,h=b(document),i;a.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(j,n){i= +c.height==="auto"?"auto":b(this).height();b(this).height(b(this).height()).addClass("ui-dialog-dragging");a._trigger("dragStart",j,f(n))},drag:function(j,n){a._trigger("drag",j,f(n))},stop:function(j,n){c.position=[n.position.left-h.scrollLeft(),n.position.top-h.scrollTop()];b(this).removeClass("ui-dialog-dragging").height(i);a._trigger("dragStop",j,f(n));b.ui.dialog.overlay.resize()}})},_makeResizable:function(f){function a(j){return{originalPosition:j.originalPosition,originalSize:j.originalSize, +position:j.position,size:j.size}}f=f===d?this.options.resizable:f;var c=this,h=c.options,i=c.uiDialog.css("position");f=typeof f==="string"?f:"n,e,s,w,se,sw,ne,nw";c.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:c.element,maxWidth:h.maxWidth,maxHeight:h.maxHeight,minWidth:h.minWidth,minHeight:c._minHeight(),handles:f,start:function(j,n){b(this).addClass("ui-dialog-resizing");c._trigger("resizeStart",j,a(n))},resize:function(j,n){c._trigger("resize",j,a(n))},stop:function(j, +n){b(this).removeClass("ui-dialog-resizing");h.height=b(this).height();h.width=b(this).width();c._trigger("resizeStop",j,a(n));b.ui.dialog.overlay.resize()}}).css("position",i).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var f=this.options;return f.height==="auto"?f.minHeight:Math.min(f.minHeight,f.height)},_position:function(f){var a=[],c=[0,0],h;if(f){if(typeof f==="string"||typeof f==="object"&&"0"in f){a=f.split?f.split(" "):[f[0],f[1]];if(a.length=== +1)a[1]=a[0];b.each(["left","top"],function(i,j){if(+a[i]===a[i]){c[i]=a[i];a[i]=j}});f={my:a.join(" "),at:a.join(" "),offset:c.join(" ")}}f=b.extend({},b.ui.dialog.prototype.options.position,f)}else f=b.ui.dialog.prototype.options.position;(h=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(b.extend({of:window},f));h||this.uiDialog.hide()},_setOptions:function(f){var a=this,c={},h=false;b.each(f,function(i,j){a._setOption(i,j);if(i in e)h=true;if(i in +g)c[i]=j});h&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",c)},_setOption:function(f,a){var c=this,h=c.uiDialog;switch(f){case "beforeclose":f="beforeClose";break;case "buttons":c._createButtons(a);break;case "closeText":c.uiDialogTitlebarCloseText.text(""+a);break;case "dialogClass":h.removeClass(c.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+a);break;case "disabled":a?h.addClass("ui-dialog-disabled"):h.removeClass("ui-dialog-disabled"); +break;case "draggable":var i=h.is(":data(draggable)");i&&!a&&h.draggable("destroy");!i&&a&&c._makeDraggable();break;case "position":c._position(a);break;case "resizable":(i=h.is(":data(resizable)"))&&!a&&h.resizable("destroy");i&&typeof a==="string"&&h.resizable("option","handles",a);!i&&a!==false&&c._makeResizable(a);break;case "title":b(".ui-dialog-title",c.uiDialogTitlebar).html(""+(a||" "));break}b.Widget.prototype._setOption.apply(c,arguments)},_size:function(){var f=this.options,a,c,h= +this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(f.minWidth>f.width)f.width=f.minWidth;a=this.uiDialog.css({height:"auto",width:f.width}).height();c=Math.max(0,f.minHeight-a);if(f.height==="auto")if(b.support.minHeight)this.element.css({minHeight:c,height:"auto"});else{this.uiDialog.show();f=this.element.css("height","auto").height();h||this.uiDialog.hide();this.element.height(Math.max(f,c))}else this.element.height(Math.max(f.height-a,0));this.uiDialog.is(":data(resizable)")&& +this.uiDialog.resizable("option","minHeight",this._minHeight())}});b.extend(b.ui.dialog,{version:"1.8.11",uuid:0,maxZ:0,getTitleId:function(f){f=f.attr("id");if(!f){this.uuid+=1;f=this.uuid}return"ui-dialog-title-"+f},overlay:function(f){this.$el=b.ui.dialog.overlay.create(f)}});b.extend(b.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:b.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(f){return f+".dialog-overlay"}).join(" "),create:function(f){if(this.instances.length=== +0){setTimeout(function(){b.ui.dialog.overlay.instances.length&&b(document).bind(b.ui.dialog.overlay.events,function(c){if(b(c.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});b.fn.bgiframe&&a.bgiframe();this.instances.push(a);return a},destroy:function(f){var a=b.inArray(f,this.instances);a!=-1&&this.oldInstances.push(this.instances.splice(a,1)[0]);this.instances.length===0&&b([document,window]).unbind(".dialog-overlay");f.remove();var c=0;b.each(this.instances,function(){c=Math.max(c,this.css("z-index"))});this.maxZ=c},height:function(){var f,a;if(b.browser.msie&&b.browser.version<7){f=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +a=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return f0?a.left-h:Math.max(a.left-c.collisionPosition.left,a.left)},top:function(a,c){var h=b(window);h=c.collisionPosition.top+c.collisionHeight-h.height()-h.scrollTop();a.top=h>0?a.top-h:Math.max(a.top-c.collisionPosition.top,a.top)}},flip:{left:function(a,c){if(c.at[0]!=="center"){var h=b(window);h=c.collisionPosition.left+c.collisionWidth-h.width()-h.scrollLeft();var i=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,j=c.at[0]==="left"?c.targetWidth:-c.targetWidth,n=-2*c.offset[0];a.left+= +c.collisionPosition.left<0?i+j+n:h>0?i+j+n:0}},top:function(a,c){if(c.at[1]!=="center"){var h=b(window);h=c.collisionPosition.top+c.collisionHeight-h.height()-h.scrollTop();var i=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,j=c.at[1]==="top"?c.targetHeight:-c.targetHeight,n=-2*c.offset[1];a.top+=c.collisionPosition.top<0?i+j+n:h>0?i+j+n:0}}}};if(!b.offset.setOffset){b.offset.setOffset=function(a,c){if(/static/.test(b.curCSS(a,"position")))a.style.position="relative";var h=b(a), +i=h.offset(),j=parseInt(b.curCSS(a,"top",true),10)||0,n=parseInt(b.curCSS(a,"left",true),10)||0;i={top:c.top-i.top+j,left:c.left-i.left+n};"using"in c?c.using.call(a,i):h.css(i)};b.fn.offset=function(a){var c=this[0];if(!c||!c.ownerDocument)return null;if(a)return this.each(function(){b.offset.setOffset(this,a)});return f.call(this)}}})(jQuery); +(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("
    ").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"); +this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(e){if(e===d)return this._value();this._setOption("value",e);return this},_setOption:function(e,g){if(e==="value"){this.options.value=g;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var e=this.options.value;if(typeof e!=="number")e=0;return Math.min(this.options.max,Math.max(this.min,e))},_percentage:function(){return 100* +this._value()/this.options.max},_refreshValue:function(){var e=this.value(),g=this._percentage();if(this.oldValue!==e){this.oldValue=e;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",e===this.options.max).width(g.toFixed(0)+"%");this.element.attr("aria-valuenow",e)}});b.extend(b.ui.progressbar,{version:"1.8.11"})})(jQuery); +(function(b){b.widget("ui.slider",b.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,e=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");e.disabled&&this.element.addClass("ui-slider-disabled ui-disabled"); +this.range=b([]);if(e.range){if(e.range===true){this.range=b("
    ");if(!e.values)e.values=[this._valueMin(),this._valueMin()];if(e.values.length&&e.values.length!==2)e.values=[e.values[0],e.values[0]]}else this.range=b("
    ");this.range.appendTo(this.element).addClass("ui-slider-range");if(e.range==="min"||e.range==="max")this.range.addClass("ui-slider-range-"+e.range);this.range.addClass("ui-widget-header")}b(".ui-slider-handle",this.element).length===0&&b("").appendTo(this.element).addClass("ui-slider-handle"); +if(e.values&&e.values.length)for(;b(".ui-slider-handle",this.element).length").appendTo(this.element).addClass("ui-slider-handle");this.handles=b(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(g){g.preventDefault()}).hover(function(){e.disabled||b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}).focus(function(){if(e.disabled)b(this).blur(); +else{b(".ui-slider .ui-state-focus").removeClass("ui-state-focus");b(this).addClass("ui-state-focus")}}).blur(function(){b(this).removeClass("ui-state-focus")});this.handles.each(function(g){b(this).data("index.ui-slider-handle",g)});this.handles.keydown(function(g){var f=true,a=b(this).data("index.ui-slider-handle"),c,h,i;if(!d.options.disabled){switch(g.keyCode){case b.ui.keyCode.HOME:case b.ui.keyCode.END:case b.ui.keyCode.PAGE_UP:case b.ui.keyCode.PAGE_DOWN:case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:f= +false;if(!d._keySliding){d._keySliding=true;b(this).addClass("ui-state-active");c=d._start(g,a);if(c===false)return}break}i=d.options.step;c=d.options.values&&d.options.values.length?(h=d.values(a)):(h=d.value());switch(g.keyCode){case b.ui.keyCode.HOME:h=d._valueMin();break;case b.ui.keyCode.END:h=d._valueMax();break;case b.ui.keyCode.PAGE_UP:h=d._trimAlignValue(c+(d._valueMax()-d._valueMin())/5);break;case b.ui.keyCode.PAGE_DOWN:h=d._trimAlignValue(c-(d._valueMax()-d._valueMin())/5);break;case b.ui.keyCode.UP:case b.ui.keyCode.RIGHT:if(c=== +d._valueMax())return;h=d._trimAlignValue(c+i);break;case b.ui.keyCode.DOWN:case b.ui.keyCode.LEFT:if(c===d._valueMin())return;h=d._trimAlignValue(c-i);break}d._slide(g,a,h);return f}}).keyup(function(g){var f=b(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(g,f);d._change(g,f);b(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"); +this._mouseDestroy();return this},_mouseCapture:function(d){var e=this.options,g,f,a,c,h;if(e.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();g=this._normValueFromMouse({x:d.pageX,y:d.pageY});f=this._valueMax()-this._valueMin()+1;c=this;this.handles.each(function(i){var j=Math.abs(g-c.values(i));if(f>j){f=j;a=b(this);h=i}});if(e.range===true&&this.values(1)===e.min){h+=1;a=b(this.handles[h])}if(this._start(d, +h)===false)return false;this._mouseSliding=true;c._handleIndex=h;a.addClass("ui-state-active").focus();e=a.offset();this._clickOffset=!b(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-e.left-a.width()/2,top:d.pageY-e.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,h,g);return this._animateOff=true},_mouseStart:function(){return true}, +_mouseDrag:function(d){var e=this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,e);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var e; +if(this.orientation==="horizontal"){e=this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{e=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}e=d/e;if(e>1)e=1;if(e<0)e=0;if(this.orientation==="vertical")e=1-e;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+e*d)},_start:function(d,e){var g={handle:this.handles[e],value:this.value()};if(this.options.values&&this.options.values.length){g.value= +this.values(e);g.values=this.values()}return this._trigger("start",d,g)},_slide:function(d,e,g){var f;if(this.options.values&&this.options.values.length){f=this.values(e?0:1);if(this.options.values.length===2&&this.options.range===true&&(e===0&&g>f||e===1&&g1){this.options.values[d]=this._trimAlignValue(e);this._refreshValue();this._change(null,d)}if(arguments.length)if(b.isArray(arguments[0])){g=this.options.values;f=arguments[0];for(a=0;a=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,g=(d-this._valueMin())%e;alignValue=d-g;if(Math.abs(g)*2>=e)alignValue+=g>0?e:-e;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max}, +_refreshValue:function(){var d=this.options.range,e=this.options,g=this,f=!this._animateOff?e.animate:false,a,c={},h,i,j,n;if(this.options.values&&this.options.values.length)this.handles.each(function(p){a=(g.values(p)-g._valueMin())/(g._valueMax()-g._valueMin())*100;c[g.orientation==="horizontal"?"left":"bottom"]=a+"%";b(this).stop(1,1)[f?"animate":"css"](c,e.animate);if(g.options.range===true)if(g.orientation==="horizontal"){if(p===0)g.range.stop(1,1)[f?"animate":"css"]({left:a+"%"},e.animate); +if(p===1)g.range[f?"animate":"css"]({width:a-h+"%"},{queue:false,duration:e.animate})}else{if(p===0)g.range.stop(1,1)[f?"animate":"css"]({bottom:a+"%"},e.animate);if(p===1)g.range[f?"animate":"css"]({height:a-h+"%"},{queue:false,duration:e.animate})}h=a});else{i=this.value();j=this._valueMin();n=this._valueMax();a=n!==j?(i-j)/(n-j)*100:0;c[g.orientation==="horizontal"?"left":"bottom"]=a+"%";this.handle.stop(1,1)[f?"animate":"css"](c,e.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1, +1)[f?"animate":"css"]({width:a+"%"},e.animate);if(d==="max"&&this.orientation==="horizontal")this.range[f?"animate":"css"]({width:100-a+"%"},{queue:false,duration:e.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[f?"animate":"css"]({height:a+"%"},e.animate);if(d==="max"&&this.orientation==="vertical")this.range[f?"animate":"css"]({height:100-a+"%"},{queue:false,duration:e.animate})}}});b.extend(b.ui.slider,{version:"1.8.11"})})(jQuery); +(function(b,d){function e(){return++f}function g(){return++a}var f=0,a=0;b.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
    ",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:"
  • #{label}
  • "},_create:function(){this._tabify(true)},_setOption:function(c,h){if(c=="selected")this.options.collapsible&& +h==this.options.selected||this.select(h);else{this.options[c]=h;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+e()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+g());return b.cookie.apply(null,[c].concat(b.makeArray(arguments)))},_ui:function(c,h){return{tab:c,panel:h,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= +b(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function h(r,u){r.css("display","");!b.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var i=this,j=this.options,n=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=b(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return b("a",this)[0]});this.panels=b([]);this.anchors.each(function(r,u){var v=b(u).attr("href"),w=v.split("#")[0],y;if(w&&(w===location.toString().split("#")[0]|| +(y=b("base")[0])&&w===y.href)){v=u.hash;u.href=v}if(n.test(v))i.panels=i.panels.add(i.element.find(i._sanitizeSelector(v)));else if(v&&v!=="#"){b.data(u,"href.tabs",v);b.data(u,"load.tabs",v.replace(/#.*$/,""));v=i._tabId(u);u.href="#"+v;u=i.element.find("#"+v);if(!u.length){u=b(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(i.panels[r-1]||i.list);u.data("destroy.tabs",true)}i.panels=i.panels.add(u)}else j.disabled.push(r)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(i._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=b.unique(j.disabled.concat(b.map(this.lis.filter(".ui-state-disabled"),function(r){return i.lis.index(r)}))).sort();b.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(b.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(j.selected>=0&&this.anchors.length){i.element.find(i._sanitizeSelector(i.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");i.element.queue("tabs",function(){i._trigger("show",null,i._ui(i.anchors[j.selected],i.element.find(i._sanitizeSelector(i.anchors[j.selected].hash))[0]))});this.load(j.selected)}b(window).bind("unload",function(){i.lis.add(i.anchors).unbind(".tabs");i.lis=i.anchors=i.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected")); +this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);c=0;for(var p;p=this.lis[c];c++)b(p)[b.inArray(c,j.disabled)!=-1&&!b(p).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var l=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+ +r)};this.lis.bind("mouseover.tabs",function(){l("hover",b(this))});this.lis.bind("mouseout.tabs",function(){k("hover",b(this))});this.anchors.bind("focus.tabs",function(){l("focus",b(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",b(this).closest("li"))})}var m,o;if(j.fx)if(b.isArray(j.fx)){m=j.fx[0];o=j.fx[1]}else m=o=j.fx;var q=o?function(r,u){b(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal", +function(){h(u,o);i._trigger("show",null,i._ui(r,u[0]))})}:function(r,u){b(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");i._trigger("show",null,i._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){i.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");h(u,m);i.element.dequeue("tabs")})}:function(r,u){i.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");i.element.dequeue("tabs")}; +this.anchors.bind(j.event+".tabs",function(){var r=this,u=b(r).closest("li"),v=i.panels.filter(":not(.ui-tabs-hide)"),w=i.element.find(i._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||i.panels.filter(":animated").length||i._trigger("select",null,i._ui(this,w[0]))===false){this.blur();return false}j.selected=i.anchors.index(this);i.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected= +-1;j.cookie&&i._cookie(j.selected,j.cookie);i.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&i._cookie(j.selected,j.cookie);i.element.queue("tabs",function(){q(r,w)});i.load(i.anchors.index(this));this.blur();return false}j.cookie&&i._cookie(j.selected,j.cookie);if(w.length){v.length&&i.element.queue("tabs",function(){s(r,v)});i.element.queue("tabs",function(){q(r,w)});i.load(i.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier."; +b.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));return c},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var h= +b.data(this,"href.tabs");if(h)this.href=h;var i=b(this).unbind(".tabs");b.each(["href","load","cache"],function(j,n){i.removeData(n+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){b.data(this,"destroy.tabs")?b(this).remove():b(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c, +h,i){if(i===d)i=this.anchors.length;var j=this,n=this.options;h=b(n.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,h));c=!c.indexOf("#")?c.replace("#",""):this._tabId(b("a",h)[0]);h.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var p=j.element.find("#"+c);p.length||(p=b(n.panelTemplate).attr("id",c).data("destroy.tabs",true));p.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(i>=this.lis.length){h.appendTo(this.list);p.appendTo(this.list[0].parentNode)}else{h.insertBefore(this.lis[i]); +p.insertBefore(this.panels[i])}n.disabled=b.map(n.disabled,function(l){return l>=i?++l:l});this._tabify();if(this.anchors.length==1){n.selected=0;h.addClass("ui-tabs-selected ui-state-active");p.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[i],this.panels[i]));return this},remove:function(c){c=this._getIndex(c);var h=this.options,i=this.lis.eq(c).remove(),j=this.panels.eq(c).remove(); +if(i.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--n:n});this._tabify();this._trigger("remove",null,this._ui(i.find("a")[0],j[0]));return this},enable:function(c){c=this._getIndex(c);var h=this.options;if(b.inArray(c,h.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");h.disabled=b.grep(h.disabled,function(i){return i!=c});this._trigger("enable",null, +this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){c=this._getIndex(c);var h=this.options;if(c!=h.selected){this.lis.eq(c).addClass("ui-state-disabled");h.disabled.push(c);h.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this},select:function(c){c=this._getIndex(c);if(c==-1)if(this.options.collapsible&&this.options.selected!=-1)c=this.options.selected;else return this;this.anchors.eq(c).trigger(this.options.event+".tabs");return this}, +load:function(c){c=this._getIndex(c);var h=this,i=this.options,j=this.anchors.eq(c)[0],n=b.data(j,"load.tabs");this.abort();if(!n||this.element.queue("tabs").length!==0&&b.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing");if(i.spinner){var p=b("span",j);p.data("label.tabs",p.html()).html(i.spinner)}this.xhr=b.ajax(b.extend({},i.ajaxOptions,{url:n,success:function(l,k){h.element.find(h._sanitizeSelector(j.hash)).html(l);h._cleanup();i.cache&&b.data(j, +"cache.tabs",true);h._trigger("load",null,h._ui(h.anchors[c],h.panels[c]));try{i.ajaxOptions.success(l,k)}catch(m){}},error:function(l,k){h._cleanup();h._trigger("load",null,h._ui(h.anchors[c],h.panels[c]));try{i.ajaxOptions.error(l,k,c,j)}catch(m){}}}));h.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this}, +url:function(c,h){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",h);return this},length:function(){return this.anchors.length}});b.extend(b.ui.tabs,{version:"1.8.11"});b.extend(b.ui.tabs.prototype,{rotation:null,rotate:function(c,h){var i=this,j=this.options,n=i._rotate||(i._rotate=function(p){clearTimeout(i.rotation);i.rotation=setTimeout(function(){var l=j.selected;i.select(++l").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;ic)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c
    a";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(var g=c;g0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div
    ","
    "]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1>");try{for(var c=0,e=this.length;c1&&l0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]===""&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("
    ").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b
    ";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window); \ No newline at end of file diff --git a/wcfsetup/install/files/js/WCF.js b/wcfsetup/install/files/js/WCF.js new file mode 100644 index 0000000000..23169e0d91 --- /dev/null +++ b/wcfsetup/install/files/js/WCF.js @@ -0,0 +1,1403 @@ +/** + * Class and function collection for WCF + * + * @author Alexander Ebert + * @copyright 2001-2011 WoltLab GmbH + * @license GNU Lesser General Public License + */ + +/** + * Initialize WCF namespace + */ +var WCF = {}; + +/** + * Extends jQuery with additional methods. + */ +$.extend(true, { + /** + * Escapes an ID to work with jQuery selectors. + * + * @see http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_select_an_element_by_an_ID_that_has_characters_used_in_CSS_notation.3F + * @param string id + * @return string + */ + wcfEscapeID: function(id) { + return id.replace(/(:|\.)/g, '\\$1'); + }, + + /** + * Returns true if given ID exists within DOM. + * + * @param string id + * @return boolean + */ + wcfIsset: function(id) { + return !!$('#' + $.wcfEscapeID(id)).length; + } +}); + +/** + * Extends jQuery's chainable methods. + */ +$.fn.extend({ + /** + * Returns tag name of current jQuery element. + * + * @returns string + */ + getTagName: function() { + return this.get(0).tagName.toLowerCase(); + }, + + /** + * Returns the dimensions for current element. + * + * @see http://api.jquery.com/hidden-selector/ + * @param string type + * @return object + */ + getDimensions: function(type) { + var dimensions = css = {}; + var wasHidden = false; + + // show element to retrieve dimensions and restore them later + if (this.is(':hidden')) { + css = { + display: this.css('display'), + visibility: this.css('visibility') + }; + + wasHidden = true; + + this.css({ + display: 'block', + visibility: 'hidden' + }); + } + + switch (type) { + case 'inner': + dimensions = { + height: this.innerHeight(), + width: this.innerWidth() + }; + break; + + case 'outer': + dimensions = { + height: this.outerHeight(), + width: this.innerWidth() + }; + break; + + default: + dimensions = { + height: this.height(), + width: this.width() + }; + break; + } + + // restore previous settings + if (wasHidden) { + this.css(css); + } + + return dimensions; + }, + + /** + * Returns the offsets for current element, defaults to position + * relative to document. + * + * @see http://api.jquery.com/hidden-selector/ + * @param string type + * @return object + */ + getOffsets: function(type) { + var offsets = css = {}; + var wasHidden = false; + + // show element to retrieve dimensions and restore them later + if (this.is(':hidden')) { + css = { + display: this.css('display'), + visibility: this.css('visibility') + }; + + wasHidden = true; + + this.css({ + display: 'block', + visibility: 'hidden' + }); + } + + switch (type) { + case 'offset': + offsets = this.offset(); + break; + + case 'position': + default: + offsets = this.position(); + break; + } + + // restore previous settings + if (wasHidden) { + this.css(css); + } + + return offsets; + }, + + /** + * Changes element's position to 'absolute' or 'fixed' while maintaining it's + * current position relative to viewport. Optionally removes element from + * current DOM-node and moving it into body-element (useful for drag & drop) + * + * @param boolean rebase + * @return object + */ + makePositioned: function(position, rebase) { + if (position != 'absolute' && position != 'fixed') { + position = 'absolute'; + } + + var $currentPosition = this.getOffsets('position'); + this.css({ + position: position, + left: $currentPosition.left, + margin: 0, + top: $currentPosition.top + }); + + if (rebase) { + this.remove().appentTo('body'); + } + + return this; + }, + + /** + * Disables a form element. + * + * @return jQuery + */ + disable: function() { + return this.attr('disabled', 'disabled'); + }, + + /** + * Enables a form element. + * + * @return jQuery + */ + enable: function() { + return this.removeAttr('disabled'); + }, + + /** + * Applies a grow-effect by resizing element while moving the + * element appropriately + * + * @param object data + * @param object options + * @return jQuery + */ + wcfGrow: function(data, options) { + // create temporarily element to determine dimensions + var $tempElementID = WCF.getRandomID(); + $('body').append('
    ' + data.content + '
    '); + var $tempElement = $('#' + $tempElementID); + + // get content dimensions + var $dimensions = $tempElement.getDimensions(); + + // remove temporarily element + $tempElement.empty().remove(); + + // move parent element, used if applying effect on dialogs + if (!data.parent) { + data.parent = this; + } + + // calculate values for grow-effect + var $borderHeight = parseInt(data.parent.css('borderTopWidth')) + parseInt(data.parent.css('borderBottomWidth')); + var $borderWidth = parseInt(data.parent.css('borderLeftWidth')) + parseInt(data.parent.css('borderRightWidth')); + + var $windowDimensions = $(window).getDimensions(); + var $leftOffset = Math.round(($windowDimensions.width - ($dimensions.width + $borderWidth)) / 2); + var $topOffset = Math.round(($windowDimensions.height - ($dimensions.height + $borderHeight)) / 2); + + data.parent.makePositioned('fixed', false); + data.parent.animate({ + left: $leftOffset + 'px', + top: $topOffset + 'px' + }, options); + + return this.animate({ + height: $dimensions.height, + width: $dimensions.width + }, options); + }, + + /** + * Shows an element by sliding and fading it into viewport. + * + * @param string direction + * @param object callback + * @returns jQuery + */ + wcfDropIn: function(direction, callback) { + if (!direction) direction = 'up'; + + return this.show(WCF.getEffect(this.getTagName(), 'drop'), { direction: direction }, 600, callback); + }, + + /** + * Hides an element by sliding and fading it out the viewport. + * + * @param string direction + * @param object callback + * @returns jQuery + */ + wcfDropOut: function(direction, callback) { + if (!direction) direction = 'down'; + + return this.hide(WCF.getEffect(this.getTagName(), 'drop'), { direction: direction }, 600, callback); + }, + + /** + * Shows an element by blinding it up. + * + * @param string direction + * @param object callback + * @returns jQuery + */ + wcfBlindIn: function(direction, callback) { + if (!direction) direction = 'vertical'; + + return this.show(WCF.getEffect(this.getTagName(), 'blind'), { direction: direction }, 200, callback); + }, + + /** + * Hides an element by blinding it down. + * + * @param string direction + * @param object callback + * @returns jQuery + */ + wcfBlindOut: function(direction, callback) { + if (!direction) direction = 'vertical'; + + return this.hide(WCF.getEffect(this.getTagName(), 'blind'), { direction: direction }, 200, callback); + }, + + /** + * Highlights an element. + * + * @param object options + * @param object callback + * @returns jQuery + */ + wcfHighlight: function(options, callback) { + return this.effect('highlight', options, 600, callback); + } +}); + +/** + * WoltLab Community Framework core methods + */ +$.extend(WCF, { + /** + * Counter for dynamic element id's + * + * @var integer + */ + _idCounter: 0, + + /** + * Shows a modal dialog with a built-in AJAX-loader. + * + * @param string dialogID + * @param boolean resetDialog + */ + showAJAXDialog: function(dialogID, resetDialog) { + if (!dialogID) { + dialogID = this.getRandomID(); + } + + if (!$.wcfIsset(dialogID)) { + $('body').append($('
    ')); + } + + var dialog = $('#' + $.wcfEscapeID(dialogID)); + + if (resetDialog) { + dialog.empty(); + } + + dialog.addClass('overlayLoading'); + + var dialogOptions = arguments[2] || {}; + dialog.wcfAJAXDialog(dialogOptions); + }, + + /** + * Shows a modal dialog. + * @param string dialogID + */ + showDialog: function(dialogID) { + // we cannot work with a non-existant dialog, if you wish to + // load content via AJAX, see showAJAXDialog() instead + if (!$.wcfIsset(dialogID)) return; + + var $dialog = $('#' + $.wcfEscapeID(dialogID)); + + var dialogOptions = arguments[2] || {}; + $dialog.wcfDialog(dialogOptions); + }, + + /** + * Returns a dynamically created id. + * + * @see https://github.com/sstephenson/prototype/blob/master/src/prototype/dom/dom.js#L1789 + * @return string + */ + getRandomID: function() { + var $elementID = ''; + + do { + $elementID = 'wcf' + this._idCounter++; + } + while ($.wcfIsset($elementID)); + + return $elementID; + }, + + /** + * Wrapper for $.inArray which returns boolean value instead of + * index value, similar to PHP's in_array(). + * + * @param mixed needle + * @param array haystack + * @return boolean + */ + inArray: function(needle, haystack) { + return ($.inArray(needle, haystack) != -1); + }, + + /** + * Adjusts effect for partially supported elements. + * + * @param object object + * @param string effect + * @return string + */ + getEffect: function(tagName, effect) { + // most effects are not properly supported on table rows, use highlight instead + if (tagName == 'tr') { + return 'highlight'; + } + + return effect; + } +}); + +/** + * Provides a simple call for periodical executed functions. Based upon + * ideas by Prototype's PeriodicalExecuter. + * + * @see https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/periodical_executer.js + * @param function callback + * @param integer delay + */ +WCF.PeriodicalExecuter = function(callback, delay) { this.init(callback, delay); }; +WCF.PeriodicalExecuter.prototype = { + /** + * Initializes a periodical executer. + * + * @param function callback + * @param integer delay + */ + init: function(callback, delay) { + this.callback = callback; + this.delay = delay; + this.loop = true; + + this.intervalID = setInterval($.proxy(this._execute, this), this.delay); + }, + + /** + * Executes callback. + */ + _execute: function() { + this.callback(this); + + if (!this.loop) { + clearInterval(this.intervalID); + } + }, + + /** + * Terminates loop. + */ + stop: function() { + this.loop = false; + } +}; + +/** + * Namespace for AJAXProxies + */ +WCF.Action = {}; + +/** + * Basic implementation for AJAX-based proxyies + * + * @param object options + */ +WCF.Action.Proxy = function(options) { this.init(options); }; +WCF.Action.Proxy.prototype = { + /** + * Initializes AJAXProxy. + * + * @param object options + */ + init: function(options) { + // initialize default values + this.options = $.extend(true, { + autoSend: false, + data: { }, + after: null, + init: null, + failure: null, + success: null, + type: 'POST', + url: 'index.php?action=AJAXProxy&t=' + SECURITY_TOKEN + SID_ARG_2ND + }, options); + + this.confirmationDialog = null; + this.loading = null; + + // send request immediately after initialization + if (this.options.autoSend) { + this.sendRequest(); + } + }, + + /** + * Sends an AJAX request. + */ + sendRequest: function() { + this._init(); + + $.ajax({ + data: this.options.data, + dataType: 'json', + type: this.options.type, + url: this.options.url, + success: $.proxy(this._success, this), + error: $.proxy(this._failure, this) + }); + }, + + /** + * Fires before request is send, displays global loading status. + */ + _init: function() { + if ($.isFunction(this.options.init)) { + this.options.init(); + } + + $('').appendTo($('body')); + this.loading = $('#actionProxyLoading'); + this.loading.wcfDropIn(); + }, + + /** + * Handles AJAX errors. + * + * @param object jqXHR + * @param string textStatus + * @param string errorThrown + */ + _failure: function(jqXHR, textStatus, errorThrown) { + try { + var data = $.parseJSON(jqXHR.responseText); + + // call child method if applicable + if ($.isFunction(this.options.failure)) { + this.options.failure(jqXHR, textStatus, errorThrown, data); + } + + var $randomID = WCF.getRandomID(); + $('

    Der Server antwortete: ' + data.message + '.

    ').wcfDialog(); + } + // failed to parse JSON + catch (e) { + var $randomID = WCF.getRandomID(); + $('

    Der Server antwortete: ' + jqXHR.responseText + '.

    ').wcfDialog(); + } + + this._after(); + }, + + /** + * Handles successful AJAX requests. + * + * @param object data + * @param string textStatus + * @param object jqXHR + */ + _success: function(data, textStatus, jqXHR) { + // call child method if applicable + if ($.isFunction(this.options.success)) { + this.options.success(data, textStatus, jqXHR); + } + + this._after(); + }, + + /** + * Fires after an AJAX request, hides global loading status. + */ + _after: function() { + if ($.isFunction(this.options.after)) { + this.options.after(); + } + + this.loading.wcfDropOut('up'); + }, + + /** + * Sets options, MUST be used to set parameters before sending request + * if calling from child classes. + * + * @param string optionName + * @param mixed optionData + */ + setOption: function(optionName, optionData) { + this.options[optionName] = optionData; + } +}; + +/** + * Basic implementation for simple proxy access using bound elements. + * + * @param object options + * @param object callbacks + */ +WCF.Action.SimpleProxy = function(options, callbacks) { this.init(options, callbacks); }; +WCF.Action.SimpleProxy.prototype = { + /** + * Initializes SimpleProxy. + * + * @param object options + * @param object callbacks + */ + init: function(options, callbacks) { + /** + * action-specific options + */ + this.options = $.extend(true, { + action: '', + className: '', + elements: null, + eventName: 'click' + }, options); + + /** + * proxy-specific options + */ + this.callbacks = $.extend(true, { + after: null, + failure: null, + init: null, + success: null + }, callbacks); + + if (!this.options.elements) return; + + // initialize proxy + this.proxy = new WCF.Action.Proxy(this.callbacks); + + // bind event listener + this.options.elements.each($.proxy(function(index, element) { + $(element).bind(this.options.eventName, $.proxy(this._handleEvent, this)); + }, this)); + }, + + /** + * Handles event actions. + * + * @param object event + */ + _handleEvent: function(event) { + this.proxy.setOption('data', { + actionName: this.options.action, + className: this.options.className, + objectIDs: [ $(event.target).data('objectID') ] + }); + + this.proxy.sendRequest(); + } +}; + +/** + * Basic implementation for AJAXProxy-based deletion. + * + * @param string className + * @param jQuery containerList + */ +WCF.Action.Delete = function(className, containerList) { this.init(className, containerList); }; +WCF.Action.Delete.prototype = { + /** + * Initializes 'delete'-Proxy. + * + * @param string className + * @param jQuery containerList + */ + init: function(className, containerList) { + if (!containerList.length) return; + this.containerList = containerList; + this.className = className; + + // initialize proxy + var options = { + success: $.proxy(this._success, this) + }; + this.proxy = new WCF.Action.Proxy(options); + + // bind event listener + this.containerList.each($.proxy(function(index, container) { + $(container).find('.deleteButton').bind('click', $.proxy(this._click, this)); + }, this)); + }, + + /** + * Sends AJAX request. + * + * @param object event + */ + _click: function(event) { + var $target = $(event.target); + + if ($target.data('confirmMessage')) { + if (confirm($target.data('confirmMessage'))) { + this._sendRequest($target); + } + } + else { + this._sendRequest($target); + } + + }, + + _sendRequest: function(object) { + this.proxy.setOption('data', { + actionName: 'delete', + className: this.className, + objectIDs: [ $(object).data('objectID') ] + }); + + this.proxy.sendRequest(); + }, + + /** + * Deletes items from containers. + * + * @param object data + * @param string textStatus + * @param object jqXHR + */ + _success: function(data, textStatus, jqXHR) { + // remove items + this.containerList.each(function(index, container) { + var $objectID = $(container).find('.deleteButton').data('objectID'); + if (WCF.inArray($objectID, data.objectIDs)) { + $(container).wcfBlindOut('up', function() { + $(container).empty().remove(); + }, container); + } + }); + } +}; + +/** + * Basic implementation for AJAXProxy-based toggle actions. + * + * @param string className + * @param jQuery containerList + */ +WCF.Action.Toggle = function(className, containerList) { this.init(className, containerList); }; +WCF.Action.Toggle.prototype = { + /** + * Initializes 'toggle'-Proxy + * + * @param string className + * @param jQuery containerList + */ + init: function(className, containerList) { + if (!containerList.length) return; + this.containerList = containerList; + this.className = className; + + // initialize proxy + var options = { + success: $.proxy(this._success, this) + }; + this.proxy = new WCF.Action.Proxy(options); + + // bind event listener + this.containerList.each($.proxy(function(index, container) { + $(container).find('.toggleButton').bind('click', $.proxy(this._click, this)); + }, this)); + }, + + /** + * Sends AJAX request. + * + * @param object event + */ + _click: function(event) { + this.proxy.setOption('data', { + actionName: 'toggle', + className: this.className, + objectIDs: [ $(event.target).data('objectID') ] + }); + + this.proxy.sendRequest(); + }, + + /** + * Toggles status icons. + * + * @param object data + * @param string textStatus + * @param object jqXHR + */ + _success: function(data, textStatus, jqXHR) { + // remove items + this.containerList.each(function(index, container) { + var $toggleButton = $(container).find('.toggleButton'); + if (WCF.inArray($toggleButton.data('objectID'), data.objectIDs)) { + $(container).wcfHighlight(); + + // toggle icon source + $toggleButton.attr('src', function() { + if (this.src.match(/enabled(S|M|L)\.png$/)) { + return this.src.replace(/enabled(S|M|L)\.png$/, 'disabled$1\.png'); + } + else { + return this.src.replace(/disabled(S|M|L)\.png$/, 'enabled$1\.png'); + } + }); + // toogle icon title + $toggleButton.attr('title', function() { + if (this.src.match(/enabled(S|M|L)\.png$/)) { + return $(this).data('disableMessage'); + } + else { + return $(this).data('enableMessage'); + } + }); + } + }); + } +}; + +/** + * Namespace for date-related functions. + */ +WCF.Date = {}; + +/** + * Provides utility functions for date operations. + */ +WCF.Date.Util = { + /** + * Returns UTC timestamp, if date is not given, current time will be used. + * + * @param Date date + * @return integer + */ + gmdate: function(date) { + var $date = (date) ? date : new Date(); + + return Math.round(Date.UTC( + $date.getUTCFullYear(), + $date.getUTCMonth(), + $date.getUTCDay(), + $date.getUTCHours(), + $date.getUTCMinutes(), + $date.getUTCSeconds() + ) / 1000); + }, + + /** + * Returns a Date object with precise offset (including timezone and local timezone). + * Parameter timestamp must be in miliseconds! + * + * @param integer timestamp + * @param integer offset + * @return Date + */ + getTimezoneDate: function(timestamp, offset) { + var $date = new Date(timestamp); + var $localOffset = $date.getTimezoneOffset() * -1 * 60000; + + return new Date((timestamp - $localOffset - offset)); + } +}; + +/** + * Handles relative time designations. + */ +WCF.Date.Time = function() { this.init(); }; +WCF.Date.Time.prototype = { + /** + * Initializes relative datetimes. + */ + init: function() { + // initialize variables + this.elements = $('time.datetime'); + this.timestamp = 0; + + // calculate relative datetime on init + this._refresh(); + + // re-calculate relative datetime every minute + new WCF.PeriodicalExecuter($.proxy(this._refresh, this), 60000); + }, + + /** + * Refreshes relative datetime for each element. + */ + _refresh: function() { + // TESTING ONLY! + var $date = new Date(); + this.timestamp = ($date.getTime() - $date.getMilliseconds()) / 1000; + // TESTING ONLY! + + this.elements.each($.proxy(this._refreshElement, this)); + }, + + /** + * Refreshes relative datetime for current element. + * + * @param integer index + * @param object element + */ + _refreshElement: function(index, element) { + if (!$(element).attr('title')) { + $(element).attr('title', $(element).text()); + } + + var $timestamp = $(element).data('timestamp'); + var $date = $(element).data('date'); + var $time = $(element).data('time'); + var $offset = $(element).data('offset'); + + // timestamp is less than 60 minutes ago (display 1 hour ago rather than 60 minutes ago) + if (this.timestamp < ($timestamp + 3540)) { + var $minutes = Math.round((this.timestamp - $timestamp) / 60); + $(element).text(eval(WCF.Language.get('wcf.global.date.relative.minutes'))); + } + // timestamp is less than 24 hours ago + else if (this.timestamp < ($timestamp + 86400)) { + var $hours = Math.round((this.timestamp - $timestamp) / 3600); + $(element).text(eval(WCF.Language.get('wcf.global.date.relative.hours'))); + } + // timestamp is less than a week ago + else if (this.timestamp < ($timestamp + 604800)) { + var $days = Math.round((this.timestamp - $timestamp) / 86400); + var $string = eval(WCF.Language.get('wcf.global.date.relative.pastDays')); + + // get day of week + var $dateObj = WCF.Date.Util.getTimezoneDate(($timestamp * 1000), $offset); + var $dow = $dateObj.getDay(); + + $(element).text($string.replace(/\%day\%/, WCF.Language.get('__days')[$dow]).replace(/\%time\%/, $time)); + } + // timestamp is between ~700 million years BC and last week + else { + var $string = WCF.Language.get('wcf.global.date.dateTimeFormat'); + $(element).text($string.replace(/\%date\%/, $date).replace(/\%time\%/, $time)); + } + } +}; + +/** + * Hash-like dictionary. Based upon idead from Prototype's hash + * + * @see https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/hash.js + */ +WCF.Dictionary = function() { this.init(); }; +WCF.Dictionary.prototype = { + /** + * Initializes a new dictionary. + */ + init: function() { + this.variables = { }; + }, + + /** + * Adds an entry. + * + * @param string key + * @param mixed value + */ + add: function(key, value) { + this.variables[key] = value; + }, + + /** + * Adds a traditional object to current dataset. + * + * @param object object + */ + addObject: function(object) { + for (var $key in object) { + this.add($key, object[$key]); + } + }, + + /** + * Adds a dictionary to current dataset. + * + * @param object dictionary + */ + addDictionary: function(dictionary) { + dictionary.each($.proxy(function(pair) { + this.add(pair.key, pair.value); + }, this)); + }, + + /** + * Retrieves the value of an entry or returns null if key is not found. + * + * @param string key + * @returns mixed + */ + get: function(key) { + if (this.isset(key)) { + return this.variables[key]; + } + + return null; + }, + + /** + * Returns true if given key is a valid entry. + * + * @param string key + */ + isset: function(key) { + return this.variables.hasOwnProperty(key); + }, + + /** + * Removes an entry. + * + * @param string key + */ + remove: function(key) { + delete this.variables[key]; + }, + + /** + * Iterates through dictionary. + * + * Usage: + * var $hash = new WCF.Dictionary(); + * $hash.add('foo', 'bar'); + * $hash.each(function(pair) { + * // alerts: foo = bar + * alert(pair.key + ' = ' + pair.value); + * }); + * + * @param function callback + */ + each: function(callback) { + if (!$.isFunction(callback)) { + return; + } + + for (var $key in this.variables) { + var $value = this.variables[$key]; + var $pair = { + key: $key, + value: $value + }; + + callback($pair); + } + } +}; + +/** + * Global language storage. + * + * @see WCF.Dictionary + */ +WCF.Language = { + _variables: new WCF.Dictionary(), + + /** + * @see WCF.Dictionary.addObject() + */ + add: function(key, value) { + this._variables.add(key, value); + }, + + /** + * @see WCF.Dictionary.addObject() + */ + addObject: function(object) { + this._variables.addObject(object); + }, + + /** + * Retrieves a variable. + * + * @param string key + * @return mixed + */ + get: function(key) { + return this._variables.get(key); + } +}; + +/** + * String utilities. + */ +WCF.String = { + /** + * Makes a string's first character uppercase + * + * @param string string + * @return string + */ + ucfirst: function(string) { + return string.substring(0, 1).toUpperCase() + string.substring(1); + } +}; + +/** + * Basic implementation for WCF TabMenus. Use the data attributes 'active' to specify the + * tab which should be shown on init. Furthermore you may specify a 'store' data-attribute + * which will be filled with the currently selected tab. + */ +WCF.TabMenu = { + /** + * Initializes all TabMenus + */ + init: function() { + $('.tabMenuContainer').each(function(index, tabMenu) { + if (!$(tabMenu).attr('id')) { + var $randomID = WCF.getRandomID(); + $(tabMenu).attr('id', $randomID); + } + + // init jQuery UI TabMenu + $(tabMenu).wcfTabs({ + select: function(event, ui) { + var $panel = $(ui.panel); + var $container = $panel.closest('.tabMenuContainer'); + + // store currently selected item + if ($container.data('store')) { + if ($.wcfIsset($container.data('store'))) { + $('#' + $container.data('store')).attr('value', $panel.attr('id')); + } + } + } + }); + + // display active item on init + if ($(tabMenu).data('active')) { + $(tabMenu).find('.tabMenuContent').each(function(index, tabMenuItem) { + if ($(tabMenuItem).attr('id') == $(tabMenu).data('active')) { + $(tabMenu).wcfTabs('select', index); + } + }); + } + }); + } +}; + +/** + * Toggles options. + * + * @param string element + * @param array showItems + * @param array hideItems + */ +WCF.ToggleOptions = function(element, showItems, hideItems) { this.init(element, showItems, hideItems); }; +WCF.ToggleOptions.prototype = { + /** + * target item + * + * @var jQuery + */ + _element: null, + + /** + * list of items to be shown + * + * @var array + */ + _showItems: [], + + /** + * list of items to be hidden + * + * @var array + */ + _hideItems: [], + + /** + * Initializes option toggle. + * + * @param string element + * @param array showItems + * @param array hideItems + */ + init: function(element, showItems, hideItems) { + this._element = $('#' + element); + this._showItems = showItems; + this._hideItems = hideItems; + + // bind event + this._element.click($.proxy(this._toggle, this)); + + // execute toggle on init + this._toggle(); + }, + + /** + * Toggles items. + */ + _toggle: function() { + if (!this._element.attr('checked')) return; + + for (var $i = 0, $length = this._showItems.length; $i < $length; $i++) { + var $item = this._showItems[$i]; + + $('#' + $item).show(); + } + + for (var $i = 0, $length = this._hideItems.length; $i < $length; $i++) { + var $item = this._hideItems[$i]; + + $('#' + $item).hide(); + } + } +} + +/** + * Basic implementation for WCF dialogs. + */ +$.widget('ui.wcfDialog', $.ui.dialog, { + _init: function() { + this.options.autoOpen = true; + this.options.close = function(event, ui) { + $(this).parent('.ui-dialog').wcfDropOut('down', $.proxy(function() { + $(this).parent('.ui-dialog').empty().remove(); + }, this)); + }; + this.options.height = 'auto'; + this.options.minHeight = 0; + this.options.modal = true; + this.options.width = 'auto'; + + $.ui.dialog.prototype._init.apply(this, arguments); + } +}); + +/** + * Basic implementation for WCF dialogs loading content + * via AJAX before calling dialog itself. + */ +$.widget('ui.wcfAJAXDialog', $.ui.dialog, { + /** + * Indicates wether callback was already executed + * + * @var boolean + */ + _callbackExecuted: false, + + /** + * Initializes AJAX-request to fetch content. + */ + _init: function() { + if (this.options.ajax) { + this._loadContent(); + } + + // force dialog to be placed centered + this.options.position = { + my: 'center center', + at: 'center center' + }; + + // dialog should display a spinner-like image, thus immediately fire up dialog + this.options.autoOpen = true; + this.options.width = 'auto'; + this.options.minHeight = 80; + + // disable ability to move dialog + this.options.resizable = false; + this.options.draggable = false; + + this.options.modal = true; + this.options.hide = { + effect: 'drop', + direction: 'down' + }; + + this.options.close = function(event, ui) { + // loading ajax content seems to block properly closing + $(this).parent('.ui-dialog').empty().remove(); + }; + + if (this.options.preventClose) { + this.options.closeOnEscape = false; + } + + $.ui.dialog.prototype._init.apply(this, arguments); + + // remove complete node instead of removing node-by-node + if (this.options.hideTitle && this.options.preventClose) { + this.element.parent('.ui-dialog').find('div.ui-dialog-titlebar').empty().remove(); + } + else { + if (this.options.hideTitle) { + // remove title element + $('#ui-dialog-title-' + this.element.attr('id')).empty().remove(); + } + + if (this.options.preventClose) { + // remove close-button + this.element.parent('.ui-dialog').find('a.ui-dialog-titlebar-close').empty().remove(); + } + } + }, + + /** + * Loads content via AJAX. + * + * @todo Enforce JSON + */ + _loadContent: function() { + var $type = 'GET'; + if (this.options.ajax.type) { + $type = this.options.ajax.type; + + if (this.options.ajax.type != 'GET' && this.options.ajax.type != 'POST') { + $type = 'GET'; + } + } + + var $data = this.options.ajax.data || {}; + + $.ajax({ + url: this.options.ajax.url, + context: this, + dataType: 'json', + type: $type, + data: $data, + success: $.proxy(this._createDialog, this), + error: function(transport) { + alert(transport.responseText); + } + }); + }, + + /** + * Inserts content. + * + * @param string data + */ + _createDialog: function(data) { + data.ignoreTemplate = true; + this.element.data('responseData', data); + + this.element.wcfGrow({ + content: data.template, + parent: this.element.parent('.ui-dialog') + }, { + duration: 600, + complete: $.proxy(function(data) { + this.element.css({ + height: 'auto' + }); + + // prevent double execution due to two complete-calls (two times animate) + if (this._callbackExecuted) { + return; + } + + this._callbackExecuted = true; + + this.element.removeClass('overlayLoading'); + this.element.html(this.element.data('responseData').template); + + if (this.options.ajax.success) { + this.options.ajax.success(); + } + }, this) + }); + }, + + /** + * Redraws dialog, should be executed everytime content is changed. + */ + redraw: function() { + var $dimensions = this.element.getDimensions(); + + if ($dimensions.height > 200) { + this.element.wcfGrow({ + content: this.element.html(), + parent: this.element.parent('.ui-dialog') + }, { + duration: 600, + complete: function() { + $(this).css({ height: 'auto' }); + } + }); + } + } +}); + +/** + * Workaround for ids containing a dot ".", until jQuery UI devs learn + * to properly escape ids ... (it took 18 months until they finally + * fixed it!) + * + * @see http://bugs.jqueryui.com/ticket/4681 + */ +$.widget('ui.wcfTabs', $.ui.tabs, { + _init: function() { + $.ui.dialog.prototype._init.apply(this, arguments); + }, + + _sanitizeSelector: function(hash) { + return hash.replace(/([:\.])/g, '\\$1'); + } +}); + +/** + * Encapsulate eval() within an own function to prevent problems + * with optimizing and minifiny JS. + * + * @param mixed expression + * @returns mixed + */ +function wcfEval(expression) { + return eval(expression); +} \ No newline at end of file diff --git a/wcfsetup/install/files/language/.htaccess b/wcfsetup/install/files/language/.htaccess new file mode 100644 index 0000000000..3418e55a68 --- /dev/null +++ b/wcfsetup/install/files/language/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/action/AJAXProxyAction.class.php b/wcfsetup/install/files/lib/acp/action/AJAXProxyAction.class.php new file mode 100644 index 0000000000..4b1d619fb5 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/action/AJAXProxyAction.class.php @@ -0,0 +1,15 @@ + + * @package com.woltlab.wcf + * @subpackage acp.action + * @category Community Framework + */ +class AJAXProxyAction extends \wcf\action\AJAXProxyAction { } +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/action/InstallPackageAction.class.php b/wcfsetup/install/files/lib/acp/action/InstallPackageAction.class.php new file mode 100644 index 0000000000..70158c2364 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/action/InstallPackageAction.class.php @@ -0,0 +1,158 @@ + + * @package com.woltlab.wcf + * @subpackage acp.action + * @category Community Framework + */ +class InstallPackageAction extends AbstractDialogAction { + /** + * current node + * + * @var string + */ + public $node = ''; + + /** + * PackageInstallationDispatcher object + * + * @var PackageInstallationDispatcher + */ + public $installation = null; + + /** + * PackageInstallationQueue object + * + * @var PackageInstallationQueue + */ + public $queue = null; + + /** + * current queue id + * + * @var integer + */ + public $queueID = 0; + + // system + public $templateName = 'packageInstallationStep'; + + /** + * @see Action::readParameters() + */ + public function readParameters() { + parent::readParameters(); + + if (isset($_POST['node'])) $this->node = StringUtil::trim($_POST['node']); + if (isset($_POST['queueID'])) $this->queueID = intval($_POST['queueID']); + $this->queue = new PackageInstallationQueue($this->queueID); + + if (!$this->queue->queueID) { + throw new IllegalLinkException(); + } + + $this->installation = new PackageInstallationDispatcher($this->queue); + } + + /** + * Executes installation based upon nodes. + */ + protected function stepInstall() { + $step = $this->installation->install($this->node); + + if ($step->hasDocument()) { + $this->data = array( + 'innerTemplate' => $step->getTemplate(), + 'node' => $step->getNode(), + 'progress' => $this->installation->nodeBuilder->calculateProgress($this->node), + 'step' => 'install' + ); + } + else { + if ($step->getNode() == '') { + // perform final actions + $queueID = $this->installation->completeSetup(); + + // begin with next queue + if ($queueID) { + $this->data = array( + 'progress' => 100, + 'queueID' => $queueID, + 'step' => 'prepare' + ); + return; + } + + // no more queues, show success + $this->data = array( + 'progress' => 100, + 'step' => 'success' + ); + return; + } + + // continue with next node + $this->data = array( + 'step' => 'install', + 'node' => $step->getNode(), + 'progress' => $this->installation->nodeBuilder->calculateProgress($this->node) + ); + } + } + + /** + * Prepares the installation process. + */ + protected function stepPrepare() { + // update package information + $this->installation->updatePackage(); + + // clean-up previously created nodes + $this->installation->nodeBuilder->purgeNodes(); + + // create node tree + $this->installation->nodeBuilder->buildNodes(); + $nextNode = $this->installation->nodeBuilder->getNextNode(); + + WCF::getTPL()->assign(array( + 'queue' => $this->queue + )); + + $this->data = array( + 'template' => WCF::getTPL()->fetch($this->templateName), + 'step' => 'install', + 'node' => $nextNode, + 'currentAction' => WCF::getLanguage()->get('wcf.package.installation.step.installing'), + 'progress' => 0 + ); + } + + /** + * @see AbstractDialogAction::validateStep() + */ + protected function validateStep() { + switch ($this->step) { + case 'install': + case 'prepare': + continue; + break; + + default: + throw new IllegalLinkException(); + break; + } + } +} +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/action/LogoutAction.class.php b/wcfsetup/install/files/lib/acp/action/LogoutAction.class.php new file mode 100644 index 0000000000..5124754dd6 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/action/LogoutAction.class.php @@ -0,0 +1,41 @@ + + * @package com.woltlab.wcf + * @subpackage acp.action + * @category Community Framework + */ +class LogoutAction extends AbstractSecureAction { + /** + * @see Action::execute() + */ + public function execute() { + parent::execute(); + + // validate + if (!WCF::getUser()->userID) { + throw new IllegalLinkException(); + } + + // do logout + WCF::getSession()->delete(); + + $this->executed(); + + // forward to index page + // warning: if doLogout() writes a cookie this is buggy in MS IIS + HeaderUtil::redirect('index.php'.SID_ARG_1ST); + exit; + } +} +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/action/OptionExportAction.class.php b/wcfsetup/install/files/lib/acp/action/OptionExportAction.class.php new file mode 100644 index 0000000000..360be3808c --- /dev/null +++ b/wcfsetup/install/files/lib/acp/action/OptionExportAction.class.php @@ -0,0 +1,55 @@ + + * @package com.woltlab.wcf + * @subpackage acp.action + * @category Community Framework + */ +class OptionExportAction extends AbstractAction { + /** + * @see AbstractAction::$neededPermissions + */ + public $neededPermissions = array('admin.system.canEditOption'); + + /** + * @see Action::execute(); + */ + public function execute() { + parent::execute(); + + // header + @header('Content-type: text/xml'); + + // file name + @header('Content-disposition: attachment; filename="options.xml"'); + + // no cache headers + @header('Pragma: no-cache'); + @header('Expires: 0'); + + // content + echo "\n\n"; + + $options = Option::getOptions(); + foreach ($options as $option) { + echo "\t\n"; + } + + echo ''; + $this->executed(); + exit; + } +} +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/action/UninstallPackageAction.class.php b/wcfsetup/install/files/lib/acp/action/UninstallPackageAction.class.php new file mode 100644 index 0000000000..6fff5ee074 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/action/UninstallPackageAction.class.php @@ -0,0 +1,150 @@ + + * @package com.woltlab.wcf + * @subpackage acp.action + * @category Community Framework + */ +class UninstallPackageAction extends InstallPackageAction { + /** + * active package id + * + * @var integer + */ + protected $packageID = 0; + + // system + public $templateName = 'packageUninstallationStep'; + + /** + * @see Action::readParameters() + */ + public function readParameters() { + AbstractDialogAction::readParameters(); + + if (isset($_POST['node'])) $this->node = StringUtil::trim($_POST['node']); + + if (isset($_POST['packageID'])) { + $this->packageID = intval($_POST['packageID']); + } + else { + if (isset($_POST['queueID'])) $this->queueID = intval($_POST['queueID']); + $this->queue = new PackageInstallationQueue($this->queueID); + + if (!$this->queue->queueID) { + throw new IllegalLinkException(); + } + + $this->installation = new PackageUninstallationDispatcher($this->queue); + } + } + + /** + * Prepares the uninstallation process. + */ + protected function stepPrepare() { + $package = new Package($this->packageID); + if (!$package->packageID) { + throw new IllegalLinkException(); + } + + if (PackageUninstallationDispatcher::hasDependencies($package->packageID)) { + throw new SystemException('hasDependencies'); + } + else { + // get new process no + $processNo = PackageInstallationQueue::getNewProcessNo(); + + // create queue + $queue = PackageInstallationQueueEditor::create(array( + 'processNo' => $processNo, + 'userID' => WCF::getUser()->userID, + 'packageName' => $package->getName(), + 'packageID' => $package->packageID, + 'action' => 'uninstall', + 'cancelable' => 0 + )); + + // initialize uninstallation + $this->installation = new PackageUninstallationDispatcher($queue); + + $this->installation->nodeBuilder->purgeNodes(); + $this->installation->nodeBuilder->buildNodes(); + + WCF::getTPL()->assign(array( + 'queue' => $queue + )); + + $this->data = array( + 'template' => WCF::getTPL()->fetch($this->templateName), + 'step' => 'uninstall', + 'node' => $this->installation->nodeBuilder->getNextNode(), + 'currentAction' => WCF::getLanguage()->get('wcf.package.installation.step.uninstalling'), + 'progress' => 0, + 'queueID' => $queue->queueID + ); + } + } + + /** + * Uninstalls node components and returns next node. + * + * @param string $node + * @return string + */ + public function stepUninstall() { + $node = $this->installation->uninstall($this->node); + + if ($node == '') { + // remove node data + $this->installation->nodeBuilder->purgeNodes(); + + // TODO: Show 'success' template at this point + $this->data = array( + 'progress' => 100, + 'step' => 'success' + ); + return; + } + + // continue with next node + $this->data = array( + 'step' => 'uninstall', + 'node' => $node, + 'progress' => $this->installation->nodeBuilder->calculateProgress($this->node) + ); + } + + /** + * @see AbstractDialogAction::validateStep() + */ + protected function validateStep() { + switch ($this->step) { + case 'prepare': + case 'uninstall': + continue; + break; + + default: + die(print_r($_POST, true)); + throw new IllegalLinkException(); + break; + } + } +} +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/form/ACPForm.class.php b/wcfsetup/install/files/lib/acp/form/ACPForm.class.php new file mode 100644 index 0000000000..61571780e1 --- /dev/null +++ b/wcfsetup/install/files/lib/acp/form/ACPForm.class.php @@ -0,0 +1,34 @@ + + * @package com.woltlab.wcf + * @subpackage acp.form + * @category Community Framework + */ +class ACPForm extends AbstractForm { + /** + * Active acp menu item. + * + * @var string + */ + public $activeMenuItem = ''; + + /** + * @see Page::show() + */ + public function show() { + // enable menu item + if (!empty($this->activeMenuItem)) ACPMenu::getInstance()->setActiveMenuItem($this->activeMenuItem); + + parent::show(); + } +} +?> \ No newline at end of file diff --git a/wcfsetup/install/files/lib/acp/form/AbstractOptionListForm.class.php b/wcfsetup/install/files/lib/acp/form/AbstractOptionListForm.class.php new file mode 100644 index 0000000000..59f672653b --- /dev/null +++ b/wcfsetup/install/files/lib/acp/form/AbstractOptionListForm.class.php @@ -0,0 +1,379 @@ + + * @package com.woltlab.wcf + * @subpackage acp.form + * @category Community Framework + */ +abstract class AbstractOptionListForm extends AbstractForm { + /** + * @see AbstractForm::$errorField + */ + public $errorField = array(); + + /** + * @see AbstractForm::$errorType + */ + public $errorType = array(); + + /** + * cache name + * @var string + */ + public $cacheName = 'option-'; + + /** + * cache class name + * @var string + */ + public $cacheClass = 'wcf\system\cache\CacheBuilderOption'; + + /** + * list of all option categories + * @var array + */ + public $cachedCategories = array(); + + /** + * list of all options + * @var array