diff --git a/Makefile b/Makefile index f1718a17f1..29150c6eb1 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,6 @@ -VERSION=$(shell head -n 1 VERSION) +VERSION = $(shell head -n 1 VERSION) +XUANPATH = $(shell head -n 1 XUANPATH) +XUANVERSION = $(shell head -n 1 XUANVERSION) all: pms clean: @@ -11,7 +13,7 @@ clean: rm -fr api* rm -fr build/linux/lampp rm -fr lampp -pms: +common: mkdir zentaopms cp -fr bin zentaopms/ cp -fr config zentaopms/ && rm -fr zentaopms/config/my.php @@ -39,43 +41,48 @@ pms: find zentaopms -name tests |xargs rm -fr # notify.zip. mkdir zentaopms/www/data/notify/ +zentaoxx: #xuanxuan - mkdir -p buildxx/config/ext - mkdir -p buildxx/lib - mkdir -p buildxx/module - mkdir -p buildxx/framework - mkdir -p buildxx/db - mkdir -p buildxx/www - mkdir -p buildxx/module/common/ext/model/ - svn export https://github.com/easysoft/xuanxuan.git/branches/master/ranzhi/ - cp ranzhi/config/ext/xuanxuan.php buildxx/config/ext/ - cp -r ranzhi/lib/phpaes buildxx/lib/ - cp -r ranzhi/framework/xuanxuan.class.php buildxx/framework/ - cp -r ranzhi/db/xuanxuan.sql buildxx/db/ - cp -r ranzhi/app/sys/chat buildxx/module/ - cp -r ranzhi/app/sys/common/ext/model/hook buildxx/module/common/ext/model/ - cp -r ranzhi/app/sys/action buildxx/module/ - cp -r xuanxuan/module/* buildxx/module/ - cp -r xuanxuan/www/* buildxx/www/ - sed -i 's/site,//' buildxx/module/chat/model.php - sed -i 's/admin, g/g/' buildxx/module/chat/model.php - sed -i '/password = md5/d' buildxx/module/chat/control.php - sed -i '/getSignedTime/d' buildxx/module/chat/control.php - sed -i 's/tree/dept/' buildxx/module/chat/control.php - sed -i "s/, 'sys'//" buildxx/module/chat/control.php - sed -i 's/system.sys/system/' buildxx/module/chat/control.php - sed -i 's/&app=sys//' buildxx/module/chat/control.php - sed -i 's/file->createdBy/file->addedBy/' buildxx/module/chat/control.php - sed -i 's/file->createdDate/file->addedDate/' buildxx/module/chat/control.php - sed -i 's/im_/zt_im_/' buildxx/db/xuanxuan.sql - sed -i 's/sys_user/zt_user/' buildxx/db/xuanxuan.sql - sed -i 's/sys_file/zt_file/' buildxx/db/xuanxuan.sql - sed -i '/sys_entry/d' buildxx/db/xuanxuan.sql - zip -rqm -9 xuanxuan.zentao.$(VERSION).zip buildxx/* - rm -rf buildxx/ - unzip xuanxuan.zentao.*.zip -d zentaoxx - cp zentaoxx/buildxx/* zentaopms/ -r - cat zentaoxx/buildxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql + mkdir -p zentaoxx/config/ext + mkdir -p zentaoxx/lib + mkdir -p zentaoxx/module + mkdir -p zentaoxx/framework + mkdir -p zentaoxx/db + mkdir -p zentaoxx/www + mkdir -p zentaoxx/module/common/ext/model/ + cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip + mv $(XUANPATH)/xuan.zip . + unzip xuan.zip + cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/ + cp -r xuan/ranzhi/lib/phpaes zentaoxx/lib/ + cp -r xuan/ranzhi/framework/xuanxuan.class.php zentaoxx/framework/ + cp -r xuan/ranzhi/db/*.sql zentaoxx/db/ + cp -r xuan/ranzhi/app/sys/chat zentaoxx/module/ + cp -r xuan/ranzhi/app/sys/common/ext/model/hook zentaoxx/module/common/ext/model/ + cp -r xuan/ranzhi/app/sys/action zentaoxx/module/ + cp -r xuanxuan/config/* zentaoxx/config/ + cp -r xuanxuan/module/* zentaoxx/module/ + cp -r xuanxuan/www/* zentaoxx/www/ + sed -i 's/site,//' zentaoxx/module/chat/model.php + sed -i 's/admin, g/g/' zentaoxx/module/chat/model.php + sed -i '/password = md5/d' zentaoxx/module/chat/control.php + sed -i '/getSignedTime/d' zentaoxx/module/chat/control.php + sed -i 's/tree/dept/' zentaoxx/module/chat/control.php + sed -i 's/tree/dept/' zentaoxx/module/chat/model.php + sed -i "s/, 'sys'//" zentaoxx/module/chat/control.php + sed -i 's/system.sys/system/' zentaoxx/module/chat/control.php + sed -i 's/&app=sys//' zentaoxx/module/chat/control.php + sed -i 's/file->createdBy/file->addedBy/' zentaoxx/module/chat/control.php + sed -i 's/file->createdDate/file->addedDate/' zentaoxx/module/chat/control.php + sed -i 's/im_/zt_im_/' zentaoxx/db/*.sql + sed -i 's/sys_user/zt_user/' zentaoxx/db/*.sql + sed -i 's/sys_file/zt_file/' zentaoxx/db/*.sql + sed -i '/sys_entry/d' zentaoxx/db/*.sql + mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php + rm -rf zentaopms/tools + zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/* + rm -rf xuan.zip xuan zentaoxx +package: # change mode. chmod -R 777 zentaopms/tmp/ chmod -R 777 zentaopms/www/data @@ -86,8 +93,29 @@ pms: if [ ! -d "zentaopms/config/ext" ]; then mkdir zentaopms/config/ext; fi for module in `ls zentaopms/module/`; do if [ ! -d "zentaopms/module/$$module/ext" ]; then mkdir zentaopms/module/$$module/ext; fi done find zentaopms/ -name ext |xargs chmod -R 777 + mkdir zentaopms/tools; cp tools/cn2tw.php zentaopms/tools; cd zentaopms/tools; php cn2tw.php + rm -rf zentaopms/tools +pms: + make common + make zentaoxx + unzip zentaoxx.*.zip + cp zentaoxx/* zentaopms/ -r + cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql + make package zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms - rm -fr zentaopms ranzhi buildxx zentaoxx xuanxuan.zentao.*.zip + rm -fr zentaopms zentaoxx zentaoxx.*.zip +en: + make common + cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; + cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; + cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php + make package + zip -r -9 ZenTaoPMS.$(VERSION).int.zip zentaopms + rm -fr zentaopms + echo $(VERSION).int > VERSION + make deb + make rpm + echo $(VERSION) > VERSION deb: mkdir buildroot cp -r build/debian/DEBIAN buildroot @@ -115,17 +143,6 @@ rpm: rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec cp ~/rpmbuild/RPMS/noarch/zentaopms-${VERSION}-1.noarch.rpm ./ rm -rf ~/rpmbuild -en: - unzip ZenTaoPMS.${VERSION}.zip - cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g'; - cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g'; - cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php - zip -r -9 ZenTaoPMS.$(VERSION).int.zip zentaopms - rm -fr zentaopms - echo $(VERSION).int > VERSION - make deb - make rpm - echo $(VERSION) > VERSION patchphpdoc: sudo cp misc/doc/phpdoc/*.tpl /usr/share/php/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/ phpdoc: diff --git a/VERSION b/VERSION index e96b59f77e..a6e5b12f92 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -10.6.stable +11.4.1 diff --git a/config/config.php b/config/config.php index ec8aa2bf6a..b5a81a8646 100644 --- a/config/config.php +++ b/config/config.php @@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}} if(!function_exists('getWebRoot')){function getWebRoot(){}} /* 基本设置。Basic settings. */ -$config->version = '10.6'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. +$config->version = '11.4.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it. $config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP. $config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time. $config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php. diff --git a/config/timezones.php b/config/timezones.php new file mode 100644 index 0000000000..0b0e36f8d5 --- /dev/null +++ b/config/timezones.php @@ -0,0 +1,125 @@ + '(UTC-11:00) Midway Island', + 'Pacific/Samoa' => '(UTC-11:00) Samoa', + 'Pacific/Honolulu' => '(UTC-10:00) Hawaii', + 'US/Alaska' => '(UTC-09:00) Alaska', + 'America/Los_Angeles' => '(UTC-08:00) Pacific Time (US & Canada)', + 'America/Tijuana' => '(UTC-08:00) Tijuana', + 'US/Arizona' => '(UTC-07:00) Arizona', + 'America/Chihuahua' => '(UTC-07:00) Chihuahua', + 'America/Mazatlan' => '(UTC-07:00) Mazatlan', + 'US/Mountain' => '(UTC-07:00) Mountain Time (US & Canada)', + 'America/Managua' => '(UTC-06:00) Central America', + 'US/Central' => '(UTC-06:00) Central Time (US & Canada)', + 'America/Mexico_City' => '(UTC-06:00) Mexico City', + 'America/Monterrey' => '(UTC-06:00) Monterrey', + 'Canada/Saskatchewan' => '(UTC-06:00) Saskatchewan', + 'America/Bogota' => '(UTC-05:00) Bogota', + 'US/Eastern' => '(UTC-05:00) Eastern Time (US & Canada)', + 'US/East-Indiana' => '(UTC-05:00) Indiana (East)', + 'America/Lima' => '(UTC-05:00) Lima', + 'Canada/Atlantic' => '(UTC-04:00) Atlantic Time (Canada)', + 'America/Caracas' => '(UTC-04:30) Caracas', + 'America/La_Paz' => '(UTC-04:00) La Paz', + 'America/Santiago' => '(UTC-04:00) Santiago', + 'Canada/Newfoundland' => '(UTC-03:30) Newfoundland', + 'America/Sao_Paulo' => '(UTC-03:00) Brasilia', + 'America/Argentina/Buenos_Aires' => '(UTC-03:00) Buenos Aires', + 'America/Godthab' => '(UTC-03:00) Greenland', + 'America/Noronha' => '(UTC-02:00) Mid-Atlantic', + 'Atlantic/Azores' => '(UTC-01:00) Azores', + 'Atlantic/Cape_Verde' => '(UTC-01:00) Cape Verde Is.', + 'Africa/Casablanca' => '(UTC+00:00) Casablanca', + 'Etc/Greenwich' => '(UTC+00:00) Greenwich Mean Time : Dublin', + 'Europe/Lisbon' => '(UTC+00:00) Lisbon', + 'Europe/London' => '(UTC+00:00) London', + 'Africa/Monrovia' => '(UTC+00:00) Monrovia', + 'UTC' => '(UTC+00:00) UTC', + 'Europe/Amsterdam' => '(UTC+01:00) Amsterdam', + 'Europe/Belgrade' => '(UTC+01:00) Belgrade', + 'Europe/Berlin' => '(UTC+01:00) Berlin', + 'Europe/Bratislava' => '(UTC+01:00) Bratislava', + 'Europe/Brussels' => '(UTC+01:00) Brussels', + 'Europe/Budapest' => '(UTC+01:00) Budapest', + 'Europe/Copenhagen' => '(UTC+01:00) Copenhagen', + 'Europe/Ljubljana' => '(UTC+01:00) Ljubljana', + 'Europe/Madrid' => '(UTC+01:00) Madrid', + 'Europe/Paris' => '(UTC+01:00) Paris', + 'Europe/Prague' => '(UTC+01:00) Prague', + 'Europe/Rome' => '(UTC+01:00) Rome', + 'Europe/Sarajevo' => '(UTC+01:00) Sarajevo', + 'Europe/Skopje' => '(UTC+01:00) Skopje', + 'Europe/Stockholm' => '(UTC+01:00) Stockholm', + 'Europe/Vienna' => '(UTC+01:00) Vienna', + 'Europe/Warsaw' => '(UTC+01:00) Warsaw', + 'Africa/Lagos' => '(UTC+01:00) West Central Africa', + 'Europe/Zagreb' => '(UTC+01:00) Zagreb', + 'Europe/Athens' => '(UTC+02:00) Athens', + 'Europe/Bucharest' => '(UTC+02:00) Bucharest', + 'Africa/Cairo' => '(UTC+02:00) Cairo', + 'Africa/Harare' => '(UTC+02:00) Harare', + 'Europe/Helsinki' => '(UTC+02:00) Helsinki', + 'Europe/Istanbul' => '(UTC+02:00) Istanbul', + 'Asia/Jerusalem' => '(UTC+02:00) Jerusalem', + 'Africa/Johannesburg' => '(UTC+02:00) Pretoria', + 'Europe/Riga' => '(UTC+02:00) Riga', + 'Europe/Sofia' => '(UTC+02:00) Sofia', + 'Europe/Tallinn' => '(UTC+02:00) Tallinn', + 'Europe/Vilnius' => '(UTC+02:00) Vilnius', + 'Asia/Baghdad' => '(UTC+03:00) Baghdad', + 'Asia/Kuwait' => '(UTC+03:00) Kuwait', + 'Europe/Minsk' => '(UTC+03:00) Minsk', + 'Africa/Nairobi' => '(UTC+03:00) Nairobi', + 'Asia/Riyadh' => '(UTC+03:00) Riyadh', + 'Europe/Volgograd' => '(UTC+03:00) Volgograd', + 'Asia/Tehran' => '(UTC+03:30) Tehran', + 'Asia/Baku' => '(UTC+04:00) Baku', + 'Europe/Moscow' => '(UTC+04:00) Moscow', + 'Asia/Muscat' => '(UTC+04:00) Muscat', + 'Asia/Tbilisi' => '(UTC+04:00) Tbilisi', + 'Asia/Yerevan' => '(UTC+04:00) Yerevan', + 'Asia/Kabul' => '(UTC+04:30) Kabul', + 'Asia/Karachi' => '(UTC+05:00) Karachi', + 'Asia/Tashkent' => '(UTC+05:00) Tashkent', + 'Asia/Calcutta' => '(UTC+05:30) Chennai', + 'Asia/Kolkata' => '(UTC+05:30) Kolkata', + 'Asia/Katmandu' => '(UTC+05:45) Kathmandu', + 'Asia/Almaty' => '(UTC+06:00) Almaty', + 'Asia/Dhaka' => '(UTC+06:00) Dhaka', + 'Asia/Yekaterinburg' => '(UTC+06:00) Ekaterinburg', + 'Asia/Rangoon' => '(UTC+06:30) Rangoon', + 'Asia/Bangkok' => '(UTC+07:00) Bangkok', + 'Asia/Jakarta' => '(UTC+07:00) Jakarta', + 'Asia/Novosibirsk' => '(UTC+07:00) Novosibirsk', + 'Asia/Chongqing' => '(UTC+08:00) Chongqing', + 'Asia/Shanghai' => '(UTC+08:00) Shanghai', + 'Asia/Hong_Kong' => '(UTC+08:00) Hong Kong', + 'Asia/Krasnoyarsk' => '(UTC+08:00) Krasnoyarsk', + 'Asia/Kuala_Lumpur' => '(UTC+08:00) Kuala Lumpur', + 'Australia/Perth' => '(UTC+08:00) Perth', + 'Asia/Singapore' => '(UTC+08:00) Singapore', + 'Asia/Taipei' => '(UTC+08:00) Taipei', + 'Asia/Ulan_Bator' => '(UTC+08:00) Ulaan Bataar', + 'Asia/Urumqi' => '(UTC+08:00) Urumqi', + 'Asia/Irkutsk' => '(UTC+09:00) Irkutsk', + 'Asia/Seoul' => '(UTC+09:00) Seoul', + 'Asia/Tokyo' => '(UTC+09:00) Tokyo', + 'Australia/Adelaide' => '(UTC+09:30) Adelaide', + 'Australia/Darwin' => '(UTC+09:30) Darwin', + 'Australia/Brisbane' => '(UTC+10:00) Brisbane', + 'Australia/Canberra' => '(UTC+10:00) Canberra', + 'Pacific/Guam' => '(UTC+10:00) Guam', + 'Australia/Hobart' => '(UTC+10:00) Hobart', + 'Australia/Melbourne' => '(UTC+10:00) Melbourne', + 'Pacific/Port_Moresby' => '(UTC+10:00) Port Moresby', + 'Australia/Sydney' => '(UTC+10:00) Sydney', + 'Asia/Yakutsk' => '(UTC+10:00) Yakutsk', + 'Asia/Vladivostok' => '(UTC+11:00) Vladivostok', + 'Pacific/Auckland' => '(UTC+12:00) Auckland', + 'Pacific/Fiji' => '(UTC+12:00) Fiji', + 'Pacific/Kwajalein' => '(UTC+12:00) International Date Line West', + 'Asia/Kamchatka' => '(UTC+12:00) Kamchatka', + 'Asia/Magadan' => '(UTC+12:00) Magadan', + 'Pacific/Tongatapu' => '(UTC+13:00) Nuku\'alofa' +); diff --git a/db/demo.sql b/db/demo.sql index cd67150a07..4f0862ec24 100644 --- a/db/demo.sql +++ b/db/demo.sql @@ -226,10 +226,10 @@ INSERT INTO `zt_productplan` (`id`, `product`, `title`, `desc`, `begin`, `end`, INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES(1, '0', 0, 'sprint', 0, '企业网站第一期', 'coWeb1', '2012-06-05', '2012-12-04', 184, 'done', '1', '1', '开发企业网站的基本雏形。
', '', 0, '', 0, '', 0, 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', '5', '0'); INSERT INTO `zt_project` (`id`, `isCat`, `catID`, `type`, `parent`, `name`, `code`, `begin`, `end`, `days`, `status`, `statge`, `pri`, `desc`, `openedBy`, `openedDate`, `closedBy`, `closedDate`, `canceledBy`, `canceledDate`, `PO`, `PM`, `QD`, `RD`, `team`, `acl`, `whitelist`, `order`, `deleted`) VALUES(2, '0', 0, 'sprint', 0, '企业网站第二期', 'coWebsite2', '2013-06-05', '2014-06-04', 365, 'wait', '1', '1', '', '', 0, '', 0, '', 0, 'productManager', 'projectManager', 'testManager', 'productManager', '公司开发团队', 'open', '', '10', '0'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(1, 1, 0, '产品库', 'open','1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(2, 2, 0, '产品库', 'open', '1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(3, 0, 1, '项目库', 'open', '1'); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `main`) VALUES(4, 0, 2, '项目库', 'open', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(1, 'product', 1, 0, '产品库', 'default','1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(2, 'product', 2, 0, '产品库', 'default', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(3, 'project', 0, 1, '项目库', 'default', '1'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `main`) VALUES(4, 'project', 0, 2, '项目库', 'default', '1'); INSERT INTO `zt_projectproduct` (`project`, `product`) VALUES(1, 1); INSERT INTO `zt_projectproduct` (`project`, `product`) VALUES(2, 1); @@ -295,15 +295,15 @@ INSERT INTO `zt_testrun` (`id`, `task`, `case`, `version`, `assignedTo`, `lastRu INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `begin`, `end`, `desc`, `status`, `deleted`) VALUES(1, '企业网站第一期测试任务', 1, 1, 'trunk', 'testManager', '2012-06-05', '2013-06-21', '', 'wait', '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1'); -INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(2, 5, 'productManager', 'e10adc3949ba59abbe56e057f20f883e', 'po', '产品经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338866083, '0'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(3, 6, 'projectManager', 'e10adc3949ba59abbe56e057f20f883e', 'pm', '项目经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865876, '0'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(4, 2, 'dev1', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338863860, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(5, 2, 'dev2', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864116, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(6, 2, 'dev3', 'e10adc3949ba59abbe56e057f20f883e', 'dev', '开发丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338864187, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(7, 3, 'tester1', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试甲', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '192.168.0.8', 1338865739, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(8, 3, 'tester2', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试乙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '192.168.0.8', 1338865450, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(9, 3, 'tester3', 'e10adc3949ba59abbe56e057f20f883e', 'qa', '测试丙', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 1, '192.168.0.8', 1338865125, '1'); +INSERT INTO `zt_user` (`id`, `dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `deleted`) VALUES(10, 1, 'testManager', 'e10adc3949ba59abbe56e057f20f883e', 'qd', '测试经理', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 6, '192.168.0.8', 1338865842, '1'); INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('productManager', 5); INSERT INTO `zt_usergroup` (`account`, `group`) VALUES('projectManager', 4); diff --git a/db/endemo.sql b/db/endemo.sql index 536c07c535..d6863101cd 100644 --- a/db/endemo.sql +++ b/db/endemo.sql @@ -149,11 +149,11 @@ INSERT INTO `zt_dept` (`id`, `name`, `parent`, `path`, `grade`, `order`, `positi (5, 'Dev 1', 2, ',2,5,', 2, 10, '', '', ''), (6, 'Dev 2', 2, ',2,6,', 2, 20, '', '', ''); -INSERT INTO `zt_doclib` (`id`, `product`, `project`, `name`, `acl`, `groups`, `users`, `main`, `order`, `deleted`) VALUES -(1, 1, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'), -(2, 0, 1, 'Project Main Library', 'open', '', '', '1', 0, '0'), -(3, 2, 0, 'Product Main Library', 'open', '', '', '1', 0, '0'), -(4, 0, 2, 'Project Main Library', 'open', '', '', '1', 0, '0'); +INSERT INTO `zt_doclib` (`id`, `type`, `product`, `project`, `name`, `acl`, `groups`, `users`, `main`, `order`, `deleted`) VALUES +(1, 'product', 1, 0, 'Product Main Library', 'default', '', '', '1', 0, '0'), +(2, 'project', 0, 1, 'Project Main Library', 'default', '', '', '1', 0, '0'), +(3, 'product', 2, 0, 'Product Main Library', 'default', '', '', '1', 0, '0'), +(4, 'project', 0, 2, 'Project Main Library', 'default', '', '', '1', 0, '0'); INSERT INTO `zt_history` (`id`, `action`, `field`, `old`, `new`, `diff`) VALUES (1, 7, 'desc', 'Finish developing system drive program.', 'Add advanced features such as remote desktop.', '001- Finish developing system drive program.\n001+ Add advanced features such as remote desktop.'), @@ -328,7 +328,7 @@ INSERT INTO `zt_testsuite` (`id`, `product`, `name`, `desc`, `type`, `addedBy`, INSERT INTO `zt_testtask` (`id`, `name`, `product`, `project`, `build`, `owner`, `pri`, `begin`, `end`, `mailto`, `desc`, `report`, `status`, `deleted`) VALUES (1, 'test for blog v0.1', 2, 2, '2', 'thePO', 0, '2018-01-05', '2018-01-20', '', '', '', 'wait', '0'); -INSERT INTO `zt_user` (`dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `yahoo`, `gtalk`, `wangwang`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `fails`, `locked`, `ranzhi`, `score`, `scoreLevel`, `deleted`) VALUES +INSERT INTO `zt_user` (`dept`, `account`, `password`, `role`, `realname`, `nickname`, `commiter`, `avatar`, `birthday`, `gender`, `email`, `skype`, `qq`, `weixin`, `dingding`, `slack`, `mobile`, `phone`, `address`, `zipcode`, `join`, `visits`, `ip`, `last`, `fails`, `locked`, `ranzhi`, `score`, `scoreLevel`, `deleted`) VALUES (1, 'thePO', 'e10adc3949ba59abbe56e057f20f883e', 'po', 'Richard', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 3, '127.0.0.1', 1513093950, 0, '0000-00-00 00:00:00', '', 0, 0, '0'), (5, 'pm1', 'e10adc3949ba59abbe56e057f20f883e', 'pm', 'Daniel', '', '', '', '0000-00-00', 'm', '', '', '', '', '', '', '', '', '', '', '0000-00-00', 2, '127.0.0.1', 1513093318, 0, '0000-00-00 00:00:00', '', 0, 0, '0'); diff --git a/db/standard/zentao10.6.sql b/db/standard/zentao10.6.sql new file mode 100644 index 0000000000..74c06da860 --- /dev/null +++ b/db/standard/zentao10.6.sql @@ -0,0 +1,968 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `status` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.0.sql b/db/standard/zentao11.0.sql new file mode 100644 index 0000000000..d50ded5942 --- /dev/null +++ b/db/standard/zentao11.0.sql @@ -0,0 +1,969 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.1.sql b/db/standard/zentao11.1.sql new file mode 100644 index 0000000000..d50ded5942 --- /dev/null +++ b/db/standard/zentao11.1.sql @@ -0,0 +1,969 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chat` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `name` varchar(60) NOT NULL DEFAULT '', + `type` varchar(20) NOT NULL DEFAULT 'group', + `admins` varchar(255) NOT NULL DEFAULT '', + `committers` varchar(255) NOT NULL DEFAULT '', + `subject` mediumint(8) unsigned NOT NULL DEFAULT '0', + `public` enum('0','1') NOT NULL DEFAULT '0', + `createdBy` varchar(30) NOT NULL DEFAULT '', + `createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `editedBy` varchar(30) NOT NULL DEFAULT '', + `editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `gid` (`gid`), + KEY `name` (`name`), + KEY `type` (`type`), + KEY `public` (`public`), + KEY `createdBy` (`createdBy`), + KEY `editedBy` (`editedBy`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_chatuser` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `cgid` char(40) NOT NULL DEFAULT '', + `user` mediumint(8) NOT NULL DEFAULT '0', + `order` smallint(5) NOT NULL DEFAULT '0', + `star` enum('0','1') NOT NULL DEFAULT '0', + `hide` enum('0','1') NOT NULL DEFAULT '0', + `mute` enum('0','1') NOT NULL DEFAULT '0', + `join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `category` varchar(40) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + UNIQUE KEY `chatuser` (`cgid`,`user`), + KEY `cgid` (`cgid`), + KEY `user` (`user`), + KEY `order` (`order`), + KEY `star` (`star`), + KEY `hide` (`hide`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_message` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `gid` char(40) NOT NULL DEFAULT '', + `cgid` char(40) NOT NULL DEFAULT '', + `user` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `order` bigint(8) unsigned NOT NULL, + `type` enum('normal','broadcast','notify') NOT NULL DEFAULT 'normal', + `content` text NOT NULL, + `contentType` enum('text','plain','emotion','image','file','object') NOT NULL DEFAULT 'text', + `data` text NOT NULL, + PRIMARY KEY (`id`), + KEY `mgid` (`gid`), + KEY `mcgid` (`cgid`), + KEY `muser` (`user`), + KEY `mtype` (`type`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_im_messagestatus` ( + `user` mediumint(8) NOT NULL DEFAULT '0', + `gid` char(40) NOT NULL DEFAULT '', + `status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting', + UNIQUE KEY `user` (`user`,`gid`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` char(30) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `clientStatus` enum('online','away','busy','offline') NOT NULL DEFAULT 'offline', + `clientLang` varchar(10) NOT NULL DEFAULT 'zh-cn', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.2.sql b/db/standard/zentao11.2.sql new file mode 100644 index 0000000000..c7a14b36fc --- /dev/null +++ b/db/standard/zentao11.2.sql @@ -0,0 +1,902 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(50) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `yahoo` char(90) NOT NULL DEFAULT '', + `gtalk` char(90) NOT NULL DEFAULT '', + `wangwang` char(90) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.3.sql b/db/standard/zentao11.3.sql new file mode 100644 index 0000000000..70d7bf65d0 --- /dev/null +++ b/db/standard/zentao11.3.sql @@ -0,0 +1,904 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.4.1.sql b/db/standard/zentao11.4.1.sql new file mode 100644 index 0000000000..c586b805c0 --- /dev/null +++ b/db/standard/zentao11.4.1.sql @@ -0,0 +1,906 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`,`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/standard/zentao11.4.sql b/db/standard/zentao11.4.sql new file mode 100644 index 0000000000..afbed37c8c --- /dev/null +++ b/db/standard/zentao11.4.sql @@ -0,0 +1,905 @@ +CREATE TABLE `zt_action` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL DEFAULT '', + `objectID` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` varchar(255) NOT NULL, + `project` mediumint(9) NOT NULL, + `actor` varchar(30) NOT NULL DEFAULT '', + `action` varchar(30) NOT NULL DEFAULT '', + `date` datetime NOT NULL, + `comment` text NOT NULL, + `extra` text NOT NULL, + `read` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `date` (`date`), + KEY `actor` (`actor`), + KEY `project` (`project`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_block` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(20) NOT NULL, + `title` varchar(100) NOT NULL, + `source` varchar(20) NOT NULL, + `block` varchar(20) NOT NULL, + `params` text NOT NULL, + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `grid` tinyint(3) unsigned NOT NULL DEFAULT '0', + `height` smallint(5) unsigned NOT NULL DEFAULT '0', + `hidden` tinyint(1) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_branch` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `order` smallint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_bug` ( + `id` mediumint(8) NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toTask` mediumint(8) unsigned NOT NULL DEFAULT '0', + `toStory` mediumint(8) NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `severity` tinyint(4) NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `os` varchar(30) NOT NULL DEFAULT '', + `browser` varchar(30) NOT NULL DEFAULT '', + `hardware` varchar(30) NOT NULL, + `found` varchar(30) NOT NULL DEFAULT '', + `steps` text NOT NULL, + `status` enum('active','resolved','closed') NOT NULL DEFAULT 'active', + `color` char(7) NOT NULL, + `confirmed` tinyint(1) NOT NULL DEFAULT '0', + `activatedCount` smallint(6) NOT NULL, + `activatedDate` datetime NOT NULL, + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedBuild` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `deadline` date NOT NULL, + `resolvedBy` varchar(30) NOT NULL DEFAULT '', + `resolution` varchar(30) NOT NULL DEFAULT '', + `resolvedBuild` varchar(30) NOT NULL DEFAULT '', + `resolvedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `duplicateBug` mediumint(8) unsigned NOT NULL, + `linkBug` varchar(255) NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `caseVersion` smallint(6) NOT NULL DEFAULT '1', + `result` mediumint(8) unsigned NOT NULL, + `testtask` mediumint(8) unsigned NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `status` (`status`), + KEY `plan` (`plan`), + KEY `story` (`story`), + KEY `case` (`case`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_build` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(150) NOT NULL, + `scmPath` char(255) NOT NULL, + `filePath` char(255) NOT NULL, + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `builder` char(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_burn` ( + `project` mediumint(8) unsigned NOT NULL, + `date` date NOT NULL, + `estimate` float NOT NULL, + `left` float NOT NULL, + `consumed` float NOT NULL, + PRIMARY KEY (`project`,`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_case` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `lib` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(30) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `title` varchar(255) NOT NULL, + `precondition` text NOT NULL, + `keywords` varchar(255) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `type` char(30) NOT NULL DEFAULT '1', + `stage` varchar(255) NOT NULL, + `howRun` varchar(30) NOT NULL, + `scriptedBy` varchar(30) NOT NULL, + `scriptedDate` date NOT NULL, + `scriptStatus` varchar(30) NOT NULL, + `scriptLocation` varchar(255) NOT NULL, + `status` char(30) NOT NULL DEFAULT '1', + `color` char(7) NOT NULL, + `frequency` enum('1','2','3') NOT NULL DEFAULT '1', + `order` tinyint(30) unsigned NOT NULL DEFAULT '0', + `openedBy` char(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `lastEditedBy` char(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `linkCase` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL, + `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `story` (`story`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_casestep` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(3) unsigned NOT NULL DEFAULT '0', + `type` varchar(10) NOT NULL DEFAULT 'step', + `desc` text NOT NULL, + `expect` text NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_company` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(120) DEFAULT NULL, + `phone` char(20) DEFAULT NULL, + `fax` char(20) DEFAULT NULL, + `address` char(120) DEFAULT NULL, + `zipcode` char(10) DEFAULT NULL, + `website` char(120) DEFAULT NULL, + `backyard` char(120) DEFAULT NULL, + `guest` enum('1','0') NOT NULL DEFAULT '0', + `admins` char(255) DEFAULT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_config` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `owner` char(30) NOT NULL DEFAULT '', + `module` varchar(30) NOT NULL, + `section` char(30) NOT NULL DEFAULT '', + `key` char(30) NOT NULL DEFAULT '', + `value` text NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_cron` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `m` varchar(20) NOT NULL, + `h` varchar(20) NOT NULL, + `dom` varchar(20) NOT NULL, + `mon` varchar(20) NOT NULL, + `dow` varchar(20) NOT NULL, + `command` text NOT NULL, + `remark` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `buildin` tinyint(1) NOT NULL DEFAULT '0', + `status` varchar(20) NOT NULL, + `lastTime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `lastTime` (`lastTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_dept` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(60) NOT NULL, + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` tinyint(3) unsigned NOT NULL DEFAULT '0', + `position` char(30) NOT NULL DEFAULT '', + `function` char(255) NOT NULL DEFAULT '', + `manager` char(30) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doc` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `lib` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL, + `views` smallint(5) unsigned NOT NULL, + `collector` text NOT NULL, + `addedBy` varchar(30) NOT NULL, + `addedDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `version` smallint(5) unsigned NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`), + KEY `lib` (`lib`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doccontent` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `doc` mediumint(8) unsigned NOT NULL, + `title` varchar(255) NOT NULL, + `digest` varchar(255) NOT NULL, + `content` text NOT NULL, + `files` text NOT NULL, + `type` varchar(10) NOT NULL, + `version` smallint(5) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `doc_version` (`doc`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_doclib` ( + `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(30) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `name` varchar(60) NOT NULL, + `acl` varchar(10) NOT NULL DEFAULT 'open', + `groups` varchar(255) NOT NULL, + `users` text NOT NULL, + `main` enum('0','1') NOT NULL DEFAULT '0', + `collector` text NOT NULL, + `order` tinyint(5) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `project` (`project`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_effort` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `user` char(30) NOT NULL DEFAULT '', + `todo` enum('1','0') NOT NULL DEFAULT '1', + `date` date NOT NULL, + `begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `type` enum('1','2','3') NOT NULL DEFAULT '1', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `status` enum('1','2','3') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `user` (`user`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_entry` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(50) NOT NULL, + `account` varchar(30) NOT NULL DEFAULT '', + `code` varchar(20) NOT NULL, + `key` varchar(32) NOT NULL, + `ip` varchar(100) NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_extension` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(150) NOT NULL, + `code` varchar(30) NOT NULL, + `version` varchar(50) NOT NULL, + `author` varchar(100) NOT NULL, + `desc` text NOT NULL, + `license` text NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'extension', + `site` varchar(150) NOT NULL, + `zentaoCompatible` varchar(100) NOT NULL, + `installedTime` datetime NOT NULL, + `depends` varchar(100) NOT NULL, + `dirs` mediumtext NOT NULL, + `files` mediumtext NOT NULL, + `status` varchar(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`), + KEY `name` (`name`), + KEY `installedTime` (`installedTime`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_file` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `pathname` char(100) NOT NULL, + `title` char(255) NOT NULL, + `extension` char(30) NOT NULL, + `size` int(10) unsigned NOT NULL DEFAULT '0', + `objectType` char(30) NOT NULL, + `objectID` mediumint(9) NOT NULL, + `addedBy` char(30) NOT NULL DEFAULT '', + `addedDate` datetime NOT NULL, + `downloads` mediumint(8) unsigned NOT NULL DEFAULT '0', + `extra` varchar(255) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `objectID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_group` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(30) NOT NULL, + `role` char(30) NOT NULL DEFAULT '', + `desc` char(255) NOT NULL DEFAULT '', + `acl` text, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_grouppriv` ( + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` char(30) NOT NULL DEFAULT '', + `method` char(30) NOT NULL DEFAULT '', + UNIQUE KEY `group` (`group`,`module`,`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_history` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `action` mediumint(8) unsigned NOT NULL DEFAULT '0', + `field` varchar(30) NOT NULL DEFAULT '', + `old` text NOT NULL, + `new` text NOT NULL, + `diff` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `action` (`action`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_lang` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `lang` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL, + `section` varchar(30) NOT NULL, + `key` varchar(60) NOT NULL, + `value` text NOT NULL, + `system` enum('0','1') NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_log` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(30) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(8) unsigned NOT NULL, + `date` datetime NOT NULL, + `url` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL, + `data` text NOT NULL, + `result` text NOT NULL, + PRIMARY KEY (`id`), + KEY `objectType` (`objectType`), + KEY `obejctID` (`objectID`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_module` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` char(60) NOT NULL DEFAULT '', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `path` char(255) NOT NULL DEFAULT '', + `grade` tinyint(3) unsigned NOT NULL DEFAULT '0', + `order` smallint(5) unsigned NOT NULL DEFAULT '0', + `type` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `collector` text NOT NULL, + `short` varchar(30) NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `root` (`root`), + KEY `type` (`type`), + KEY `path` (`path`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_notify` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `objectType` varchar(50) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `action` mediumint(9) NOT NULL, + `toList` varchar(255) NOT NULL, + `ccList` text NOT NULL, + `subject` varchar(255) NOT NULL, + `data` text NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `sendTime` datetime NOT NULL, + `status` varchar(10) NOT NULL DEFAULT 'wait', + `failReason` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_product` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `line` mediumint(8) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT 'normal', + `status` varchar(30) NOT NULL DEFAULT '', + `desc` text NOT NULL, + `PO` varchar(30) NOT NULL, + `QD` varchar(30) NOT NULL, + `RD` varchar(30) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `createdVersion` varchar(20) NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_productplan` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', + `title` varchar(90) NOT NULL, + `desc` text NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `order` text NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `end` (`end`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_project` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `isCat` enum('1','0') NOT NULL DEFAULT '0', + `catID` mediumint(8) unsigned NOT NULL, + `type` varchar(20) NOT NULL DEFAULT 'sprint', + `parent` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(90) NOT NULL, + `code` varchar(45) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `days` smallint(5) unsigned NOT NULL, + `status` varchar(10) NOT NULL, + `statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1', + `pri` enum('1','2','3','4') NOT NULL DEFAULT '1', + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `openedVersion` varchar(20) NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `canceledBy` varchar(30) NOT NULL DEFAULT '', + `canceledDate` datetime NOT NULL, + `PO` varchar(30) NOT NULL DEFAULT '', + `PM` varchar(30) NOT NULL DEFAULT '', + `QD` varchar(30) NOT NULL DEFAULT '', + `RD` varchar(30) NOT NULL DEFAULT '', + `team` varchar(90) NOT NULL, + `acl` enum('open','private','custom') NOT NULL DEFAULT 'open', + `whitelist` text NOT NULL, + `order` mediumint(8) unsigned NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `parent` (`parent`), + KEY `begin` (`begin`), + KEY `end` (`end`), + KEY `status` (`status`), + KEY `order` (`order`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectproduct` ( + `project` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `plan` mediumint(8) unsigned NOT NULL, + PRIMARY KEY (`project`,`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_projectstory` ( + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `product` mediumint(8) unsigned NOT NULL, + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` smallint(6) NOT NULL DEFAULT '1', + `order` smallint(6) unsigned NOT NULL, + UNIQUE KEY `project` (`project`,`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_release` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `marker` enum('0','1') NOT NULL DEFAULT '0', + `date` date NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `leftBugs` text NOT NULL, + `desc` text NOT NULL, + `status` varchar(20) NOT NULL DEFAULT 'normal', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_score` ( + `id` bigint(12) unsigned NOT NULL AUTO_INCREMENT, + `account` varchar(30) NOT NULL, + `module` varchar(30) NOT NULL DEFAULT '', + `method` varchar(30) NOT NULL, + `desc` varchar(250) NOT NULL DEFAULT '', + `before` int(11) NOT NULL DEFAULT '0', + `score` int(11) NOT NULL DEFAULT '0', + `after` int(11) NOT NULL DEFAULT '0', + `time` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `model` (`module`), + KEY `method` (`method`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_story` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL DEFAULT '0', + `branch` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `plan` text, + `source` varchar(20) NOT NULL, + `sourceNote` varchar(255) NOT NULL, + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) NOT NULL, + `keywords` varchar(255) NOT NULL, + `type` varchar(30) NOT NULL DEFAULT '', + `pri` tinyint(3) unsigned NOT NULL DEFAULT '3', + `estimate` float unsigned NOT NULL, + `status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '', + `color` char(7) NOT NULL, + `stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait', + `mailto` text, + `openedBy` varchar(30) NOT NULL DEFAULT '', + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `lastEditedBy` varchar(30) NOT NULL DEFAULT '', + `lastEditedDate` datetime NOT NULL, + `reviewedBy` varchar(255) NOT NULL, + `reviewedDate` date NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `toBug` mediumint(9) NOT NULL, + `childStories` varchar(255) NOT NULL, + `linkStories` varchar(255) NOT NULL, + `duplicateStory` mediumint(8) unsigned NOT NULL, + `version` smallint(6) NOT NULL DEFAULT '1', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `status` (`status`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storyspec` ( + `story` mediumint(9) NOT NULL, + `version` smallint(6) NOT NULL, + `title` varchar(255) NOT NULL, + `spec` text NOT NULL, + `verify` text NOT NULL, + UNIQUE KEY `story` (`story`,`version`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_storystage` ( + `story` mediumint(8) unsigned NOT NULL, + `branch` mediumint(8) unsigned NOT NULL, + `stage` varchar(50) NOT NULL, + KEY `story` (`story`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_suitecase` ( + `suite` mediumint(8) unsigned NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + UNIQUE KEY `suitecase` (`suite`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_task` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `parent` mediumint(8) NOT NULL DEFAULT '0', + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `module` mediumint(8) unsigned NOT NULL DEFAULT '0', + `story` mediumint(8) unsigned NOT NULL DEFAULT '0', + `storyVersion` smallint(6) NOT NULL DEFAULT '1', + `fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0', + `name` varchar(255) NOT NULL, + `type` varchar(20) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `estimate` float unsigned NOT NULL, + `consumed` float unsigned NOT NULL, + `left` float unsigned NOT NULL, + `deadline` date NOT NULL, + `status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait', + `color` char(7) NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `openedBy` varchar(30) NOT NULL, + `openedDate` datetime NOT NULL, + `assignedTo` varchar(30) NOT NULL, + `assignedDate` datetime NOT NULL, + `estStarted` date NOT NULL, + `realStarted` date NOT NULL, + `finishedBy` varchar(30) NOT NULL, + `finishedDate` datetime NOT NULL, + `finishedList` text NOT NULL, + `canceledBy` varchar(30) NOT NULL, + `canceledDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL, + `closedDate` datetime NOT NULL, + `closedReason` varchar(30) NOT NULL, + `lastEditedBy` varchar(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `project` (`project`), + KEY `story` (`story`), + KEY `assignedTo` (`assignedTo`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_taskestimate` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `date` date NOT NULL, + `left` float unsigned NOT NULL DEFAULT '0', + `consumed` float unsigned NOT NULL, + `account` char(30) NOT NULL DEFAULT '', + `work` text, + PRIMARY KEY (`id`), + KEY `task` (`task`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_team` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `root` mediumint(8) unsigned NOT NULL DEFAULT '0', + `type` enum('project','task') NOT NULL DEFAULT 'project', + `account` char(30) NOT NULL DEFAULT '', + `role` char(30) NOT NULL DEFAULT '', + `limited` char(8) NOT NULL DEFAULT 'no', + `join` date NOT NULL DEFAULT '0000-00-00', + `days` smallint(5) unsigned NOT NULL, + `hours` float(2,1) unsigned NOT NULL DEFAULT '0.0', + `estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00', + `order` tinyint(3) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `team` (`root`,`type`,`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testreport` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL, + `tasks` varchar(255) NOT NULL, + `builds` varchar(255) NOT NULL, + `title` varchar(255) NOT NULL, + `begin` date NOT NULL, + `end` date NOT NULL, + `owner` char(30) NOT NULL, + `members` text NOT NULL, + `stories` text NOT NULL, + `bugs` text NOT NULL, + `cases` text NOT NULL, + `report` text NOT NULL, + `objectType` varchar(20) NOT NULL, + `objectID` mediumint(8) unsigned NOT NULL, + `createdBy` char(30) NOT NULL, + `createdDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testresult` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `run` mediumint(8) unsigned NOT NULL, + `case` mediumint(8) unsigned NOT NULL, + `version` smallint(5) unsigned NOT NULL, + `caseResult` char(30) NOT NULL, + `stepResults` text NOT NULL, + `lastRunner` varchar(30) NOT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `case` (`case`), + KEY `version` (`version`), + KEY `run` (`run`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testrun` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', + `case` mediumint(8) unsigned NOT NULL DEFAULT '0', + `version` tinyint(3) unsigned NOT NULL DEFAULT '0', + `assignedTo` char(30) NOT NULL DEFAULT '', + `lastRunner` varchar(30) NOT NULL, + `lastRunDate` datetime NOT NULL, + `lastRunResult` char(30) NOT NULL, + `status` char(30) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `task` (`task`,`case`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testsuite` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `product` mediumint(8) unsigned NOT NULL, + `name` varchar(255) NOT NULL, + `desc` text NOT NULL, + `type` varchar(20) NOT NULL, + `addedBy` char(30) NOT NULL, + `addedDate` datetime NOT NULL, + `lastEditedBy` char(30) NOT NULL, + `lastEditedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL, + PRIMARY KEY (`id`), + KEY `product` (`product`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_testtask` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `name` char(90) NOT NULL, + `product` mediumint(8) unsigned NOT NULL, + `project` mediumint(8) unsigned NOT NULL DEFAULT '0', + `build` char(30) NOT NULL, + `owner` varchar(30) NOT NULL, + `pri` tinyint(3) unsigned NOT NULL DEFAULT '0', + `begin` date NOT NULL, + `end` date NOT NULL, + `mailto` text, + `desc` text NOT NULL, + `report` text NOT NULL, + `status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `product` (`product`), + KEY `build` (`build`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_todo` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `date` date NOT NULL, + `begin` smallint(4) unsigned zerofill NOT NULL, + `end` smallint(4) unsigned zerofill NOT NULL, + `type` char(10) NOT NULL, + `cycle` tinyint(3) unsigned NOT NULL DEFAULT '0', + `idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0', + `pri` tinyint(3) unsigned NOT NULL, + `name` char(150) NOT NULL, + `desc` text NOT NULL, + `status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait', + `private` tinyint(1) NOT NULL, + `config` varchar(255) NOT NULL, + `assignedTo` varchar(30) NOT NULL DEFAULT '', + `assignedBy` varchar(30) NOT NULL DEFAULT '', + `assignedDate` datetime NOT NULL, + `finishedBy` varchar(30) NOT NULL DEFAULT '', + `finishedDate` datetime NOT NULL, + `closedBy` varchar(30) NOT NULL DEFAULT '', + `closedDate` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `assignedTo` (`assignedTo`), + KEY `finishedBy` (`finishedBy`), + KEY `date` (`date`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_user` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `dept` mediumint(8) unsigned NOT NULL DEFAULT '0', + `account` char(30) NOT NULL DEFAULT '', + `password` char(32) NOT NULL DEFAULT '', + `role` char(10) NOT NULL DEFAULT '', + `realname` varchar(100) NOT NULL DEFAULT '', + `nickname` char(60) NOT NULL DEFAULT '', + `commiter` varchar(100) NOT NULL, + `avatar` char(30) NOT NULL DEFAULT '', + `birthday` date NOT NULL DEFAULT '0000-00-00', + `gender` enum('f','m') NOT NULL DEFAULT 'f', + `email` char(90) NOT NULL DEFAULT '', + `skype` char(90) NOT NULL DEFAULT '', + `qq` char(20) NOT NULL DEFAULT '', + `mobile` char(11) NOT NULL DEFAULT '', + `phone` char(20) NOT NULL DEFAULT '', + `weixin` varchar(90) NOT NULL DEFAULT '', + `dingding` varchar(90) NOT NULL DEFAULT '', + `slack` varchar(90) NOT NULL DEFAULT '', + `whatsapp` varchar(90) NOT NULL DEFAULT '', + `address` char(120) NOT NULL DEFAULT '', + `zipcode` char(10) NOT NULL DEFAULT '', + `join` date NOT NULL DEFAULT '0000-00-00', + `visits` mediumint(8) unsigned NOT NULL DEFAULT '0', + `ip` char(15) NOT NULL DEFAULT '', + `last` int(10) unsigned NOT NULL DEFAULT '0', + `fails` tinyint(5) NOT NULL DEFAULT '0', + `locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `ranzhi` char(30) NOT NULL DEFAULT '', + `score` int(11) NOT NULL DEFAULT '0', + `scoreLevel` int(11) NOT NULL DEFAULT '0', + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `account` (`account`), + KEY `dept` (`dept`), + KEY `email` (`email`), + KEY `commiter` (`commiter`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usercontact` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `listName` varchar(60) NOT NULL, + `userList` text NOT NULL, + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usergroup` ( + `account` char(30) NOT NULL DEFAULT '', + `group` mediumint(8) unsigned NOT NULL DEFAULT '0', + UNIQUE KEY `account` (`account`,`group`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userquery` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `module` varchar(30) NOT NULL, + `title` varchar(90) NOT NULL, + `form` text NOT NULL, + `sql` text NOT NULL, + `shortcut` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`), + KEY `module` (`module`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_usertpl` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `account` char(30) NOT NULL, + `type` char(30) NOT NULL, + `title` varchar(150) NOT NULL, + `content` text NOT NULL, + `public` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_userview` ( + `account` char(30) NOT NULL, + `products` mediumtext NOT NULL, + `projects` mediumtext NOT NULL, + UNIQUE KEY `account` (`account`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `zt_webhook` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(10) NOT NULL DEFAULT 'default', + `name` varchar(50) NOT NULL, + `url` varchar(255) NOT NULL, + `domain` varchar(255) NOT NULL, + `contentType` varchar(30) NOT NULL DEFAULT 'application/json', + `sendType` enum('sync','async') NOT NULL DEFAULT 'sync', + `products` text NOT NULL, + `projects` text NOT NULL, + `params` varchar(100) NOT NULL, + `actions` text NOT NULL, + `desc` text NOT NULL, + `createdBy` varchar(30) NOT NULL, + `createdDate` datetime NOT NULL, + `editedBy` varchar(30) NOT NULL, + `editedDate` datetime NOT NULL, + `deleted` enum('0','1') NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/db/update11.1.sql b/db/update11.1.sql new file mode 100644 index 0000000000..53bb4617fc --- /dev/null +++ b/db/update11.1.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_release` CHANGE `name` `name` varchar(255) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `build`; diff --git a/db/update11.2.sql b/db/update11.2.sql new file mode 100644 index 0000000000..e66d96995b --- /dev/null +++ b/db/update11.2.sql @@ -0,0 +1,7 @@ +update `zt_build` set `deleted`='1' where `project`='0' and `id` in (select `build` from `zt_release` where `deleted`='1'); +ALTER TABLE `zt_productplan` ADD `parent` mediumint(9) NOT NULL DEFAULT '0' AFTER `branch`; +ALTER TABLE `zt_action` CHANGE `actor` `actor` varchar(100) COLLATE 'utf8_general_ci' NOT NULL DEFAULT '' AFTER `project`; +ALTER TABLE `zt_user` ADD `weixin` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `phone`; +ALTER TABLE `zt_user` ADD `dingding` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `weixin`; +ALTER TABLE `zt_user` ADD `slack` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `dingding`; +ALTER TABLE `zt_user` ADD `whatsapp` varchar(90) COLLATE 'utf8_general_ci' NOT NULL AFTER `slack`; diff --git a/db/update11.3.sql b/db/update11.3.sql new file mode 100644 index 0000000000..4590ec04c2 --- /dev/null +++ b/db/update11.3.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_case` ADD `fromCaseVersion` mediumint(8) unsigned NOT NULL AFTER `fromCaseID`; diff --git a/db/update11.4.sql b/db/update11.4.sql new file mode 100644 index 0000000000..0a36f6bf6e --- /dev/null +++ b/db/update11.4.sql @@ -0,0 +1,2 @@ +ALTER TABLE `zt_burn` ADD `task` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `project`; +ALTER TABLE `zt_burn` ADD PRIMARY KEY `project_date_task` (`project`, `date`, `task`), DROP INDEX `PRIMARY`; diff --git a/db/zentao.sql b/db/zentao.sql index 95ef0d351b..6f1175eb92 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -5,7 +5,7 @@ CREATE TABLE IF NOT EXISTS `zt_action` ( `objectID` mediumint(8) unsigned NOT NULL default '0', `product` varchar(255) NOT NULL, `project` mediumint(9) NOT NULL, - `actor` varchar(30) NOT NULL default '', + `actor` varchar(100) NOT NULL default '', `action` varchar(30) NOT NULL default '', `date` datetime NOT NULL, `comment` text NOT NULL, @@ -125,11 +125,12 @@ CREATE TABLE IF NOT EXISTS `zt_build` ( -- DROP TABLE IF EXISTS `zt_burn`; CREATE TABLE IF NOT EXISTS `zt_burn` ( `project` mediumint(8) unsigned NOT NULL, + `task` mediumint(8) unsigned NOT NULL DEFAULT '0', `date` date NOT NULL, `estimate` float NOT NULL, `left` float NOT NULL, `consumed` float NOT NULL, - PRIMARY KEY (`project`,`date`) + PRIMARY KEY (`project`,`date`,`task`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- DROP TABLE IF EXISTS `zt_case`; CREATE TABLE IF NOT EXISTS `zt_case` ( @@ -166,6 +167,7 @@ CREATE TABLE IF NOT EXISTS `zt_case` ( `linkCase` varchar(255) NOT NULL, `fromBug` mediumint(8) unsigned NOT NULL, `fromCaseID` mediumint(8) unsigned NOT NULL, + `fromCaseVersion` mediumint(8) unsigned NOT NULL, `deleted` enum('0','1') NOT NULL default '0', `lastRunner` varchar(30) NOT NULL, `lastRunDate` datetime NOT NULL, @@ -461,6 +463,7 @@ CREATE TABLE IF NOT EXISTS `zt_productplan` ( `id` mediumint(8) unsigned NOT NULL auto_increment, `product` mediumint(8) unsigned NOT NULL, `branch` mediumint(8) unsigned NOT NULL, + `parent` mediumint(9) NOT NULL DEFAULT '0', `title` varchar(90) NOT NULL, `desc` text NOT NULL, `begin` date NOT NULL, @@ -533,7 +536,7 @@ CREATE TABLE IF NOT EXISTS `zt_release` ( `product` mediumint(8) unsigned NOT NULL default '0', `branch` mediumint(8) unsigned NOT NULL default '0', `build` mediumint(8) unsigned NOT NULL, - `name` char(30) NOT NULL default '', + `name` varchar(255) NOT NULL default '', `marker` enum('0','1') NOT NULL default '0', `date` date NOT NULL, `stories` text NOT NULL, @@ -815,11 +818,12 @@ CREATE TABLE IF NOT EXISTS `zt_user` ( `email` char(90) NOT NULL default '', `skype` char(90) NOT NULL default '', `qq` char(20) NOT NULL default '', - `yahoo` char(90) NOT NULL default '', - `gtalk` char(90) NOT NULL default '', - `wangwang` char(90) NOT NULL default '', `mobile` char(11) NOT NULL default '', `phone` char(20) NOT NULL default '', + `weixin` varchar(90) NOT NULL default '', + `dingding` varchar(90) NOT NULL default '', + `slack` varchar(90) NOT NULL default '', + `whatsapp` varchar(90) NOT NULL default '', `address` char(120) NOT NULL default '', `zipcode` char(10) NOT NULL default '', `join` date NOT NULL default '0000-00-00', @@ -1249,6 +1253,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'story', 'create'), (1, 'story', 'delete'), (1, 'story', 'edit'), +(1, 'story', 'assignTo'), (1, 'story', 'batchChangeModule'), (1, 'story', 'linkStory'), (1, 'story', 'unlinkStory'), @@ -2713,6 +2718,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'story', 'create'), (7, 'story', 'delete'), (7, 'story', 'edit'), +(7, 'story', 'assignTo'), (7, 'story', 'batchChangeModule'), (7, 'story', 'linkStory'), (7, 'story', 'unlinkStory'), diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 5ea9a9f536..293cc42f50 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,3 +1,232 @@ +2019-03-25 11.4.1 +完善细节,修复bug。 +完成相关调整支持专业版里相关功能。 + +2019-03-25 11.4.stable +完成的需求: +2584 国际版本去掉用户列表的首字母功能 +2600 在新手教程中,像真实系统一样,明确提示哪些项目是必填项。 +2601 将由我关闭的需求,合并的我的需求中去。 +2602 增加控件的宽度,以完整显示内容(几乎所有搜索区域都需要调整) +2603 删除自定义查询后,上方菜单中的也要删除这项。 +2606 修改国际版中链接的指向,希望指向英文站的论坛 +2608 QA/CASE中的数据表格的自定义列 的页面,国际版有多处内容被遮挡(自定义列页面有相似的问题)。 +2609 调整文档首页的显示宽度 +2610 将国际版中的专业版链接,重定向到专业版介绍页面 +2612 用户注册页面,对于国际版,删除手册验证码 +2613 永久关闭的区块页面,如果没有要显示的,希望显示"无永久关闭的区块",现在是空白 +2614 在国际版中,调整指各中文网站的链接 +2615 在国际版中,希望将英文协议显示在上方 +2616 安装时,希望在成功删除install.php后,不要再提示删除 +2617 产品概况中,如果是英文,程序拼接时需要加空格。 +2618 看板切换为英文后,表头与主体错位 +2619 燃尽图的帮助 ,目前 跳转到404了。 +2862 项目关联产品有变化的时候记录日志到项目-概况的历史记录中 +2902 测试报告英文需要修改 +2903 禅道英文官网,用户登录会员中心界面字段未完全显示 +2905 英文与禅道官网,用户中心翻译改动 +2937 英文DEMO使用教程创建项目时关联产品排版问题 +2938 国际版本后台自定义流程默认设置为Product/Sprint +2958 zentao,runner官网链接文中文站 +3063 调整index页面的"版本试用"的构成方式,做到兼容中英文 +3078 国际安装包的登录页的默认标题调整为"Zentao ALM" +3079 列宽的设置兼顾英文 +3080 调整燃尽图的帮助文档的指向 +3440 文档分类下只显示当前分类下的子分类和文档 +3503 增加取消子任务父子关系的功能 +3535 bug列表严重程度颜色区分不明显 +3547 使用子任务管理测试类型的任务 +3561 优化版本关联需求页面的关联需求按钮 +3568 需求增加指派操作 +3570 富文本编辑器里面的url地址加链接 +3581 云禅道英文版中项目视图中的权限名称翻译的不准确 +3582 看板增加需求分解的功能 +3584 更改禅道软件中的中文和英文的用词 +3587 从用例库导入的用例提示同步时,加个忽略按钮。 +3588 任务详情中显示进度信息 +3593 编辑文档页面右上角增加一个保存按钮 +3595 调整文档按照卡片浏览时的布局 +3596 调整文档按照列表浏览时表头的对齐方式 +3599 将创建产品和项目的按钮提升到二级菜单中 +3603 修改框架里fetch方法,可以fetch同模块扩展的方法 +解决的bug: +1529 改变列表排序方式后,详情页里面的翻页顺序错乱 +1838 项目任务、需求模块不一致 +2435 自动计算的可用天数不正确 +2443 打开首次登录修改密码后,使用客户端可以正常登录禅道 +2457 测试单执行用例跳转问题 +2458 zbox一键安装包ubuntu18安装异常 +2459 最新zbox无法解析钉钉主机 +2466 多人任务指派问题 +2467 导出任务时子任务重复 + +2019-02-27 11.3.stable +完成的需求 +3579 发信的时候增加环境变量避免dns解析超时 +3578 优化chosen控件下拉之后的交互 +3577 搜索表单展开多项条件搜索之后应当保持表单状态 +3576 里程碑发布增加文字提示 +3575 增加时区设置 +3574 产品、项目文档库和文档权限控制增加文字提示 +3572 增加父子计划之后增加调整路线图的呈现方式 +3571 计划增加子计划概念 +3567 自定义文档库和手册可以进行排序 +3563 优化应用集成禅道功能 +3562 任务工时管理中录入的备份信息过长可以悬浮显示 +3548 需求详情页面相关信息不以剧中方式显示 +3538 去掉雅虎通、旺旺的字段 +3536 项目没有创建版本,在项目下提交测试单可以提示创建版本 +3511 补充完整文档库设置按钮的菜单 +3504 组织-用户下查看任务,延期的任务会标记显示 +3501 需求详情等页面的删除icon调整 +3499 创建文档的时候引导用户创建文档的类型 +3490 文档库左侧的列表和产品项目视图的下拉菜单保持一致 +3489 优化文档库创建的页面 +3488 没有文档库时在左侧导航增加添加文档库的入口 +3483 产品视图左上角产品下拉框宽度增加一些 +3466 添加编辑区块时新增状态选择 +3464 浏览文档列表时时间显示完整年份 +3463 预览图片类的文档的时候会出现两个删除按钮 +3462 文档详情页面的全屏按钮增加文字并记录状态 +3458 bug列表页面将严重程度放到优先级前面 +3457 解决bug的时候将closed帐号从指派给列表中去掉 +3454 评审需求时优先级和工时信息应当将现在的值读取出来 +3453 梳理windows和linux一键安装包里面的链接地址 +3446 需求变更时光标到需求名称无需title +3420 延期bug在详情页面截止日期后显示延期几天 +3419 bug延期后在列表页面截止日期字段标红提示 +2920 用例库的用例更改之后自动更新其关联的测试用例 +修复的Bug +2311 开源版集成git,git用户名过长无法正常同步 +2332 取消浏览器自动填充信息 +2410 批量分解需求,同需求按钮位置需要优化 +2413 附件上传安全限制功能异常 +2421 用户有组织视图权限访问company-browse.json会显示所有用户密码md5值 +2424 每日任务提醒邮件中不显示任务的截止时间 +2425 需求关联需求后,无法取消 +2426 升级的时候提示错误信息 +2427 树状图展示数据错误 +2440 二级子模块不可以调整为一级父模块 + +2019-01-29 11.2.stable +完成的需求 +3553 集成喧喧2.4版本,国际版企业版集成喧喧2.4,国内和国际的版本升级程序要区分处理 +3552 升级执行sql后需要进行数据库结构的检查 +3542 通过配置的方式定义各个对象的创建和编辑接口需要传入的参数 +3541 移除禅道里配置喧喧和下载xxd与xxd配置文件的相关代码,不同的地方通过扩展来处理 +3540 调整需求和任务,bug优先级的样式 +3537 增强用户录入操作的提示 +3531 dockerfile启动命令中增加修复目录权限的功能 +3530 在创建需求、bug时产品下拉菜单保持和导航里面一致 +3529 发布列表页面增加里程碑的显示 +3527 zbox启动的时候自动修复目录权限 +3526 内嵌禅道手册都是用https协议的 +3460 计划关联bug的时候将已经转为任务的也计算在内 +3060 增加升级日志功能 +修复的Bug +2008 文档收藏按钮无效 +2061 用户密码包含#时,配置单点登录提示密码错误 +2234 自定义用户职位后,项目团队中添加成员时角色不会带出自定义添加的职位 +2235 自定义已有用户职位,项目团队中添加成员时角色还是显示原来职位 +2246 edge浏览器下载附件的名称乱码 +2314 需求分组统计错误 +2334 大文件备份异常 +2347 新建用例查看需求页面无法返回 +2354 受限权限分组用户可以在列表对数据进行指派 +2355 编辑部门的负责人支持检索 +2359 没有备注权限在待办中还可以看到备注按钮 +2361 客户端创建需求提示错误 +2363 批量创建用例所属模块修改后不能选择相应模块下的需求 +2364 项目没有关联产品下需求,在维护项目模块时可以显示产品下模块 +2366 禅道的客户端修改密码后不能登录 +2367 计划需求列表移除需求之后,底部的统计结果并没有重新计算 +2368 弹窗录入信息后右上角的差号消失 +2369 批量分解需求时会把html实体转义 +2370 文档库访问权限设置后再清空保存不生效 +2371 关闭的项目可以在搜索栏访问 +2373 我的地盘总览bug数和我的地盘bug列表数不一致 +2374 员工负载表对多人任务统计不准确 +2375 客户端上访问禅道的不能正常添加用户 +2376 在已有模块中插入模块保存后新模块会排序到最后 +2377 批量编辑用户不能修改职位为空 +2378 执行用例结果选择失败不会转到下个用例 +2379 客户端在浏览器窗口中打开链接导致无限循环请求 +2380 测试用例下不应该显示指派分组 +2382 客户端修改禅道用户信息无法保存 +2383 下载客户端弹窗页面需要优化 +2384 自定义导航公共无法保存 +2386 客户端服务器设置页面,提示文案修改 +2389 自定义列出删除用户无法保存 +2390 移动文档库分类文档不能同步移动 +2391 多分支多平台产品提bug提用例所属模块问题 +2392 地盘区块中的项目数量与地盘项目列表中的数量不一致 +2393 IE11富文本编辑器兼容问题 +2394 动态如果没有权限查看就全都不显示 +2396 计划任务备份报错 +2397 禅道升级功能优化 +2398 组织权限用户列表样式重叠 +2400 自定义导航栏问题 +2402 没有文档的访问权限也可以在附件库中下载文档中的附件 +2403 创建项目页面导航栏显示的是测试 +2404 修改集成客户端中的禅道服务器,发信配置中的禅道域名会同步修改 +2406 需求页面建用例不能同步 + +2019-01-04 11.1.stable +解决的Bug +2362 后台自定义存在注入问题 +2361 客户端创建需求提示错误 +2358 新手教程功能异常 +2357 燃尽图没有统计到父子任务的工时信息 +2356 用例导出不能导出实际情况字段 +2352 任务列表指派后跳转页面异常 +2351 组织动态显示的数量异常 +2350 在平台批量提需求第二行后显示为所有平台 +2348 文档库分类排序后文档列表顺序错乱 +2346 地盘区块中的任务数量与列表中的数量不一致 +2345 php7.2版本代码兼容 +2344 多人任务修改团队顺序后不起作用 +2341 已删除的文档还会在文档分类下统计 +2336 父子任务状态同步问题 +2333 测试单的用例分组显示问题 +2328 编辑任务保存后预计剩余会自动清零 +2325 编辑器ie11兼容问题 +2324 项目任务列表统计规则问题 +2323 项目测试单生成测试报告问题 +2322 发布功能异常 +2319 app访问测试用例库报错 +2317 修改个人档案选择出生日年右上角关闭按钮消失 +2304 ie浏览器编辑器点击上传图片按钮页面不显示内容 +2301 测试管理工具中没有创建用例库的入口 +2300 甘特图插件中父子任务不显示 +2299 区块工时统计问题 +2297 ie浏览器录入任务工时,选择日期后工时输入框光标不显示 +2274 项目-需求列表用例覆盖率计算错误 +2273 用例列表隐藏模块功能异常 +2265 组织用户查看由某个用户完成的bug,数据不准确 +2251 项目任务下必填字段问题 +2249 看板高度问题 +2248 访问不存在的网址暴露服务器信息 +2232 修改用例后优先级会自动改变 +2186 用例执行失败转bug后跳转页面不对 + +2018-12-21 11.0.stable +完成的需求 +3482 集成喧喧的广播接口 +3481 精简喧喧的配置文件 +3480 一键安装包集成喧喧的服务 +3479 完善在卡片里面操作按钮的二次点击行为 +3478 完善集成之后喧喧消息转为需求、任务、待办、bug、文档的功能 +3477 确定在喧喧客户端可以渲染的页面 +3476 优化在喧喧里面打开的禅道的卡片样式 +3475 设计喧喧客户端的登录界面 +3474 消息通知设置里面增加喧喧客户端选项 +3473 提示用户是否下载喧喧客户端 +3472 增加是否启用喧喧聊天功能开关 +3470 在喧喧客户端直接加上禅道的应用导航 +3469 实现喧喧聊天客户端的在线下载功能 +3468 在后台应用集成中增加喧喧服务器配置下载的功能 +3467 在禅道代码里面直接内置喧喧聊天模块 + 2018-11-20 10.6.stable 完成的需求 3424 测试mysql8下面的兼容性 @@ -444,21 +673,21 @@ 处理各个首页区块自定义区块的历史数据 后台工作方式切换后,检查各个模块导航是否正确,页面样式是否正确 检查新手教程 -3989 我的地盘样式调整 -4133 调整表格列表界面 -4142 项目任务分组视图若干问题调整 -4143 项目任务树状图若干问题调整 -4146 批量创建用例页面调整 -4147 批量创建任务页面调整 -4148 任务列表页面调整 -4162 弹窗有问题需要调整的页面 -4164 搜索,保存搜索条件,显示在菜单栏会导致菜单换行的问题 -4165 用例列表和用例详情界面,用例相关需求变更后,用例确认变更样式需要调整 -4179 多人任务,团队成员显示不全 -4182 列表页面,优先级、严重级别等自定义后加title -4192 重构侧边栏展开折叠插件 -4193 所有创建页面,去掉大尺寸样式(图一),统一成小尺寸样式(图二) -4194 模块栏目展开收起的交互方式 +3989 我的地盘样式调整 +4133 调整表格列表界面 +4142 项目任务分组视图若干问题调整 +4143 项目任务树状图若干问题调整 +4146 批量创建用例页面调整 +4147 批量创建任务页面调整 +4148 任务列表页面调整 +4162 弹窗有问题需要调整的页面 +4164 搜索,保存搜索条件,显示在菜单栏会导致菜单换行的问题 +4165 用例列表和用例详情界面,用例相关需求变更后,用例确认变更样式需要调整 +4179 多人任务,团队成员显示不全 +4182 列表页面,优先级、严重级别等自定义后加title +4192 重构侧边栏展开折叠插件 +4193 所有创建页面,去掉大尺寸样式(图一),统一成小尺寸样式(图二) +4194 模块栏目展开收起的交互方式 修复的bug: 组织-用户,所有的用户都显示 解除然之绑定 和解锁用户,按钮 自定义值较长时,字体颜色和背景色块没法区分 @@ -484,7 +713,7 @@ 需求复制页面变形 1775 批量操作页面,多项录入不生效。 1773 列表页的自定义表单项,都不生效。 -1768 导入csv的弹窗页面,需要优化一下,上下间距有点宽。 导入后,提示覆盖还是全新导入页面上方有一条白线 +1768 导入csv的弹窗页面,需要优化一下,上下间距有点宽。 导入后,提示覆盖还是全新导入页面上方有一条白线 1762 无产品无项目时,提示 添加的 文案。 + 和后面添加产品、添加项目的间隔宽度统一一下。 1761 批量页面,可以自定义表单项的,需要考虑勾选所有字段时,页面的显示问题。现在把所有的字段都勾选后,表头字段有超出页面宽度 1759 搜索,保存已搜索结果。名称长的,没加title @@ -511,7 +740,7 @@ 1729 权限--视图维护,产品和项目不显示填写框。(无产品项目) 1727 部门折叠展开按钮的显示位置要调整。 1724 统计,测试,Bug创建表,选择产品和项目时,刷新选择框,显示的样式不对。 -1722 项目起止时间选择框,宽度不一致。前面窄后面的宽。 +1722 项目起止时间选择框,宽度不一致。前面窄后面的宽。 1721 产品附件库,显示切换条目数,没记录。下次再访问时,还原为默认的条目数。 1720 检查一下,最近更新列表,文档的大小不显示。 1719 文档详情页,添加备注弹窗页面,编辑器显示变形。 @@ -530,30 +759,30 @@ 1699 创建和编辑Bug,类型和操作系统,有分隔开。 1698 创建Bug,重现步骤,编辑器里下方空白太多,步骤结果期望可以空一行。鼠标点击时,显示一个蓝色边框,需要优化一下 1693 Bug列表页没有Bug时,提示文案:暂时没有BUG,您现在可以提Bug。BUG都同统一显示为Bug -1692 套件切换,没有高亮 +1692 套件切换,没有高亮 1691 列表页,分组查看,折叠时,没有统计数据 -1690 列表页,分组查看,不高亮 +1690 列表页,分组查看,不高亮 1689 导入csv,点击覆盖和全新插入,都没有导入成功 1688 列表ID显示为1、2,其他的显示为001、002。建议统一为001、002显示 1685 测试单,没关联用例时,模块下有个空白的区块,优化一下 -1681 项目-bug,列表页,确认弹窗页面,指派给框宽度不够 +1681 项目-bug,列表页,确认弹窗页面,指派给框宽度不够 1680 项目-Bug,导出数据,弹窗有2个页面,关闭时页面还有个关闭按钮图标。多次点击都关闭不了 1679 管理团队,最后一个填写框,下拉选择会被遮住一部分,选择不了用户。是否下拉向上显示 -1675 项目需求看板,点击需求标题,需求详情弹窗页面。操作栏没有操作按钮图标,但是有个色块。如果这个页面不让操作,把操作栏隐藏 -1674 导出数据,弹窗页面,自定义的模板多的话,不点击设置,选择模板下拉框会显示不完整,有的模板无法选择 -1673 项目下需求,导出数据,选中数据,点击导出,页面不跳转不提示,无法导出 +1675 项目需求看板,点击需求标题,需求详情弹窗页面。操作栏没有操作按钮图标,但是有个色块。如果这个页面不让操作,把操作栏隐藏 +1674 导出数据,弹窗页面,自定义的模板多的话,不点击设置,选择模板下拉框会显示不完整,有的模板无法选择 +1673 项目下需求,导出数据,选中数据,点击导出,页面不跳转不提示,无法导出 1672 导出数据,自定义设置多字段,由谁评审和抄送给显示的是逗号 1670 没关联需求时,所有模块下,显示空白的方框,是否优化一下显示 1668 编辑任务,标题必填项标识显示位置需要调整 1667 编辑任务,高亮的是任务列表和概况 -1666 多人任务和子任务详情页,任务标题前的子/多的样式不突出,背景色比较相近 -1664 版本,版本详情,描述显示时有换行,错行显示看着不大好 +1666 多人任务和子任务详情页,任务标题前的子/多的样式不突出,背景色比较相近 +1664 版本,版本详情,描述显示时有换行,错行显示看着不大好 1663 看板,导出数据,是否隐藏掉选择数据,因为没法选中 -1661 看板,任务详情弹窗页,操作按钮的显示逻辑。一些没操作的,是否可以不显示。目前没操作的显示一个操作条 +1661 看板,任务详情弹窗页,操作按钮的显示逻辑。一些没操作的,是否可以不显示。目前没操作的显示一个操作条 1658 树状图,只看需求、只看任务,高亮方式是否和一级二级菜单高亮一致。现在是加上蓝色边框 1657 树状图,点需求,右侧需求详情页,历史记录点添加备注,备注弹窗没有编辑器 1656 树状图,先删除需求,然后点取消,再点编辑,保存。会提示是否删除该需求 -1655 分组视图,完成者和关闭者分组查看时,未完成和未关闭的不显示标签名称 +1655 分组视图,完成者和关闭者分组查看时,未完成和未关闭的不显示标签名称 1654 任务列表页,关联需求已变更,需要确认变更。右侧操作只显示确认变更按钮,其他的不显示。需要确认一下 1653 批量创建任务,多项录入,保存后,一直在转圈,不成功 1650 编辑项目,关联计划字段没有,不能编辑和置空关联的计划。确认一下是否设计如此 @@ -565,7 +794,7 @@ 1641 复制项目,提示没有可用的项目,颜色为黄色背景为粉色。 与系统其他的提示样式,保持一致 1640 列表页是否显示模块名,设置页面,保存按钮样式还是旧的 1639 维护多层级的模块时,模块名和箭头图标有换行,希望在一行显示 -1638 动态折叠时,显示1条半信息,希望显示完整,显示1条或者2条 +1638 动态折叠时,显示1条半信息,希望显示完整,显示1条或者2条 1637 用户没有任何动态信息时,显示的是一个空白的区块,希望优化显示当用户无产品动态的显示 1636 产品,动态,在某个标签下,切换用户,标签高亮丢失 1635 产品-路线图,计划描述显示占很多位置,路线图不在一条线上 @@ -592,8 +821,8 @@ 1602 新增待办,默认的日期显示不完整 1601 版本列表区块,版本ID显示为1、2,统一为001、002 1600 Bug详情页,解决操作没有图标,严重程度图标数字太靠上 -1599 右上角,用户名--切换语言。显示的是英文 language ,简体和繁体下应显示为中文 -1597 永久关闭区块的提示文案,第二句开头少一个‘关’字,最后少个句号 [BUG#1597] +1599 右上角,用户名--切换语言。显示的是英文 language ,简体和繁体下应显示为中文 +1597 永久关闭区块的提示文案,第二句开头少一个‘关’字,最后少个句号 [BUG#1597] 1595 我的地盘里,编辑页面的 保存和取消 按钮的间距宽度比较宽,是否整个系统里统一一下保存和取消(返回)的间距宽度 1592 我的待办区块,添加待办成功后,跳转到区块底部 1591 我的待办区块,点击待办名称,然后编辑,待办名称必填项与边框有重叠 @@ -601,7 +830,7 @@ 1589 新安装,导入demo数据,有1个空的长区块。(项目统计) 1588 新安装,未导入demo数据,有2个空的长区块。(项目统计、产品统计) 1587 9.0升级到10.0,升级成功,登录禅道,admin登录,提示没有首页的权限,重新登录就正常了 -1586 低版本升级到10.0,提示数据库错误zt_lang +1586 低版本升级到10.0,提示数据库错误zt_lang 1585 升级成功的页面,然之协同的logo显示不完整 1584 安装成功,登录,强制修改弱密码和修改成功后我的档案页面,需要优化。现在是全屏显示,视觉效果不好。 1583 登录页面,禅道的logo需要再调整一下 @@ -621,7 +850,7 @@ 2870 开源版创建bug的时候预留对反馈字段和对反馈转bug的处理 2869 开源版创建需求的时候预留反馈字段和对反馈转需求的处理 修复的Bug -3805 批量编辑项目,关联过计划的项目,项目描述会带出标签 +3805 批量编辑项目,关联过计划的项目,项目描述会带出标签 3804 项目列表与项目概况的状态不一致。 3803 项目区块类型选择未完成或进行中,会列出已关闭的项目 3802 项目视图,左上角列出的项目只显示已关闭项目 @@ -633,7 +862,7 @@ 3788 productModel::getPrivProducts查询速度比较慢 3786 加长项目中团队名称字段的长度 3785 项目-需求页面 关联计划列出项目关联的所有产品的全部计划 -3784 解决任务重复导出的问题 +3784 解决任务重复导出的问题 3783 需求用导出数据的模板导入时,所属计划无法导入 3782 创建项目关联计划的时候会列出已经删除的计划 3781 取消的任务关闭后,项目概况中会记录任务的剩余工时 @@ -864,7 +1093,7 @@ 1240 提交需求会列出没有权限查看的产品名称 1244 组织-日志中,选择本月或上月时,结束日期显示准确。 1251 测试用例导出csv文件,报文格式数据不显示 -1255 zbox一键安装包,建议安装 aria_chk +1255 zbox一键安装包,建议安装 aria_chk 1256 搜索条件为日期介于时间段时,搜索后点击重置,搜索条件还在,需要重新点击搜索,条件才会重置。 1261 批量分解任务无法分配相同名称的任务 1264 没有产品的时候打开debug,进入以下页面会产生大量警告性的错误 @@ -903,40 +1132,40 @@ 2017-11-06 9.6.stable 完成的需求 -1988 需求,任务,bug,用例,待办都可以选择看板模式。 -2004 运维性的项目支持多人任务和子任务功能 -2012 所有项目 /所有产品页面增加导出功能 -2033 项目挂起再激活的时候给用户选择是否顺延任务起止时间 -2035 项目需求可以拖动排序 -2048 看板增加任务的暂停状态栏显示 -2108 看板增加显示/隐藏已关闭已取消任务的功能 -2109 看板增加默认展开/折叠任务选项卡的功能 -2110 看板增加自定义设置显示颜色的功能 -2146 迭代,产品区块增加我参与的选项。 -2160 检查自定义表格的字段 -2161 管理员可以自定义所有人用的列表的默认布局。 -2166 产品增加目录管理,方便用户维护产品 -2167 实现基础的积分机制 -2169 实现初始积分的计算功能 -2170 实现积分的实时计算功能 -2171 将积分功能作为开关 -2172 积分区分等级积分和消耗积分 -2173 实现积分的历史记录功能 -2174 获得积分的时候系统给予一定的提示 -2175 优化产品和项目的下拉菜单 -2263 管理员可以将自己的菜单配置作为公共的配置 -2309 优化看板卡片弹出菜单的位置 -2311 自定义数据表格增加恢复默认功能 -2328 禅道中所有列表页面都增加自定义显示字段的功能 -2332 看板可以按照其他的字段进行分组 -2414 实现接口的入口 -2415 实现接口的应用管理 -2416 实现独立的应用入口 -2417 实现应用或者webhook的日志管理和查看 -2418 实现webhook的管理 -2419 可以自定义哪些事件下面可以触发webhook -2423 各个表单的必填项字段可以自定义 -2425 实现和钉钉的消息通知接口 +1988 需求,任务,bug,用例,待办都可以选择看板模式。 +2004 运维性的项目支持多人任务和子任务功能 +2012 所有项目 /所有产品页面增加导出功能 +2033 项目挂起再激活的时候给用户选择是否顺延任务起止时间 +2035 项目需求可以拖动排序 +2048 看板增加任务的暂停状态栏显示 +2108 看板增加显示/隐藏已关闭已取消任务的功能 +2109 看板增加默认展开/折叠任务选项卡的功能 +2110 看板增加自定义设置显示颜色的功能 +2146 迭代,产品区块增加我参与的选项。 +2160 检查自定义表格的字段 +2161 管理员可以自定义所有人用的列表的默认布局。 +2166 产品增加目录管理,方便用户维护产品 +2167 实现基础的积分机制 +2169 实现初始积分的计算功能 +2170 实现积分的实时计算功能 +2171 将积分功能作为开关 +2172 积分区分等级积分和消耗积分 +2173 实现积分的历史记录功能 +2174 获得积分的时候系统给予一定的提示 +2175 优化产品和项目的下拉菜单 +2263 管理员可以将自己的菜单配置作为公共的配置 +2309 优化看板卡片弹出菜单的位置 +2311 自定义数据表格增加恢复默认功能 +2328 禅道中所有列表页面都增加自定义显示字段的功能 +2332 看板可以按照其他的字段进行分组 +2414 实现接口的入口 +2415 实现接口的应用管理 +2416 实现独立的应用入口 +2417 实现应用或者webhook的日志管理和查看 +2418 实现webhook的管理 +2419 可以自定义哪些事件下面可以触发webhook +2423 各个表单的必填项字段可以自定义 +2425 实现和钉钉的消息通知接口 2017-09-27 9.5.1 2128 编辑需求页面增加对来源备注的编辑功能 @@ -1008,44 +1237,44 @@ 2017-05-16 9.2.stable 完成的需求 -1883 windows一键安装包提示安装vC环境改为可选 -1982 支持多种工作模式 -2143 需求、bug、用例增加批量修改所属分支的功能 -2164 文档库增加排序功能 -2207 创建产品的时候多平台多分支增加说明 -2239 项目关联需求的时候将需求的研发阶段也列出来 -2240 备份的时候将禅道的代码目录也备份下来 -2241 文档视图中的产品和项目文档库中的权限控制增加团队成员允许访问的功能 -2246 批量添加需求时在需求标题后面增加复制按钮 -2247 文档库中的附件库增加搜索功能 -2253 批量执行用例界面把前置条件显示出来 -2254 将每日邮件通知里面的s去掉 -2260 每日提醒的邮件发送时间调整下 -2261 调整各个列表页面的表头的对齐方式。 -2262 发信设置里面的发信域名改为禅道域名。 -2265 分支或者平台下面的模块应该列出有需求的公共模块 -2266 公共用例库增加导入和批量添加的功能 -2267 公共用例库增加重名判断,用例库名称增加必填项标识,用例库图标和产品图标做区别。 -2271 优化下数据库检查修复页面的排版 -2272 调整测试套件列表页面 -2273 调整测试用例的评审功能 -2274 从公共用例库导入用例时完善模块对照逻辑 -2275 测试总结报告保存按钮上调。 -2276 用例步骤分组重新调整。 -2277 Bug导为任务时需要处理截止日期 -2278 任务列表的批量操作增加取消。 -2279 燃尽图修改首天工时时将那一天的剩余工时也修改了 -2280 cron表崩溃之后能够自动修复 -2282 禅道如果和然之集成后,样式做调整 -2283 表单里面一行多个控件必填项的展示需要调整 -2284 维护模块的时候可以从中间插入一个记录 -2285 测试报告中相应列表页面增加链接 -2286 项目导入bug的时候,将解决方案等于延期的也列出来 -2287 在详情页面切换产品列表跳转到该产品的需求列表页面 -2288 禅道多图上传可以直接用多图上传的插件。 -2290 禅道迁移目录之后,model临时文件能够自动重新生成。 -2291 计划关联需求时,需求可以弹窗查看。 -2292 升级windows一键安装包 +1883 windows一键安装包提示安装vC环境改为可选 +1982 支持多种工作模式 +2143 需求、bug、用例增加批量修改所属分支的功能 +2164 文档库增加排序功能 +2207 创建产品的时候多平台多分支增加说明 +2239 项目关联需求的时候将需求的研发阶段也列出来 +2240 备份的时候将禅道的代码目录也备份下来 +2241 文档视图中的产品和项目文档库中的权限控制增加团队成员允许访问的功能 +2246 批量添加需求时在需求标题后面增加复制按钮 +2247 文档库中的附件库增加搜索功能 +2253 批量执行用例界面把前置条件显示出来 +2254 将每日邮件通知里面的s去掉 +2260 每日提醒的邮件发送时间调整下 +2261 调整各个列表页面的表头的对齐方式。 +2262 发信设置里面的发信域名改为禅道域名。 +2265 分支或者平台下面的模块应该列出有需求的公共模块 +2266 公共用例库增加导入和批量添加的功能 +2267 公共用例库增加重名判断,用例库名称增加必填项标识,用例库图标和产品图标做区别。 +2271 优化下数据库检查修复页面的排版 +2272 调整测试套件列表页面 +2273 调整测试用例的评审功能 +2274 从公共用例库导入用例时完善模块对照逻辑 +2275 测试总结报告保存按钮上调。 +2276 用例步骤分组重新调整。 +2277 Bug导为任务时需要处理截止日期 +2278 任务列表的批量操作增加取消。 +2279 燃尽图修改首天工时时将那一天的剩余工时也修改了 +2280 cron表崩溃之后能够自动修复 +2282 禅道如果和然之集成后,样式做调整 +2283 表单里面一行多个控件必填项的展示需要调整 +2284 维护模块的时候可以从中间插入一个记录 +2285 测试报告中相应列表页面增加链接 +2286 项目导入bug的时候,将解决方案等于延期的也列出来 +2287 在详情页面切换产品列表跳转到该产品的需求列表页面 +2288 禅道多图上传可以直接用多图上传的插件。 +2290 禅道迁移目录之后,model临时文件能够自动重新生成。 +2291 计划关联需求时,需求可以弹窗查看。 +2292 升级windows一键安装包 2293 升级linux一键安装包 修复的Bug 1086 测试-版本生成报告页面切换分支报错 @@ -1070,61 +1299,61 @@ 2017-03-23 9.1.stable 完成的需求 -104 test suite管理 -336 测试用例增加评审功能 -845 实现公用测试用例功能 -1729 实现导入公共测试用例的导入功能 -1730 实现测试总结报告功能 -1755 用例管理增加批量操作 -1853 测试-用例 按照需求分组查看增加导出数据功能的支持 -1876 增加测试用例步骤的失败率 -1877 测试用例步骤增加分组管理 -1882 版本用例关联增加可以直接关联上一个版本未执行的用例的功能 -1903 项目需求列表增加TBC显示 -1907 编辑用例的时候,添加追加的按钮换行了。 -1908 调整测试版本列表里面的项目和版本信息 -1909 调整测试版本操作菜单的交互 -1910 按照需求关联用例检索会吧没有关联需求的也列出。 -1911 用例批量执行的时候失败后无法输入内容。 -1954 测试报告可以上传附件功能 -1956 测试-用例页面增加批量确认需求变更功能 -2005 Bug增加截止日期字段 -2037 测试用例关联需求时候关闭需求也列出 -2077 测试-版本 把待测和进行中的版本分类显示 -2124 用例的详情页面可以增加全屏显示按钮 -2125 用例执行的时候可以将页面再宽一些,尽量增加用例执行的面积 -2126 用例详情页面步骤,可以开展将fieldset外层的边框去掉。 -2180 禅道客户端登录失败的时候,把返回的数据暴露出来。 -2186 桌面工具增加对https协议的支持 -2189 测试用例结果失败的都增加转bug的按钮。 -2190 没有步骤的用例在执行的时候应该可以写实际结果。 -2191 在代码里面直接设置max_post_vars,避免批量添加,导入失效的问题。 -2192 测试版本关联用例复制功能。 -2193 bug统计报表增加优先级选择。 -2196 用例执行的时候,增加提bug的按钮 -2197 用例结果展示增加测试版本的信息 -2202 bug自定义模板的删除增加确认按钮 -2226 禅道里面的trunk 中文下面改为主干 -2227 待办如果没有指派给自己的任务的话,给用户提示。 -2228 事务类型的任务如果没有设置指派给字段也可以创建任务 -2229 打开计划任务的确认链接设置更加清楚。 -2230 可以设置首页的区块是否全部关闭。 -2231 产品和项目的下拉菜单增加汉语拼音检索功能。 -2237 区块可以设置高度、排序 -2238 导出需求 任务 bug 用例的时候增加分支/平台字段 +104 test suite管理 +336 测试用例增加评审功能 +845 实现公用测试用例功能 +1729 实现导入公共测试用例的导入功能 +1730 实现测试总结报告功能 +1755 用例管理增加批量操作 +1853 测试-用例 按照需求分组查看增加导出数据功能的支持 +1876 增加测试用例步骤的失败率 +1877 测试用例步骤增加分组管理 +1882 版本用例关联增加可以直接关联上一个版本未执行的用例的功能 +1903 项目需求列表增加TBC显示 +1907 编辑用例的时候,添加追加的按钮换行了。 +1908 调整测试版本列表里面的项目和版本信息 +1909 调整测试版本操作菜单的交互 +1910 按照需求关联用例检索会吧没有关联需求的也列出。 +1911 用例批量执行的时候失败后无法输入内容。 +1954 测试报告可以上传附件功能 +1956 测试-用例页面增加批量确认需求变更功能 +2005 Bug增加截止日期字段 +2037 测试用例关联需求时候关闭需求也列出 +2077 测试-版本 把待测和进行中的版本分类显示 +2124 用例的详情页面可以增加全屏显示按钮 +2125 用例执行的时候可以将页面再宽一些,尽量增加用例执行的面积 +2126 用例详情页面步骤,可以开展将fieldset外层的边框去掉。 +2180 禅道客户端登录失败的时候,把返回的数据暴露出来。 +2186 桌面工具增加对https协议的支持 +2189 测试用例结果失败的都增加转bug的按钮。 +2190 没有步骤的用例在执行的时候应该可以写实际结果。 +2191 在代码里面直接设置max_post_vars,避免批量添加,导入失效的问题。 +2192 测试版本关联用例复制功能。 +2193 bug统计报表增加优先级选择。 +2196 用例执行的时候,增加提bug的按钮 +2197 用例结果展示增加测试版本的信息 +2202 bug自定义模板的删除增加确认按钮 +2226 禅道里面的trunk 中文下面改为主干 +2227 待办如果没有指派给自己的任务的话,给用户提示。 +2228 事务类型的任务如果没有设置指派给字段也可以创建任务 +2229 打开计划任务的确认链接设置更加清楚。 +2230 可以设置首页的区块是否全部关闭。 +2231 产品和项目的下拉菜单增加汉语拼音检索功能。 +2237 区块可以设置高度、排序 +2238 导出需求 任务 bug 用例的时候增加分支/平台字段 修复的Bug -1016 bug按照创建人搜索不显示数据 -1019 提交bug页面显示框不全 -1022 php5.2版本上无法执行后台-计划任务 -1023 我的地盘需求排序后点击需求名称报错 -1025 项目-bug搜索不能正常显示日期选择框 -1029 项目-bug页面搜索可以搜索出已经删除的bug -1030 用例搜索后用例相关的BRS都为0 -1031 统计中会列出没有权限的报表名称 -1034 项目搜索包含减号跳转链接错误 -1035 用例文件导入会默认关联需求的第一个版本 -1036 guest帐号登录禅道无法编辑删除区块 -1037 后台-发信 测试发信会把删除的帐号都列出 +1016 bug按照创建人搜索不显示数据 +1019 提交bug页面显示框不全 +1022 php5.2版本上无法执行后台-计划任务 +1023 我的地盘需求排序后点击需求名称报错 +1025 项目-bug搜索不能正常显示日期选择框 +1029 项目-bug页面搜索可以搜索出已经删除的bug +1030 用例搜索后用例相关的BRS都为0 +1031 统计中会列出没有权限的报表名称 +1034 项目搜索包含减号跳转链接错误 +1035 用例文件导入会默认关联需求的第一个版本 +1036 guest帐号登录禅道无法编辑删除区块 +1037 后台-发信 测试发信会把删除的帐号都列出 2017-02-15 9.0.1 完成的需求 diff --git a/framework/base/control.class.php b/framework/base/control.class.php index e1d1bd2519..51e4e287e3 100644 --- a/framework/base/control.class.php +++ b/framework/base/control.class.php @@ -740,7 +740,7 @@ class baseControl */ if(!is_file($file2Included)) $this->app->triggerError("The control file $file2Included not found", __FILE__, __LINE__, $exit = true); chdir(dirname($file2Included)); - if($moduleName != $this->moduleName) helper::import($file2Included); + helper::import($file2Included); /** * 设置调用的类名。 diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 6298796383..5e083621ed 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -825,7 +825,7 @@ class baseRouter session_start(); $this->sessionID = session_id(); - if(isset($_GET[$this->config->sessionVar]) and $this->sessionID != $_GET[$this->config->sessionVar]) helper::restartSession($_GET[$this->config->sessionVar]); + if(isset($_GET[$this->config->sessionVar])) helper::restartSession($_GET[$this->config->sessionVar]); define('SESSION_STARTED', true); } @@ -1528,7 +1528,7 @@ class baseRouter { $code = trim(file_get_contents($fileName)); if(strpos($code, '') !== false) $code = rtrim($code, '?>'); + if(strrpos($code, '?' . '>') !== false) $code = rtrim($code, '?' . '>'); return trim($code); } @@ -1631,7 +1631,7 @@ class baseRouter **/ $file2Included = $this->setActionExtFile() ? $this->extActionFile : $this->controlFile; chdir(dirname($file2Included)); - include $file2Included; + helper::import($file2Included); /* * 设置control的类名。 @@ -2264,7 +2264,8 @@ class baseRouter * 为了安全起见,对公网环境隐藏脚本路径。 * If the ip is pulic, hidden the full path of scripts. */ - if(!defined('IN_SHELL') and !($this->server->remote_addr == '127.0.0.1' or filter_var($this->server->remote_addr, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === false)) + $remoteIP = helper::getRemoteIp(); + if(!defined('IN_SHELL') and !($remoteIP == '127.0.0.1' or filter_var($remoteIP, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE) === false)) { $errorLog = str_replace($this->getBasePath(), '', $errorLog); } diff --git a/framework/control.class.php b/framework/control.class.php index f7b7adf73f..7d90e848c1 100644 --- a/framework/control.class.php +++ b/framework/control.class.php @@ -58,7 +58,18 @@ class control extends baseControl $viewFile = file_exists($commonExtViewFile) ? $commonExtViewFile : $mainViewFile; $viewFile = (!empty($siteExtViewFile) and file_exists($siteExtViewFile)) ? $siteExtViewFile : $viewFile; - if(!is_file($viewFile)) $this->app->triggerError("the view file $viewFile not found", __FILE__, __LINE__, $exit = true); + if(!is_file($viewFile)) + { + if($this->config->debug === false) + { + die(js::locate($this->createLink('misc','ajaxerror', ".mhtml"), 'parent')); + } + else + { + $this->app->triggerError("the view file $viewFile not found", __FILE__, __LINE__, $exit = true); + } + + } $commonExtHookFiles = glob($viewExtPath['common'] . $this->devicePrefix . $methodName . ".*.{$viewType}.hook.php"); $siteExtHookFiles = empty($viewExtPath['site']) ? '' : glob($viewExtPath['site'] . $this->devicePrefix . $methodName . ".*.{$viewType}.hook.php"); diff --git a/framework/router.class.php b/framework/router.class.php index b74367ae70..39b2d94fdc 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -68,6 +68,7 @@ class router extends baseRouter } $productCommon = $projectCommon = 0; + if(!empty($this->config->isINT)) $projectCommon = 1; if($productProject) { $productProject = $productProject->value; diff --git a/lib/base/front/front.class.php b/lib/base/front/front.class.php index a3c1629753..6fbe58ac12 100644 --- a/lib/base/front/front.class.php +++ b/lib/base/front/front.class.php @@ -980,7 +980,15 @@ EOT; static public function reload($window = 'self') { $js = self::start(); - $js .= "$window.location.reload(true);\n"; + // See bug #2379 http://pms.zentao.net/bug-view-2379.html + if($window !== 'self' && $window !== 'window') + { + $js .= "if($window !== window) $window.location.reload(true);\n"; + } + else + { + $js .= "$window.location.reload(true);\n"; + } $js .= self::end(); return $js; } diff --git a/lib/front/front.class.php b/lib/front/front.class.php index 91641384f4..04ed5837b8 100644 --- a/lib/front/front.class.php +++ b/lib/front/front.class.php @@ -39,6 +39,26 @@ class html extends baseHTML return parent::a($href, $title, $misc, $newline); } + /** + * 生成input输入标签。 + * Create tags like "" + * + * @param string $name the name of the text input tag. + * @param string $value the default value. + * @param string $attrib other attribs. + * @static + * @access public + * @return string + */ + static public function input($name, $value = "", $attrib = "", $autocomplete = false) + { + $id = "id='$name'"; + if(strpos($attrib, 'id=') !== false) $id = ''; + $value = str_replace("'", ''', $value); + $autocomplete = $autocomplete ? 'autocomplete="on"' : 'autocomplete="off"'; + return "\n"; + } + /** * 生成多选按钮。 * Create tags like "" diff --git a/lib/pclzip/pclzip.class.php b/lib/pclzip/pclzip.class.php index 2d0e71e7a7..8c8614982f 100644 --- a/lib/pclzip/pclzip.class.php +++ b/lib/pclzip/pclzip.class.php @@ -1836,7 +1836,8 @@ $v_memory_limit = ini_get('memory_limit'); $v_memory_limit = trim($v_memory_limit); $last = strtolower(substr($v_memory_limit, -1)); - + + $v_memory_limit = (int)$v_memory_limit; if($last == 'g') //$v_memory_limit = $v_memory_limit*1024*1024*1024; $v_memory_limit = $v_memory_limit*1073741824; diff --git a/lib/purifier/HTMLPurifier.autoload.php b/lib/purifier/HTMLPurifier.autoload.php index 63193c3ee7..c3995b91f0 100644 --- a/lib/purifier/HTMLPurifier.autoload.php +++ b/lib/purifier/HTMLPurifier.autoload.php @@ -9,12 +9,12 @@ if (function_exists('spl_autoload_register') && function_exists('spl_autoload_unregister')) { // We need unregister for our pre-registering functionality HTMLPurifier_Bootstrap::registerAutoload(); - if (function_exists('__autoload')) { + if (function_exists('purifierAutoload')) { // Be polite and ensure that userland autoload gets retained - spl_autoload_register('__autoload'); + spl_autoload_register('purifierAutoload'); } -} elseif (!function_exists('__autoload')) { - function __autoload($class) +} elseif (!function_exists('purifierAutoload')) { + function purifierAutoload($class) { return HTMLPurifier_Bootstrap::autoload($class); } diff --git a/module/action/lang/en.php b/module/action/lang/en.php index a7ae258a96..85eab81095 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -153,7 +153,7 @@ $lang->action->label->blocked = 'blocked '; $lang->action->label->resolved = 'resolved '; $lang->action->label->reviewed = 'reviewed '; $lang->action->label->moved = 'moved '; -$lang->action->label->confirmed = 'Confirm Story'; +$lang->action->label->confirmed = 'Confirmed Story'; $lang->action->label->bugconfirmed = 'Confirmed'; $lang->action->label->tostory = 'Convert to Story'; $lang->action->label->frombug = 'Converted from Bug'; @@ -170,14 +170,14 @@ $lang->action->label->unlinkedfromproject = "Unlink {$lang->projectCommon}"; $lang->action->label->unlinkedfrombuild = "Unlink Build"; $lang->action->label->linked2release = "Link Release"; $lang->action->label->unlinkedfromrelease = "Unlink Release"; -$lang->action->label->linkrelatedbug = "Link to Bug"; -$lang->action->label->unlinkrelatedbug = "Unlink"; -$lang->action->label->linkrelatedcase = "Link to Case"; -$lang->action->label->unlinkrelatedcase = "Unlink"; -$lang->action->label->linkrelatedstory = "Link to Story"; -$lang->action->label->unlinkrelatedstory = "Unlink"; -$lang->action->label->subdividestory = "Decompose Story"; -$lang->action->label->unlinkchildstory = "Unlink"; +$lang->action->label->linkrelatedbug = "Linked Bug"; +$lang->action->label->unlinkrelatedbug = "Unlinked Bug"; +$lang->action->label->linkrelatedcase = "Linked Case"; +$lang->action->label->unlinkrelatedcase = "Unlinked Case"; +$lang->action->label->linkrelatedstory = "Linked Story"; +$lang->action->label->unlinkrelatedstory = "Unlinked Story"; +$lang->action->label->subdividestory = "Decomposed Story"; +$lang->action->label->unlinkchildstory = "Unlinked Story"; $lang->action->label->started = 'started '; $lang->action->label->restarted = 'continued '; $lang->action->label->recordestimate = 'recorded '; diff --git a/module/action/model.php b/module/action/model.php index 5a67dbab75..353c5adae1 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -342,6 +342,12 @@ class actionModel extends model } } } + elseif(($actionName == 'opened' or $actionName == 'managed') and $objectType == 'project') + { + $linkedProducts = $this->dao->select('id,name')->from(TABLE_PRODUCT)->where('id')->in($action->extra)->fetchPairs('id', 'name'); + $action->extra = ''; + if($linkedProducts) $action->extra = sprintf($this->lang->project->action->extra, '' . join(', ', $linkedProducts) . ''); + } $action->history = isset($histories[$actionID]) ? $histories[$actionID] : array(); $actionName = strtolower($action->action); @@ -750,7 +756,7 @@ class actionModel extends model } $objectNames['user'][0] = 'guest'; // Add guest account. - foreach($actions as $action) + foreach($actions as $i => $action) { /* Add name field to the actions. */ $action->objectName = isset($objectNames[$action->objectType][$action->objectID]) ? $objectNames[$action->objectType][$action->objectID] : ''; @@ -779,11 +785,14 @@ class actionModel extends model { list($objectLabel, $moduleName, $methodName, $vars) = explode('|', $action->objectLabel); $action->objectLink = ''; - if(common::hasPriv($moduleName, $methodName)) + if(!common::hasPriv($moduleName, $methodName)) { - $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID)); - if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->actor)); + unset($actions[$i]); + continue; } + + $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID)); + if($action->objectType == 'user') $action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->actor)); $action->objectLabel = $objectLabel; } else diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index 16b538df69..a99c8e2274 100644 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -14,7 +14,7 @@ $lang->admin->index = 'Admin Home'; $lang->admin->checkDB = 'Check Database'; $lang->admin->sso = 'Zdoo'; $lang->admin->safeIndex = 'Security'; -$lang->admin->checkWeak = 'Weak Password Check'; +$lang->admin->checkWeak = 'Check Weak Password'; $lang->admin->certifyMobile = 'Verify your cellphone'; $lang->admin->certifyEmail = 'Verify your Email'; $lang->admin->ztCompany = 'Verify your company'; @@ -24,13 +24,13 @@ $lang->admin->getCaptcha = 'Get Verification Code'; $lang->admin->api = 'API'; $lang->admin->log = 'Log'; $lang->admin->setting = 'Setting'; -$lang->admin->days = 'Valid Days'; +$lang->admin->days = 'Valid Day'; $lang->admin->info = new stdclass(); $lang->admin->info->version = 'Current Version is %s. '; $lang->admin->info->links = 'You can visit links below'; $lang->admin->info->account = 'Your ZenTao account is %s.'; -$lang->admin->info->log = 'Log that is beyond valid days will be deleted and it has to run cron.'; +$lang->admin->info->log = 'Log that exceeds valid days will be deleted and you have to run cron.'; $lang->admin->notice = new stdclass(); $lang->admin->notice->register = "Note: You haven't registered in ZenTao(www.zentao.pm). %s then get the Latest ZenTao Upgrades and News."; @@ -45,8 +45,13 @@ $lang->admin->register->common = 'Bind Account'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f $lang->admin->register->caption = 'Register in Zentao Community'; $lang->admin->register->click = 'Register here'; +<<<<<<< HEAD $lang->admin->register->lblAccount = 'at least 3 characters; contains letters and numbers.'; $lang->admin->register->lblPasswd = 'at least 6 characters; contains letters and numbers.'; +======= +$lang->admin->register->lblAccount = '>= 3 characters; contains letters and numbers.'; +$lang->admin->register->lblPasswd = '>= 6 characters; contains letters and numbers.'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->admin->register->submit = 'Register'; $lang->admin->register->bind = "Bind Exsit Account"; $lang->admin->register->success = "You have registered with us!"; @@ -57,20 +62,20 @@ $lang->admin->bind->success = "Account is linked!"; $lang->admin->safe = new stdclass(); $lang->admin->safe->common = 'Security Policy'; -$lang->admin->safe->set = 'Password Strength'; -$lang->admin->safe->password = 'Password Strength'; +$lang->admin->safe->set = 'Strong Password'; +$lang->admin->safe->password = 'Strong Password'; $lang->admin->safe->weak = 'Weak Password'; $lang->admin->safe->reason = 'Type'; $lang->admin->safe->checkWeak = 'Weak Password'; -$lang->admin->safe->changeWeak = 'Your password is weak. Change it.'; -$lang->admin->safe->modifyPasswordFirstLogin = 'Change password after first login'; +$lang->admin->safe->changeWeak = 'Require to change weak password'; +$lang->admin->safe->modifyPasswordFirstLogin = 'Require to change password after first login'; $lang->admin->safe->modeList[0] = 'N/A'; $lang->admin->safe->modeList[1] = 'Medium'; $lang->admin->safe->modeList[2] = 'Strong'; -$lang->admin->safe->modeRuleList[1] = 'Contains upper and lower case, numbers. Length >= 6'; -$lang->admin->safe->modeRuleList[2] = 'Contains upper and lower case, numbers and special characters. Length >= 10.'; +$lang->admin->safe->modeRuleList[1] = ' upper and lower case, numbers. Length >= 6'; +$lang->admin->safe->modeRuleList[2] = ' upper and lower case, numbers and special characters. Length >= 10.'; $lang->admin->safe->reasonList['weak'] = 'Common Weak Password'; $lang->admin->safe->reasonList['account'] = 'Same as your account'; @@ -81,5 +86,5 @@ $lang->admin->safe->reasonList['birthday'] = 'Same as your DOB'; $lang->admin->safe->modifyPasswordList[1] = 'Yes'; $lang->admin->safe->modifyPasswordList[0] = 'No'; -$lang->admin->safe->noticeMode = 'Password will be checked when login, add and edit user.'; +$lang->admin->safe->noticeMode = 'Password will be checked when Login, Add and Edit user.'; $lang->admin->safe->noticeStrong = ''; diff --git a/module/admin/view/bind.html.php b/module/admin/view/bind.html.php index 65b264cde1..57d9c23fa4 100644 --- a/module/admin/view/bind.html.php +++ b/module/admin/view/bind.html.php @@ -27,7 +27,7 @@ $account = zget($config->global, 'community', ''); if($account == 'na') $account = ''; ?> - + user->password;?> diff --git a/module/admin/view/certifyztemail.html.php b/module/admin/view/certifyztemail.html.php index 6f4ddf0cc3..a7a92c696a 100644 --- a/module/admin/view/certifyztemail.html.php +++ b/module/admin/view/certifyztemail.html.php @@ -20,12 +20,12 @@ - + - + diff --git a/module/admin/view/certifyztmobile.html.php b/module/admin/view/certifyztmobile.html.php index bfb96d57b0..b4f6de971c 100644 --- a/module/admin/view/certifyztmobile.html.php +++ b/module/admin/view/certifyztmobile.html.php @@ -20,12 +20,12 @@
user->email;?> admin->getCaptcha, '', "id='codeSender' class='btn'");?>
admin->captcha;?>
- + - + diff --git a/module/admin/view/register.html.php b/module/admin/view/register.html.php index 5e0a6f1013..0162a4e398 100644 --- a/module/admin/view/register.html.php +++ b/module/admin/view/register.html.php @@ -31,40 +31,42 @@ - + - + + isINT)):?> + @@ -102,7 +104,7 @@ $account = zget($config->global, 'community', ''); if($account == 'na') $account = ''; ?> - + diff --git a/module/admin/view/sso.html.php b/module/admin/view/sso.html.php index 7e7cfa0950..54cbd57a41 100644 --- a/module/admin/view/sso.html.php +++ b/module/admin/view/sso.html.php @@ -33,15 +33,15 @@ - + - + - + - + diff --git a/module/api/view/debug.html.php b/module/api/view/debug.html.php index a0c2a7f61a..0ee3e80584 100644 --- a/module/api/view/debug.html.php +++ b/module/api/view/debug.html.php @@ -20,7 +20,7 @@ parameters as $param):?> - + diff --git a/module/backup/control.php b/module/backup/control.php index b56fd98267..0983b9b572 100644 --- a/module/backup/control.php +++ b/module/backup/control.php @@ -30,6 +30,7 @@ class backup extends control { if(!is_writable($this->backupPath)) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->backupPath); } + if(!is_writable($this->app->getTmpRoot())) $this->view->error = sprintf($this->lang->backup->error->noWritable, $this->app->getTmpRoot()); } /** @@ -81,7 +82,7 @@ class backup extends control public function backup($reload = 'no') { if($reload == 'yes') session_write_close(); - set_time_limit(7200); + set_time_limit(0); $nozip = strpos($this->config->backup->setting, 'nozip') !== false; $nofile = strpos($this->config->backup->setting, 'nofile') !== false; $nosafe = strpos($this->config->backup->setting, 'nosafe') !== false; @@ -147,7 +148,7 @@ class backup extends control } /* Delete expired backup. */ - $backupFiles = glob("{$this->backupPath}*.php"); + $backupFiles = glob("{$this->backupPath}*.*"); if(!empty($backupFiles)) { $time = time(); @@ -179,7 +180,7 @@ class backup extends control { if($confirm == 'no') $this->send(array('result' => 'fail', 'message' => $this->lang->backup->confirmRestore)); - set_time_limit(7200); + set_time_limit(0); /* Restore database. */ if(file_exists("{$this->backupPath}{$fileName}.sql.php")) @@ -331,6 +332,10 @@ class backup extends control if(strtolower($this->server->request_method) == "post") { $data = fixer::input('post')->join('setting', ',')->get(); + + /*save change*/ + if(isset($data->holdDays)) $this->loadModel('setting')->setItem('system.backup.holdDays', $data->holdDays); + $setting = ''; if(isset($data->setting)) $setting = $data->setting; $this->loadModel('setting')->setItem('system.backup.setting', $setting); @@ -373,24 +378,21 @@ class backup extends control if($sqlFileName) { $fileSize = $this->backup->getBackupSize($sqlFileName); - $fileSize = $fileSize / 1024 >= 1024 ? round($fileSize / 1024 / 1024, 2) . 'MB' : round($fileSize / 1024, 2) . 'KB'; - $message = sprintf($this->lang->backup->progressSQL, $fileSize); + $message = sprintf($this->lang->backup->progressSQL, $this->backup->processFileSize($fileSize)); } $attachFileName = $this->backup->getBackupFile($fileName, 'file'); if($attachFileName) { $fileSize = $this->backup->getBackupSize($attachFileName); - $fileSize = $fileSize / 1024 >= 1024 ? round($fileSize / 1024 / 1024, 2) . 'MB' : round($fileSize / 1024, 2) . 'KB'; - $message = sprintf($this->lang->backup->progressAttach, $fileSize); + $message = sprintf($this->lang->backup->progressAttach, $this->backup->processFileSize($fileSize)); } $codeFileName = $this->backup->getBackupFile($fileName, 'code'); if($codeFileName) { $fileSize = $this->backup->getBackupSize($codeFileName); - $fileSize = $fileSize / 1024 >= 1024 ? round($fileSize / 1024 / 1024, 2) . 'MB' : round($fileSize / 1024, 2) . 'KB'; - $message = sprintf($this->lang->backup->progressCode, $fileSize); + $message = sprintf($this->lang->backup->progressCode, $this->backup->processFileSize($fileSize)); } die($message); } diff --git a/module/backup/lang/en.php b/module/backup/lang/en.php index dbde84dbd3..67e71a4aa5 100644 --- a/module/backup/lang/en.php +++ b/module/backup/lang/en.php @@ -3,7 +3,7 @@ $lang->backup->common = 'Backup'; $lang->backup->index = 'Home'; $lang->backup->history = 'History'; $lang->backup->delete = 'Delete'; -$lang->backup->backup = 'Backup'; +$lang->backup->backup = 'Start backup'; $lang->backup->restore = 'Restore'; $lang->backup->change = 'Modify expiration'; $lang->backup->changeAB = 'Modify'; diff --git a/module/backup/lang/zh-cn.php b/module/backup/lang/zh-cn.php index b72ad3e552..77147c506a 100644 --- a/module/backup/lang/zh-cn.php +++ b/module/backup/lang/zh-cn.php @@ -3,9 +3,9 @@ $lang->backup->common = '备份'; $lang->backup->index = '备份首页'; $lang->backup->history = '备份历史'; $lang->backup->delete = '删除备份'; -$lang->backup->backup = '备份'; +$lang->backup->backup = '开始备份'; $lang->backup->restore = '还原'; -$lang->backup->change = '修改保留时间'; +$lang->backup->change = '保留时间'; $lang->backup->changeAB = '修改'; $lang->backup->rmPHPHeader = '去除安全设置'; diff --git a/module/backup/lang/zh-tw.php b/module/backup/lang/zh-tw.php index cfaa4ea74d..7c06761672 100644 --- a/module/backup/lang/zh-tw.php +++ b/module/backup/lang/zh-tw.php @@ -3,9 +3,9 @@ $lang->backup->common = '備份'; $lang->backup->index = '備份首頁'; $lang->backup->history = '備份歷史'; $lang->backup->delete = '刪除備份'; -$lang->backup->backup = '備份'; +$lang->backup->backup = '開始備份'; $lang->backup->restore = '還原'; -$lang->backup->change = '修改保留時間'; +$lang->backup->change = '保留時間'; $lang->backup->changeAB = '修改'; $lang->backup->rmPHPHeader = '去除安全設置'; diff --git a/module/backup/model.php b/module/backup/model.php index 25555b8c87..f275209f1c 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -283,7 +283,8 @@ class backupModel extends model */ public function getBackupPath() { - return empty($this->config->backup->settingDir) ? $this->app->getTmpRoot() . 'backup' . DS : $this->config->backup->settingDir; + $backupPath = empty($this->config->backup->settingDir) ? $this->app->getTmpRoot() . 'backup' . DS : $this->config->backup->settingDir; + return rtrim(str_replace('\\', '/', $backupPath), '/') . '/'; } /** @@ -311,4 +312,29 @@ class backupModel extends model return false; } + + /** + * Process filesize. + * + * @param int $fileSize + * @access public + * @return string + */ + public function processFileSize($fileSize) + { + $bit = 'KB'; + $fileSize = round($fileSize / 1024, 2); + if($fileSize >= 1024) + { + $bit = 'MB'; + $fileSize = round($fileSize / 1024, 2); + } + if($fileSize >= 1024) + { + $bit = 'GB'; + $fileSize = round($fileSize / 1024, 2); + } + + return $fileSize . $bit; + } } diff --git a/module/backup/view/change.html.php b/module/backup/view/change.html.php deleted file mode 100644 index 07d352dddc..0000000000 --- a/module/backup/view/change.html.php +++ /dev/null @@ -1,33 +0,0 @@ - - * @package backup - * @version $Id$ - * @link http://www.zentao.net - */ -?> - -
-
-

backup->change;?>

-
-
-
user->mobile;?> admin->getCaptcha, '', "id='codeSender' class='btn'");?>
admin->captcha;?>
user->account;?>
- admin->register->lblAccount}' autocomplete='off'");?> + admin->register->lblAccount}'");?>
user->realname;?>
user->company;?>
company, "class='form-control' autocomplete='off'");?>
company, "class='form-control'");?>
user->mobile;?>
- + admin->getCaptcha, '', "id='mobileSender' class='btn'")?> admin->captcha?> - +
user->email;?>
- email, "class='form-control' autocomplete='off'");?> + email, "class='form-control'");?> admin->getCaptcha, '', "id='mailSender' class='btn'")?> admin->captcha?> - +
user->password;?>
sso->addr; ?>sso->addrNotice}' autocomplete='off'");?>sso->addrNotice}'");?>
sso->code; ?>
sso->key; ?>
diff --git a/module/admin/view/ztcompany.html.php b/module/admin/view/ztcompany.html.php index 8b4fda9dc9..9cd5285164 100644 --- a/module/admin/view/ztcompany.html.php +++ b/module/admin/view/ztcompany.html.php @@ -21,7 +21,7 @@
company->name : $lang->user->$field;?>
name?>name", $param->isOptional() ? $param->getDefaultValue() : '', "class='form-control' autocomplete='off'")?>name", $param->isOptional() ? $param->getDefaultValue() : '', "class='form-control'")?>
- - - - -
-
- backup->holdDays, "class='form-control' autocomplete='off'");?> - day;?> -
-
- - - - diff --git a/module/backup/view/index.html.php b/module/backup/view/index.html.php index 7796e83f4f..52822ce514 100644 --- a/module/backup/view/index.html.php +++ b/module/backup/view/index.html.php @@ -16,24 +16,18 @@
-

backup->history?> - backup->restoreTip;?>

- backup->holdDays, $config->backup->holdDays)?> - backup->changeAB, '', "class='iframe btn btn-sm btn-info' data-width='300'");?> + " . $lang->backup->setting, '', "data-width='400' class='iframe btn btn-primary'");?> + " . $lang->backup->backup, 'hiddenwin', "class='btn btn-primary backup'");?>
@@ -77,6 +71,12 @@
+

+ + backup->restoreTip;?> + backup->holdDays, $config->backup->holdDays)?> + +

-backup->backup);?> +backup->common);?> backup->rmPHPHeader);?> backup->confirmRestore);?> backup->restore);?> diff --git a/module/backup/view/setting.html.php b/module/backup/view/setting.html.php index 546976258c..148172b1f4 100644 --- a/module/backup/view/setting.html.php +++ b/module/backup/view/setting.html.php @@ -32,6 +32,17 @@ + + + +
+ backup->change;?> + backup->holdDays, "class='form-control'");?> + day;?> +
+ + + diff --git a/module/block/control.php b/module/block/control.php index e93dc75f09..de29e54253 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -249,8 +249,6 @@ class block extends control $block->actionLink = ''; if($block->block == 'overview') { - if($module == 'product' && common::hasPriv('product', 'create')) $block->actionLink = html::a($this->createLink('product', 'create'), " " . $this->lang->product->create, '', "class='btn btn-primary'"); - if($module == 'project' && common::hasPriv('project', 'create')) $block->actionLink = html::a($this->createLink('project', 'create'), " " . $this->lang->project->create, '', "class='btn btn-primary'"); if($module == 'qa' && common::hasPriv('testcase', 'create')) { $this->app->loadLang('testcase'); @@ -898,10 +896,10 @@ class block extends control /* Get tasks. */ $yesterday = date('Y-m-d', strtotime('-1 day')); - $tasks = $this->dao->select("project, count(id) as totalTasks, count(status in ('wait','doing','pause') or null) as undoneTasks, count(finishedDate like '{$yesterday}%' or null) as yesterdayFinished, sum(if(status != 'cancel', estimate, 0)) as totalEstimate, sum(consumed) as totalConsumed, sum(if(status != 'cancel', `left`, 0)) as totalLeft")->from(TABLE_TASK) + $tasks = $this->dao->select("project, count(id) as totalTasks, count(status in ('wait','doing','pause') or null) as undoneTasks, count(finishedDate like '{$yesterday}%' or null) as yesterdayFinished, sum(if(status != 'cancel', estimate, 0)) as totalEstimate, sum(consumed) as totalConsumed, sum(if(status != 'cancel' and status != 'closed', `left`, 0)) as totalLeft")->from(TABLE_TASK) ->where('project')->in($projectIdList) ->andWhere('deleted')->eq(0) - ->andWhere('parent')->lt(1) + ->andWhere('parent')->ge(0) ->groupBy('project') ->fetchAll('project'); foreach($tasks as $projectID => $task) diff --git a/module/block/js/dashboard.js b/module/block/js/dashboard.js index a70869e1e3..f7bd58480b 100644 --- a/module/block/js/dashboard.js +++ b/module/block/js/dashboard.js @@ -18,7 +18,7 @@ function deleteBlock(index) } else { - $('#block' + index).remove(); + window.location.reload(true); } }); } diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 504fde23e8..116b81f02b 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -15,7 +15,7 @@ $lang->block->name = 'Name'; $lang->block->style = 'Style'; $lang->block->grid = 'Grid'; $lang->block->color = 'Color'; -$lang->block->reset = 'Restore the default'; +$lang->block->reset = 'Reset'; $lang->block->account = 'Account'; $lang->block->module = 'Module'; @@ -31,19 +31,19 @@ $lang->block->lblBlock = 'Block'; $lang->block->lblNum = 'Number'; $lang->block->lblHtml = 'HTML'; $lang->block->dynamic = 'Dynamic'; -$lang->block->assignToMe = 'Assign To Me'; +$lang->block->assignToMe = 'AssignToMe'; $lang->block->lblFlowchart = 'Workflow'; $lang->block->welcome = 'Welcome'; -$lang->block->lblTesttask = 'Show test task'; +$lang->block->lblTesttask = 'Show Test Details'; -$lang->block->leftToday = 'Works for Today'; +$lang->block->leftToday = 'Work for Today'; $lang->block->myTask = 'My Task'; $lang->block->myStory = 'My Story'; $lang->block->myBug = 'My Bug'; $lang->block->myProject = 'My ' . $lang->projectCommon; $lang->block->myProduct = 'My ' . $lang->productCommon; $lang->block->delayed = 'Delayed'; -$lang->block->noData = 'There is no data in this type of reports.'; +$lang->block->noData = 'No data in this type of reports.'; $lang->block->emptyTip = 'No Information'; $lang->block->params = new stdclass(); @@ -53,9 +53,9 @@ $lang->block->params->value = 'Value'; $lang->block->createBlock = 'Add Block'; $lang->block->editBlock = 'Edit'; $lang->block->ordersSaved = 'Order is saved.'; -$lang->block->confirmRemoveBlock = 'Do you want to remove Block?'; -$lang->block->noticeNewBlock = 'ZenTao 10.+ has a new layout for each view. Do you want to start the new view?'; -$lang->block->confirmReset = 'Whether to restore the default'; +$lang->block->confirmRemoveBlock = 'Do you want to remove the Block?'; +$lang->block->noticeNewBlock = 'ZenTao 10.+ has a new layout. Do you want to start the new layout?'; +$lang->block->confirmReset = 'Restore'; $lang->block->closeForever = 'Permanent Close'; $lang->block->confirmClose = 'Do you want to permanently close this block? Once done, it is not available to anyone. It can be activiated at Admin->Custom.'; $lang->block->remove = 'Remove'; @@ -108,7 +108,7 @@ $lang->block->default['project']['3']['params']['num'] = 15; $lang->block->default['project']['3']['params']['orderBy'] = 'id_desc'; $lang->block->default['project']['3']['params']['type'] = 'undone'; -$lang->block->default['project']['4']['title'] = 'My Tasks'; +$lang->block->default['project']['4']['title'] = 'My Task'; $lang->block->default['project']['4']['block'] = 'task'; $lang->block->default['project']['4']['grid'] = 4; @@ -143,7 +143,7 @@ $lang->block->default['qa']['3']['params']['num'] = 15; $lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc'; $lang->block->default['qa']['3']['params']['type'] = 'assigntome'; -$lang->block->default['qa']['4']['title'] = 'Pending Builds'; +$lang->block->default['qa']['4']['title'] = 'Wait Build'; $lang->block->default['qa']['4']['block'] = 'testtask'; $lang->block->default['qa']['4']['grid'] = 4; @@ -243,7 +243,7 @@ $lang->block->availableBlocks->project = $lang->projectCommon . 'List'; $lang->block->availableBlocks->plan = 'Plan'; $lang->block->availableBlocks->release = 'Release'; $lang->block->availableBlocks->build = 'Build'; -$lang->block->availableBlocks->testtask = 'Test Build'; +$lang->block->availableBlocks->testtask = 'Test'; $lang->block->moduleList['product'] = $lang->productCommon; $lang->block->moduleList['project'] = $lang->projectCommon; @@ -271,7 +271,7 @@ $lang->block->modules['qa']->availableBlocks->statistic = 'Test Report'; //$lang->block->modules['qa']->availableBlocks->overview = 'Testcase Overview'; $lang->block->modules['qa']->availableBlocks->bug = 'Bug'; $lang->block->modules['qa']->availableBlocks->case = 'Case'; -$lang->block->modules['qa']->availableBlocks->testtask = 'Test Build'; +$lang->block->modules['qa']->availableBlocks->testtask = 'Build'; $lang->block->modules['todo'] = new stdclass(); $lang->block->modules['todo']->availableBlocks = new stdclass(); $lang->block->modules['todo']->availableBlocks->list = 'Todo'; diff --git a/module/block/model.php b/module/block/model.php index ea26ca8e64..7b40bdd8c9 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -38,6 +38,17 @@ class blockModel extends model ->remove('uid,actionLink,modules,moduleBlock') ->get(); + if($this->post->moduleBlock) + { + $data->source = $this->post->modules; + $data->block = $this->post->moduleBlock; + } + else + { + $data->source = ''; + $data->block = $this->post->modules; + } + if($block) $data->height = $block->height; if($type == 'html') { @@ -157,8 +168,12 @@ class blockModel extends model { $data = array(); - $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); - $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); + $data['tasks'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_TASK)->where('assignedTo')->eq($this->app->user->account)->andWhere('status')->ne('closed')->andWhere('deleted')->eq(0)->fetch('count'); + $data['bugs'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_BUG) + ->where('assignedTo')->eq($this->app->user->account) + ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() //Fix bug #2373. + ->andWhere('deleted')->eq(0) + ->fetch('count'); $data['stories'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->fetch('count'); $data['projects'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT) ->where("(status='wait' or status='doing')") @@ -586,6 +601,7 @@ class blockModel extends model if($blockKey == 'html') $blockPairs[$block] = 'HTML'; if($blockKey == 'flowchart') $blockPairs[$block] = $this->lang->block->lblFlowchart; if($blockKey == 'dynamic') $blockPairs[$block] = $this->lang->block->dynamic; + if($blockKey == 'welcome') $blockPairs[$block] = $this->lang->block->welcome; } else { @@ -658,7 +674,7 @@ class blockModel extends model $products = $this->loadModel('product')->getList($status); if(empty($products)) return $products; - $lines = $this->loadModel('tree')->getLinePairs(); + $lines = $this->loadModel('tree')->getLinePairs($useShort = true); $productList = array(); foreach($lines as $id => $name) { diff --git a/module/block/view/dashboard.html.php b/module/block/view/dashboard.html.php index 5268aa00fe..c820e1cfec 100644 --- a/module/block/view/dashboard.html.php +++ b/module/block/view/dashboard.html.php @@ -18,6 +18,16 @@ $useGuest = $this->app->user->account == 'guest'; ?>
+ +
+

+ block->noData. ',';?> + youCould;?> + createLink("block", "admin", "id=0&module=$module"), " {$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}' class='btn btn-info'")?> + createLink("block", "ajaxReset", "module=$module"), " {$lang->block->reset}", 'hiddenwin', 'class="btn btn-info"')?> +

+
+
$block):?> @@ -34,14 +44,16 @@ $useGuest = $this->app->user->account == 'guest';
'; -?> -$('#subHeader #pageActions .btn-toolbar:last').append(); $module->block->initVersion) or $config->$module->block->initVersion < '2'):?> $(function() { diff --git a/module/block/view/productblock.html.php b/module/block/view/productblock.html.php index d5a78aae97..6ce0ddb0c1 100644 --- a/module/block/view/productblock.html.php +++ b/module/block/view/productblock.html.php @@ -26,8 +26,8 @@ product->plans;?> product->releases;?> - story->statusList['active'] . $lang->story->common;?> - bug->unResolved . $lang->bug->common;?> + story->statusList['active'] . $lang->story->common;?> + bug->unResolved . $lang->bug->common;?> diff --git a/module/block/view/projectblock.html.php b/module/block/view/projectblock.html.php index 7fabb89df7..abc5c17e2d 100644 --- a/module/block/view/projectblock.html.php +++ b/module/block/view/projectblock.html.php @@ -20,8 +20,9 @@ project->name;?> project->end;?> + getClientLang() == 'en') ? 'w-85px' : 'c-hours';?> statusAB;?> - project->totalEstimate;?> + project->totalEstimate;?> project->totalConsumed;?> project->totalLeft;?> diff --git a/module/block/view/projectstatisticblock.html.php b/module/block/view/projectstatisticblock.html.php index 12e641f075..964229cf31 100644 --- a/module/block/view/projectstatisticblock.html.php +++ b/module/block/view/projectstatisticblock.html.php @@ -9,7 +9,7 @@ .types-line > li > div > span {display: block; color: #CBD0DB; font-size: 16px;} .product-info {position: relative; height: 65px;} .product-info + .product-info {margin-top: 10px;} -.product-info .progress {position: absolute; left: 10px; top: 35px; right: 90px;} +.product-info .progress {position: absolute; left: 10px; top: 35px; right: 100px;} .product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;} .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;} html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 130px;} diff --git a/module/block/view/publicform.html.php b/module/block/view/publicform.html.php index b0159cc09c..537dd8e250 100644 --- a/module/block/view/publicform.html.php +++ b/module/block/view/publicform.html.php @@ -12,7 +12,7 @@ ?>
-
title : '', "class='form-control' autocomplete='off'")?>
+
title : '', "class='form-control'")?>
diff --git a/module/block/view/todoblock.html.php b/module/block/view/todoblock.html.php index 2095baf406..6bb6062547 100644 --- a/module/block/view/todoblock.html.php +++ b/module/block/view/todoblock.html.php @@ -37,12 +37,12 @@ if(!$selfCall) die(include('./todolist.html.php'));
-
+
'>

todo->create;?>

-
+
diff --git a/module/bug/config.php b/module/bug/config.php index 038135ce14..ea68bf02c4 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -165,13 +165,18 @@ $config->bug->search['params']['lastEditedDate']= array('operator' => '=', $config->bug->search['params']['deadline'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->bug->datatable = new stdclass(); -$config->bug->datatable->defaultField = array('id', 'pri', 'title', 'severity', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions'); +$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions'); $config->bug->datatable->fieldList['id']['title'] = 'idAB'; $config->bug->datatable->fieldList['id']['fixed'] = 'left'; $config->bug->datatable->fieldList['id']['width'] = '70'; $config->bug->datatable->fieldList['id']['required'] = 'yes'; +$config->bug->datatable->fieldList['severity']['title'] = 'severityAB'; +$config->bug->datatable->fieldList['severity']['fixed'] = 'left'; +$config->bug->datatable->fieldList['severity']['width'] = '60'; +$config->bug->datatable->fieldList['severity']['required'] = 'no'; + $config->bug->datatable->fieldList['pri']['title'] = 'P'; $config->bug->datatable->fieldList['pri']['fixed'] = 'left'; $config->bug->datatable->fieldList['pri']['width'] = '50'; @@ -182,11 +187,6 @@ $config->bug->datatable->fieldList['title']['fixed'] = 'left'; $config->bug->datatable->fieldList['title']['width'] = 'auto'; $config->bug->datatable->fieldList['title']['required'] = 'yes'; -$config->bug->datatable->fieldList['severity']['title'] = 'severityAB'; -$config->bug->datatable->fieldList['severity']['fixed'] = 'left'; -$config->bug->datatable->fieldList['severity']['width'] = '60'; -$config->bug->datatable->fieldList['severity']['required'] = 'no'; - $config->bug->datatable->fieldList['branch']['title'] = 'branch'; $config->bug->datatable->fieldList['branch']['fixed'] = 'left'; $config->bug->datatable->fieldList['branch']['width'] = '100'; diff --git a/module/bug/control.php b/module/bug/control.php index 47491ef04b..31261e6253 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -22,6 +22,7 @@ class bug extends control public function __construct($moduleName = '', $methodName = '') { parent::__construct($moduleName, $methodName); + $products = array(); $this->loadModel('product'); $this->loadModel('tree'); $this->loadModel('user'); @@ -296,7 +297,8 @@ class bug extends control if(defined('RUN_MODE') && RUN_MODE == 'api') $this->send(array('status' => 'success', 'data' => $bugID)); - $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch&type=byModule¶m={$this->post->module}"); + setcookie('bugModule', (int)$this->post->module, 0, $this->config->webRoot); + $location = $this->createLink('bug', 'browse', "productID={$this->post->product}&branch=$branch&browseType=unclosed¶m=0&orderBy=id_desc"); if($this->app->getViewType() == 'xhtml') $location = $this->createLink('bug', 'view', "bugID=$bugID"); $response['locate'] = $location; $this->send($response); @@ -392,6 +394,9 @@ class bug extends control $moduleOptionMenu = $this->tree->getOptionMenu($productID, $viewType = 'bug', $startModuleID = 0, $branch); if(empty($moduleOptionMenu)) die(js::locate(helper::createLink('tree', 'browse', "productID=$productID&view=story"))); + $productList = $this->loadModel('block')->getProducts('noclosed', ''); + foreach($productList as $product) $products[$product->id] = $product->name; + /* Set custom. */ foreach(explode(',', $this->config->bug->list->customCreateFields) as $field) $customFields[$field] = $this->lang->bug->$field; $this->view->customFields = $customFields; @@ -401,6 +406,7 @@ class bug extends control $this->view->position[] = html::a($this->createLink('bug', 'browse', "productID=$productID"), $this->products[$productID]); $this->view->position[] = $this->lang->bug->create; + $this->view->products = $products; $this->view->productID = $productID; $this->view->productName = $this->products[$productID]; $this->view->moduleOptionMenu = $moduleOptionMenu; @@ -544,6 +550,7 @@ class bug extends control /* Get product info. */ $productID = $bug->product; $productName = $this->products[$productID]; + $branches = $this->session->currentProductType == 'normal' ? array() : $this->loadModel('branch')->getPairs($bug->product); /* Header and positon. */ $this->view->title = "BUG #$bug->id $bug->title - " . $this->products[$productID]; @@ -553,9 +560,11 @@ class bug extends control /* Assign. */ $this->view->productID = $productID; $this->view->productName = $productName; + $this->view->branches = $branches; $this->view->modulePath = $this->tree->getParents($bug->module); + $this->view->bugModule = empty($bug->module) ? '' : $this->tree->getById($bug->module); $this->view->bug = $bug; - $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : $this->loadModel('branch')->getById($bug->branch, $bug->product); + $this->view->branchName = $this->session->currentProductType == 'normal' ? '' : zget($branches, $bug->branch, ''); $this->view->users = $this->user->getPairs('noletter'); $this->view->actions = $this->action->getList('bug', $bugID); $this->view->builds = $this->loadModel('build')->getProductBuildPairs($productID, $branch = 0, $params = ''); @@ -1613,7 +1622,7 @@ class bug extends control } else { - $browseType = $this->lang->bug->moreSelects[$browseType]; + $browseType = isset($this->lang->bug->moreSelects[$browseType]) ? $this->lang->bug->moreSelects[$browseType] : null; } $this->view->fileName = $productName . $this->lang->dash . $browseType . $fileName; diff --git a/module/bug/css/browse.css b/module/bug/css/browse.css index 733ad2b51c..68bad5ec71 100644 --- a/module/bug/css/browse.css +++ b/module/bug/css/browse.css @@ -3,6 +3,7 @@ .tree .closed, .tree .closed a{color:#003366; text-decoration:none;} .confirm0 {color:gray; font-size:9px} .confirm1 {color:green; font-size:9px} +td.delayed{color:#fff; background: #e84e0f!important;} .datatable-wrapper .table-datatable .datatable-row td {height:37px;} diff --git a/module/bug/js/x.view.js b/module/bug/js/x.view.js index 4f0756d4f4..d57019c9b3 100644 --- a/module/bug/js/x.view.js +++ b/module/bug/js/x.view.js @@ -1,5 +1,6 @@ $(function() { + $('.main-actions-holder').css('height', '0px'); var $xuanAction = "
"; $('.main-col div.main-actions .btn-toolbar a').each(function(){ var $that = $(this); diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 37eb507e2f..c40cc1f6d8 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -42,6 +42,7 @@ $lang->bug->toTask = 'Convert to Task'; $lang->bug->toStory = 'Convert to Story'; $lang->bug->mailto = 'Mail To'; <<<<<<< HEAD +<<<<<<< HEAD $lang->bug->openedBy = 'Created by'; $lang->bug->openedDate = 'Created'; $lang->bug->openedDateAB = 'Created'; @@ -50,10 +51,13 @@ $lang->bug->assignedTo = 'To'; $lang->bug->assignBug = 'Assignee'; ======= $lang->bug->openedBy = 'Creator'; +======= +$lang->bug->openedBy = 'Created by'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->bug->openedDate = 'Created'; $lang->bug->openedDateAB = 'Created'; $lang->bug->openedBuild = 'Open Build'; -$lang->bug->assignedTo = 'AssignToMe'; +$lang->bug->assignedTo = 'Assign To'; $lang->bug->assignBug = 'Assign To'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f $lang->bug->assignedToAB = 'To'; @@ -69,7 +73,7 @@ $lang->bug->deadline = 'Deadline'; $lang->bug->plan = 'Plan'; $lang->bug->closedBy = 'Closed By'; $lang->bug->closedDate = 'Closed'; -$lang->bug->duplicateBug = 'Duplicate'; +$lang->bug->duplicateBug = 'Duplicate Bug ID'; $lang->bug->lastEditedBy = 'Edited By'; $lang->bug->linkBug = 'Linked Bug'; $lang->bug->linkBugs = 'Link Bug'; @@ -142,27 +146,35 @@ $lang->bug->needConfirm = 'ChangedStory'; $lang->bug->needConfirm = 'Story Changed'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f $lang->bug->allProduct = 'All' . $lang->productCommon; +<<<<<<< HEAD $lang->bug->my = 'Mine'; $lang->bug->yesterdayResolved = 'Resolved Yesterday '; $lang->bug->yesterdayConfirmed = 'Confirmed Yesterday '; $lang->bug->yesterdayClosed = 'Closed Yesterday '; +======= +$lang->bug->my = 'My'; +$lang->bug->yesterdayResolved = 'Bug Resolved Yesterday '; +$lang->bug->yesterdayConfirmed = 'Bug Confirmed Yesterday '; +$lang->bug->yesterdayClosed = 'Bug Closed Yesterday '; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->bug->assignToMeAB = 'AssignToMe'; $lang->bug->openedByMeAB = 'CreateByMe'; $lang->bug->resolvedByMeAB = 'ResolveByMe'; -$lang->bug->ditto = 'Ditto'; -$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one!'; -$lang->bug->noAssigned = 'Assign'; -$lang->bug->noBug = 'No bugs. '; -$lang->bug->noModule = '
You have no modules.
Manage now
'; +$lang->bug->ditto = 'Ditto'; +$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one!'; +$lang->bug->noAssigned = 'Assign'; +$lang->bug->noBug = 'No bugs. '; +$lang->bug->noModule = '
You have no modules.
Manage now
'; +$lang->bug->delayWarning = " Delay %s days "; /* 页面标签。*/ $lang->bug->lblAssignedTo = 'Assignee'; $lang->bug->lblMailto = 'Mail To'; $lang->bug->lblLastEdited = 'Last Edited'; $lang->bug->lblResolved = 'Resolved By'; -$lang->bug->allUsers = 'Load All User'; +$lang->bug->allUsers = 'All Users'; $lang->bug->allBuilds = 'All'; $lang->bug->createBuild = 'New'; @@ -402,7 +414,7 @@ $lang->bug->action->linkrelatedbug = array('main' => '$date, linked by bug->action->unlinkrelatedbug = array('main' => '$date, unlinked by $actor from Bug $extra.'); $lang->bug->placeholder = new stdclass(); -$lang->bug->placeholder->chooseBuilds = 'Choose Build...'; +$lang->bug->placeholder->chooseBuilds = 'Select Build...'; $lang->bug->placeholder->newBuildName = 'New build Name'; $lang->bug->featureBar['browse']['all'] = $lang->bug->allBugs; diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php index cc0f4cdb36..05d85d7f23 100644 --- a/module/bug/lang/zh-cn.php +++ b/module/bug/lang/zh-cn.php @@ -128,11 +128,12 @@ $lang->bug->assignToMeAB = '指派给我'; $lang->bug->openedByMeAB = '由我创建'; $lang->bug->resolvedByMeAB = '由我解决'; -$lang->bug->ditto = '同上'; -$lang->bug->dittoNotice = '该bug与上一bug不属于同一产品!'; -$lang->bug->noAssigned = '未指派'; -$lang->bug->noBug = '暂时没有Bug。'; -$lang->bug->noModule = '
您现在还没有模块信息
请维护测试模块
'; +$lang->bug->ditto = '同上'; +$lang->bug->dittoNotice = '该bug与上一bug不属于同一产品!'; +$lang->bug->noAssigned = '未指派'; +$lang->bug->noBug = '暂时没有Bug。'; +$lang->bug->noModule = '
您现在还没有模块信息
请维护测试模块
'; +$lang->bug->delayWarning = " 延期%s天 "; /* 页面标签。*/ $lang->bug->lblAssignedTo = '当前指派'; diff --git a/module/bug/lang/zh-tw.php b/module/bug/lang/zh-tw.php index 593b8613c1..ef6493b062 100644 --- a/module/bug/lang/zh-tw.php +++ b/module/bug/lang/zh-tw.php @@ -128,11 +128,12 @@ $lang->bug->assignToMeAB = '指派給我'; $lang->bug->openedByMeAB = '由我創建'; $lang->bug->resolvedByMeAB = '由我解決'; -$lang->bug->ditto = '同上'; -$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!'; -$lang->bug->noAssigned = '未指派'; -$lang->bug->noBug = '暫時沒有Bug。'; -$lang->bug->noModule = '
您現在還沒有模組信息
請維護測試模組
'; +$lang->bug->ditto = '同上'; +$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!'; +$lang->bug->noAssigned = '未指派'; +$lang->bug->noBug = '暫時沒有Bug。'; +$lang->bug->noModule = '
您現在還沒有模組信息
請維護測試模組
'; +$lang->bug->delayWarning = " 延期%s天 "; /* 頁面標籤。*/ $lang->bug->lblAssignedTo = '當前指派'; diff --git a/module/bug/model.php b/module/bug/model.php index 68cb2ba965..53075b9a37 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -134,8 +134,8 @@ class bugModel extends model { $now = helper::now(); $bug = fixer::input('post') - ->add('openedBy', $this->app->user->account) - ->add('openedDate', $now) + ->setDefault('openedBy', $this->app->user->account) + ->setDefault('openedDate', $now) ->setDefault('project,story,task', 0) ->setDefault('openedBuild', '') ->setDefault('deadline', '0000-00-00') @@ -360,7 +360,7 @@ class bugModel extends model } /** - * Check delay bug. + * Check delay bugs. * * @param array $bugs * @access public @@ -368,27 +368,38 @@ class bugModel extends model */ public function checkDelayBugs($bugs) { - foreach ($bugs as $bug) - { - // Delayed or not?. - if($bug->deadline != '0000-00-00') - { - if(substr($bug->resolvedDate, 0, 10) != '0000-00-00') - { - $delay = helper::diffDate(substr($bug->resolvedDate, 0, 10), $bug->deadline); - } - elseif($bug->status == 'active') - { - $delay = helper::diffDate(helper::today(), $bug->deadline); - } - - if(isset($delay) and $delay > 0) $bug->delay = $delay; - } - } + foreach ($bugs as $bug) $bug = $this->checkDelayBug($bug); return $bugs; } + /** + * Check delay bug. + * + * @param array $bug + * @access public + * @return array + */ + public function checkDelayBug($bug) + { + // Delayed or not?. + if($bug->deadline != '0000-00-00') + { + if($bug->resolvedDate and substr($bug->resolvedDate, 0, 10) != '0000-00-00') + { + $delay = helper::diffDate(substr($bug->resolvedDate, 0, 10), $bug->deadline); + } + elseif($bug->status == 'active') + { + $delay = helper::diffDate(helper::today(), $bug->deadline); + } + + if(isset($delay) and $delay > 0) $bug->delay = $delay; + } + + return $bug; + } + /** * Get bugs of a module. * @@ -469,7 +480,7 @@ class bugModel extends model $bug->files = $this->loadModel('file')->getByObject('bug', $bugID); - return $bug; + return $this->checkDelayBug($bug); } /** @@ -502,7 +513,6 @@ class bugModel extends model { return $this->dao->select('*')->from(TABLE_BUG) ->where('status')->eq('active') - ->andWhere('toTask')->eq(0) ->andWhere('tostory')->eq(0) ->beginIF(!empty($products))->andWhere('product')->in($products)->fi() ->beginIF($branch)->andWhere('branch')->in("0,$branch")->fi() @@ -601,9 +611,9 @@ class bugModel extends model ->setDefault('plan', 0) ->setDefault('deadline', '0000-00-00') ->setDefault('resolvedDate', '0000-00-00 00:00:00') - ->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) - ->add('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedBy', $this->app->user->account) ->add('lastEditedDate', $now) + ->setIF(strpos($this->config->bug->edit->requiredFields, 'deadline') !== false, 'deadline', $this->post->deadline) ->join('openedBuild', ',') ->join('mailto', ',') ->join('linkBug', ',') @@ -909,15 +919,15 @@ class bugModel extends model $now = helper::now(); $oldBug = $this->getById($bugID); $bug = fixer::input('post') - ->add('resolvedBy', $this->app->user->account) - ->add('status', 'resolved') - ->add('confirmed', 1) - ->add('assignedDate', $now) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->setDefault('resolvedDate', $now) - ->setDefault('duplicateBug', 0) - ->setDefault('assignedTo', $oldBug->openedBy) + ->add('status', 'resolved') + ->add('confirmed', 1) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('resolvedBy', $this->app->user->account) + ->setDefault('assignedDate', $now) + ->setDefault('resolvedDate', $now) + ->setDefault('duplicateBug', 0) + ->setDefault('assignedTo', $oldBug->openedBy) ->remove('comment,files,labels') ->get(); @@ -1112,8 +1122,11 @@ class bugModel extends model $oldBug = $this->getById($bugID); $now = helper::now(); $bug = fixer::input('post') - ->setDefault('assignedTo', $oldBug->resolvedBy) - ->add('assignedDate', $now) + ->setDefault('assignedTo', $oldBug->resolvedBy) + ->setDefault('assignedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('activatedDate', $now) ->add('resolution', '') ->add('status', 'active') ->add('resolvedDate', '0000-00-00') @@ -1124,9 +1137,6 @@ class bugModel extends model ->add('duplicateBug', 0) ->add('toTask', 0) ->add('toStory', 0) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('activatedDate', $now) ->join('openedBuild', ',') ->remove('comment,files,labels') ->get(); @@ -1150,14 +1160,14 @@ class bugModel extends model $now = helper::now(); $oldBug = $this->getById($bugID); $bug = fixer::input('post') - ->add('assignedTo', 'closed') - ->add('assignedDate', $now) - ->add('status', 'closed') - ->add('closedBy', $this->app->user->account) - ->add('closedDate', $now) - ->add('lastEditedBy', $this->app->user->account) - ->add('lastEditedDate', $now) - ->add('confirmed', 1) + ->add('assignedTo', 'closed') + ->add('status', 'closed') + ->add('confirmed', 1) + ->setDefault('assignedDate', $now) + ->setDefault('lastEditedBy', $this->app->user->account) + ->setDefault('lastEditedDate', $now) + ->setDefault('closedBy', $this->app->user->account) + ->setDefault('closedDate', $now) ->remove('comment') ->get(); @@ -1315,6 +1325,7 @@ class bugModel extends model $bugs = $this->dao->select('*')->from(TABLE_BUG) ->where('deleted')->eq(0) ->beginIF(!$this->app->user->admin)->andWhere('project')->in('0,' . $this->app->user->view->projects)->fi() + ->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('status')->ne('closed')->fi() ->beginIF($type != 'all')->andWhere("`$type`")->eq($account)->fi() ->orderBy($orderBy) ->beginIF($limit > 0)->limit($limit)->fi() @@ -1957,8 +1968,8 @@ class bugModel extends model public function saveUserBugTemplate() { $template = fixer::input('post') - ->add('account', $this->app->user->account) - ->add('type', 'bug') + ->setDefault('account', $this->app->user->account) + ->setDefault('type', 'bug') ->stripTags('content', $this->config->allowedTags) ->get(); @@ -2668,7 +2679,7 @@ class bugModel extends model $assignToLink = helper::createLink('bug', 'assignTo', "bugID=$bug->id", '', true); $assignToHtml = html::a($assignToLink, " {$assignedToText}", '', "class='$btnClass'"); - echo !common::hasPriv('bug', 'assignTo') ? "{$assignedToText}" : $assignToHtml; + echo !common::hasPriv('bug', 'assignTo', $bug) ? "{$assignedToText}" : $assignToHtml; } /** @@ -2690,7 +2701,7 @@ class bugModel extends model $history = $this->action->getHistory($actionID); $action->history = isset($history[$actionID]) ? $history[$actionID] : array(); $action->appendLink = ''; - if(strpos($action->extra, ':')!== false) + if(strpos($action->extra, ':') !== false) { list($extra, $id) = explode(':', $action->extra); $action->extra = $extra; diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index b50896bbd6..0e053826b3 100644 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -96,7 +96,7 @@
- +
diff --git a/module/doc/view/sort.html.php b/module/doc/view/sort.html.php new file mode 100644 index 0000000000..4d901f3a17 --- /dev/null +++ b/module/doc/view/sort.html.php @@ -0,0 +1,10 @@ +
+ + $libName):?> +
+ +
diff --git a/module/doc/view/view.html.php b/module/doc/view/view.html.php index d2ec07d60d..d2aa872fa8 100644 --- a/module/doc/view/view.html.php +++ b/module/doc/view/view.html.php @@ -117,7 +117,7 @@ js::set('sysurl', common::getSysUrl()); id}");?>" alt="title?>"> - ", '', "class='btn-icon' onclick='deleteFile($file->id)' title='$lang->delete'");?> + " . ' ' . $lang->doc->deleteFile, '', "class='btn-icon' onclick='deleteFile($file->id)'");?>
files[$file->id]);?> @@ -131,12 +131,12 @@ js::set('sysurl', common::getSysUrl());
- + deleted) { common::printIcon('doc', 'edit', "docID=$doc->id", $doc); - common::printIcon('doc', 'delete', "docID=$doc->id", $doc, 'button', '', 'hiddenwin'); + common::printIcon('doc', 'delete', "docID=$doc->id", $doc, 'button', 'trash', 'hiddenwin'); } ?>
@@ -167,13 +167,13 @@ js::set('sysurl', common::getSysUrl()); productName):?> - doc->product;?> + doc->product;?> productName;?> projectName):?> - doc->project;?> + doc->project;?> projectName;?> diff --git a/module/editor/view/edit.html.php b/module/editor/view/edit.html.php index a1819706a4..718d7355f1 100644 --- a/module/editor/view/edit.html.php +++ b/module/editor/view/edit.html.php @@ -40,7 +40,7 @@
editor->fileName;?> - + editor->pageName?> editor->examplePHP}'"); + echo html::input('fileName', '', "class='form-control' placeholder='{$lang->editor->examplePHP}'"); ?> diff --git a/module/entry/config.php b/module/entry/config.php index 2d8908135d..850e01d109 100644 --- a/module/entry/config.php +++ b/module/entry/config.php @@ -5,7 +5,8 @@ $config->entry->create->requiredFields = 'name, code, account, key'; $config->entry->edit = new stdclass(); $config->entry->edit->requiredFields = 'name, code, account, key'; -$config->entry->help = 'https://www.zentao.net/book/zentaopmshelp/integration-287.html'; +$config->entry->help = 'https://www.zentao.net/book/zentaopmshelp/integration-287.html'; +$config->entry->notify = 'https://www.zentao.net/book/zentaopmshelp/301.html'; $config->entry->errcode['PARAM_CODE_MISSING'] = 401; $config->entry->errcode['PARAM_TOKEN_MISSING'] = 401; diff --git a/module/entry/lang/en.php b/module/entry/lang/en.php index a22d2d9ac7..ae4a6a441f 100644 --- a/module/entry/lang/en.php +++ b/module/entry/lang/en.php @@ -7,10 +7,10 @@ $lang->entry->log = 'Log'; $lang->entry->setting = 'Setting'; $lang->entry->browse = 'Browse'; -$lang->entry->create = 'Create'; +$lang->entry->create = 'Add Entry'; $lang->entry->edit = 'Edit'; $lang->entry->delete = 'Delete'; -$lang->entry->createKey = 'Regenerate'; +$lang->entry->createKey = 'Create Key'; $lang->entry->id = 'ID'; $lang->entry->name = 'Name'; @@ -18,30 +18,31 @@ $lang->entry->account = 'Account'; $lang->entry->code = 'Code'; $lang->entry->key = 'Key'; $lang->entry->ip = 'IP'; -$lang->entry->desc = 'Desc'; +$lang->entry->desc = 'Description'; $lang->entry->createdBy = 'Created By'; -$lang->entry->createdDate = 'Created Date'; +$lang->entry->createdDate = 'Created'; $lang->entry->editedby = 'Edited By'; -$lang->entry->editedDate = 'Edited Date'; +$lang->entry->editedDate = 'Edited'; $lang->entry->date = 'Request Time'; $lang->entry->url = 'Request URL'; -$lang->entry->confirmDelete = 'Are you sure delete this entry?'; +$lang->entry->confirmDelete = 'Do you want to delete this entry?'; $lang->entry->help = 'Help'; +$lang->entry->notify = 'Notify'; $lang->entry->note = new stdClass(); $lang->entry->note->name = 'Name'; -$lang->entry->note->code = 'Code, should be english and number.'; -$lang->entry->note->ip = "Use comma between two IPs. IP segment is supported, e.g. 192.168.1.*"; +$lang->entry->note->code = 'Alias should be letters and numbers'; +$lang->entry->note->ip = "Use comma to seperate IP. IP segment is supported, e.g. 192.168.1.*"; $lang->entry->note->allIP = 'All'; -$lang->entry->note->account = 'Account for entry.'; +$lang->entry->note->account = 'Authenticated account in the entry'; -$lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Param code is missing.'; -$lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Param token is missing.'; +$lang->entry->errmsg['PARAM_CODE_MISSING'] = 'Code is missing.'; +$lang->entry->errmsg['PARAM_TOKEN_MISSING'] = 'Token is missing.'; $lang->entry->errmsg['SESSION_CODE_MISSING'] = 'Session code is missing.'; -$lang->entry->errmsg['EMPTY_KEY'] = 'Key of entry is missing.'; +$lang->entry->errmsg['EMPTY_KEY'] = 'Key is missing.'; $lang->entry->errmsg['INVALID_TOKEN'] = 'Invalid token.'; $lang->entry->errmsg['SESSION_VERIFY_FAILED'] = 'Session verification failed.'; $lang->entry->errmsg['IP_DENIED'] = 'IP is denied.'; -$lang->entry->errmsg['ACCOUNT_UNBOUND'] = 'Account unbound.'; -$lang->entry->errmsg['EMPTY_ENTRY'] = 'Key of entry is missing.'; +$lang->entry->errmsg['ACCOUNT_UNBOUND'] = 'Account is not bound.'; +$lang->entry->errmsg['EMPTY_ENTRY'] = 'Key is missing.'; diff --git a/module/entry/lang/zh-cn.php b/module/entry/lang/zh-cn.php index 39f6894608..d11bf4bd68 100644 --- a/module/entry/lang/zh-cn.php +++ b/module/entry/lang/zh-cn.php @@ -28,6 +28,7 @@ $lang->entry->url = '请求地址'; $lang->entry->confirmDelete = '您确认要删除该应用吗?'; $lang->entry->help = '使用说明'; +$lang->entry->notify = '消息通知'; $lang->entry->note = new stdClass(); $lang->entry->note->name = '授权应用名称'; diff --git a/module/entry/lang/zh-tw.php b/module/entry/lang/zh-tw.php index 1c0d5a62ef..7c5a5dd1a4 100644 --- a/module/entry/lang/zh-tw.php +++ b/module/entry/lang/zh-tw.php @@ -28,6 +28,7 @@ $lang->entry->url = '請求地址'; $lang->entry->confirmDelete = '您確認要刪除該應用嗎?'; $lang->entry->help = '使用說明'; +$lang->entry->notify = '消息通知'; $lang->entry->note = new stdClass(); $lang->entry->note->name = '授權應用名稱'; diff --git a/module/entry/view/browse.html.php b/module/entry/view/browse.html.php index 320f91005e..844add788a 100644 --- a/module/entry/view/browse.html.php +++ b/module/entry/view/browse.html.php @@ -43,7 +43,7 @@ if(common::hasPriv('entry', 'delete')) { $deleteURL = $this->createLink('entry', 'delete', "entryID=$id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"entryList\",confirmDelete)", '', '', "title='{$lang->entry->delete}' class='btn'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"entryList\",confirmDelete)", '', '', "title='{$lang->entry->delete}' class='btn'"); } ?> diff --git a/module/entry/view/create.html.php b/module/entry/view/create.html.php index eabc48e1d9..cdf6fbe532 100644 --- a/module/entry/view/create.html.php +++ b/module/entry/view/create.html.php @@ -62,6 +62,7 @@ entry->help, $lang->entry->help, '_blank', "class='help'");?> + entry->notify, $lang->entry->notify, '_blank', "class='help'");?> diff --git a/module/entry/view/edit.html.php b/module/entry/view/edit.html.php index daf4854b8b..4f31b337b4 100644 --- a/module/entry/view/edit.html.php +++ b/module/entry/view/edit.html.php @@ -60,6 +60,7 @@ entry->help, $lang->entry->help, '_blank', "class='help'");?> + entry->notify, $lang->entry->notify, '_blank', "class='help'");?> diff --git a/module/entry/view/log.html.php b/module/entry/view/log.html.php index 13f0446a5c..652a6b6f60 100644 --- a/module/entry/view/log.html.php +++ b/module/entry/view/log.html.php @@ -11,21 +11,16 @@ */ ?> -

name;?> entry->log;?> +
+ " . $lang->entry->setting, '', "class='btn btn-primary'");?> + +

diff --git a/module/extension/lang/en.php b/module/extension/lang/en.php index 8a3eb85a26..a0b0bbad83 100644 --- a/module/extension/lang/en.php +++ b/module/extension/lang/en.php @@ -34,7 +34,7 @@ $lang->extension->name = 'Extension Name'; $lang->extension->code = 'Code'; $lang->extension->desc = 'Describe'; $lang->extension->type = 'Type'; -$lang->extension->dirs = 'Directories'; +$lang->extension->dirs = 'Directory'; $lang->extension->files = 'Files'; $lang->extension->status = 'Status'; $lang->extension->version = 'Version'; @@ -68,12 +68,12 @@ $lang->extension->byCategory = 'Category'; $lang->extension->installFailed = '%s failed. Error:'; $lang->extension->uninstallFailed = 'Uninstallation failed. Error:'; $lang->extension->confirmUninstall = 'Uninstallation will delete or change related database. Do you want to uninstall?'; -$lang->extension->installFinished = 'Congrats! The extension has been %sed!'; +$lang->extension->installFinished = 'Congrats! The extension is %sed!'; $lang->extension->refreshPage = 'Refresh'; -$lang->extension->uninstallFinished = 'Extension has been uninstalled.'; -$lang->extension->deactivateFinished = 'Extension has been deactivated.'; -$lang->extension->activateFinished = 'Extension has been activated.'; -$lang->extension->eraseFinished = 'Extension has been removed.'; +$lang->extension->uninstallFinished = 'Extension is uninstalled.'; +$lang->extension->deactivateFinished = 'Extension is deactivated.'; +$lang->extension->activateFinished = 'Extension is activated.'; +$lang->extension->eraseFinished = 'Extension is removed.'; $lang->extension->unremovedFiles = 'File or direcroty cannot be deleted. You have to manually delete'; $lang->extension->executeCommands = '

Execute command lines below to fix the problem:

'; $lang->extension->successDownloadedPackage = 'Extension downloaded!'; @@ -84,11 +84,11 @@ $lang->extension->viewAvailable = 'Available'; $lang->extension->viewDeactivated = 'Deactivated'; $lang->extension->backDBFile = 'Extension data has been backed up to %s!'; $lang->extension->noticeOkFile = '
For security reasons, your Admin account has to be confirmed.
-
Plese Login your ZenTao server and create %s.
+
Plese login your ZenTao server and create %s.

Note

  1. The file you will create is empty.
  2. -
  3. If there is such file exists, delete it first, and then create ones.
  4. +
  5. If such file exists, delete it first, and then create one.
'; $lang->extension->upgradeExt = 'Upgrade'; @@ -101,8 +101,8 @@ $lang->extension->errorOccurs = 'Error:'; $lang->extension->errorGetModules = 'Get Extension Category from www.zentao.net failed. It could be network error. Plase check your network and refresh it.'; $lang->extension->errorGetExtensions = 'Get Extension from www.zentao.net failed. It could be network error. Please go to www.zentao.net and download the extension, and then upload it to install.'; $lang->extension->errorDownloadPathNotFound = 'Extension download path %s is not found.
Please run mkdir -p %s in Linux to fix it.'; -$lang->extension->errorDownloadPathNotWritable = 'Extensiond ownload path %sis not writable.
Please run sudo chmod 777 %s in Linux to fix it.'; -$lang->extension->errorPackageFileExists = '%s has existed in the download path.
Please %s it again, CLICK HERE
'; +$lang->extension->errorDownloadPathNotWritable = 'Extension download path %sis not writable.
Please run sudo chmod 777 %s in Linux to fix it.'; +$lang->extension->errorPackageFileExists = '%s exists in the download path.
Please %s it again, CLICK HERE
'; $lang->extension->errorDownloadFailed = 'Download failed. Please try it again. If still not OK, try to download it manually and upload it to install.'; $lang->extension->errorMd5Checking = 'Incomplete File. Please download it again. If still not OK, try to download it manually and upload it to install.'; $lang->extension->errorCheckIncompatible = 'Incompatible with your ZenTao. It may not be used %s later.
You can choose to force%s or cancel
'; diff --git a/module/extension/view/obtain.html.php b/module/extension/view/obtain.html.php index 92d0bfd6f1..8cceac3bc2 100644 --- a/module/extension/view/obtain.html.php +++ b/module/extension/view/obtain.html.php @@ -16,7 +16,7 @@
diff --git a/module/mail/view/edit.html.php b/module/mail/view/edit.html.php index 71ed1f15fc..8634ea2e82 100755 --- a/module/mail/view/edit.html.php +++ b/module/mail/view/edit.html.php @@ -35,27 +35,27 @@ mail->fromAddress; ?> - fromAddress, "class='form-control' autocomplete='off'");?> + fromAddress, "class='form-control'");?> mail->addressWhiteList?> mail->fromName; ?>
- fromName, "class='form-control' autocomplete='off'");?> + fromName, "class='form-control'");?> mail->domain; ?> - domain, "class='form-control' autocomplete='off'");?> + domain, "class='form-control'");?> mail->host; ?> - host, "class='form-control' autocomplete='off'");?> + host, "class='form-control'");?> mail->port; ?> - port, "class='form-control' autocomplete='off'");?> + port, "class='form-control'");?> mail->secure; ?> mail->username; ?> - username, "class='form-control' autocomplete='off'") ?> + username, "class='form-control'") ?> mail->password; ?> - password, "class='form-control' autocomplete='off' placeholder='{$lang->mail->placeholder->password}'") ?> + password, "class='form-control' placeholder='{$lang->mail->placeholder->password}'") ?> mail->debug; ?> diff --git a/module/mail/view/sendcloud.html.php b/module/mail/view/sendcloud.html.php index ac186d3e5e..f68274a6cf 100755 --- a/module/mail/view/sendcloud.html.php +++ b/module/mail/view/sendcloud.html.php @@ -34,19 +34,19 @@ mail->domain?> - mail, 'domain', common::getSysURL()), "class='form-control' autocomplete='off'")?> + mail, 'domain', common::getSysURL()), "class='form-control'")?> mail->accessKey; ?>
- accessKey) ? $mailConfig->accessKey : '', "class='form-control' autocomplete='off'");?> + accessKey) ? $mailConfig->accessKey : '', "class='form-control'");?> mail->secretKey; ?>
- secretKey) ? $mailConfig->secretKey : '', "class='form-control' autocomplete='off'");?> + secretKey) ? $mailConfig->secretKey : '', "class='form-control'");?> diff --git a/module/mail/view/ztcloud.html.php b/module/mail/view/ztcloud.html.php index 1e8e1cf2a5..492b9a45ea 100644 --- a/module/mail/view/ztcloud.html.php +++ b/module/mail/view/ztcloud.html.php @@ -45,18 +45,18 @@ mail->domain?> - mail, 'domain', common::getSysURL()), "class='form-control' autocomplete='off'")?> + mail, 'domain', common::getSysURL()), "class='form-control'")?> mail->fromAddress; ?> - fromAddress, "class='form-control' autocomplete='off'");?> + fromAddress, "class='form-control'");?> mail->addressWhiteList?> mail->fromName; ?>
- fromName, "class='form-control' autocomplete='off'");?> + fromName, "class='form-control'");?> diff --git a/module/message/config.php b/module/message/config.php index 609b4f0d51..8af4f3cc17 100644 --- a/module/message/config.php +++ b/module/message/config.php @@ -1,7 +1,7 @@ message->objectTypes = array(); $config->message->objectTypes['product'] = array('opened', 'edited', 'closed', 'undeleted'); -$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated'); +$config->message->objectTypes['story'] = array('opened', 'edited', 'commented', 'frombug', 'changed', 'reviewed', 'closed', 'activated', 'assigned'); $config->message->objectTypes['productplan'] = array('opened', 'edited'); $config->message->objectTypes['project'] = array('opened', 'edited', 'started', 'delayed', 'suspended', 'closed', 'activated', 'undeleted'); $config->message->objectTypes['task'] = array('opened', 'edited', 'commented', 'assigned', 'confirmed', 'started', 'finished', 'paused', 'canceled', 'restarted', 'closed', 'activated'); diff --git a/module/message/lang/zh-tw.php b/module/message/lang/zh-tw.php index 79cff47ef8..c2127657b8 100644 --- a/module/message/lang/zh-tw.php +++ b/module/message/lang/zh-tw.php @@ -3,6 +3,6 @@ $lang->message->common = '消息'; $lang->message->index = '首頁'; $lang->message->setting = '設置'; -$lang->message->typeList['mail'] = '郵件'; -$lang->message->typeList['message'] = '瀏覽器通知'; -$lang->message->typeList['webhook'] = 'Webhook'; +$lang->message->typeList['mail'] = '郵件'; +$lang->message->typeList['message'] = '瀏覽器通知'; +$lang->message->typeList['webhook'] = 'Webhook'; diff --git a/module/misc/control.php b/module/misc/control.php index 987b76783c..20c81ded6c 100644 --- a/module/misc/control.php +++ b/module/misc/control.php @@ -59,16 +59,15 @@ class misc extends control /** * Check current version is latest or not. * + * @param string $sn * @access public * @return void */ - public function checkUpdate() + public function checkUpdate($sn) { - $note = isset($_GET['note']) ? $_GET['note'] : ''; - $browser = isset($_GET['browser']) ? $_GET['browser'] : ''; - - $this->view->note = urldecode(helper::safe64Decode($note)); - $this->view->browser = $browser; + session_write_close(); + $link = $this->lang->misc->api . "/updater-isLatest-{$this->config->version}-{$sn}.html?lang=" . str_replace('-', '_', $this->app->getClientLang()); + $this->view->note = file_get_contents($link); $this->display(); } @@ -84,258 +83,6 @@ class misc extends control echo $this->misc->hello2(); } - /** - * Download zentao client. - * - * @access public - * @param string $action - * @param string $os - * @return void - */ - public function downloadClient($action = 'check', $os = '') - { - if($_POST) - { - $os = $this->post->os; - - die(js::locate($this->createLink('misc', 'downloadClient', "action=getPackage&os=$os"), 'parent')); - } - - if($action == 'check') - { - $error = false; - $errorInfo = ''; - - $cacheDir = $this->app->getBasePath() . 'tmp/cache/'; - if(!is_dir($cacheDir)) - { - $result = mkdir($cacheDir, 0755, true); - if($result == false) - { - $error = true; - $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotExist, $cacheDir, $cacheDir); - } - } - - if(!is_writable($cacheDir)) - { - $error = true; - $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotWritable, $cacheDir, $cacheDir); - } - - $this->view->error = $error; - $this->view->errorInfo = $errorInfo; - - if(!$error) die(js::locate($this->createLink('misc', 'downloadClient', "action=selectPackage"))); - } - - if($action == 'selectPackage') - { - $os = 'windows64'; - $agentOS = helper::getOS(); - if(strpos($agentOS, 'Windows') !== false) $os = 'windows64'; - if(strpos($agentOS, 'Linux') !== false) $os = 'linux64'; - if(strpos($agentOS, 'Mac') !== false) $os = 'mac'; - - $this->view->os = $os; - } - - if($action == 'getPackage') - { - $this->view->os = $os; - $this->view->account = $this->app->user->account; - } - - if($action == 'clearTmpPackage') - { - $account = $this->app->user->account; - $tmpDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - - if(is_dir($tmpDir)) - { - $zfile = $this->app->loadClass('zfile'); - $zfile->removeDir($tmpDir); - } - - die(js::closeModal('parent.parent', 'this')); - } - - if($action == 'downloadPackage') - { - $account = $this->app->user->account; - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - - $clientFile = $clientDir . 'zentaoclient.zip'; - $zipContent = file_get_contents($clientFile); - if(is_dir($clientDir)) - { - $zfile = $this->app->loadClass('zfile'); - $zfile->removeDir($clientDir); - } - - $this->fetch('file', 'sendDownHeader', array('fileName' => "zentaoclient." . $os . '.zip', 'zip', $zipContent)); - } - - $this->view->action = $action; - $this->display(); - } - - /** - * Ajax get client package. - * - * @param string $os - * @access public - * @return void - */ - public function ajaxGetClientPackage($os = '') - { - set_time_limit (0); - session_write_close(); - - $response = array(); - $response['result'] = 'success'; - $response['message'] = ''; - - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/'; - if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); - - $account = $this->app->user->account; - $tmpDir = $clientDir . "/$account/"; - if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true); - - if($os == 'windows64') $clientName = "zentaoclient.win64.zip"; - if($os == 'windows32') $clientName = "zentaoclient.win32.zip"; - if($os == 'linux64') $clientName = "zentaoclient.linux.x64.zip"; - if($os == 'linux32') $clientName = "zentaoclient.linux.ia32.zip"; - if($os == 'mac') $clientName = "zentaoclient.mac.zip"; - - $needCache = false; - $version = $this->config->xuanxuan->version; - $packageFile = $clientDir . $clientName; - if(!file_exists($packageFile)) - { - $url = "http://dl.cnezsoft.com/zentaoclient/$version/"; - $xxFile = $url . $clientName; - $needCache = true; - } - else - { - $xxFile = $packageFile; - } - - $clientFile = $tmpDir . 'zentaoclient.zip'; - if($xxHd = fopen($xxFile, "rb")) - { - if($clientHd = fopen($clientFile, "wb")) - { - while(!feof($xxHd)) - { - $result = fwrite($clientHd, fread($xxHd, 1024 * 8 ), 1024 * 8 ); - if($result == false) - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - } - } - else - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - fclose($xxHd); - fclose($clientHd); - } - else - { - $response['result'] = 'fail'; - $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); - $this->send($response); - } - - if($needCache) file_put_contents($packageFile, file_get_contents($clientFile)); - - $this->send($response); - } - - /** - * Ajax set client config to client package. - * - * @param string $os - * @access public - * @return void - */ - public function ajaxSetClientConfig($os = '') - { - $response['result'] = 'success'; - - $account = $this->app->user->account; - $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; - if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); - - /* write login info into config file. */ - $defaultUser = new stdclass(); - $defaultUser->server = common::getSysURL(); - $defaultUser->account = $this->app->user->account; - - $loginInfo = new stdclass(); - $loginInfo->ui = $defaultUser; - $loginInfo = json_encode($loginInfo); - - $loginFile = $clientDir . 'config.json'; - file_put_contents($loginFile, $loginInfo); - - define('PCLZIP_TEMPORARY_DIR', $clientDir); - $this->app->loadClass('pclzip', true); - $clientFile = $clientDir . 'zentaoclient.zip'; - $archive = new pclzip($clientFile); - - if($os == 'mac') - { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'xuanxuan.app/Contents/Resouces'); - } - else - { - $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'resources/build-in'); - } - - if($result == 0) - { - $response['result'] = 'fail'; - $response['message'] = $archive->errorInfo(true); - $this->send($response); - } - - $this->send($response); - } - - /** - * Ajax get client package size. - * - * @access public - * @return void - */ - public function ajaxGetPackageSize() - { - $account = $this->app->user->account; - $packageFile = $this->app->getBasePath() . 'tmp/cache/client/' . $account . '/zentaoclient.zip'; - - $size = 0; - if(file_exists($packageFile)) - { - $size = filesize($packageFile); - $size = $size ? round($size / 1048576, 2) : 0; - } - - $response = array(); - $response['result'] = 'success'; - $response['size'] = $size; - - $this->send($response); - } - /** * Down notify. * @@ -446,4 +193,8 @@ class misc extends control $this->view->detailed = $detailed; $this->display(); } + public function ajaxerror() + { + $this->display(); + } } diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 3124219929..7e305c0d18 100644 --- a/module/misc/lang/en.php +++ b/module/misc/lang/en.php @@ -15,30 +15,6 @@ $lang->misc->ping = 'Ping'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; -$lang->misc->client = new stdclass(); -$lang->misc->client->version = 'Client Version'; -$lang->misc->client->os = 'Select OS'; -$lang->misc->client->download = 'Download'; -$lang->misc->client->downloading = 'Downloading:'; -$lang->misc->client->downloaded = 'Downloaded successful!'; -$lang->misc->client->setting = 'Setting config info.'; -$lang->misc->client->setted = 'Set config info successful!'; - -$lang->misc->client->osList['windows64'] = 'Windows 64'; -$lang->misc->client->osList['windows32'] = 'Windows 32'; -$lang->misc->client->osList['linux64'] = 'Linux 64'; -$lang->misc->client->osList['linux32'] = 'Linux 32'; -$lang->misc->client->osList['mac'] = 'Mac'; - -$lang->misc->client->versionList['2.1.1'] = '2.1.1'; - -$lang->misc->client->errorInfo = new stdclass(); -$lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; -$lang->misc->client->errorInfo->configError = 'Failed to set config info!'; -$lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; -$lang->misc->client->errorInfo->dirNotExist = 'The dir %s is not exist, please make it.'; -$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
Please exec:sudo chmod 777 %s under linux os.'; - $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = 'Version %s'; $lang->misc->zentao->labels['about'] = 'About'; @@ -58,7 +34,7 @@ $lang->misc->zentao->about['license'] = "License"; -$lang->misc->zentao->support['vip'] = "VIP Technical Support"; +$lang->misc->zentao->support['vip'] = "VIP Support"; $lang->misc->zentao->support['manual'] = "User Manual"; @@ -77,29 +53,35 @@ $lang->misc->zentao->cowin['cowinmore'] = "More"; $lang->misc->zentao->service['servicemore']= 'More'; $lang->misc->mobile = "Mobile Access"; -$lang->misc->noGDLib = "Please use the browser on your phone to visit %s"; -$lang->misc->copyright = "© 2009 - 2018 Nature Easy Soft Network Technology Co,LTD Email Max@easysoft.ltd"; +$lang->misc->noGDLib = "Please visit %s in the browser of your phone."; +$lang->misc->copyright = "© 2009 - 2019 Nature Easy Soft Email Renee@easysoft.ltd"; $lang->misc->checkTable = "Check Data Table"; $lang->misc->needRepair = "Repair Table"; -$lang->misc->repairTable = "Database table is damaged due to power outage. Please chech and repair!"; -$lang->misc->repairFail = "Failed to repair. Please go to the database data directory, try to perform myisamchk -r -f %s.MYI repair."; -$lang->misc->connectFail = "Failed to connect to database. Error: %s,
Please check the MySQL error log and troubleshoot."; +$lang->misc->repairTable = "Database table is damaged due to power outage. Please check and repair!"; +$lang->misc->repairFail = "Failed to repair. Please go to the data directory of your database, and try to execute myisamchk -r -f %s.MYI repair."; +$lang->misc->connectFail = "Failed to connect to the database. Error: %s,
Please check the MySQL error log and troubleshoot."; $lang->misc->tableName = "Table Name"; $lang->misc->tableStatus = "Status"; -$lang->misc->novice = "First time to ZenTao? Do you want to start rookie mode?"; +$lang->misc->novice = "New to ZenTao? Do you want to start ZenTao Tutorial?"; -$lang->misc->noticeRepair = "
If you are not Administrator, please contact Administrator to repair table.
-
If you are, please login into your Zentao host and create a file named %s.
+$lang->misc->noticeRepair = "
If you are not Administrator, please contact your ZenTao Administrator to repair tables.
+
If you are, please login your Zentao host and create a file named %s.

Note:

  1. Keep the file empty.
  2. -
  3. If the file exists, remove it and create one again.
  4. +
  5. If the file exists, remove it and create a new one.
"; $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = 'Latest Version'; $lang->misc->feature->detailed = 'Details'; +$lang->misc->releaseDate['11.4.1'] = '2019-04-08'; +$lang->misc->releaseDate['11.4.stable'] = '2019-03-25'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -120,38 +102,50 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; -$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

Increase backup settings and make backups more flexible

Show backup progress

Can change the backup directory

'); -$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Optimize and adjust menus', 'desc' => '

Adjust admin menus

Adjust the secondary menu of my and project

'); +$lang->misc->feature->all['11.4.1'][] = array('title'=>'Optimize details and fix bug.', 'desc' => ''); -$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust document display', 'desc' => "

Adjust the layout method on the left side of the document library.

Adding filter conditions to the bottom of the document library's navigation bottom.

"); -$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust the sub task logic and optimize the display of father child task.', 'desc' => ''); +$lang->misc->feature->all['11.4.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

Enhanced test management.

Optimized the UI of Plan, Release, and Build linked stories and bugs.

Customize the feature whether to display files in child category.

Optimize details and fix bug.

'); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Optimizing and adjusting new interface', 'desc' => '

Details page restore our previous layout.

Refactoring forms to add user pages

When use cases are executed, do not update the use case state if the user manually chooses to pass through and write the results.

'); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'After the user machine hibernate login fails, the session is refreshed again.', 'desc' => ''); -$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Upgrading existing interface mechanisms', 'desc' => ''); +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

Add Child Plan to a Plan

Optimize the chosen

Add Timezone setting

Optimize Doc Lib and Doc modules

'); + +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'Optimize details and fix bug.', 'desc' => '

Add upgrade logs and database checkup after upgrading

Fixed ZenTao client and other bugs, and optimized details.

'); + +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'Fix Bug.', 'desc' => ''); + +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'ZenTao integrate Xuanxuan', 'desc' => ''); + +$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Adjust backup mechanism', 'desc' => '

Increase backup settings and make backup more flexible

Show backup progress

Change the backup directory

'); +$lang->misc->feature->all['10.6.stable'][] = array('title'=>'Optimize and adjust menu', 'desc' => '

Adjust admin menu

Adjust the secondary menu of My and Project

'); + +$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust document layout', 'desc' => "

Adjust the layout method on the left side of the document library.

Add filter conditions at the bottom of the document library menu.

"); +$lang->misc->feature->all['10.5.stable'][] = array('title'=>'Adjust the child task logic and optimize the display of parent-child task.', 'desc' => ''); + +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Optimize and adjust new interface', 'desc' => '

Detail page restore to the previous layout.

Refactore forms to add user pages

When use cases are executed, do not update the use case stause if the user manually chooses to pass and write the results.

'); +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'After the user machine hibernate and the login fails, the session will be refreshed again.', 'desc' => ''); +$lang->misc->feature->all['10.4.stable'][] = array('title'=>'Upgrade existing interface mechanisms', 'desc' => ''); $lang->misc->feature->all['10.3.stable'][] = array('title'=>'Fix Bug.', 'desc' => ''); $lang->misc->feature->all['10.2.stable'][] = array('title'=>'Xuan.im is integrated!', 'desc' => ''); $lang->misc->feature->all['10.0.stable'][] = array('title'=>'New UI/UX and new experience', 'desc' => '
  1. My Dashboard
  2. Dynamic
  3. Product Home
  4. Product overview
  5. Roadmap
  6. Project Home
  7. Project overview
  8. QA Home
  9. Document Home
  10. Added work report on My Dashboard
  11. Add/Edit/Finish todos on My Dashboard
  12. Add prodcut report on Product Home
  13. Add prodcut overview on Product Home
  14. Add project report on Project Home
  15. Add project overview on Project Home
  16. Add QA report on QA Home
  17. All Product/product Home/All Project/Project Home/QA Home is moved from the right of the secondary Narbar to the left.
  18. Kanban/Burndown/Tree/ByGroup of Project/Task has been moved from the third Navbar to the secondary one; Tree/ByGroup/Task Liat has been integrated to a drop-down.
  19. Bug/Build of Project on the secondary Navbar has been integrated to a drop-down.
  20. Display build and list by group, which is more reasonable.
  21. Added tree to display docuemnt on the left of the page.
  22. Added quick entry to document, including Last Update, My Doc and My Favorite
  23. Added My Favorite to Doc module.
'); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Message centralized management', 'desc' => '

Centring Mail,SMS,webhook into Message

'); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Add Periodic Todo function', 'desc' => ''); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>"Add Block of 'Assigned to Me'", 'desc' => ''); -$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Support Generating TestStatements of TestBuilds', 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Message centralized management', 'desc' => '

Gather Mail,SMS,webhook into Message

'); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Add recuured Todo', 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>"Add Block of 'AssignToMe'", 'desc' => ''); +$lang->misc->feature->all['9.8.stable'][] = array('title'=>'Support generating reports of TestBuilds', 'desc' => ''); -$lang->misc->feature->all['9.7.stable'][] = array('title'=>'optimize International package,Added Demo data。', 'desc' => ''); +$lang->misc->feature->all['9.7.stable'][] = array('title'=>'Optimize International package. Added Demo data.', 'desc' => ''); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Webhook Interface feature', 'desc' => 'support communication with BearyChat,dingding'); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Score feature', 'desc' => 'More skilled Use, More score'); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Multiplayer task and subTask to project tasks', 'desc' => ''); -$lang->misc->feature->all['9.6.stable'][] = array('title'=>'added Product line management to Product View', 'desc' => ''); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Webhook Interface feature', 'desc' => 'Support communication with BearyChat, Dingding'); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Point', 'desc' => 'More skilled application, more score'); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added multiple user task and child tasks to Project', 'desc' => ''); +$lang->misc->feature->all['9.6.stable'][] = array('title'=>'Added Product line management to Product View', 'desc' => ''); $lang->misc->feature->all['9.5.1'][] = array('title'=>'added Restricted Operatio', 'desc' => ''); $lang->misc->feature->all['9.3.beta'][] = array('title'=>'upgraded framework,Enhanced security', 'desc' => ''); -$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

added TestSuite,CaseLib and Test Statements

'); +$lang->misc->feature->all['9.1.stable'][] = array('title'=>'optimize Test View', 'desc' => '

added TestSuite,CaseLib and QA Report

'); $lang->misc->feature->all['9.1.stable'][] = array('title'=>'support Group steps of TestCase', 'desc' => ''); $lang->misc->feature->all['9.0.beta'][] = array('title'=>'ZenTao CloudMail has been added.', 'desc' => '

ZenTao CloudMail is a free Email service launched jointly with SendCloud. Once binded with ZenTao and passed verification, users can use this service.

'); @@ -165,7 +159,7 @@ $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Batch Add/Edit Custo $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Custom Story/Task/Bug/Case', 'desc' => '

You can custom fileds when add a Story/Task/Bug/Case.

'); $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Custom Export', 'desc' => '

You can custom fileds when export a Story/Task/Bug/Case pages. You can also save it as template for next export.

'); $lang->misc->feature->all['8.2.stable'][] = array('title'=>'Story/Task/Bug/Case Search ', 'desc' => '

On Story/Task/Bug/Case List page, you can do a combined search on Modules and Tabs.

'); -$lang->misc->feature->all['8.2.stable'][] = array('title'=>"Rookie's Tutorial", 'desc' => '

Tutorial for Rookies is added for first-time users to know how to use ZenTao.

'); +$lang->misc->feature->all['8.2.stable'][] = array('title'=>"Rookie's Tutorial", 'desc' => '

Tutorial for rookies is added for first-time users to know how to use ZenTao.

'); $lang->misc->feature->all['7.4.beta'][] = array('title'=>'Product branch feature is added.', 'desc' => '

Product branch/platform is added, and its related Story/Plan/Bug/Case/Module has Branch added too.

'); $lang->misc->feature->all['7.4.beta'][] = array('title'=>'Release Module is improved.', 'desc' => '

Stop action has been added. If Stop to manage it, the Release will not show when Report Bug.

Bugs that have been omitted in the Release will be related manually.

'); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index 14100a02ec..ca4b7876e4 100644 --- a/module/misc/lang/zh-cn.php +++ b/module/misc/lang/zh-cn.php @@ -15,30 +15,6 @@ $lang->misc->ping = '防超时'; $lang->misc->api = 'https://api.zentao.net'; $lang->misc->enApi = 'http://api.zentao.pm'; -$lang->misc->client = new stdclass(); -$lang->misc->client->version = '客户端版本'; -$lang->misc->client->os = '操作系统'; -$lang->misc->client->download = '下载'; -$lang->misc->client->downloading = '正在获取安装包:'; -$lang->misc->client->downloaded = '成功获取安装包'; -$lang->misc->client->setting = '正在设置配置信息'; -$lang->misc->client->setted = '成功设置配置信息'; - -$lang->misc->client->osList['windows64'] = 'Windows 64位'; -$lang->misc->client->osList['windows32'] = 'Windows 32位'; -$lang->misc->client->osList['linux64'] = 'Linux 64位'; -$lang->misc->client->osList['linux32'] = 'Linux 32位'; -$lang->misc->client->osList['mac'] = 'Mac版'; - -$lang->misc->client->versionList['2.1.1'] = '2.1.1'; - -$lang->misc->client->errorInfo = new stdclass(); -$lang->misc->client->errorInfo->downloadError = '获取安装包失败'; -$lang->misc->client->errorInfo->configError = '配置用户信息失败'; -$lang->misc->client->errorInfo->manualOpt = '请从 %s 手动获取安装包。'; -$lang->misc->client->errorInfo->dirNotExist = '客户端下载存储路径 %s 不存在,请创建该目录。'; -$lang->misc->client->errorInfo->dirNotWritable = '客户端下载存储路径 %s 不可写
linux下面请执行命令:sudo chmod 777 %s来修正'; - $lang->misc->zentao = new stdclass(); $lang->misc->zentao->version = '版本%s'; $lang->misc->zentao->labels['about'] = '关于禅道'; @@ -100,6 +76,12 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '详情'; +$lang->misc->releaseDate['11.4.1'] = '2019-04-08'; +$lang->misc->releaseDate['11.4.stable'] = '2019-03-25'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -120,6 +102,18 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.4.1'][] = array('title'=>'完善细节,修复Bug', 'desc' => ''); + +$lang->misc->feature->all['11.4.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

增强测试任务管理

优化计划、发布、版本关联需求和bug的交互

文档库可以自定义是否显示子分类里的文档

修复bug,完善细节

'); + +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

计划添加子计划功能

优化chosen交互

添加时区设置

优化文档库和文档

'); + +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善细节,修复Bug', 'desc' => '

增加升级日志和升级后数据库检查的功能

修复禅道集成客户端和其他若干bug,完善细节

'); + +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修复Bug。', 'desc' => ''); + +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'禅道集成喧喧', 'desc' => ''); + $lang->misc->feature->all['10.6.stable'][] = array('title'=>'调整备份机制', 'desc' => '

增加备份设置,备份更加灵活

显示备份进度

可以更改备份目录

'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'优化和调整菜单', 'desc' => '

调整后台菜单

调整我的地盘和项目的二级菜单

'); @@ -179,3 +173,5 @@ $lang->misc->feature->all['7.1.stable'][] = array('title'=>'提供rpm和deb包', $lang->misc->feature->all['6.3.stable'][] = array('title'=>'增加数据表格功能', 'desc' => '

可配置数据表格中可显示的字段,按照配置字段显示想看的数据

'); $lang->misc->feature->all['6.3.stable'][] = array('title'=>'继续完善细节', 'desc' => ''); + +$lang->misc->error = '此功能正在努力开发中...'; diff --git a/module/misc/lang/zh-tw.php b/module/misc/lang/zh-tw.php index e25ec47b27..7126100538 100644 --- a/module/misc/lang/zh-tw.php +++ b/module/misc/lang/zh-tw.php @@ -76,6 +76,12 @@ $lang->misc->feature = new stdclass(); $lang->misc->feature->lastest = '最新版本'; $lang->misc->feature->detailed = '詳情'; +$lang->misc->releaseDate['11.4.1'] = '2019-04-08'; +$lang->misc->releaseDate['11.4.stable'] = '2019-03-25'; +$lang->misc->releaseDate['11.3.stable'] = '2019-02-27'; +$lang->misc->releaseDate['11.2.stable'] = '2019-01-30'; +$lang->misc->releaseDate['11.1.stable'] = '2019-01-04'; +$lang->misc->releaseDate['11.0.stable'] = '2018-12-21'; $lang->misc->releaseDate['10.6.stable'] = '2018-11-20'; $lang->misc->releaseDate['10.5.stable'] = '2018-10-25'; $lang->misc->releaseDate['10.4.stable'] = '2018-09-28'; @@ -96,6 +102,18 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22'; $lang->misc->releaseDate['7.1.stable'] = '2015-03-07'; $lang->misc->releaseDate['6.3.stable'] = '2014-11-07'; +$lang->misc->feature->all['11.4.1'][] = array('title'=>'完善細節,修復Bug', 'desc' => ''); + +$lang->misc->feature->all['11.4.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

增強測試任務管理

優化計劃、發佈、版本關聯需求和bug的交互

文檔庫可以自定義是否顯示子分類裡的文檔

修復bug,完善細節

'); + +$lang->misc->feature->all['11.3.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

計劃添加子計劃功能

優化chosen交互

添加時區設置

優化文檔庫和文檔

'); + +$lang->misc->feature->all['11.2.stable'][] = array('title'=>'完善細節,修復Bug', 'desc' => '

增加升級日誌和升級後資料庫檢查的功能

修復禪道整合客戶端和其他若干bug,完善細節

'); + +$lang->misc->feature->all['11.1.stable'][] = array('title'=>'主要修復Bug。', 'desc' => ''); + +$lang->misc->feature->all['11.0.stable'][] = array('title'=>'禪道整合喧喧', 'desc' => ''); + $lang->misc->feature->all['10.6.stable'][] = array('title'=>'調整備份機制', 'desc' => '

增加備份設置,備份更加靈活

顯示備份進度

可以更改備份目錄

'); $lang->misc->feature->all['10.6.stable'][] = array('title'=>'優化和調整菜單', 'desc' => '

調整後台菜單

調整我的地盤和項目的二級菜單

'); diff --git a/module/misc/view/checkupdate.html.php b/module/misc/view/checkupdate.html.php index 1d2c232160..a382cecefd 100644 --- a/module/misc/view/checkupdate.html.php +++ b/module/misc/view/checkupdate.html.php @@ -1,7 +1,7 @@ - style='color:white; font-size:13px; text-align:center'> +server->http_user_agen, 'opera') === false) echo "bgcolor='transparent'";?> style='color:white; font-size:13px; text-align:center'> diff --git a/module/misc/view/downloadclient.html.php b/module/misc/view/downloadclient.html.php index 9ed512c6a3..31b934817e 100644 --- a/module/misc/view/downloadclient.html.php +++ b/module/misc/view/downloadclient.html.php @@ -24,7 +24,7 @@ misc->client->osList, $os, "class='form-control'");?> - select, '', 'btn btn-primary btn-wide');?> + diff --git a/module/my/control.php b/module/my/control.php index d04674d664..ef98be8e0a 100644 --- a/module/my/control.php +++ b/module/my/control.php @@ -369,6 +369,9 @@ class my extends control die(js::locate($this->createLink('my', 'profile'), 'parent')); } + $this->app->loadConfig('user'); + $this->app->loadLang('user'); + $this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->editProfile; $this->view->position[] = $this->lang->my->editProfile; $this->view->user = $this->user->getById($this->app->user->account); @@ -512,6 +515,8 @@ class my extends control { if($this->app->user->account == 'guest') die(js::alert('guest') . js::locate('back')); + $this->app->loadConfig('user'); + $this->app->loadLang('user'); $user = $this->user->getById($this->app->user->account); $this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->profile; diff --git a/module/my/model.php b/module/my/model.php index 9b45ca27c5..9d67475eb0 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -22,23 +22,29 @@ class myModel extends model public function setMenu() { /* Adjust the menu order according to the user role. */ - $role = $this->app->user->role; - if($role == 'qa') + $flowModule = $this->config->global->flow . '_my'; + $customMenu = isset($this->config->customMenu->$flowModule) ? $this->config->customMenu->$flowModule : array(); + + if(empty($customMenu)) { - unset($this->lang->my->menuOrder[20]); - $this->lang->my->menuOrder[32] = 'task'; - } - elseif($role == 'po') - { - unset($this->lang->my->menuOrder[35]); - unset($this->lang->my->menuOrder[20]); - $this->lang->my->menuOrder[17] = 'story'; - $this->lang->my->menuOrder[42] = 'task'; - } - elseif($role == 'pm') - { - unset($this->lang->my->menuOrder[40]); - $this->lang->my->menuOrder[17] = 'myProject'; + $role = $this->app->user->role; + if($role == 'qa') + { + unset($this->lang->my->menuOrder[15]); + $this->lang->my->menuOrder[32] = 'task'; + $this->lang->my->dividerMenu = str_replace(',task,', ',' , $this->lang->my->menuOrder[20] . ',', $this->lang->my->dividerMenu); + } + elseif($role == 'po') + { + $this->lang->my->menuOrder[15] = 'story'; + $this->lang->my->menuOrder[30] = 'task'; + $this->lang->my->dividerMenu = str_replace(',task,', ',story,', $this->lang->my->dividerMenu); + } + elseif($role == 'pm') + { + unset($this->lang->my->menuOrder[35]); + $this->lang->my->menuOrder[17] = 'myProject'; + } } } } diff --git a/module/my/view/changepassword.html.php b/module/my/view/changepassword.html.php index ae1700042d..618fb8c03f 100755 --- a/module/my/view/changepassword.html.php +++ b/module/my/view/changepassword.html.php @@ -22,8 +22,9 @@
+ getClientLang() == 'en') ? 'w-130px' : 'w-90px';?> - + @@ -34,7 +35,7 @@ diff --git a/module/my/view/editprofile.html.php b/module/my/view/editprofile.html.php index 156f8acf15..a61a2586c6 100644 --- a/module/my/view/editprofile.html.php +++ b/module/my/view/editprofile.html.php @@ -22,15 +22,15 @@ - + - + - + @@ -44,16 +44,16 @@ - + - + @@ -63,34 +63,19 @@
user->account;?>user->account;?> account . html::hidden('account',$user->account);?>
user->password;?> - safe->mode) ? $lang->user->placeholder->passwordStrength[$config->safe->mode] : '') . "'");?> + safe->mode) ? $lang->user->placeholder->passwordStrength[$config->safe->mode] : '') . "'");?>
my->form->lblBasic;?>
user->realname;?>realname, "class='form-control' autocomplete='off'");?>realname, "class='form-control'");?> user->email;?>email, "class='form-control' autocomplete='off'");?>email, "class='form-control'");?>
user->gender;?> user->genderList, $user->gender);?> user->birthyear;?>birthday,"class='form-date form-control' autocomplete='off'");?>birthday,"class='form-date form-control'");?>
user->join;?>
my->form->lblAccount;?>
user->account;?>account, "class='form-control' readonly='readonly' autocomplete='off'");?>account, "class='form-control' readonly='readonly'");?> user->commiter;?>commiter, "class='form-control' autocomplete='off'");?>commiter, "class='form-control'");?>
user->password;?> - safe->mode) ? $lang->user->placeholder->passwordStrength[$config->safe->mode] : '') . "'");?> + safe->mode) ? $lang->user->placeholder->passwordStrength[$config->safe->mode] : '') . "'");?>
+ + user->contactField) as $field):?> + ';?> + + + + ';?> + - - - - - - - - - - - - - - - - - - - - - - - + - - +
my->form->lblContact;?>
user->$field;?>$field, "class='form-control'");?>
user->skype;?>skype, "class='form-control' autocomplete='off'");?>user->qq;?>qq, "class='form-control' autocomplete='off'");?>
user->yahoo;?>yahoo, "class='form-control' autocomplete='off'");?>user->gtalk;?>gtalk, "class='form-control' autocomplete='off'");?>
user->wangwang;?>wangwang, "class='form-control' autocomplete='off'");?>user->mobile;?>mobile, "class='form-control' autocomplete='off'");?>
user->phone;?>phone, "class='form-control' autocomplete='off'");?> user->address;?>address, "class='form-control' autocomplete='off'");?>
address, "class='form-control'");?> user->zipcode;?>zipcode, "class='form-control' autocomplete='off'");?>zipcode, "class='form-control'");?>
diff --git a/module/my/view/profile.html.php b/module/my/view/profile.html.php index 4df8419a71..6981fc56f5 100644 --- a/module/my/view/profile.html.php +++ b/module/my/view/profile.html.php @@ -83,34 +83,27 @@ + user->contactField) as $field):?> - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/module/my/view/story.html.php b/module/my/view/story.html.php index ac9adf91b8..b010211ae6 100644 --- a/module/my/view/story.html.php +++ b/module/my/view/story.html.php @@ -82,7 +82,7 @@ $vars = "story={$story->id}"; common::printIcon('story', 'change', $vars, $story, 'list', 'fork'); common::printIcon('story', 'review', $vars, $story, 'list', 'glasses'); - common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'iframe', true); + common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true); common::printIcon('story', 'edit', $vars, $story, 'list'); if($config->global->flow != 'onlyStory') common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=¶m=0&$vars", $story, 'list', 'sitemap'); ?> diff --git a/module/my/view/testtask.html.php b/module/my/view/testtask.html.php index 7d2782b16d..86500cf681 100644 --- a/module/my/view/testtask.html.php +++ b/module/my/view/testtask.html.php @@ -63,7 +63,7 @@ if(common::hasPriv('testtask', 'delete', $task)) { $deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '', '', "title='{$lang->testtask->delete}' class='btn'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '', '', "title='{$lang->testtask->delete}' class='btn'"); } ?> diff --git a/module/my/view/todo.html.php b/module/my/view/todo.html.php index cdb2b5a8e7..c24b46d798 100644 --- a/module/my/view/todo.html.php +++ b/module/my/view/todo.html.php @@ -30,7 +30,7 @@ ?>
- +
@@ -119,7 +119,7 @@ if(common::hasPriv('todo', 'delete')) { $deleteURL = $this->createLink('todo', 'delete', "todoID=$todo->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"todoList\",confirmDelete)", '', '', "class='btn' title='{$lang->todo->delete}'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"todoList\",confirmDelete)", '', '', "class='btn' title='{$lang->todo->delete}'"); } ?> diff --git a/module/product/control.php b/module/product/control.php index b668c69b28..3a51f13e6d 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -57,6 +57,8 @@ class product extends control $branch = (int)$this->cookie->preBranch; $this->product->setMenu($this->products, $productID, $branch); + if(common::hasPriv('product', 'create')) $this->lang->modulePageActions = html::a($this->createLink('product', 'create'), " " . $this->lang->product->create, '', "class='btn btn-primary'"); + $this->view->title = $this->lang->product->index; $this->view->position[] = $this->lang->product->index; $this->display(); @@ -588,14 +590,9 @@ class product extends control $this->view->extra = $extra; $products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('id')->in(array_keys($this->products))->orderBy('`order` desc')->fetchAll('id'); - $productPairs = array(); - foreach($products as $product) $productPairs[$product->id] = $product->name; - $productsPinyin = common::convert2Pinyin($productPairs); - - foreach($products as $key => $product) $product->key = $productsPinyin[$product->name]; /* Sort products as lines' order first. */ - $lines = $this->loadModel('tree')->getLinePairs(); + $lines = $this->loadModel('tree')->getLinePairs($useShort = true); $productList = array(); foreach($lines as $id => $name) { diff --git a/module/product/css/view.css b/module/product/css/view.css index b318347e90..0f6317c919 100644 --- a/module/product/css/view.css +++ b/module/product/css/view.css @@ -1,6 +1,7 @@ .branch-list {padding-left: 0; margin: 0;} .branch-list > li {float: left; list-style: none; width: 50%; margin: 5px 0;} -.data-basic.table-data tbody > tr > th {width: 80px;} +.data-basic.table-data tbody > tr > th {width: 100px;} .block-release .panel-body, .block-dynamic .panel-body {height: 240px; overflow-x: hidden; overflow-y: auto; position: relative;} .block-release .panel-body {padding-bottom: 50px;} .block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;} +.col-4 .cell table td{word-wrap: break-word; word-break: normal;} diff --git a/module/product/lang/en.php b/module/product/lang/en.php index c3961231c2..86b99cfb6b 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -21,7 +21,7 @@ $lang->product->delete = "Delete {$lang->productCommon}"; $lang->product->deleted = 'Deleted'; $lang->product->close = 'Close'; $lang->product->select = "Select {$lang->productCommon}"; -$lang->product->mine = 'My responsibility:'; +$lang->product->mine = 'Mine:'; $lang->product->other = 'Other:'; $lang->product->closed = 'Closed'; $lang->product->updateOrder = 'Order'; @@ -58,7 +58,7 @@ $lang->product->accessDenied = "You have no access to {$lang->productCommon}." $lang->product->id = 'ID'; $lang->product->name = 'Name'; $lang->product->code = 'Alias'; -$lang->product->line = 'Product Line'; +$lang->product->line = "{$lang->productCommon} Line"; $lang->product->order = 'Sort'; $lang->product->type = 'Type'; $lang->product->status = 'Status'; @@ -81,10 +81,10 @@ $lang->product->iterationInfo = '%s Iterations'; $lang->product->iterationView = 'Details'; $lang->product->searchStory = 'Search'; -$lang->product->assignedToMe = 'Assigned To Me'; -$lang->product->openedByMe = 'Created By Me'; -$lang->product->reviewedByMe = 'Reviewed By Me'; -$lang->product->closedByMe = 'Closed By Me'; +$lang->product->assignedToMe = 'AssignedToMe'; +$lang->product->openedByMe = 'CreatedByMe'; +$lang->product->reviewedByMe = 'ReviewedByMe'; +$lang->product->closedByMe = 'ClosedByMe'; $lang->product->draftStory = 'Draft'; $lang->product->activeStory = 'Activated'; $lang->product->changedStory = 'Changed'; @@ -121,7 +121,7 @@ $lang->product->aclList['custom'] = 'Custom (Team members and Whitelist members $lang->product->storySummary = " %s Story(ies), %s hour(s) estimated, case coverage is %s on this page."; $lang->product->checkedSummary = " %total% Checked, %estimate% hour(s) estimated, case coverage is %rate%."; $lang->product->noModule = '
You have no modules
Manage now
'; -$lang->product->noProduct = 'No product. '; +$lang->product->noProduct = "No {$lang->productCommon}. "; $lang->product->noMatched = '"%s" cannot be found.' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index fc56ecd43c..544eb6ac8c 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -58,7 +58,7 @@ $lang->product->accessDenied = "您无权访问该{$lang->productCommon}"; $lang->product->id = '编号'; $lang->product->name = "{$lang->productCommon}名称"; $lang->product->code = "{$lang->productCommon}代号"; -$lang->product->line = '产品线'; +$lang->product->line = "{$lang->productCommon}线"; $lang->product->order = '排序'; $lang->product->type = "{$lang->productCommon}类型"; $lang->product->status = '状态'; @@ -120,8 +120,8 @@ $lang->product->aclList['custom'] = '自定义白名单(团队成员和白名 $lang->product->storySummary = "本页共 %s 个需求,预计 %s 个工时,用例覆盖率 %s。"; $lang->product->checkedSummary = "选中 %total% 个需求,预计 %estimate% 个工时,用例覆盖率 %rate%。"; -$lang->product->noModule = '
您现在还没有模块信息
请维护产品模块
'; -$lang->product->noProduct = '暂时没有产品。'; +$lang->product->noModule = "
您现在还没有模块信息
请维护{$lang->productCommon}模块
"; +$lang->product->noProduct = "暂时没有{$lang->productCommon}。"; $lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; diff --git a/module/product/lang/zh-tw.php b/module/product/lang/zh-tw.php index 5de942cbcb..c7d59ea368 100644 --- a/module/product/lang/zh-tw.php +++ b/module/product/lang/zh-tw.php @@ -58,7 +58,7 @@ $lang->product->accessDenied = "您無權訪問該{$lang->productCommon}"; $lang->product->id = '編號'; $lang->product->name = "{$lang->productCommon}名稱"; $lang->product->code = "{$lang->productCommon}代號"; -$lang->product->line = '產品綫'; +$lang->product->line = "{$lang->productCommon}綫"; $lang->product->order = '排序'; $lang->product->type = "{$lang->productCommon}類型"; $lang->product->status = '狀態'; @@ -120,8 +120,8 @@ $lang->product->aclList['custom'] = '自定義白名單(團隊成員和白名 $lang->product->storySummary = "本頁共 %s 個需求,預計 %s 個工時,用例覆蓋率 %s。"; $lang->product->checkedSummary = "選中 %total% 個需求,預計 %estimate% 個工時,用例覆蓋率 %rate%。"; -$lang->product->noModule = '
您現在還沒有模組信息
請維護產品模組
'; -$lang->product->noProduct = '暫時沒有產品。'; +$lang->product->noModule = "
您現在還沒有模組信息
請維護{$lang->productCommon}模組
"; +$lang->product->noProduct = "暫時沒有{$lang->productCommon}。"; $lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon; $lang->product->featureBar['browse']['allstory'] = $lang->product->allStory; diff --git a/module/product/model.php b/module/product/model.php index c971f6294f..e514e67dfc 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -370,7 +370,7 @@ class productModel extends model $lib->name = $this->lang->doclib->main['product']; $lib->type = 'product'; $lib->main = '1'; - $lib->acl = $product->acl == 'open' ? 'open' : 'private'; + $lib->acl = 'default'; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); $this->loadModel('user')->updateUserView($productID, 'product'); @@ -404,10 +404,8 @@ class productModel extends model ->exec(); if(!dao::isError()) { - if($product->acl != $oldProduct->acl) $this->dao->update(TABLE_DOCLIB)->set('acl')->eq($product->acl == 'open' ? 'open' : 'private')->where('product')->eq($productID)->exec(); - $this->file->updateObjectID($this->post->uid, $productID, 'product'); - if($product->acl != $oldProduct->acl or $product->whitelist != $oldProduct->whitelist) $this->loadModel('user')->updateUserView($productID, 'product'); + if($product->acl != 'open' or $product->acl != $oldProduct->acl or $product->whitelist != $oldProduct->whitelist) $this->loadModel('user')->updateUserView($productID, 'product'); return common::createChanges($oldProduct, $product); } } @@ -622,6 +620,18 @@ class productModel extends model $roadmap = array(); $total = 0; + $parents = array(); + foreach($plans as $planID => $plan) + { + if($plan->parent == '-1') + { + $parents[$planID] = $plan->title; + unset($plans[$planID]); + } + + if($plan->parent > 0 and isset($parents[$plan->parent])) $plan->title = $parents[$plan->parent] . ' / ' . $plan->title; + } + foreach($plans as $plan) { if(($plan->end != '0000-00-00' and strtotime($plan->end) - time() <= 0) or $plan->end == '2030-01-01') continue; diff --git a/module/product/view/ajaxgetdropmenu.html.php b/module/product/view/ajaxgetdropmenu.html.php index 502d23577c..8b46a8995a 100644 --- a/module/product/view/ajaxgetdropmenu.html.php +++ b/module/product/view/ajaxgetdropmenu.html.php @@ -74,8 +74,8 @@ foreach($products as $product) ?>
diff --git a/module/product/view/batchedit.html.php b/module/product/view/batchedit.html.php index 47aece2036..81c37c66a0 100755 --- a/module/product/view/batchedit.html.php +++ b/module/product/view/batchedit.html.php @@ -56,8 +56,8 @@
- - + + @@ -65,7 +65,7 @@ - + diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index b7bd6c5ea5..97ab02ecd1 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -336,7 +336,7 @@ { $searchKey = $withSearch ? ('data-key="' . zget($plansPinYin, $plan, '') . '"') : ''; $actionLink = $this->createLink('story', 'batchChangePlan', "planID=$planID"); - echo html::a('#', $plan, '', "$searchKey onclick=\"setFormAction('$actionLink', 'hiddenwin')\""); + echo html::a('#', $plan, '', "$searchKey title='{$plan}' onclick=\"setFormAction('$actionLink', 'hiddenwin')\""); } ?> diff --git a/module/product/view/create.html.php b/module/product/view/create.html.php index e3aa0d7034..89db5640aa 100644 --- a/module/product/view/create.html.php +++ b/module/product/view/create.html.php @@ -23,11 +23,11 @@ - + - + diff --git a/module/product/view/edit.html.php b/module/product/view/edit.html.php index db23def9eb..405cf3bed2 100644 --- a/module/product/view/edit.html.php +++ b/module/product/view/edit.html.php @@ -27,11 +27,11 @@ - + - + diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index c3d3a3fcce..35ebde8e62 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -11,228 +11,227 @@ */ ?> -
-
-
-
-
-
-
product->roadmap;?>
-
-
-
- -
- createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?> -
+
+
+
+
+
+
+
product->roadmap;?>
-
-
-
-
-
product->latestDynamic;?>
- -
-
-
    - -
  • major) echo "class='active'";?>> -
    - date;?> - actor) . ' ' . $action->actionLabel . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> -
    +
    +
    +
    + createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?>
-
- - +
+
+
+
+
product->latestDynamic;?>
+ +
+
+
    + +
  • major) echo "class='active'";?>> +
    + date;?> + actor) . ' ' . $action->actionLabel . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> +
    +
  • + +
+
-
-
- id"; - $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); - common::printBack($browseLink); - if(!$product->deleted) - { - echo "
"; - if($product->status != 'closed') - { - common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); - echo "
"; - } - - common::printIcon('product', 'edit', $params, $product); - common::printIcon('product', 'delete', $params, $product, 'button', '', 'hiddenwin'); - } - ?> -
+
+ +
-
-
-
-
-
-

id;?> code;?> name;?>

-
-

desc;?>

-

- product->typeList, $product->type);?> - product->statusList, $product->status);?> - deleted):?> - product->deleted;?> - -

-
+
+
+ id"; + $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); + common::printBack($browseLink); + if(!$product->deleted) + { + echo "
"; + if($product->status != 'closed') + { + common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); + echo "
"; + } + + common::printIcon('product', 'edit', $params, $product); + common::printIcon('product', 'delete', $params, $product, 'button', 'trash', 'hiddenwin'); + } + ?> +
+
+
+
+
+
+
+
+

id;?> code;?> name;?>

+
+

desc;?>

+

+ product->typeList, $product->type);?> + product->statusList, $product->status);?> + deleted):?> + product->deleted;?> + +

- type == 'platform'):?> -
-
product->branchName['platform'];?>
- -
- -
-
product->manager;?>
-
-
user->last;?> last;?>
user->skype;?>skype) echo html::a("callto://$user->skype", $user->skype);?>
user->qq;?>qq) echo html::a("tencent://message/?uin=$user->qq", $user->qq);?>
user->yahoo;?>yahoo;?>
user->gtalk;?>gtalk;?>
user->wangwang;?>wangwang;?>
user->mobile;?>mobile;?>
user->phone;?>phone;?>user->$field;?> + $field) + { + echo html::a("callto://$user->skype", $user->skype); + } + elseif($field == 'qq' and $user->$field) + { + echo html::a("tencent://message/?uin=$user->qq", $user->qq); + } + else + { + echo $user->$field; + } + ?> +
user->address;?> address;?>
name, "class='form-control' autocomplete='off'");?>code, "class='form-control' autocomplete='off'");?>name, "class='form-control'");?>code, "class='form-control'");?> ' style='overflow:visible'>line, "class='form-control chosen'");?> ' style='overflow:visible'>PO, "class='form-control chosen'");?> ' style='overflow:visible'>QD, "class='form-control chosen'");?>'>product->typeList, $products[$productID]->type, "class='form-control'");?> '>product->statusList, $products[$productID]->status, "class='form-control'");?> '>desc), "rows='1' class='form-control autosize'");?>order, "class='form-control' autocomplete='off'");?>order, "class='form-control'");?>
product->name;?>
product->code;?>
product->line;?>
product->name;?>name, "class='form-control' autocomplete='off' required");?>name, "class='form-control' required");?>
product->code;?>code, "class='form-control' autocomplete='off' required");?>code, "class='form-control' required");?>
product->line;?>
- - - - - - - - - - - - -
productCommon;?>PO);?> product->qa;?>QD);?>
product->release;?>RD);?>
-
-
-
-
product->basicInfo;?>
-
- - - - - - - - - - - - - - - - - - - acl == 'custom'):?> - - - - - - -
product->line;?>line);?>
story->openedBy?>createdBy);?>
story->openedDate?>createdDate, DT_DATE1);?>
product->acl;?>product->aclList[$product->acl];?>
product->whitelist;?> - - whitelist); - foreach($whitelist as $groupID) if(isset($groups[$groupID])) echo $groups[$groupID] . ' '; - ?> - -
-
-
- global->flow != 'onlyTest'):?> -
-
product->otherInfo;?>
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
story->statusList['active'] . $lang->story->common;?>stories['active']?>product->plans?>plans?>product->bugs?>bugs?>
story->statusList['changed'] . $lang->story->common;?>stories['changed']?>product->projects?>projects?>product->cases?>cases?>
story->statusList['draft'] . $lang->story->common;?>stories['draft']?>product->builds?>builds?>product->docs?>docs?>
story->statusList['closed'] . $lang->story->common;?>stories['closed']?>product->releases?>releases?>
-
-
-
+ type == 'platform'):?> +
+
product->branchName['platform'];?>
+ +
+ +
+
product->manager;?>
+
+ + + + + + + + + + + + + +
productCommon;?>PO);?> product->qa;?>QD);?>
product->release;?>RD);?>
+
+
+
+
product->basicInfo;?>
+
+ + + + + + + + + + + + + + + + + + + acl == 'custom'):?> + + + + + + +
product->line;?>line);?>
story->openedBy?>createdBy);?>
story->openedDate?>createdDate, DT_DATE1);?>
product->acl;?>product->aclList[$product->acl];?>
product->whitelist;?> + + whitelist); + foreach($whitelist as $groupID) if(isset($groups[$groupID])) echo $groups[$groupID] . ' '; + ?> + +
+
+
+ global->flow != 'onlyTest'):?> +
+
product->otherInfo;?>
+
+ + + app->getClientLang() == 'en' ? ' ' : '';?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
story->statusList['active'] . $space . $lang->story->common;?>stories['active']?>product->plans?>plans?>product->bugs?>bugs?>
story->statusList['changed'] . $space . $lang->story->common;?>stories['changed']?>product->projects?>projects?>product->cases?>cases?>
story->statusList['draft'] . $space . $lang->story->common;?>stories['draft']?>product->builds?>builds?>product->docs?>docs?>
story->statusList['closed'] . $space . $lang->story->common;?>stories['closed']?>product->releases?>releases?>
+
+
+
-
diff --git a/module/productplan/control.php b/module/productplan/control.php index 78c889cc6c..abad7e8419 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -42,7 +42,7 @@ class productplan extends control * @access public * @return void */ - public function create($product = '', $branch = 0) + public function create($product = '', $branch = 0, $parent = 0) { if(!empty($_POST)) { @@ -54,7 +54,7 @@ class productplan extends control } $this->commonAction($product, $branch); - $lastPlan = $this->productplan->getLast($product); + $lastPlan = $this->productplan->getLast($product, $branch, $parent); if($lastPlan) { $timestamp = strtotime($lastPlan->end); @@ -65,11 +65,15 @@ class productplan extends control $begin = date('Y-m-d', strtotime("+$delta days", $timestamp)); } $this->view->begin = $lastPlan ? $begin : ''; + if($parent) $this->view->parentPlan = $this->productplan->getById($parent); - $this->view->title = $this->view->product->name . $this->lang->colon . $this->lang->productplan->create; - $this->view->lastPlan = $lastPlan; + $this->view->title = $this->view->product->name . $this->lang->colon . $this->lang->productplan->create; $this->view->position[] = $this->lang->productplan->common; $this->view->position[] = $this->lang->productplan->create; + + $this->view->lastPlan = $lastPlan; + $this->view->branch = $branch; + $this->view->parent = $parent; $this->display(); } @@ -206,6 +210,7 @@ class productplan extends control $this->view->title = $products[$productID] . $this->lang->colon . $this->lang->productplan->browse; $this->view->position[] = $this->lang->productplan->browse; $this->view->productID = $productID; + $this->view->branch = $branch; $this->view->browseType = $browseType; $this->view->orderBy = $orderBy; $this->view->plans = $this->productplan->getList($productID, $branch, $browseType, $pager, $sort); @@ -265,6 +270,9 @@ class productplan extends control $orderBy = str_replace('id', 'order', $orderBy); } + if($plan->parent > 0) $this->view->parentPlan = $this->productplan->getById($plan->parent); + if($plan->parent == '-1') $this->view->childrenPlans = $this->productplan->getChildren($plan->id); + $this->loadModel('datatable'); $this->view->modulePairs = $this->loadModel('tree')->getOptionMenu($plan->product, 'story'); $this->view->title = "PLAN #$plan->id $plan->title/" . $products[$plan->product]; diff --git a/module/productplan/css/browse.css b/module/productplan/css/browse.css index 966f3b4cd7..c650c25ecb 100644 --- a/module/productplan/css/browse.css +++ b/module/productplan/css/browse.css @@ -1 +1,13 @@ .table td.content { overflow:hidden; text-overflow:ellipsis; white-space:nowrap;} + +.table-children {border-left: 2px solid #cbd0db; border-right: 2px solid #cbd0db;} +.table tbody > tr.table-children.table-child-top {border-top: 2px solid #cbd0db;} +.table tbody > tr.table-children.table-child-bottom {border-bottom: 2px solid #cbd0db;} +.table td.has-child > a {max-width: 90%; max-width: calc(100% - 30px); display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.table td.has-child > .task-toggle {color: #838a9d; position: relative; top: 1px;} +.table td.has-child > .task-toggle:hover {color: #006af1; cursor: pointer;} +.table td.has-child > .task-toggle > .icon {font-size: 16px; display: inline-block; transition: transform .2s; -ms-transform:rotate(-90deg); -moz-transform:rotate(-90deg); -o-transform:rotate(-90deg); -webkit-transform:rotate(-90deg); transform: rotate(-90deg);} +.table td.has-child > .task-toggle > .icon:before {text-align: left;} +.table td.has-child > .task-toggle.collapsed > .icon {-ms-transform:rotate(90deg); -moz-transform:rotate(90deg); -o-transform:rotate(90deg); -webkit-transform:rotate(90deg); transform: rotate(90deg);} +.main-table tbody > tr.table-children > td:first-child::before {width: 3px;} +@-moz-document url-prefix() {.main-table tbody > tr.table-children > td:first-child::before {width: 4px;}} diff --git a/module/productplan/js/browse.js b/module/productplan/js/browse.js new file mode 100644 index 0000000000..3cb238d9ef --- /dev/null +++ b/module/productplan/js/browse.js @@ -0,0 +1,10 @@ +$(document).on('click', '.task-toggle', function(e) +{ + var $toggle = $(this); + var id = $(this).data('id'); + var isCollapsed = $toggle.toggleClass('collapsed').hasClass('collapsed'); + $toggle.closest('[data-ride="table"]').find('tr.parent-' + id).toggle(!isCollapsed); + + e.stopPropagation(); + e.preventDefault(); +}); diff --git a/module/productplan/js/view.js b/module/productplan/js/view.js index 27a3defb47..08c0e88858 100644 --- a/module/productplan/js/view.js +++ b/module/productplan/js/view.js @@ -9,6 +9,8 @@ function showLink(planID, type, orderBy, param) $linkBox.find('[data-ride="table"]').table(); $.toggleQueryBox(true, $linkBox.find('#queryBox')); }); + + $('.actions').find("a[href*='" + type + "']").addClass('hidden'); } $(function() diff --git a/module/productplan/lang/en.php b/module/productplan/lang/en.php index 024d866410..72c1a2bd4e 100644 --- a/module/productplan/lang/en.php +++ b/module/productplan/lang/en.php @@ -27,6 +27,7 @@ $lang->productplan->batchUnlinkStory = "Batch Unlink"; $lang->productplan->linkedStories = 'Linked Story'; $lang->productplan->unlinkedStories = 'Unlinked Story'; $lang->productplan->updateOrder = 'Sort'; +$lang->productplan->createChildren = "Create subplans"; $lang->productplan->linkBug = "Link Bug"; $lang->productplan->unlinkBug = "Unlink Bug"; @@ -54,6 +55,8 @@ $lang->productplan->stories = 'Stories'; $lang->productplan->bugs = 'Bugs'; $lang->productplan->hour = 'Hour'; $lang->productplan->project = $lang->projectCommon; +$lang->productplan->parent = "Father plan"; +$lang->productplan->children= "Sub plan"; $lang->productplan->endList[7] = '1 Week'; $lang->productplan->endList[14] = '2 Weeks'; diff --git a/module/productplan/lang/zh-cn.php b/module/productplan/lang/zh-cn.php index 37f4c71a20..61b6afdfba 100644 --- a/module/productplan/lang/zh-cn.php +++ b/module/productplan/lang/zh-cn.php @@ -27,6 +27,7 @@ $lang->productplan->batchUnlinkStory = "批量移除需求"; $lang->productplan->linkedStories = '需求'; $lang->productplan->unlinkedStories = '未关联需求'; $lang->productplan->updateOrder = '排序'; +$lang->productplan->createChildren = "创建子计划"; $lang->productplan->linkBug = "关联Bug"; $lang->productplan->unlinkBug = "移除Bug"; @@ -54,6 +55,8 @@ $lang->productplan->stories = '需求数'; $lang->productplan->bugs = 'Bug数'; $lang->productplan->hour = '工时'; $lang->productplan->project = $lang->projectCommon; +$lang->productplan->parent = "父计划"; +$lang->productplan->children= "子计划"; $lang->productplan->endList[7] = '一星期'; $lang->productplan->endList[14] = '两星期'; diff --git a/module/productplan/lang/zh-tw.php b/module/productplan/lang/zh-tw.php index bb5c6c642d..4680177376 100644 --- a/module/productplan/lang/zh-tw.php +++ b/module/productplan/lang/zh-tw.php @@ -27,6 +27,7 @@ $lang->productplan->batchUnlinkStory = "批量移除需求"; $lang->productplan->linkedStories = '需求'; $lang->productplan->unlinkedStories = '未關聯需求'; $lang->productplan->updateOrder = '排序'; +$lang->productplan->createChildren = "創建子計劃"; $lang->productplan->linkBug = "關聯Bug"; $lang->productplan->unlinkBug = "移除Bug"; @@ -54,6 +55,8 @@ $lang->productplan->stories = '需求數'; $lang->productplan->bugs = 'Bug數'; $lang->productplan->hour = '工時'; $lang->productplan->project = $lang->projectCommon; +$lang->productplan->parent = "父計劃"; +$lang->productplan->children= "子計劃"; $lang->productplan->endList[7] = '一星期'; $lang->productplan->endList[14] = '兩星期'; diff --git a/module/productplan/model.php b/module/productplan/model.php index 93918c6b51..aaf12c489b 100644 --- a/module/productplan/model.php +++ b/module/productplan/model.php @@ -47,14 +47,18 @@ class productplanModel extends model * Get last plan. * * @param int $productID + * @param int $branch + * @param int $parent * @access public - * @return void + * @return object */ - public function getLast($productID, $branch = 0) + public function getLast($productID, $branch = 0, $parent = 0) { return $this->dao->select('*')->from(TABLE_PRODUCTPLAN) ->where('deleted')->eq(0) - ->andWhere('product')->eq($productID) + ->beginIF($parent <= 0)->andWhere('parent')->le((int)$parent)->fi() + ->beginIF($parent > 0)->andWhere('parent')->eq((int)$parent)->fi() + ->andWhere('product')->eq((int)$productID) ->andWhere('end')->ne('2030-01-01') ->beginIF($branch)->andWhere('branch')->eq($branch)->fi() ->orderBy('end desc') @@ -75,8 +79,8 @@ class productplanModel extends model */ public function getList($product = 0, $branch = 0, $browseType = 'all', $pager = null, $orderBy = 'begin_desc') { - $date = date('Y-m-d'); - $productPlans = $this->dao->select('t1.*,t2.project')->from(TABLE_PRODUCTPLAN)->alias('t1') + $date = date('Y-m-d'); + $plans = $this->dao->select('t1.*,t2.project')->from(TABLE_PRODUCTPLAN)->alias('t1') ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t2.plan = t1.id and t2.product = ' . $product) ->where('t1.product')->eq($product) ->andWhere('t1.deleted')->eq(0) @@ -87,21 +91,64 @@ class productplanModel extends model ->page($pager) ->fetchAll('id'); - if(!empty($productPlans)) + if(!empty($plans)) { - foreach($productPlans as $productPlan) + $plans = $this->reorder4Children($plans); + $planIdList = array_keys($plans); + + $product = $this->loadModel('product')->getById($product); + if($product->type == 'normal') { - $stories = $this->dao->select('id,estimate')->from(TABLE_STORY) - ->where("CONCAT(',', plan, ',')")->like("%,{$productPlan->id},%") + $storyGroups = $this->dao->select('id,plan,estimate')->from(TABLE_STORY) + ->where("plan")->in($planIdList) ->andWhere('deleted')->eq(0) - ->fetchPairs('id', 'estimate'); - $productPlan->stories = count($stories); - $productPlan->bugs = $this->dao->select()->from(TABLE_BUG)->where("plan")->eq($productPlan->id)->andWhere('deleted')->eq(0)->count(); - $productPlan->hour = array_sum($stories); - $productPlan->projectID = $productPlan->project; + ->fetchGroup('plan', 'id'); + } + + $bugs = $this->dao->select('*')->from(TABLE_BUG)->where("plan")->in($planIdList)->andWhere('deleted')->eq(0)->fetchGroup('plan', 'id'); + $parentStories = $parentBugs = $parentHour = array(); + foreach($plans as $plan) + { + if($product->type == 'normal') + { + $stories = zget($storyGroups, $plan->id, array()); + $storyPairs = array(); + foreach($stories as $story) $storyPairs[$story->id] = $story->estimate; + } + else + { + $storyPairs = $this->dao->select('id,estimate')->from(TABLE_STORY) + ->where("CONCAT(',', plan, ',')")->like("%,{$plan->id},%") + ->andWhere('deleted')->eq(0) + ->fetchPairs('id', 'estimate'); + } + $plan->stories = count($storyPairs); + $plan->bugs = isset($bugs[$plan->id]) ? count($bugs[$plan->id]) : 0; + $plan->hour = array_sum($storyPairs); + $plan->projectID = $plan->project; + + if(!isset($parentStories[$plan->parent])) $parentStories[$plan->parent] = 0; + if(!isset($parentBugs[$plan->parent])) $parentBugs[$plan->parent] = 0; + if(!isset($parentHour[$plan->parent])) $parentHour[$plan->parent] = 0; + + $parentStories[$plan->parent] += $plan->stories; + $parentBugs[$plan->parent] += $plan->bugs; + $parentHour[$plan->parent] += $plan->hour; + } + + unset($parentStories[0]); + unset($parentBugs[0]); + unset($parentHour[0]); + foreach($parentStories as $parentID => $count) + { + if(!isset($plans[$parentID])) continue; + $plan = $plans[$parentID]; + $plan->stories += $count; + $plan->bugs += $parentBugs[$parentID]; + $plan->hour += $parentHour[$parentID]; } } - return $productPlans; + return $plans; } /** @@ -116,17 +163,17 @@ class productplanModel extends model public function getPairs($product = 0, $branch = 0, $expired = '') { $date = date('Y-m-d'); - $plans = $this->dao->select('id,CONCAT(title, " [", begin, " ~ ", end, "]") as title')->from(TABLE_PRODUCTPLAN) + $plans = $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in($product) ->andWhere('deleted')->eq(0) ->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi() ->beginIF($expired == 'unexpired')->andWhere('end')->ge($date)->fi() ->orderBy('begin desc') - ->fetchPairs(); + ->fetchAll('id'); if($expired == 'unexpired') { - $plans += $this->dao->select('id,CONCAT(title, " [", begin, " ~ ", end, "]") as title')->from(TABLE_PRODUCTPLAN) + $plans += $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in($product) ->andWhere('deleted')->eq(0) ->andWhere('end')->lt($date) @@ -134,14 +181,25 @@ class productplanModel extends model ->beginIF($plans)->andWhere("id")->notIN(array_keys($plans))->fi() ->orderBy('begin desc') ->limit(5) - ->fetchPairs(); + ->fetchAll('id'); } - foreach($plans as $key => $value) + $plans = $this->reorder4Children($plans); + $planPairs = array(); + $parent = 0; + $parentTitle = ''; + foreach($plans as $plan) { - $plans[$key] = str_replace('[2030-01-01 ~ 2030-01-01]', '[' . $this->lang->productplan->future . ']', $value); + if($plan->parent == '-1') + { + $parent = $plan->id; + $parentTitle = $plan->title; + } + if($plan->parent > 0 and $plan->parent == $parent) $plan->title = $parentTitle . ' /' . $plan->title; + $planPairs[$plan->id] = $plan->title . " [{$plan->begin} ~ {$plan->end}]"; + if($plan->begin == '2030-01-01' and $plan->end == '2030-01-01') $planPairs[$plan->id] = $plan->title . ' ' . $this->lang->productplan->future; } - return array('' => '') + $this->processFuture($plans); + return array('' => '') + $planPairs; } /** @@ -155,27 +213,43 @@ class productplanModel extends model public function getPairsForStory($product = 0, $branch = 0) { $date = date('Y-m-d'); - $plans = $this->dao->select('id, CONCAT(title, " [", begin, " ~ ", end, "]") AS title')->from(TABLE_PRODUCTPLAN) + $plans = $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in($product) ->andWhere('deleted')->eq(0) ->andWhere('end')->ge($date) ->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi() ->orderBy('begin desc') - ->fetchPairs(); + ->fetchAll('id'); if(!$plans) { - $plans = $this->dao->select('id, CONCAT(title, " [", begin, " ~ ", end, "]") AS title')->from(TABLE_PRODUCTPLAN) + $plans = $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in($product) ->andWhere('deleted')->eq(0) ->andWhere('end')->lt($date) ->beginIF($branch)->andWhere("branch")->in("0,$branch")->fi() ->orderBy('begin desc') ->limit(5) - ->fetchPairs(); + ->fetchAll('id'); } - return array('' => '') + $this->processFuture($plans); + $plans = $this->reorder4Children($plans); + $planPairs = array(); + $parent = 0; + $parentTitle = ''; + foreach($plans as $plan) + { + if($plan->parent == '-1') + { + $parent = $plan->id; + $parentTitle = $plan->title; + } + if($plan->parent > 0 and $plan->parent == $parent) $plan->title = $parentTitle . ' /' . $plan->title; + $planPairs[$plan->id] = $plan->title . " [{$plan->begin} ~ {$plan->end}]"; + if($plan->begin == '2030-01-01' and $plan->end == '2030-01-01') $planPairs[$plan->id] = $plan->title . ' ' . $this->lang->productplan->future; + } + + return array('' => '') + $planPairs; } /** @@ -187,10 +261,39 @@ class productplanModel extends model */ public function getForProducts($products) { - return array('' => '') + $this->dao->select('id,title')->from(TABLE_PRODUCTPLAN) + $plans = $this->dao->select('id,title,parent,begin,end')->from(TABLE_PRODUCTPLAN) ->where('product')->in(array_keys($products)) ->andWhere('deleted')->eq(0) - ->orderBy('begin desc')->fetchPairs(); + ->orderBy('begin desc') + ->fetchAll('id'); + + $plans = $this->reorder4Children($plans); + $planPairs = array(); + $parent = 0; + $parentTitle = ''; + foreach($plans as $plan) + { + if($plan->parent == '-1') + { + $parent = $plan->id; + $parentTitle = $plan->title; + } + if($plan->parent > 0 and $plan->parent == $parent) $plan->title = $parentTitle . ' /' . $plan->title; + $planPairs[$plan->id] = $plan->title; + } + return array('' => '') + $planPairs; + } + + /** + * Get Children plan. + * + * @param int $planID + * @access public + * @return array + */ + public function getChildren($planID) + { + return $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('parent')->eq((int)$planID)->andWhere('deleted')->eq('0')->fetchAll(); } /** @@ -228,6 +331,7 @@ class productplanModel extends model $planID = $this->dao->lastInsertID(); $this->file->updateObjectID($this->post->uid, $planID, 'plan'); $this->loadModel('score')->create('productplan', 'create', $planID); + if(!empty($plan->parent)) $this->dao->update(TABLE_PRODUCTPLAN)->set('parent')->eq('-1')->where('id')->eq($plan->parent)->andWhere('parent')->eq('0')->exec(); return $planID; } } @@ -425,18 +529,41 @@ class productplanModel extends model } /** - * Process future of plans. - * - * @param array $plans + * Reorder for children plans. + * + * @param array $plans * @access public * @return array */ - public function processFuture($plans) + public function reorder4Children($plans) { - foreach($plans as $key => $value) + /* Get children and unset. */ + $childrenPlans = array(); + foreach($plans as $plan) { - $plans[$key] = str_replace('[2030-01-01 ~ 2030-01-01]', '[' . $this->lang->productplan->future . ']', $value); + if($plan->parent > 0) + { + $childrenPlans[$plan->parent][$plan->id] = $plan; + if(isset($plans[$plan->parent])) unset($plans[$plan->id]); + } } + + if(!empty($childrenPlans)) + { + /* Append to parent plan. */ + $reorderedPlans = array(); + foreach($plans as $plan) + { + $reorderedPlans[$plan->id] = $plan; + if(isset($childrenPlans[$plan->id])) + { + $plan->children = count($childrenPlans[$plan->id]); + foreach($childrenPlans[$plan->id] as $childrenPlan) $reorderedPlans[$childrenPlan->id] = $childrenPlan; + } + } + $plans = $reorderedPlans; + } + return $plans; } } diff --git a/module/productplan/view/batchedit.html.php b/module/productplan/view/batchedit.html.php index 64546413f9..fa7b3a3d96 100644 --- a/module/productplan/view/batchedit.html.php +++ b/module/productplan/view/batchedit.html.php @@ -31,7 +31,7 @@ id . html::hidden("id[$plan->id]", $plan->id);?> - id]", $plan->title, "class='form-control' autocomplete='off'")?> + id]", $plan->title, "class='form-control'")?> id]", $plan->desc, "class='form-control' rows='1'")?> id]", $plan->begin, "class='form-control form-date'")?> id]", $plan->end, "class='form-control form-date'")?> diff --git a/module/productplan/view/browse.html.php b/module/productplan/view/browse.html.php index 006ce7b6f3..7e3d59eade 100644 --- a/module/productplan/view/browse.html.php +++ b/module/productplan/view/browse.html.php @@ -52,7 +52,7 @@ idAB);?> - productplan->title);?> + productplan->title);?> session->currentProductType != 'normal'):?> product->branch);?> @@ -63,14 +63,33 @@ productplan->hour;?> productplan->project;?> productplan->desc;?> - actions;?> + actions;?> loadModel('file');?> - file->replaceImgURL($plan, 'desc');?> - + file->replaceImgURL($plan, 'desc'); + if($plan->parent == '-1') + { + $parent = $plan->id; + $children = $plan->children; + } + if($plan->parent == 0) $parent = 0; + if(!empty($parent) and $plan->parent > 0 and $plan->parent != $parent) $parent = 0; + if($plan->parent <= 0) $i = 0; + + $class = ''; + if(!empty($parent) and $plan->parent == $parent) + { + $class = "table-children parent-{$parent}"; + $class .= $i == 0 ? ' table-child-top' : ''; + $class .= ($i + 1 == $children) ? ' table-child-bottom' : ''; + $i++; + } + ?> + id => '')) . html::a(helper::createLink('productplan', 'view', "planID=$plan->id"), sprintf('%03d', $plan->id));?> @@ -78,7 +97,12 @@ id);?> - id"), $plan->title);?> + ' title="title?>"> + id"), $plan->title); + if($plan->parent == '-1') echo ''; + ?> + session->currentProductType != 'normal'):?> branch];?> @@ -95,11 +119,16 @@ if(common::hasPriv('productplan', 'linkStory')) echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), '', '', "class='btn' title='{$lang->productplan->linkStory}'"); if(common::hasPriv('productplan', 'linkBug') and $config->global->flow != 'onlyStory') echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), '', '', "class='btn' title='{$lang->productplan->linkBug}'"); common::printIcon('productplan', 'edit', "planID=$plan->id", $plan, 'list'); + if(common::hasPriv('productplan', 'create')) + { + if($plan->parent > '0') echo " "; + if($plan->parent <= '0') echo html::a($this->createLink('productplan', 'create', "product=$productID&branch=$branch&parent={$plan->id}"), "", '', "class='btn' title='{$this->lang->productplan->children}'"); + } if(common::hasPriv('productplan', 'delete', $plan)) { $deleteURL = $this->createLink('productplan', 'delete', "planID=$plan->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"productplanList\",confirmDelete)", '', '', "class='btn' title='{$lang->productplan->delete}'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"productplanList\",confirmDelete)", '', '', "class='btn' title='{$lang->productplan->delete}'"); } ?> diff --git a/module/productplan/view/create.html.php b/module/productplan/view/create.html.php index ed1e8ea6d8..0c8fc0e5ad 100644 --- a/module/productplan/view/create.html.php +++ b/module/productplan/view/create.html.php @@ -17,11 +17,17 @@
-

productplan->create;?>

+

productplan->createChildren : $lang->productplan->create;?>

+ + + + + + @@ -32,9 +38,10 @@ + - + @@ -61,6 +68,8 @@ id);?> + branch);?> + diff --git a/module/productplan/view/edit.html.php b/module/productplan/view/edit.html.php index f8121b23b5..9764cab654 100644 --- a/module/productplan/view/edit.html.php +++ b/module/productplan/view/edit.html.php @@ -34,7 +34,7 @@ - + diff --git a/module/productplan/view/linkbug.html.php b/module/productplan/view/linkbug.html.php index 23d7edb751..8a48f77bae 100644 --- a/module/productplan/view/linkbug.html.php +++ b/module/productplan/view/linkbug.html.php @@ -60,7 +60,7 @@
- productplan->linkBug, '', 'btn');?> + productplan->linkBug, '', 'btn btn-secondary');?>
diff --git a/module/productplan/view/linkstory.html.php b/module/productplan/view/linkstory.html.php index fdf527916f..3795ad1962 100644 --- a/module/productplan/view/linkstory.html.php +++ b/module/productplan/view/linkstory.html.php @@ -68,7 +68,7 @@
- productplan->linkStory, '', 'btn');?> + productplan->linkStory, '', 'btn btn-secondary');?>
diff --git a/module/productplan/view/view.html.php b/module/productplan/view/view.html.php index 4f2b4c81b2..fe944726c9 100644 --- a/module/productplan/view/view.html.php +++ b/module/productplan/view/view.html.php @@ -37,23 +37,9 @@ deleted) { - echo "
"; - $batchMisc = common::hasPriv('story', 'batchCreate') ? 'btn btn-link' : "disabled"; - $batchLink = common::hasPriv('story', 'batchCreate') ? $this->createLink('story', 'batchCreate', "productID=$plan->product&branch=$plan->branch&moduleID=0&story=0&project=0&plan={$plan->id}") : '#'; - echo html::a($batchLink, "" . $lang->story->batchCreate . '', '', "class='$batchMisc'"); - common::printIcon('story', 'create', "productID=$plan->product&branch=$plan->branch&moduleID=0&storyID=0&projectID=0&bugID=0&planID=$plan->id", $plan, 'button', 'plus'); - echo "
"; - - if(common::hasPriv('productplan', 'linkStory')) - { - echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), ' ' . $lang->productplan->linkStory, '', "class='btn btn-link'"); - } - if(common::hasPriv('productplan', 'linkBug') and $config->global->flow != 'onlyStory') - { - echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), ' ' . $lang->productplan->linkBug, '', "class='btn btn-link'"); - } - common::printIcon('productplan', 'edit', "planID=$plan->id", $plan); - common::printIcon('productplan', 'delete', "planID=$plan->id", $plan, 'button', '', 'hiddenwin'); + if(common::hasPriv('productplan', 'create') and $plan->parent <= '0') echo html::a($this->createLink('productplan', 'create', "product={$plan->product}&branch={$plan->branch}&parent={$plan->id}"), " " . $this->lang->productplan->children , '', "class='btn btn-link' title='{$this->lang->productplan->children}'"); + if(common::hasPriv('productplan', 'edit')) echo html::a($this->createLink('productplan', 'edit', "planID=$plan->id"), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->edit}'"); + if(common::hasPriv('productplan', 'delete')) echo html::a($this->createLink('productplan', 'delete', "planID=$plan->id"), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->delete}' target='hiddenwin'"); } ?>
@@ -70,12 +56,33 @@
'> -
- id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'");?> + deleted):?> +
+ +
+ + id, \"story\")", ' ' . $lang->productplan->linkStory, '', "class='btn btn-primary'");?>
+ + id&orderBy=$orderBy");?>">
productplan->parent;?>title;?>
productplan->product;?> name;?>
productplan->title;?> productplan->last . ': ' . $lastPlan->title . ')';?>
productplan->title;?>title, "class='form-control' autocomplete='off' required");?>title, "class='form-control' required");?>
productplan->begin;?>
productplan->title;?> + parent > 0):?> + + + + + type != 'normal'):?> @@ -430,6 +443,16 @@ + parent == '-1'):?> + + + + + diff --git a/module/project/control.php b/module/project/control.php index 269da8c35f..878fe02b3b 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -45,6 +45,8 @@ class project extends control if($this->app->viewType != 'mhtml') unset($this->lang->project->menu->index); $this->commonAction($projectID); //$this->project->setMenu($this->projects, key($this->projects)); + + if(common::hasPriv('project', 'create')) $this->lang->modulePageActions = html::a($this->createLink('project', 'create'), " " . $this->lang->project->create, '', "class='btn btn-primary'"); $this->view->title = $this->lang->project->index; $this->view->position[] = $this->lang->project->index; @@ -283,11 +285,57 @@ class project extends control } elseif($groupBy == 'assignedTo') { - $groupTasks[$task->assignedToRealName][] = $task; + if(isset($task->team)) + { + foreach($task->team as $team) + { + $cloneTask = clone $task; + $cloneTask->assignedTo = $team->account; + $cloneTask->estimate = $team->estimate; + $cloneTask->consumed = $team->consumed; + $cloneTask->left = $team->left; + if($team->left == 0) $cloneTask->status = 'done'; + + $realname = zget($users, $team->account); + $cloneTask->assignedToRealName = $realname; + $groupTasks[$realname][] = $cloneTask; + } + } + else + { + $groupTasks[$task->assignedToRealName][] = $task; + } } elseif($groupBy == 'finishedBy') { - $groupTasks[$users[$task->finishedBy]][] = $task; + if(isset($task->team)) + { + $task->consumed = $task->estimate = $task->left = 0; + foreach($task->team as $team) + { + if($team->left != 0) + { + $task->estimate += $team->estimate; + $task->consumed += $team->consumed; + $task->left += $team->left; + continue; + } + + $cloneTask = clone $task; + $cloneTask->finishedBy = $team->account; + $cloneTask->estimate = $team->estimate; + $cloneTask->consumed = $team->consumed; + $cloneTask->left = $team->left; + $cloneTask->status = 'done'; + $realname = zget($users, $team->account); + $groupTasks[$realname][] = $cloneTask; + } + if(!empty($task->left)) $groupTasks[$users[$task->finishedBy]][] = $task; + } + else + { + $groupTasks[$users[$task->finishedBy]][] = $task; + } } elseif($groupBy == 'closedBy') { @@ -1000,10 +1048,12 @@ class project extends control if(!empty($_POST)) { $projectID = $copyProjectID == '' ? $this->project->create() : $this->project->create($copyProjectID); + if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); + $this->project->updateProducts($projectID); if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); - $this->loadModel('action')->create('project', $projectID, 'opened'); + $this->loadModel('action')->create('project', $projectID, 'opened', '', join(',', $_POST['products'])); $planID = reset($_POST['plans']); if(!empty($planID)) @@ -1056,6 +1106,8 @@ class project extends control if(!empty($_POST)) { $changes = $this->project->update($projectID); + if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); + $this->project->updateProducts($projectID); if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError())); if($action == 'undelete') @@ -1659,7 +1711,7 @@ class project extends control * @access public * @return void */ - public function manageProducts($projectID, $from='') + public function manageProducts($projectID, $from = '') { /* use first project if projectID does not exist. */ if(!isset($this->projects[$projectID])) $projectID = key($this->projects); @@ -1671,6 +1723,8 @@ class project extends control $this->project->updateProducts($projectID); if(dao::isError()) die(js::error(dao::getError())); + + $this->loadModel('action')->create('project', $projectID, 'Managed', '', join(',', $_POST['products'])); die(js::locate($browseProjectLink)); } @@ -1718,7 +1772,7 @@ class project extends control if(!empty($_POST)) { $this->project->manageMembers($projectID); - $this->locate($this->createLink('project', 'team', "projectID=$projectID")); + die(js::locate($this->createLink('project', 'team', "projectID=$projectID"), 'parent')); } /* Load model. */ diff --git a/module/project/css/edit.css b/module/project/css/edit.css new file mode 100644 index 0000000000..15440cff19 --- /dev/null +++ b/module/project/css/edit.css @@ -0,0 +1 @@ +.chosen-container-single .chosen-single > span{max-width:100%;} diff --git a/module/project/css/kanban.css b/module/project/css/kanban.css index c9ccad2451..a44b02dfe1 100644 --- a/module/project/css/kanban.css +++ b/module/project/css/kanban.css @@ -19,6 +19,9 @@ .board-item .btn {padding: 2px 10px 2px 23px; font-size: 12px; position: relative; left: -2px; height: 24px;} .board-item .btn-icon-left > .icon {width: 22px; height: 22px; line-height: 20px; font-size: 14px; opacity: 1; top: 1px} .board-item .btn-icon-left > span {max-width: 80px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; display: inline-block;} +.board-title {padding-right: 20px;} +.board-actions {position: absolute; right: 3px; top: 3px;} +.board-actions.nav > li > a {padding: 3px 3px;} #kanban {overflow-y: auto} #kanban > .table {min-width: 1100px;} #kanban.dragging .boards.dragging .board {background: #eee; opacity: .35; border-color: #f1f1f1} @@ -43,4 +46,4 @@ #kanban .group-title {word-break: break-all; line-height: 16px; padding: 3px 0; display: block;} .table-grouped > tbody > tr, -.table-grouped > tbody > tr:hover {background: #fff!important;} \ No newline at end of file +.table-grouped > tbody > tr:hover {background: #fff!important;} diff --git a/module/project/css/task.css b/module/project/css/task.css index e30b6a07e9..e8d3b84e81 100644 --- a/module/project/css/task.css +++ b/module/project/css/task.css @@ -1 +1,2 @@ td.delayed{background: #e84e0f!important; color: white;} +#int-dropdown{margin-left: -8px; border-radius: 4px; border: 1px solid #0c64eb} diff --git a/module/project/css/view.css b/module/project/css/view.css index 771b0e9847..d89617d1cc 100644 --- a/module/project/css/view.css +++ b/module/project/css/view.css @@ -8,3 +8,4 @@ #burnLegend > div.line-real:before {background: #006AF1;} .block-dynamic .panel-body {height: 230px; overflow: auto; position: relative;} +.block-team div.col-xs-6{white-space: nowrap; overflow: hidden;} diff --git a/module/project/js/kanban.js b/module/project/js/kanban.js index a23204f053..cbe413726a 100644 --- a/module/project/js/kanban.js +++ b/module/project/js/kanban.js @@ -196,18 +196,4 @@ $(function() }); return false; }); - - $.extend({'closeModal':function(callback, location) - { - var ref = $('#triggerModal.modal').attr('ref'); - if(ref.indexOf('export') > 0 && ref.indexOf('kanban') > 0) - { - $('#triggerModal').modal('hide'); - } - else - { - kanbanModalTrigger.close(); - } - if(callback && $.isFunction(callback)) callback(); - }}); }); diff --git a/module/project/js/tree.js b/module/project/js/tree.js index 83fda17dc8..624379d9c9 100644 --- a/module/project/js/tree.js +++ b/module/project/js/tree.js @@ -8,33 +8,90 @@ $(function() var taskTree = $taskTree.data('zui.tree'); + var sortItems = function($items) + { + var items = $items.toArray(); + for(i = 0; i < items.length; i++) + { + for(j = 0; j < items.length - 1 - i; j++) + { + if($(items[j + 1]).data('id').toString() > $(items[j]).data('id').toString()) + { + var tmp = items[j + 1]; + items[j + 1] = items[j]; + items[j] = tmp; + } + } + } + return items; + } + // 根据列表展开树形列表 var showTreeLevel = function(level) { $('.btn-tree-view').removeClass('btn-active-text'); + $('#taskTree li.item-product').removeClass('hidden'); + $('#taskTree li.item-module').removeClass('hidden'); + $('#taskTree li.item-story').removeClass('hidden'); + $('#taskTree li.item-task').removeClass('hidden'); - if (level === 'root') + if(level === 'root') { $('[data-type=root]').addClass('btn-active-text'); taskTree.collapse(); } - else if (level === 'all') + else if(level === 'all') { $('[data-type=all]').addClass('btn-active-text'); taskTree.collapse(); taskTree.expand($taskTree.find('li.has-list'), true); } - else if (level === 'task') + else if(level === 'task') { $('[data-type=task]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-task').parent().parent(), true); + + var $storyItems = $('#taskTree li.item-story'); + $storyItems.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); + var $moduleItems = $('#taskTree li.item-module'); + moduleItems = sortItems($moduleItems); + for(i = 0; i < moduleItems.length; i++) + { + var items = $(moduleItems[i]).find('ul li:not(.hidden)').length; + if(items == 0) $(moduleItems[i]).addClass('hidden'); + } + var $productItems = $('#taskTree li.item-product'); + $productItems.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); } - else if (level === 'story') + else if(level === 'story') { $('[data-type=story]').addClass('btn-active-text'); taskTree.collapse(); taskTree.show($taskTree.find('li.item-story').parent().parent(), true); + + $('#taskTree li.item-task').addClass('hidden'); + var $moduleItems = $('#taskTree li.item-module'); + moduleItems = sortItems($moduleItems); + for(i = 0; i < moduleItems.length; i++) + { + var items = $(moduleItems[i]).find('ul li:not(.hidden)').length; + if(items == 0) $(moduleItems[i]).addClass('hidden'); + } + var $productItems = $('#taskTree li.item-product'); + $productItems.each(function() + { + var items = $(this).find('ul li:not(.hidden)').length; + if(items == 0) $(this).addClass('hidden'); + }); } $('#main').toggleClass('tree-show-root', level === 'root'); }; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index a215fcdf2a..6cf0fc7d0a 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -20,11 +20,15 @@ $lang->project->end = 'End'; $lang->project->dateRange = 'Duration'; $lang->project->to = 'To'; <<<<<<< HEAD +<<<<<<< HEAD $lang->project->days = 'Man-Day'; $lang->project->day = 'day'; $lang->project->workHour = 'Hours'; ======= $lang->project->days = 'Man Day'; +======= +$lang->project->days = 'Man-Day'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->day = ' days'; $lang->project->workHour = ' hours'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f @@ -37,14 +41,14 @@ $lang->project->PO = 'PO'; $lang->project->PM = 'PM'; $lang->project->QD = 'QA Manager'; $lang->project->RD = 'Release Manager'; -$lang->project->qa = 'Test'; +$lang->project->qa = 'QA'; $lang->project->release = 'Release'; $lang->project->acl = 'Access Control'; $lang->project->teamname = 'Team Name'; $lang->project->order = "Sort {$lang->projectCommon}"; $lang->project->products = "Link {$lang->productCommon}"; $lang->project->whitelist = 'Whitelist'; -$lang->project->totalEstimate = 'Est'; +$lang->project->totalEstimate = 'Estimates'; $lang->project->totalConsumed = 'Cost'; $lang->project->totalLeft = 'Left'; $lang->project->progress = 'Progress'; @@ -56,18 +60,27 @@ $lang->project->all = 'All'; $lang->project->undone = 'Unfinished'; $lang->project->unclosed = 'Unclosed'; <<<<<<< HEAD +<<<<<<< HEAD $lang->project->typeDesc = 'No story, bug, build, test task or Burndown is allowed in OPS'; $lang->project->mine = 'My Responsibility: '; ======= $lang->project->typeDesc = 'No story, bug, build, test task or burndown is allowed in OPS'; +======= +$lang->project->typeDesc = 'No story, bug, build, test or burndown is allowed in OPS'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->mine = 'Mine: '; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f $lang->project->other = 'Other:'; $lang->project->deleted = 'Deleted'; $lang->project->delayed = 'Delayed'; $lang->project->product = $lang->project->products; +<<<<<<< HEAD $lang->project->readjustTime = 'Change project duration'; $lang->project->readjustTask = 'Change task duration'; +======= +$lang->project->readjustTime = "Adjust {$lang->projectCommon} begin and end time"; +$lang->project->readjustTask = 'Adjust task start date and deadline'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->effort = 'Effort'; $lang->project->relatedMember = 'Team Member'; @@ -111,16 +124,20 @@ $lang->project->statusList['doing'] = 'Doing'; $lang->project->statusList['suspended'] = 'Suspend'; $lang->project->statusList['closed'] = 'Closed'; -$lang->project->aclList['open'] = "Default (Users who can visit Project have access to it.)"; +$lang->project->aclList['open'] = "Default (Users who can visit {$lang->projectCommon} have access to it.)"; $lang->project->aclList['private'] = 'Private (For team members only.)'; $lang->project->aclList['custom'] = 'Whitelist (Team members and the whitelist members have access to it.)'; /* 方法列表。*/ $lang->project->index = "Home"; +<<<<<<< HEAD $lang->project->task = 'Tasks'; <<<<<<< HEAD $lang->project->groupTask = 'View by Group'; ======= +======= +$lang->project->task = 'Task'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->groupTask = 'Group View'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f $lang->project->story = 'Story'; @@ -129,14 +146,18 @@ $lang->project->dynamic = 'Dynamic'; $lang->project->latestDynamic = 'Latest Dynamic'; $lang->project->build = 'Build'; <<<<<<< HEAD +<<<<<<< HEAD $lang->project->testtask = 'Test'; ======= $lang->project->testtask = 'Test Task'; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f +======= +$lang->project->testtask = 'Test'; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->burn = 'Burndown'; $lang->project->computeBurn = 'Update'; $lang->project->burnData = 'Burndown Data'; -$lang->project->fixFirst = 'Edit Man-hour of 1st Day'; +$lang->project->fixFirst = 'Edit estimates of 1st Day'; $lang->project->team = 'Team Member'; $lang->project->doc = 'Doc'; $lang->project->doclib = 'Doc Library'; @@ -148,7 +169,7 @@ $lang->project->unlinkStoryTasks = 'Unlink'; $lang->project->linkedProducts = 'Linked Product'; $lang->project->unlinkedProducts = 'Unlinked Product'; $lang->project->view = "Overview"; -$lang->project->create = "Create Project"; +$lang->project->create = "Create {$lang->projectCommon}"; $lang->project->copy = "Copy {$lang->projectCommon}"; $lang->project->delete = "Delete"; $lang->project->browse = "Browse"; @@ -173,7 +194,7 @@ $lang->project->treeOnlyTask = 'Tree View Show Task'; $lang->project->treeOnlyStory = 'Tree View Show Story'; $lang->project->storyKanban = 'Story Kanban'; $lang->project->storySort = 'Sort Story'; -$lang->project->importPlanStory = '' . $lang->projectCommon . ' is created!\nDo you want to iport stories linked to the plan?'; +$lang->project->importPlanStory = '' . $lang->projectCommon . ' is created!\nDo you want to import stories linked to the plan?'; $lang->project->iteration = 'Iteration'; $lang->project->iterationInfo = '%s Iterations'; $lang->project->viewAll = 'View All'; @@ -216,6 +237,7 @@ $lang->project->aboveAllProject = "All the above {$lang->projectCommon}"; /* 页面提示。*/ <<<<<<< HEAD +<<<<<<< HEAD $lang->project->selectProject = "Select {$lang->projectCommon}"; $lang->project->beginAndEnd = 'Duration'; $lang->project->begin = 'Begin'; @@ -252,11 +274,14 @@ $lang->project->noProject = 'No projects. '; $lang->project->noMembers = 'No members. '; ======= $lang->project->linkStoryByPlanTips = 'It will link all stories in this plan to the project.'; +======= +$lang->project->linkStoryByPlanTips = "It will link all stories in this plan to the {$lang->projectCommon}."; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->selectProject = "Select {$lang->projectCommon}"; $lang->project->beginAndEnd = 'Duration'; $lang->project->begin = 'Begin'; $lang->project->end = 'End'; -$lang->project->lblStats = 'Total Man-Hour(h) : '; +$lang->project->lblStats = 'Total Effort(h) : '; $lang->project->stats = '%s Available, %s Total Estimates, %s Cost, %s Left.'; $lang->project->taskSummary = "Tasks on this page : %s Total, %s Wait, %s Doing;     Hours : %s Est., %s Cost, %s Left."; $lang->project->checkedSummary = " %total% Checked, %wait% Wait, %doing% Doing; Hours: %estimate% Est., %consumed% Cost, %left% Left."; @@ -267,7 +292,7 @@ $lang->project->timeSummary = '
Tasks %s :Wait %s   Doing %s
Est. %s :Cost %s   Left %s
"; $lang->project->wbs = "Decompose Task"; $lang->project->batchWBS = "Batch Decompose"; -$lang->project->howToUpdateBurn = "Help "; +$lang->project->howToUpdateBurn = "Help "; $lang->project->whyNoStories = "No Story can be linked. Please check whether there is Story in {$lang->projectCommon} linked {$lang->productCommon} and make sure it has been reviewed."; $lang->project->productStories = "{$lang->projectCommon} linked story is the subeset of {$lang->productCommon}, which can only be linked after review. Please Link Story。"; $lang->project->haveDraft = "There are %s draft stories can't be linked."; @@ -284,7 +309,7 @@ $lang->project->copyFromProject = "Copy from {$lang->projectCommon} $lang->project->cancelCopy = 'Cancel Copy'; $lang->project->byPeriod = 'By Time'; $lang->project->byUser = 'By User'; -$lang->project->noProject = 'No projects. '; +$lang->project->noProject = "No {$lang->projectCommon}. "; $lang->project->noMembers = 'No members. '; >>>>>>> d3fa148cb3d0ea19eb92b37374b0ec4e2a64ec6f @@ -301,11 +326,16 @@ $lang->project->setTeam = 'Set Team'; $lang->project->linkStory = 'Link Story'; $lang->project->createTask = 'Create Task'; $lang->project->goback = "Go Back"; -$lang->project->noweekend = 'Without Weekend'; -$lang->project->withweekend = 'With Weekend'; +$lang->project->noweekend = 'excl. Weekend'; +$lang->project->withweekend = 'incl. Weekend'; $lang->project->interval = 'Intervals'; $lang->project->fixFirstWithLeft = 'Modify the left'; +$lang->project->action = new stdclass(); +$lang->project->action->opened = '$date, created by $actor .' . "\n"; +$lang->project->action->managed = '$date, managed by $actor .' . "\n"; +$lang->project->action->extra = 'The related products are %s.'; + /* 统计。*/ $lang->project->charts = new stdclass(); $lang->project->charts->burn = new stdclass(); @@ -318,22 +348,27 @@ $lang->project->charts->burn->graph->formatNumber = 0; $lang->project->charts->burn->graph->animation = 0; $lang->project->charts->burn->graph->rotateNames = 1; $lang->project->charts->burn->graph->showValues = 0; -$lang->project->charts->burn->graph->reference = 'Reference'; +$lang->project->charts->burn->graph->reference = 'Ideal'; $lang->project->charts->burn->graph->actuality = 'Actual'; $lang->project->placeholder = new stdclass(); +<<<<<<< HEAD $lang->project->placeholder->code = 'Alias of project name'; $lang->project->placeholder->totalLeft = 'Estimates at the beginning of the Project.'; +======= +$lang->project->placeholder->code = "Abbreviation of {$lang->projectCommon} name"; +$lang->project->placeholder->totalLeft = "Estimates at the beginning of the {$lang->projectCommon}."; +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(Done)'; -$lang->project->orderList['order_asc'] = "Order Asc"; -$lang->project->orderList['order_desc'] = "Order Desc"; -$lang->project->orderList['pri_asc'] = "Priority Asc"; -$lang->project->orderList['pri_desc'] = "Priority Desc"; -$lang->project->orderList['stage_asc'] = "Stage Asc"; -$lang->project->orderList['stage_desc'] = "Stage Desc"; +$lang->project->orderList['order_asc'] = "Order Ascending"; +$lang->project->orderList['order_desc'] = "Order Descending"; +$lang->project->orderList['pri_asc'] = "Priority Ascending"; +$lang->project->orderList['pri_desc'] = "Priority Descending"; +$lang->project->orderList['stage_asc'] = "Stage Ascending"; +$lang->project->orderList['stage_desc'] = "Stage Descending"; $lang->project->kanban = "Kanban"; $lang->project->kanbanSetting = "Kanban Setting"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 0ba2af73b9..0c0341daba 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -55,7 +55,7 @@ $lang->project->other = '其他:'; $lang->project->deleted = '已删除'; $lang->project->delayed = '已延期'; $lang->project->product = $lang->project->products; -$lang->project->readjustTime = '调整项目起止时间'; +$lang->project->readjustTime = "调整{$lang->projectCommon}起止时间"; $lang->project->readjustTask = '顺延任务的起止时间'; $lang->project->effort = '日志'; $lang->project->relatedMember = '相关成员'; @@ -192,7 +192,7 @@ $lang->project->aboveAllProduct = "以上所有{$lang->productCommon}"; $lang->project->aboveAllProject = "以上所有{$lang->projectCommon}"; /* 页面提示。*/ -$lang->project->linkStoryByPlanTips = '此操作会将所选计划下面的需求全部关联到此项目中'; +$lang->project->linkStoryByPlanTips = "此操作会将所选计划下面的需求全部关联到此{$lang->projectCommon}中"; $lang->project->selectProject = "请选择{$lang->projectCommon}"; $lang->project->beginAndEnd = '起止时间'; $lang->project->begin = '开始日期'; @@ -225,7 +225,7 @@ $lang->project->copyFromProject = "复制自{$lang->projectCommon} %sproject->cancelCopy = '取消复制'; $lang->project->byPeriod = '按时间段'; $lang->project->byUser = '按用户'; -$lang->project->noProject = '暂时没有项目。'; +$lang->project->noProject = "暂时没有{$lang->projectCommon}。"; $lang->project->noMembers = '暂时没有团队成员。'; /* 交互提示。*/ @@ -246,6 +246,11 @@ $lang->project->withweekend = '显示周末'; $lang->project->interval = '间隔'; $lang->project->fixFirstWithLeft = '修改剩余工时'; +$lang->project->action = new stdclass(); +$lang->project->action->opened = '$date, 由 $actor 创建。$extra' . "\n"; +$lang->project->action->managed = '$date, 由 $actor 维护。$extra' . "\n"; +$lang->project->action->extra = '相关产品为 %s。'; + /* 统计。*/ $lang->project->charts = new stdclass(); $lang->project->charts->burn = new stdclass(); @@ -263,7 +268,7 @@ $lang->project->charts->burn->graph->actuality = '实际'; $lang->project->placeholder = new stdclass(); $lang->project->placeholder->code = '团队内部的简称'; -$lang->project->placeholder->totalLeft = '项目开始时的总预计工时'; +$lang->project->placeholder->totalLeft = "{$lang->projectCommon}开始时的总预计工时"; $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(已结束)'; diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php index c55b4937a0..bcebb689b4 100644 --- a/module/project/lang/zh-tw.php +++ b/module/project/lang/zh-tw.php @@ -55,7 +55,7 @@ $lang->project->other = '其他:'; $lang->project->deleted = '已刪除'; $lang->project->delayed = '已延期'; $lang->project->product = $lang->project->products; -$lang->project->readjustTime = '調整項目起止時間'; +$lang->project->readjustTime = "調整{$lang->projectCommon}起止時間"; $lang->project->readjustTask = '順延任務的起止時間'; $lang->project->effort = '日誌'; $lang->project->relatedMember = '相關成員'; @@ -192,7 +192,7 @@ $lang->project->aboveAllProduct = "以上所有{$lang->productCommon}"; $lang->project->aboveAllProject = "以上所有{$lang->projectCommon}"; /* 頁面提示。*/ -$lang->project->linkStoryByPlanTips = '此操作會將所選計划下面的需求全部關聯到此項目中'; +$lang->project->linkStoryByPlanTips = "此操作會將所選計划下面的需求全部關聯到此{$lang->projectCommon}中"; $lang->project->selectProject = "請選擇{$lang->projectCommon}"; $lang->project->beginAndEnd = '起止時間'; $lang->project->begin = '開始日期'; @@ -225,7 +225,7 @@ $lang->project->copyFromProject = "複製自{$lang->projectCommon} %sproject->cancelCopy = '取消複製'; $lang->project->byPeriod = '按時間段'; $lang->project->byUser = '按用戶'; -$lang->project->noProject = '暫時沒有項目。'; +$lang->project->noProject = "暫時沒有{$lang->projectCommon}。"; $lang->project->noMembers = '暫時沒有團隊成員。'; /* 交互提示。*/ @@ -246,6 +246,11 @@ $lang->project->withweekend = '顯示周末'; $lang->project->interval = '間隔'; $lang->project->fixFirstWithLeft = '修改剩餘工時'; +$lang->project->action = new stdclass(); +$lang->project->action->opened = '$date, 由 $actor 創建。$extra' . "\n"; +$lang->project->action->managed = '$date, 由 $actor 維護。$extra' . "\n"; +$lang->project->action->extra = '相關產品為 %s。'; + /* 統計。*/ $lang->project->charts = new stdclass(); $lang->project->charts->burn = new stdclass(); @@ -263,7 +268,7 @@ $lang->project->charts->burn->graph->actuality = '實際'; $lang->project->placeholder = new stdclass(); $lang->project->placeholder->code = '團隊內部的簡稱'; -$lang->project->placeholder->totalLeft = '項目開始時的總預計工時'; +$lang->project->placeholder->totalLeft = "{$lang->projectCommon}開始時的總預計工時"; $lang->project->selectGroup = new stdclass(); $lang->project->selectGroup->done = '(已結束)'; diff --git a/module/project/model.php b/module/project/model.php index 61cb5f84d8..64a726a0d2 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -119,13 +119,20 @@ class projectModel extends model /* Replace for dropdown submenu. */ if(isset($this->lang->project->subMenu->$key)) { + $projectSubMenu = $this->lang->project->subMenu->$key; $subMenu = common::createSubMenu($this->lang->project->subMenu->$key, $projectID); if(!empty($subMenu)) { - foreach($subMenu as $menu) + foreach($subMenu as $menuKey => $menu) { - if($moduleName == strtolower($menu->link['module']) and $methodName == strtolower($menu->link['method'])) + $itemMenu = zget($projectSubMenu, $menuKey, ''); + if($moduleName == strtolower($menu->link['module']) and + ( + $methodName == strtolower($menu->link['method']) or + (is_array($itemMenu) and isset($itemMenu['alias']) and strpos($itemMenu['alias'], $methodName) !== false) + ) + ) { $this->lang->project->menu->{$key}['link'] = $menu->text . "|" . join('|', $menu->link); break; @@ -329,6 +336,7 @@ class projectModel extends model /* Add the creator to team. */ if($copyProjectID == '' or !$creatorExists) { + $this->app->loadLang('user'); $member = new stdclass(); $member->root = $projectID; $member->account = $this->app->user->account; @@ -347,7 +355,7 @@ class projectModel extends model $lib->name = $this->lang->doclib->main['project']; $lib->type = 'project'; $lib->main = '1'; - $lib->acl = $project->acl == 'open' ? 'open' : 'private'; + $lib->acl = 'default'; $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec(); $this->loadModel('user')->updateUserView($projectID, 'project'); @@ -420,10 +428,8 @@ class projectModel extends model } if(!dao::isError()) { - if($project->acl != $oldProject->acl) $this->dao->update(TABLE_DOCLIB)->set('acl')->eq($project->acl == 'open' ? 'open' : 'private')->where('project')->eq($projectID)->exec(); - $this->file->updateObjectID($this->post->uid, $projectID, 'project'); - if($project->acl != $oldProject->acl or $project->whitelist != $oldProject->whitelist) $this->loadModel('user')->updateUserView($projectID, 'project'); + if($project->acl != 'open' or $project->acl != $oldProject->acl or $project->whitelist != $oldProject->whitelist) $this->loadModel('user')->updateUserView($projectID, 'project'); return common::createChanges($oldProject, $project); } } @@ -898,6 +904,7 @@ class projectModel extends model $burns = $this->dao->select('project, date AS name, `left` AS value') ->from(TABLE_BURN) ->where('project')->in($projectKeys) + ->andWhere('task')->eq(0) ->orderBy('date desc') ->fetchGroup('project', 'name'); @@ -1599,6 +1606,7 @@ class projectModel extends model $planStories = array(); $planProducts = array(); + $count = 0; if(!empty($plans)) { foreach($plans as $planID => $productID) @@ -1606,7 +1614,6 @@ class projectModel extends model $planStory = $this->loadModel('story')->getPlanStories($planID); if(!empty($planStory)) { - $count = 0; foreach($planStory as $id => $story) { if($story->status == 'draft') @@ -1686,6 +1693,7 @@ class projectModel extends model public function getTeamMemberPairs($projectID, $params = '') { if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembersPairs(); + $this->app->loadConfig('user'); $users = $this->dao->select('t1.account, t2.realname')->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') ->where('t1.root')->eq((int)$projectID) @@ -1698,6 +1706,7 @@ class projectModel extends model foreach($users as $account => $realName) { $firstLetter = ucfirst(substr($account, 0, 1)) . ':'; + if(isset($this->config->isINT) and $this->config->isINT) $firstLetter = ''; $users[$account] = $firstLetter . ($realName ? $realName : $account); } return array('' => '') + $users; @@ -1839,14 +1848,14 @@ class projectModel extends model ->from(TABLE_TASK) ->where('project')->in(array_keys($projects)) ->andWhere('deleted')->eq('0') - ->andWhere('parent')->eq('0') + ->andWhere('parent')->ge('0') ->andWhere('status')->ne('cancel') ->groupBy('project') ->fetchAll('project'); $closedLefts = $this->dao->select("project, sum(`left`) AS `left`")->from(TABLE_TASK) ->where('project')->in(array_keys($projects)) ->andWhere('deleted')->eq('0') - ->andWhere('parent')->eq('0') + ->andWhere('parent')->ge('0') ->andWhere('status')->eq('closed') ->groupBy('project') ->fetchAll('project'); @@ -1875,7 +1884,7 @@ class projectModel extends model public function fixFirst($projectID) { $project = $this->getById($projectID); - $burn = $this->dao->select('*')->from(TABLE_BURN)->where('project')->eq($projectID)->andWhere('date')->eq($project->begin)->fetch(); + $burn = $this->dao->select('*')->from(TABLE_BURN)->where('project')->eq($projectID)->andWhere('task')->eq(0)->andWhere('date')->eq($project->begin)->fetch(); $withLeft = $this->post->withLeft ? $this->post->withLeft : 0; $data = fixer::input('post') @@ -1903,7 +1912,7 @@ class projectModel extends model $project = $this->getById($projectID); /* If the burnCounts > $itemCounts, get the latest $itemCounts records. */ - $sets = $this->dao->select('date AS name, `left` AS value, estimate')->from(TABLE_BURN)->where('project')->eq((int)$projectID)->orderBy('date DESC')->fetchAll('name'); + $sets = $this->dao->select('date AS name, `left` AS value, estimate')->from(TABLE_BURN)->where('project')->eq((int)$projectID)->andWhere('task')->eq(0)->orderBy('date DESC')->fetchAll('name'); $count = 0; $burnData = array(); @@ -2080,6 +2089,15 @@ class projectModel extends model $statusVar = 'status' . ucfirst($task->status); $$statusVar ++; + if(isset($task->children)) + { + foreach($task->children as $children) + { + $statusVar = 'status' . ucfirst($children->status); + $$statusVar ++; + $taskSum ++; + } + } $taskSum ++; } @@ -2311,7 +2329,7 @@ class projectModel extends model if($product->type != 'normal') { $productType = $product->type; - if($product->branch) + if($product->branch and isset($branchGroups[$product->id][$product->branch])) { $branchPairs[$product->branch] = (count($products) > 1 ? $product->name . '/' : '') . $branchGroups[$product->id][$product->branch]; } diff --git a/module/project/view/ajaxgetdropmenu.html.php b/module/project/view/ajaxgetdropmenu.html.php index d30fc29ad3..af3f7981f7 100644 --- a/module/project/view/ajaxgetdropmenu.html.php +++ b/module/project/view/ajaxgetdropmenu.html.php @@ -49,8 +49,8 @@ foreach($projects as $project) ?>
diff --git a/module/project/view/batchedit.html.php b/module/project/view/batchedit.html.php index 4ee6c63ff4..437e5d8b1a 100755 --- a/module/project/view/batchedit.html.php +++ b/module/project/view/batchedit.html.php @@ -62,8 +62,8 @@
- - + + @@ -73,14 +73,14 @@ - + - + diff --git a/module/project/view/bug.html.php b/module/project/view/bug.html.php index e572e676ca..543809d370 100644 --- a/module/project/view/bug.html.php +++ b/module/project/view/bug.html.php @@ -100,7 +100,7 @@ id"; common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'confirm', '', 'iframe', true); - common::printIcon('bug', 'resolve', $params, $bug, 'list', 'check', '', 'iframe', true); + common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true); common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true); common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy'); common::printIcon('bug', 'edit', $params, $bug, 'list'); @@ -119,6 +119,7 @@ 10; $actionLink = $this->createLink('bug', 'batchAssignTo', "projectID={$project->id}&type=project"); + echo html::select('assignedTo', $memberPairs, '', 'class="hidden"'); if($withSearch) { diff --git a/module/project/view/build.html.php b/module/project/view/build.html.php index 6162088535..f3cd8ea063 100644 --- a/module/project/view/build.html.php +++ b/module/project/view/build.html.php @@ -88,7 +88,7 @@ if(common::hasPriv('build', 'delete', $build)) { $deleteURL = $this->createLink('build', 'delete', "buildID=$build->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"buildList\",confirmDelete)", '', '', "class='btn' title='{$lang->build->delete}'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"buildList\",confirmDelete)", '', '', "class='btn' title='{$lang->build->delete}'"); } ?> diff --git a/module/project/view/burn.html.php b/module/project/view/burn.html.php index 84b3303dce..d499d1f5f7 100644 --- a/module/project/view/burn.html.php +++ b/module/project/view/burn.html.php @@ -25,7 +25,7 @@ echo $lang->project->howToUpdateBurn; ?> -
+
'>
diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index 7d3505a17d..836cb184e8 100644 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -46,12 +46,12 @@
title;?>
productplan->parent;?>id}"), "#{$parentPlan->id} " . $parentPlan->title);?>
product->branch;?>productplan->end;?> end == '2030-01-01' ? $lang->productplan->future : $plan->end;?>
productplan->children;?> + + id}"), "#{$childrenPlan->id} " . $childrenPlan->title) . '
';?> + +
productplan->desc;?> desc;?>
name, "class='form-control' autocomplete='off'");?>code, "class='form-control' autocomplete='off'");?>name, "class='form-control'");?>code, "class='form-control'");?> ' style='overflow:visible'>PM, "class='form-control chosen'");?> ' style='overflow:visible'>PO, "class='form-control chosen'");?> ' style='overflow:visible'>QD, "class='form-control chosen'");?>begin, "class='form-control form-date' onchange='computeWorkDays(this.id)'");?> end, "class='form-control form-date' onchange='computeWorkDays(this.id)'");?> '> desc, "rows='1' class='form-control autosize'");?>'>team, "class='form-control' autocomplete='off'");?>'>team, "class='form-control'");?> '>
- days, "class='form-control' autocomplete='off'");?> + days, "class='form-control'");?> project->day;?>
order, "class='form-control' autocomplete='off'")?>order, "class='form-control'")?>
- + - + @@ -72,14 +72,14 @@ - + diff --git a/module/project/view/edit.html.php b/module/project/view/edit.html.php index dd6f1752e0..842aff0ef1 100644 --- a/module/project/view/edit.html.php +++ b/module/project/view/edit.html.php @@ -27,11 +27,11 @@
project->name;?>
project->code;?>
project->dateRange;?>project->days;?>
- begin) ? helper::workDays($plan->begin, $plan->end) : ''), "class='form-control' autocomplete='off'");?> + begin) ? helper::workDays($plan->begin, $plan->end) : ''), "class='form-control'");?> project->day;?>
project->teamname;?>
project->type;?>
- + - + @@ -55,7 +55,7 @@ @@ -66,7 +66,7 @@ - + diff --git a/module/project/view/fixfirst.html.php b/module/project/view/fixfirst.html.php index 6fdd201263..ede41f648d 100644 --- a/module/project/view/fixfirst.html.php +++ b/module/project/view/fixfirst.html.php @@ -21,7 +21,7 @@ diff --git a/module/project/view/importbug.html.php b/module/project/view/importbug.html.php index 488f199690..de09dd3901 100755 --- a/module/project/view/importbug.html.php +++ b/module/project/view/importbug.html.php @@ -62,9 +62,9 @@ var browseType = ''; - + deadline > helper::today() and $bug->deadline > $project->begin) ? $bug->deadline : '0000-00-00';?> - + diff --git a/module/project/view/kanban.html.php b/module/project/view/kanban.html.php index ecb6bf0ad9..5415663640 100644 --- a/module/project/view/kanban.html.php +++ b/module/project/view/kanban.html.php @@ -37,8 +37,8 @@ project = $projectID; - $misc = common::hasPriv('task', 'create', $checkObject) ? "class='btn btn-primary'" : "class='btn btn-primary disabled'"; - $link = common::hasPriv('task', 'create', $checkObject) ? $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')) : '#'; + $misc = common::hasPriv('task', 'create', $checkObject) ? "class='btn btn-primary iframe' data-width='1200px'" : "class='btn btn-primary disabled'"; + $link = common::hasPriv('task', 'create', $checkObject) ? $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : ''), '', true) : '#'; echo html::a($link, "" . $lang->task->create, '', $misc); ?> @@ -113,7 +113,24 @@ $account = $this->app->user->account;
- createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', 'class="kanbaniframe group-title" title="' . $story->title . '"');?> +
+ createLink('story', 'view', "storyID=$story->id", '', true), $story->title, '', 'class="kanbaniframe group-title" title="' . $story->title . '"');?> + +
#id?> story->priList, $story->pri);?> @@ -159,7 +176,7 @@ $account = $this->app->user->account;
" . zget($realnames, $bug->assignedTo) . ""; - if(empty($task->assignedTo)) $assignedToRealName = "{$lang->task->noAssigned}"; + if(empty($bug->assignedTo)) $assignedToRealName = "{$lang->task->noAssigned}"; echo html::a($this->createLink('bug', 'assignTo', "bugID={$bug->id}", '', true), ' ' . $assignedToRealName, '', 'class="btn btn-icon-left kanbaniframe bug-assignedTo"');?> bug->statusList, $bug->status);?>
diff --git a/module/project/view/managemembers.html.php b/module/project/view/managemembers.html.php index c58f2fcd9b..57605a826a 100644 --- a/module/project/view/managemembers.html.php +++ b/module/project/view/managemembers.html.php @@ -30,7 +30,7 @@
- +
project->name;?>name, "class='form-control' autocomplete='off' required");?>name, "class='form-control' required");?>
project->code;?>code, "class='form-control' autocomplete='off' required");?>code, "class='form-control' required");?>
project->dateRange;?>project->days;?>
- days, "class='form-control' autocomplete='off'");?> + days, "class='form-control'");?> project->day;?>
project->teamname;?>team, "class='form-control' autocomplete='off'");?>team, "class='form-control'");?>
project->status;?>
begin?> - estimate) ? $firstBurn->estimate : (!empty($firstBurn->left) ? $firstBurn->left : ''), "class='form-control' placeholder='{$lang->project->placeholder->totalLeft}' autocomplete='off'")?> + estimate) ? $firstBurn->estimate : (!empty($firstBurn->left) ? $firstBurn->left : ''), "class='form-control' placeholder='{$lang->project->placeholder->totalLeft}'")?>
diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 41b68c4266..99f595b66b 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -147,7 +147,7 @@ { if($groupBy == 'story') { - if(!$task->parent) + if($task->parent <= 0) { $groupEstimate += $task->estimate; $groupConsumed += $task->consumed; @@ -156,10 +156,12 @@ } else { - $groupEstimate += $task->estimate; - $groupConsumed += $task->consumed; - - if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left; + if($task->parent <= 0) + { + $groupEstimate += $task->estimate; + $groupConsumed += $task->consumed; + if($groupBy == 'status' || ($task->status != 'cancel' && $task->status != 'closed')) $groupLeft += $task->left; + } } if($task->status == 'wait') $groupWait++; @@ -208,7 +210,7 @@
project&taskID=$task->id", $task, 'list', '', '', 'iframe', true);?> id", '', 'list');?> - project&taskid=$task->id", '', 'list', '', 'hiddenwin');?> + project&taskid=$task->id", '', 'list', 'trash', 'hiddenwin');?>
bug->statusList[$bug->status];?> id]", $lang->task->priList, 3, "class='form-control chosen'");?> id]", $users, zget($users, $bug->assignedTo, '', $bug->assignedTo), "class='form-control chosen'");?>id]", '', 'size=4 class="form-control" autocomplete="off"');?>id]", '', 'size=4 class="form-control"');?> id]", $deadline, 'size=4 class="form-control form-date" autocomplete="off"');?>id]", $deadline, 'size=4 class="form-control form-date"');?>
diff --git a/module/project/view/putoff.html.php b/module/project/view/putoff.html.php index 6c75d43bef..9f3957926c 100644 --- a/module/project/view/putoff.html.php +++ b/module/project/view/putoff.html.php @@ -49,7 +49,7 @@ diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index a12f4928f7..e64ec6dd8f 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -149,12 +149,32 @@ js::set('browseType', $browseType); project = $projectID; + ?> + getClientLang() != 'en'):?> + createLink('task', 'batchCreate', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); if(common::hasPriv('task', 'batchCreate', $checkObject)) echo html::a($link, " {$lang->task->batchCreate}", '', "class='btn btn btn-secondary'"); $link = $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); if(common::hasPriv('task', 'create', $checkObject)) echo html::a($link, " {$lang->task->create}", '', "class='btn btn-primary'"); ?> + + "; + $link = $this->createLink('task', 'create', "project=$projectID" . (isset($moduleID) ? "&storyID=&moduleID=$moduleID" : '')); + if(common::hasPriv('task', 'create', $checkObject)) echo html::a($link, " {$lang->task->create} ", '', "class='btn btn-primary'"); + ?> + + ";?> +
diff --git a/module/project/view/team.html.php b/module/project/view/team.html.php index 6d1fbcc580..332a3ea53d 100644 --- a/module/project/view/team.html.php +++ b/module/project/view/team.html.php @@ -78,7 +78,7 @@ if (common::hasPriv('project', 'unlinkMember', $member)) { $unlinkURL = $this->createLink('project', 'unlinkMember', "projectID=$project->id&account=$member->account&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$unlinkURL\",\"memberList\",confirmUnlinkMember)", '', '', "class='btn' title='{$lang->project->unlinkMember}'"); + echo html::a("javascript:ajaxDelete(\"$unlinkURL\",\"memberList\",confirmUnlinkMember)", '', '', "class='btn' title='{$lang->project->unlinkMember}'"); } ?> diff --git a/module/project/view/testtask.html.php b/module/project/view/testtask.html.php index 87896a0277..b0f3248964 100644 --- a/module/project/view/testtask.html.php +++ b/module/project/view/testtask.html.php @@ -105,7 +105,7 @@ if(common::hasPriv('testtask', 'delete', $task)) { $deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '', '', "class='btn' title='{$lang->testtask->delete}'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"taskList\",confirmDelete)", '', '', "class='btn' title='{$lang->testtask->delete}'"); } ?> diff --git a/module/project/view/treetask.html.php b/module/project/view/treetask.html.php index c3fc9afd33..f8626278e3 100644 --- a/module/project/view/treetask.html.php +++ b/module/project/view/treetask.html.php @@ -24,7 +24,7 @@ if($task->status == 'wait') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'wait') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); - if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); + if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', 'off', '', 'btn btn-info btn-icon iframe', true); if($task->status == 'doing') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'btn btn-info btn-icon iframe', true); common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'btn btn-info btn-icon iframe', true); diff --git a/module/project/view/view.html.php b/module/project/view/view.html.php index abe3869e2b..33bc0ce5a9 100644 --- a/module/project/view/view.html.php +++ b/module/project/view/view.html.php @@ -161,7 +161,7 @@ echo "
"; common::printIcon('project', 'edit', $params, $project); - common::printIcon('project', 'delete', $params, $project, 'button', '', 'hiddenwin'); + common::printIcon('project', 'delete', $params, $project, 'button', 'trash', 'hiddenwin'); } ?>
diff --git a/module/release/control.php b/module/release/control.php index cbb6414373..ed06532073 100644 --- a/module/release/control.php +++ b/module/release/control.php @@ -191,6 +191,10 @@ class release extends control { $this->release->delete(TABLE_RELEASE, $releaseID); + $release = $this->dao->select('*')->from(TABLE_RELEASE)->where('id')->eq((int)$releaseID)->fetch(); + $build = $this->dao->select('*')->from(TABLE_BUILD)->where('id')->eq((int)$release->build)->fetch(); + if(empty($build->project)) $this->loadModel('build')->delete(TABLE_BUILD, $build->id); + /* if ajax request, send result. */ if($this->server->ajax) { @@ -203,6 +207,8 @@ class release extends control { $response['result'] = 'success'; $response['message'] = ''; + $release = $this->release->getById($releaseID); + $this->dao->update(TABLE_BUILD)->set('deleted')->eq(1)->where('id')->eq($release->build)->andWhere('name')->eq($release->name)->exec(); } $this->send($response); } diff --git a/module/release/js/view.js b/module/release/js/view.js index 7ceb844687..5b456aa4bf 100644 --- a/module/release/js/view.js +++ b/module/release/js/view.js @@ -11,6 +11,8 @@ function showLink(releaseID, type, param) $linkBox.find('[data-ride="table"]').table(); $.toggleQueryBox(true, $linkBox.find('#queryBox')); }); + + $('.actions').find("a[href*='" + type + "']").addClass('hidden'); } $(function() diff --git a/module/release/lang/en.php b/module/release/lang/en.php index 4cbad49653..cf47769209 100644 --- a/module/release/lang/en.php +++ b/module/release/lang/en.php @@ -69,4 +69,8 @@ $lang->release->changeStatusList['normal'] = 'Activate'; $lang->release->changeStatusList['terminate'] = 'Terminate'; $lang->release->action = new stdclass(); +<<<<<<< HEAD $lang->release->action->changestatus = array('main' => '$date, by $actor $extra。', 'extra' => 'changeStatusList'); +======= +$lang->release->action->changestatus = array('main' => '$date, $extra by $actor', 'extra' => 'changeStatusList'); +>>>>>>> 58a5ce3d921a17cce37484db7696956508f5d454 diff --git a/module/release/model.php b/module/release/model.php index be6d099162..bb22044618 100644 --- a/module/release/model.php +++ b/module/release/model.php @@ -131,6 +131,7 @@ class releaseModel extends model $this->dao->insert(TABLE_BUILD)->data($build) ->autoCheck() ->check('name', 'unique', "product = {$productID} AND branch = {$branch} AND deleted = '0'") + ->batchCheck($this->config->release->create->requiredFields, 'notempty') ->exec(); $buildID = $this->dao->lastInsertID(); } @@ -194,6 +195,7 @@ class releaseModel extends model $release = fixer::input('post')->stripTags($this->config->release->editor->edit['id'], $this->config->allowedTags) ->add('branch', (int)$branch) + ->setIF(!$this->post->marker, 'marker', 0) ->cleanInt('product') ->remove('files,labels,allchecker,uid') ->get(); diff --git a/module/release/view/browse.html.php b/module/release/view/browse.html.php index 8ad64a3430..f2fa3307ce 100644 --- a/module/release/view/browse.html.php +++ b/module/release/view/browse.html.php @@ -53,7 +53,12 @@
- + type != 'normal'):?> @@ -77,7 +82,7 @@ if(common::hasPriv('release', 'delete', $release)) { $deleteURL = $this->createLink('release', 'delete', "releaseID=$release->id&confirm=yes"); - echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"releaseList\",confirmDelete)", '', '', "class='btn' title='{$lang->release->delete}'"); + echo html::a("javascript:ajaxDelete(\"$deleteURL\",\"releaseList\",confirmDelete)", '', '', "class='btn' title='{$lang->release->delete}'"); } ?> diff --git a/module/release/view/create.html.php b/module/release/view/create.html.php index 8fab396566..cdad691c8d 100644 --- a/module/release/view/create.html.php +++ b/module/release/view/create.html.php @@ -22,7 +22,7 @@ - + - + "),l=0;l"),c=0;c"+(e.IE?" ":"
")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
").append(o).html();return e.IE||(p+="
"),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=["
"],l=[""],c=0;c<6;++c){r.push(''),l.push("");for(var u=0;u<6;++u)l.push('');l.push("")}r.push(""),l.push("");var h=['
','
','
','
',"",'
','
','
',"
",'
',"",'
','
',"
",'
',"",'
','{borderColor}','',"
","
","
",'
','
project->days;?>
- days, "class='form-control' autocomplete='off'");?> + days, "class='form-control'");?> project->day;?>
id"), sprintf('%03d', $release->id));?>id"), $release->name);?> + marker ? " " : ''; + echo html::a(inlink('view', "release=$release->id"), $release->name) . $flagIcon; + ?> + createLink('build', 'view', "buildID=$release->buildID"), $release->buildName);?> branch];?>
release->name;?>
diff --git a/module/release/view/edit.html.php b/module/release/view/edit.html.php index 5413a6c081..1a563dc156 100644 --- a/module/release/view/edit.html.php +++ b/module/release/view/edit.html.php @@ -26,7 +26,7 @@
release->name;?>name, "class='form-control' autocomplete='off' required");?>name, "class='form-control' required");?> marker) ? "checked='checked'" : '';?>
diff --git a/module/release/view/export.html.php b/module/release/view/export.html.php index c05272db22..9c3b0b8039 100755 --- a/module/release/view/export.html.php +++ b/module/release/view/export.html.php @@ -42,7 +42,7 @@ function closeWindow()
setFileName;?> - + .html release->exportTypeList, 'all', "class='form-control'")?>
diff --git a/module/release/view/linkbug.html.php b/module/release/view/linkbug.html.php index 29210070e6..9140f62695 100644 --- a/module/release/view/linkbug.html.php +++ b/module/release/view/linkbug.html.php @@ -64,7 +64,7 @@ $formID = $type == 'leftBug' ? 'unlinkedLeftBugsForm' : 'unlinkedBugsForm';
- release->linkBug, '', 'btn');?> + release->linkBug, '', 'btn btn-secondary');?>
diff --git a/module/release/view/linkstory.html.php b/module/release/view/linkstory.html.php index d8898af714..09c9b1ec4e 100644 --- a/module/release/view/linkstory.html.php +++ b/module/release/view/linkstory.html.php @@ -65,7 +65,7 @@
- release->linkStory, '', 'btn');?> + release->linkStory, '', 'btn btn-secondary');?>
diff --git a/module/release/view/view.html.php b/module/release/view/view.html.php index f36b28891c..baeeaec607 100644 --- a/module/release/view/view.html.php +++ b/module/release/view/view.html.php @@ -22,6 +22,8 @@
id;?> name;?> + marker ? " " : '';?> + deleted):?> release->deleted;?> @@ -31,16 +33,13 @@ deleted) { - if(common::hasPriv('release', 'linkStory')) echo html::a(inlink('view', "releaseID=$release->id&type=story&link=true"), ' ' . $lang->release->linkStory, '', "class='btn btn-link'"); - if(common::hasPriv('release', 'linkBug') and $config->global->flow != 'onlyStory') echo html::a(inlink('view', "releaseID=$release->id&type=bug&link=true"), ' ' . $lang->release->linkBug, '', "class='btn btn-link'"); - if(common::hasPriv('release', 'changeStatus', $release)) { $changedStatus = $release->status == 'normal' ? 'terminate' : 'normal'; - echo html::a(inlink('changeStatus', "releaseID=$release->id&status=$changedStatus"), ' ', 'hiddenwin', "class='btn btn-link' title='{$lang->release->changeStatusList[$changedStatus]}'"); + echo html::a(inlink('changeStatus', "releaseID=$release->id&status=$changedStatus"), ' ' . $lang->release->changeStatusList[$changedStatus], 'hiddenwin', "class='btn btn-link' title='{$lang->release->changeStatusList[$changedStatus]}'"); } - common::printIcon('release', 'edit', "releaseID=$release->id", $release); - common::printIcon('release', 'delete', "releaseID=$release->id", $release, 'button', '', 'hiddenwin'); + if(common::hasPriv('release', 'edit')) echo html::a($this->createLink('release', 'edit', "releaseID=$release->id"), " " . $this->lang->edit, '', "class='btn btn-link' title='{$this->lang->edit}'"); + if(common::hasPriv('release', 'delete')) echo html::a($this->createLink('release', 'delete', "releaseID=$release->id"), " " . $this->lang->delete, '', "class='btn btn-link' title='{$this->lang->delete}' target='hiddenwin'"); } ?>
diff --git a/module/report/lang/en.php b/module/report/lang/en.php index 8565483277..e2432d8dbe 100644 --- a/module/report/lang/en.php +++ b/module/report/lang/en.php @@ -40,18 +40,17 @@ $lang->report->projectDeviation = $lang->projectCommon . ' Deviation'; $lang->report->productSummary = $lang->productCommon . ' Summary'; $lang->report->bugCreate = 'Bug Reported'; $lang->report->bugAssign = 'Bug Assigned'; -$lang->report->workload = 'Team Workload '; +$lang->report->workload = 'Team Workload'; $lang->report->workloadAB = 'Workload'; $lang->report->bugOpenedDate = 'Bug reported from'; -$lang->report->taskAssignedDate = 'From'; -$lang->report->beginAndEnd = ' : from'; +$lang->report->beginAndEnd = ' From'; $lang->report->dept = 'Dept'; $lang->report->deviationChart = $lang->projectCommon . ' Deviation Chart'; $lang->reportList->project->lists[10] = $lang->projectCommon . ' Deviation|report|projectdeviation'; $lang->reportList->product->lists[10] = $lang->productCommon . ' Summary|report|productsummary'; -$lang->reportList->test->lists[10] = 'Bugs Reported|report|bugcreate'; -$lang->reportList->test->lists[13] = 'Bugs Assigned|report|bugassign'; +$lang->reportList->test->lists[10] = 'Bug Reported|report|bugcreate'; +$lang->reportList->test->lists[13] = 'Bug Assigned|report|bugassign'; $lang->reportList->staff->lists[10] = 'Team Workload|report|workload'; $lang->report->id = 'ID'; @@ -60,7 +59,7 @@ $lang->report->product = $lang->productCommon; $lang->report->user = 'Name'; $lang->report->bugTotal = 'Bug'; $lang->report->task = 'Task'; -$lang->report->estimate = 'Est.(h)'; +$lang->report->estimate = 'Estimates'; $lang->report->consumed = 'Cost'; $lang->report->remain = 'Left'; $lang->report->deviation = 'Deviation'; @@ -89,7 +88,7 @@ $lang->report->idAB = 'ID'; $lang->report->bugTitle = 'Bug Name'; $lang->report->taskName = 'Task Name'; $lang->report->todoName = 'Todo Name'; -$lang->report->testTaskName = 'TestTask Name'; +$lang->report->testTaskName = 'Test Name'; $lang->report->deadline = 'Deadline'; $lang->report->mailTitle = new stdclass(); @@ -97,7 +96,7 @@ $lang->report->mailTitle->begin = 'Notice: You have'; $lang->report->mailTitle->bug = " Bug (%s),"; $lang->report->mailTitle->task = " Task (%s),"; $lang->report->mailTitle->todo = " Todo (%s),"; -$lang->report->mailTitle->testTask = " Test Task (%s),"; +$lang->report->mailTitle->testTask = " Test (%s),"; $lang->report->proVersion = 'Try ZenTao Pro for more!'; $lang->report->proVersionEn = 'Try ZenTao Pro for more!'; diff --git a/module/report/lang/zh-cn.php b/module/report/lang/zh-cn.php index 4ab6d666e5..470808c859 100644 --- a/module/report/lang/zh-cn.php +++ b/module/report/lang/zh-cn.php @@ -43,7 +43,6 @@ $lang->report->bugAssign = 'Bug指派表'; $lang->report->workload = '员工负载表'; $lang->report->workloadAB = '工作负载'; $lang->report->bugOpenedDate = 'Bug创建时间'; -$lang->report->taskAssignedDate = '起止时间'; $lang->report->beginAndEnd = '起止时间'; $lang->report->dept = '部门'; $lang->report->deviationChart = $lang->projectCommon . '偏差曲线'; diff --git a/module/report/lang/zh-tw.php b/module/report/lang/zh-tw.php index 77fa9d9f05..736d219faa 100644 --- a/module/report/lang/zh-tw.php +++ b/module/report/lang/zh-tw.php @@ -43,7 +43,6 @@ $lang->report->bugAssign = 'Bug指派表'; $lang->report->workload = '員工負載表'; $lang->report->workloadAB = '工作負載'; $lang->report->bugOpenedDate = 'Bug創建時間'; -$lang->report->taskAssignedDate = '起止時間'; $lang->report->beginAndEnd = '起止時間'; $lang->report->dept = '部門'; $lang->report->deviationChart = $lang->projectCommon . '偏差曲綫'; diff --git a/module/report/model.php b/module/report/model.php index fdaa2aa2f0..96d8dec0fc 100644 --- a/module/report/model.php +++ b/module/report/model.php @@ -24,7 +24,14 @@ class reportModel extends model { $sum = 0; foreach($datas as $data) $sum += $data->value; - foreach($datas as $data) $data->percent = round($data->value / $sum, 2); + + $totalPercent = 0; + foreach($datas as $i => $data) + { + $data->percent = round($data->value / $sum, 4); + $totalPercent += $data->percent; + } + if(isset($i)) $datas[$i]->percent = round(1 - $totalPercent + $datas[$i]->percent, 4); return $datas; } @@ -313,7 +320,7 @@ class reportModel extends model { foreach($multiTasks as $task) { - $userTask = $allTasks[$task->root]; + $userTask = clone $allTasks[$task->root]; $userTask->estimate = $task->estimate; $userTask->consumed = $task->consumed; $userTask->left = $task->left; @@ -432,7 +439,7 @@ class reportModel extends model ->where('t1.assignedTo')->ne('') ->andWhere('t1.deleted')->eq(0) ->andWhere('t2.deleted')->eq(0) - ->andWhere('t1.status')->in('wait, doing') + ->andWhere('t1.status')->in('wait,doing') ->andWhere('t3.status')->ne('suspended') ->andWhere('t1.deadline', true)->eq('0000-00-00') ->orWhere('t1.deadline')->lt(date(DT_DATE1, strtotime('+4 day'))) diff --git a/module/report/view/bugassign.html.php b/module/report/view/bugassign.html.php index 622bd59e6f..852657c8c6 100644 --- a/module/report/view/bugassign.html.php +++ b/module/report/view/bugassign.html.php @@ -25,7 +25,7 @@
- + @@ -35,11 +35,11 @@ $assign):?> - + $count):?> - ';?> + ';?> diff --git a/module/report/view/bugcreate.html.php b/module/report/view/bugcreate.html.php index 5cadc035e8..7ac8933b64 100644 --- a/module/report/view/bugcreate.html.php +++ b/module/report/view/bugcreate.html.php @@ -50,7 +50,7 @@
report->user;?> report->product;?> report->bugTotal;?>
createLink('product', 'view', "product={$count['productID']}"), $product);?>
- + bug->resolutionList as $resolutionType => $resolution):?> diff --git a/module/report/view/productsummary.html.php b/module/report/view/productsummary.html.php index 5c1c3309cc..450adc183a 100644 --- a/module/report/view/productsummary.html.php +++ b/module/report/view/productsummary.html.php @@ -1,4 +1,7 @@ +app->getClientLang() == 'en'):?> + +
diff --git a/module/report/view/workload.html.php b/module/report/view/workload.html.php index 2c7df29083..6689253887 100644 --- a/module/report/view/workload.html.php +++ b/module/report/view/workload.html.php @@ -21,7 +21,7 @@
- report->taskAssignedDate;?> + report->beginAndEnd;?>
report->to;?>
@@ -30,7 +30,7 @@
report->diffDays;?> - +
@@ -38,7 +38,7 @@
report->workday;?> - +
diff --git a/module/score/model.php b/module/score/model.php index c3b7188fe6..3f4bb0f4bd 100644 --- a/module/score/model.php +++ b/module/score/model.php @@ -185,7 +185,7 @@ class scoreModel extends model * @access private * @return bool */ - private function saveScore($account = '', $rule = array(), $module = '', $method = '', $desc = '', $time = '') + public function saveScore($account = '', $rule = array(), $module = '', $method = '', $desc = '', $time = '') { if($rule['score'] == 0) return true; if(!empty($rule['times']) || !empty($rule['hour'])) diff --git a/module/search/view/buildform.html.php b/module/search/view/buildform.html.php index 118c09e64f..d610750fa4 100644 --- a/module/search/view/buildform.html.php +++ b/module/search/view/buildform.html.php @@ -15,16 +15,22 @@ $jsRoot = $this->app->getWebRoot() . "js/"; include '../../common/view/datepicker.html.php'; include '../../common/view/chosen.html.php'; $formId = 'searchForm-' . uniqid(''); +$fieldWidth = $app->getClientLang() == 'en' ? 'w-130px' : 'w-110px'; +$operatorWidth = $app->getClientLang() == 'en' ? 'w-100px' : 'w-90px'; ?> "];return _isArray(n)||(n=[n]),_each(n,function(e,t){t&&a.push('')}),i&&a.push(""),a.push(""),a.join("\n")}function _elementVal(e,t){if(e.hasVal()){if(t===undefined){var n=e.val();return n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,"")}return e.val(t)}return e.html(t)}function KEdit(e){this.init(e)}function _edit(e){return new KEdit(e)}function _selectToolbar(e,t){var n=this,i=n.get(e);if(i){if(i.hasClass("ke-disabled"))return;t(i)}}function KToolbar(e){this.init(e)}function _toolbar(e){return new KToolbar(e)}function KMenu(e){this.init(e)}function _menu(e){return new KMenu(e)}function KColorPicker(e){this.init(e)}function _colorpicker(e){return new KColorPicker(e)}function KUploadButton(e){this.init(e)}function _uploadbutton(e){return new KUploadButton(e)}function _createButton(e){e=e||{};var t=e.name||"",n=K(''),i=K('');return e.click&&i.click(e.click),n.append(i),n}function KDialog(e){this.init(e)}function _dialog(e){return new KDialog(e)}function _tabs(e){var t=_widget(e),n=t.remove,i=e.afterSelect,a=t.div,o=[];a.addClass("ke-tabs").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()});var r=K('
    ');return a.append(r),t.add=function(e){var t=K('
  • '+e.title+"
  • ");t.data("tab",e),o.push(t),r.append(t)},t.selectedIndex=0,t.select=function(e){t.selectedIndex=e,_each(o,function(n,i){i.unbind(),n===e?(i.addClass("ke-tabs-li-selected"),K(i.data("tab").panel).show("")):(i.removeClass("ke-tabs-li-selected").removeClass("ke-tabs-li-on").mouseover(function(){K(this).addClass("ke-tabs-li-on")}).mouseout(function(){K(this).removeClass("ke-tabs-li-on")}).click(function(){t.select(n)}),K(i.data("tab").panel).hide())}),i&&i.call(t,e)},t.remove=function(){_each(o,function(){this.remove()}),r.remove(),n.call(t)},t}function _loadScript(e,t){var n=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),i=document.createElement("script");n.appendChild(i),i.src=e,i.charset="utf-8",i.onload=i.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState||(t&&t(),i.onload=i.onreadystatechange=null,n.removeChild(i))}}function _chopQuery(e){var t=e.indexOf("?");return t>0?e.substr(0,t):e}function _loadStyle(e){for(var t=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),n=document.createElement("link"),i=_chopQuery(_formatUrl(e,"absolute")),a=K('link[rel="stylesheet"]',t),o=0,r=a.length;on&&(n=this.width)))});i.length>0&&"-"==i[0].title;)i.shift();for(;i.length>0&&"-"==i[i.length-1].title;)i.pop();var a=null;if(_each(i,function(e){"-"==this.title&&"-"==a.title&&delete i[e],a=this}),i.length>0){t.preventDefault();var o=K(e.edit.iframe).pos(),r=_menu({x:o.x+t.clientX,y:o.y+t.clientY,width:n,css:{visibility:"hidden"},shadowMode:e.shadowMode});_each(i,function(){this.title&&r.addItem(this)});var l=_docElement(r.doc),s=r.div.height();t.clientY+s>=l.clientHeight-100&&r.pos(r.x,_removeUnit(r.y)-s),r.div.css("visibility","visible"),e.menu=r}}})}function _bindNewlineEvent(){function e(e){for(var t=K(e.commonAncestor());t&&(1!=t.type||t.isStyle());)t=t.parent();return t.name}var t=this,n=t.edit.doc,i=t.newlineTag;if(!(_IE&&"br"!==i||_GECKO&&_V<3&&"p"!==i||_OPERA&&_V<9)){var a=_toMap("h1,h2,h3,h4,h5,h6,pre,li"),o=_toMap("p,h1,h2,h3,h4,h5,h6,pre,li,blockquote");K(n).keydown(function(r){if(!(13!=r.which||r.shiftKey||r.ctrlKey||r.altKey)){t.cmd.selection();var l=e(t.cmd.range);if("marquee"!=l&&"select"!=l)return"br"!==i||a[l]?void(o[l]||_nativeCommand(n,"formatblock","

    ")):(r.preventDefault(),void t.insertHtml("
    "+(_IE&&_V<9?"":"​")))}}),K(n).keyup(function(a){if(!(13!=a.which||a.shiftKey||a.ctrlKey||a.altKey)&&"br"!=i){if(_GECKO){var r=t.cmd.commonAncestor("p"),l=t.cmd.commonAncestor("a");return void(l&&""==l.text()&&(l.remove(!0),t.cmd.range.selectNodeContents(r[0]).collapse(!0),t.cmd.select()))}t.cmd.selection();var s=e(t.cmd.range);if("marquee"!=s&&"select"!=s){o[s]||_nativeCommand(n,"formatblock","

    ");var d=t.cmd.commonAncestor("div");if(d){for(var c=K("

    "),u=d[0].firstChild;u;){var p=u.nextSibling;c.append(u),u=p}d.before(c),d.remove(),t.cmd.range.selectNodeContents(c[0]),t.cmd.select()}}}})}}function _bindTabEvent(){var e=this,t=e.edit.doc;K(t).keydown(function(n){if(9==n.which){if(n.preventDefault(),e.afterTab)return void e.afterTab.call(e,n);var i=e.cmd,a=i.range;a.shrink(),a.collapsed&&1==a.startContainer.nodeType&&(a.insertNode(K("@ ",t)[0]),i.select()),e.insertHtml("    ")}})}function _bindFocusEvent(){var e=this;K(e.edit.textarea[0],e.edit.win).focus(function(t){e.afterFocus&&e.afterFocus.call(e,t),e.container.addClass("focus")}).blur(function(t){e.afterBlur&&e.afterBlur.call(e,t),e.container.removeClass("focus")})}function _removeBookmarkTag(e){return _trim(e.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/gi,""))}function _removeTempTag(e){return e.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/gi,"")}function _addBookmarkToStack(e,t){if(0===e.length)return void e.push(t);var n=e[e.length-1];_removeBookmarkTag(t.html)!==_removeBookmarkTag(n.html)&&e.push(t)}function _undoToRedo(e,t){var n,i,a=this,o=a.edit,r=o.doc.body;if(0===e.length)return a;o.designMode?(n=a.cmd.range,i=n.createBookmark(!0),i.html=r.innerHTML):i={ -html:r.innerHTML},_addBookmarkToStack(t,i);var l=e.pop();return _removeBookmarkTag(i.html)===_removeBookmarkTag(l.html)&&e.length>0&&(l=e.pop()),o.designMode?(o.html(l.html),l.start&&(n.moveToBookmark(l),a.select())):K(r).html(_removeBookmarkTag(l.html)),a}function KEditor(e){function t(e,t){KEditor.prototype[e]===undefined&&(n[e]=t),n.options[e]=t}var n=this;n.options={},_each(e,function(n,i){t(n,e[n])}),_each(K.options,function(e,i){n[e]===undefined&&t(e,i)});var i=K(n.srcElement||"').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
    "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
    '));var n=K('
    '),i=K('
    '),a=K('
    '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
    '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r
    ').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
    ',e.target?"":'',e.form?'
    ':'','',d.join(""),'',"",'',e.form?"
    ":"","
    "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
    ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
    ').appendTo(t.div);var u=K('
    ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
    ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
    '+e+"
    ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
    '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
    '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
    KindEditor '+_VERSION+'
    Copyright © kindsoft.net All rights reserved.
    ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable; -t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
    ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
    )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

    ").replace(/$/,"

    ").replace(/\n/g,"

    ")):n=n.replace(/\n/g,"
    $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

    ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
    ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
    '+escape(n)+"
    "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
    '+escape(n)+"
    "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
    ','
    ','",'',"
    ","
    "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
    ','
    ','
    ',i.address+' ','','',"","
    ",'
    ',' ","
    ",'
    ',"
    ",'
    ',"
    "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
    ','
    ','","
    ",'',"
    "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
    \n'+e.escape(l)+"
    ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
    '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
    ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
    '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
    ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a
    ');k.append(u);var h=e('
    ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
    '+s.filename+"
    ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
    ','
    ','
    ',' ',''+l.moveup+"","
    ",'
    ',l.viewType+' ",l.orderType+' ","
    ",'
    ',"
    ",'
    ',"
    "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",' ',"
    ",'
    ','",' ',"
    ","
    "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
    ','
    ','",'","
    "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",'
    ',"
    ","","
    "].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g);if(i){var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"), -extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
    ','
    ',i.address+' ','','',"","
    ",'
    ',"
    "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
    ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
    ','
    ','",'  ','  ','','',"","
    ",'
    ','",'',"
    ",'
    ','",'',"
    ",'
    ','",' ',"
    ","
    "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
    ','
    ','
    ','',"
    ",'
    '+t.uploadDesc+"
    ",'','',"","
    ",'
    ',"
    "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
    ');n.bodyDiv.append(i);var a=e('
    ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
    ').appendTo(a);e(['
    ','
    ','
    0%
    '].join("")).hide().appendTo(r),e('
    '+n.options.pendingMessage+"
    ").appendTo(r),i.append('
    '+t.name+"
    "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
    ','
    ',"
    ","
    "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"},SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null; -"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
    ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
    '+i.comment+'
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

    ").replace(/$/,"

    ").replace(/\n/g,"

    "):i.replace(/\n/g,"
    $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

    '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

    ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
    "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
    ")+"");r.push("
    "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
    bug->openedBy;?> bug->unResolved;?>
    '),r=$("
    {tableHead}
    {tableContent}
    ',r.join(""),l.join(""),"
    ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
    ','
    ','",p.width+'   ','   ",p.height+'   ','","
    ",'
    ','",p.textAlign+' ",p.verticalAlign+' ","
    ",'
    ','",p.borderColor+' ',"
    ",'
    ','",'',"
    ","
    "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
    ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
    "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
    ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
    "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
    '),n=$('
    '+p.xRxC.format(0,0)+"
    ");t.append(n);var i=$('
    ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
    ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
    ','
    ','
    ',a.selectTemplate+"
    ",'
    ',' ","
    ",'
    ',"
    ",'',"
    "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
    '+i.comment+'
    ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
    "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file +!function(window,undefined){function _isArray(e){return!!e&&"[object Array]"===Object.prototype.toString.call(e)}function _isFunction(e){return!!e&&"[object Function]"===Object.prototype.toString.call(e)}function _inArray(e,t){for(var n=0,i=t.length;n=0}function _addUnit(e,t){return t=t||"px",e&&/^\d+$/.test(e)?e+t:e}function _removeUnit(e){var t;return e&&(t=/(\d+)/.exec(e))?parseInt(t[1],10):0}function _escape(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""")}function _unescape(e){return e.replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&/g,"&")}function _toCamel(e){var t=e.split("-");return e="",_each(t,function(t,n){e+=t>0?n.charAt(0).toUpperCase()+n.substr(1):n}),e}function _toHex(e){function t(e){var t=parseInt(e,10).toString(16).toUpperCase();return t.length>1?t:"0"+t}return e.replace(/rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/gi,function(e,n,i,a){return"#"+t(n)+t(i)+t(a)})}function _toMap(e,t){t=t===undefined?",":t;var n,i={},a=_isArray(e)?e:e.split(t);return _each(a,function(e,t){if(n=/^(\d+)\.\.(\d+)$/.exec(t))for(var a=parseInt(n[1],10);a<=parseInt(n[2],10);a++)i[a.toString()]=!0;else i[t]=!0}),i}function _toArray(e,t){return Array.prototype.slice.call(e,t||0)}function _undef(e,t){return e===undefined?t:e}function _invalidUrl(e){return!e||/[<>"]/.test(e)}function _addParam(e,t){return e.indexOf("?")>=0?e+"&"+t:e+"?"+t}function _extend(e,t,n){n||(n=t,t=null);var i;if(t){var a=function(){};a.prototype=t.prototype,i=new a,_each(n,function(e,t){i[e]=t})}else i=n;i.constructor=e,e.prototype=i,e.parent=t?t.prototype:null}function _json(text){var match;(match=/\{[\s\S]*\}|\[[\s\S]*\]/.exec(text))&&(text=match[0]);var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.lastIndex=0,cx.test(text)&&(text=text.replace(cx,function(e){return"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return eval("("+text+")");throw"JSON parse error"}function _getBasePath(){for(var e,t=document.getElementsByTagName("script"),n=0,i=t.length;n=0)return void _each(t.split(","),function(){_bind(e,this,n)});var i=_getId(e);i||(i=_setId(e)),_eventData[i]===undefined&&(_eventData[i]={});var a=_eventData[i][t];a&&a.length>0?_unbindEvent(e,t,a[0]):(_eventData[i][t]=[],_eventData[i].el=e),a=_eventData[i][t],0===a.length&&(a[0]=function(t){var n=t?new KEvent(e,t):undefined;_each(a,function(t,i){t>0&&i&&i.call(e,n)})}),_inArray(n,a)<0&&a.push(n),_bindEvent(e,t,a[0])}function _unbind(e,t,n){if(t&&t.indexOf(",")>=0)return void _each(t.split(","),function(){_unbind(e,this,n)});var i=_getId(e);if(i){if(t===undefined)return void(i in _eventData&&(_each(_eventData[i],function(t,n){"el"!=t&&n.length>0&&_unbindEvent(e,t,n[0])}),delete _eventData[i],_removeId(e)));if(_eventData[i]){var a=_eventData[i][t];if(a&&a.length>0){n===undefined?(_unbindEvent(e,t,a[0]),delete _eventData[i][t]):(_each(a,function(e,t){e>0&&t===n&&a.splice(e,1)}),1==a.length&&(_unbindEvent(e,t,a[0]),delete _eventData[i][t]));var o=0;_each(_eventData[i],function(){o++}),o<2&&(delete _eventData[i],_removeId(e))}}}}function _fire(e,t){if(t.indexOf(",")>=0)return void _each(t.split(","),function(){_fire(e,this)});var n=_getId(e);if(n){var i=_eventData[n][t];_eventData[n]&&i&&i.length>0&&i[0]()}}function _ctrl(e,t,n){t=/^\d{2,}$/.test(t)?t:t.toUpperCase().charCodeAt(0),_bind(e,"keydown",function(i){!i.ctrlKey||i.which!=t||i.shiftKey||i.altKey||(n.call(e),i.stop())})}function _ready(e){function t(){a||(a=!0,e(KindEditor),_readyFinished=!0)}function n(){if(!a){try{document.documentElement.doScroll("left")}catch(e){return void setTimeout(n,100)}t()}}function i(){"complete"===document.readyState&&t()}if(_readyFinished)return void e(KindEditor);var a=!1;if(document.addEventListener)_bind(document,"DOMContentLoaded",t);else if(document.attachEvent){_bind(document,"readystatechange",i);var o=!1;try{o=null==window.frameElement}catch(r){}document.documentElement.doScroll&&o&&n()}_bind(window,"load",t)}function _getCssList(e){for(var t,n={},i=/\s*([\w\-]+)\s*:([^;]*)(;|$)/g;t=i.exec(e);){var a=_trim(t[1].toLowerCase()),o=_trim(_toHex(t[2]));n[a]=o}return n}function _getAttrList(e){for(var t,n={},i=/\s+(?:([\w\-:]+)|(?:([\w\-:]+)=([^\s"'<>]+))|(?:([\w\-:"]+)="([^"]*)")|(?:([\w\-:"]+)='([^']*)'))(?=(?:\s|\/|>)+)/g;t=i.exec(e);){var a=(t[1]||t[2]||t[4]||t[6]).toLowerCase(),o=(t[2]?t[3]:t[4]?t[5]:t[7])||"";n[a]=o}return n}function _addClassToTag(e,t){return e=/\s+class\s*=/.test(e)?e.replace(/(\s+class=["']?)([^"']*)(["']?[\s>])/,function(e,n,i,a){return(" "+i+" ").indexOf(" "+t+" ")<0?""===i?n+t+a:n+i+" "+t+a:e}):e.substr(0,e.length-1)+' class="'+t+'">'}function _formatCss(e){var t="";return _each(_getCssList(e),function(e,n){t+=e+":"+n+";"}),t}function _formatUrl(e,t,n,i){function a(e){for(var t=e.split("/"),n=[],i=0,a=t.length;i0&&n.pop():""!==o&&"."!=o&&n.push(o)}return"/"+n.join("/")}function o(t,n){if(e.substr(0,t.length)===t){for(var a=[],r=0;r0&&(s+="/"+a.join("/")),"/"==i&&(s+="/"),s+e.substr(t.length)}if(l=/^(.*)\//.exec(t))return o(l[1],++n)}if(t=_undef(t,"").toLowerCase(),"data:"!=e.substr(0,5)&&(e=e.replace(/([^:])\/\//g,"$1/")),_inArray(t,["absolute","relative","domain"])<0)return e;if(n=n||location.protocol+"//"+location.host,i===undefined){var r=location.pathname.match(/^(\/.*)\//);i=r?r[1]:""}var l;if(l=/^(\w+:\/\/[^\/]*)/.exec(e)){if(l[1]!==n)return e}else if(/^\w+:/.test(e))return e;return/^\//.test(e)?e=n+a(e.substr(1)):/^\w+:\/\//.test(e)||(e=n+a(i+"/"+e)),"relative"===t?e=o(n+i,0).substr(2):"absolute"===t&&e.substr(0,n.length)===n&&(e=e.substr(n.length)),e}function _formatHtml(e,t,n,i,a){null==e&&(e=""),n=n||"",i=_undef(i,!1),a=_undef(a,"\t");var o="xx-small,x-small,small,medium,large,x-large,xx-large".split(",");e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/<(?:br|br\s[^>]*)>/gi,"\n")+i}),e=e.replace(/<(?:br|br\s[^>]*)\s*\/?>\s*<\/p>/gi,"

    "),e=e.replace(/(<(?:p|p\s[^>]*)>)\s*(<\/p>)/gi,"$1
    $2"),e=e.replace(/\u200B/g,""),e=e.replace(/\u00A9/g,"©"),e=e.replace(/<[^>]+>/g,function(e){return e.replace(/\s+/g," ")});var r={};t&&(_each(t,function(e,t){for(var n=e.split(","),i=0,a=n.length;i]*)>)([\s\S]*?)(<\/script>)/gi,"")),r.style||(e=e.replace(/(<(?:style|style\s[^>]*)>)([\s\S]*?)(<\/style>)/gi,"")));var l=/(\s*)<(\/)?([\w\-:]+)((?:\s+|(?:\s+[\w\-:]+)|(?:\s+[\w\-:]+=[^\s"'<>]+)|(?:\s+[\w\-:"]+="[^"]*")|(?:\s+[\w\-:"]+='[^']*'))*)(\/)?>(\s*)/g,s=[];return e=e.replace(l,function(e,l,d,c,u,p,h){var f=e,m=l||"",g=d||"",v=c.toLowerCase(),_=u||"",b=p?" "+p:"",y=h||"";if(t&&!r[v])return"";if(""===b&&_SINGLE_TAG_MAP[v]&&(b=" /"),_INLINE_TAG_MAP[v]&&(m&&(m=" "),y&&(y=" ")),_PRE_TAG_MAP[v]&&(g?y="\n":m="\n"),i&&"br"==v&&(y="\n"),_BLOCK_TAG_MAP[v]&&!_PRE_TAG_MAP[v])if(i){g&&s.length>0&&s[s.length-1]===v?s.pop():s.push(v),m="\n",y="\n";for(var k=0,w=g?s.length:s.length-1;k=0&&(S[e]=_formatUrl(i,n)),(t&&"style"!==e&&!r[v]["*"]&&!r[v][e]||"body"===v&&"contenteditable"===e||/^kindeditor_\d+$/.test(e))&&delete S[e],"style"===e&&""!==i){var a=_getCssList(i);_each(a,function(e,n){!t||r[v].style||r[v]["."+e]||delete a[e]});var o="";_each(a,function(e,t){o+=e+":"+t+";"}),S.style=o}}),_="",_each(S,function(e,t){"style"===e&&""===t||(t=t.replace(/"/g,"""),_+=" "+e+'="'+t+'"')})}return"font"===v&&(v="span"),m+"<"+g+v+_+b+">"+y}),e=e.replace(/(<(?:pre|pre\s[^>]*)>)([\s\S]*?)(<\/pre>)/gi,function(e,t,n,i){return t+n.replace(/\n/g,'\n')+i}),e=e.replace(/\n\s*\n/g,"\n"),e=e.replace(/\n/g,"\n"),_trim(e)}function _clearMsWord(e,t){return e=e.replace(//gi,"").replace(//gi,"").replace(/]*>[\s\S]*?<\/style>/gi,"").replace(/]*>[\s\S]*?<\/script>/gi,"").replace(/]+>[\s\S]*?<\/w:[^>]+>/gi,"").replace(/]+>[\s\S]*?<\/o:[^>]+>/gi,"").replace(/[\s\S]*?<\/xml>/gi,"").replace(/<(?:table|td)[^>]*>/gi,function(e){return e.replace(/border-bottom:([#\w\s]+)/gi,"border:$1")}),_formatHtml(e,t)}function _mediaType(e){return/\.(rm|rmvb)(\?|$)/i.test(e)?"audio/x-pn-realaudio-plugin":/\.(swf|flv)(\?|$)/i.test(e)?"application/x-shockwave-flash":"video/x-ms-asf-plugin"}function _mediaClass(e){return/realaudio/i.test(e)?"ke-rm":/flash/i.test(e)?"ke-flash":"ke-media"}function _mediaAttrs(e){return _getAttrList(unescape(e))}function _mediaEmbed(e){var t="0&&(r+="width:"+n+"px;"),/\D/.test(i)?r+="height:"+i+";":i>0&&(r+="height:"+i+"px;");var l=''}function _tmpl(e,t){var n=new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+e.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return t?n(t):n}function _contains(e,t){if(9==e.nodeType&&9!=t.nodeType)return!0;for(;t=t.parentNode;)if(t==e)return!0;return!1}function _getAttr(e,t){t=t.toLowerCase();var n=null;if(_GET_SET_ATTRIBUTE||"script"==e.nodeName.toLowerCase())try{n=e.getAttribute(t,2)}catch(i){n=e.getAttribute(t,1)}else{var a=e.ownerDocument.createElement("div");a.appendChild(e.cloneNode(!1));var o=_getAttrList(_unescape(a.innerHTML));t in o&&(n=o[t])}return"style"===t&&null!==n&&(n=_formatCss(n)),n}function _queryAll(e,t){function n(e){return"string"!=typeof e?e:e.replace(/([^\w\-])/g,"\\$1")}function i(e){return e.replace(/\\/g,"")}function a(e,t){return"*"===e||e.toLowerCase()===n(t.toLowerCase())}function o(e,t,n){var o=[],r=n.ownerDocument||n,l=r.getElementById(i(e));return l&&a(t,l.nodeName)&&_contains(n,l)&&o.push(l),o}function r(e,t,n){var o,r,l,s,d=n.ownerDocument||n,c=[];if(n.getElementsByClassName)for(o=n.getElementsByClassName(i(e)),r=0,l=o.length;r-1&&c.push(s)}return c}function l(e,t,n){for(var o,r=[],l=n.ownerDocument||n,s=l.getElementsByName(i(e)),d=0,c=s.length;d])+)/.exec(e);var a=n?n[1]:"*";if(n=/#((?:[\w\-]|\\.)+)$/.exec(e))i=o(n[1],a,t);else if(n=/\.((?:[\w\-]|\\.)+)$/.exec(e))i=r(n[1],a,t);else if(n=/\[((?:[\w\-]|\\.)+)\]/.exec(e))i=s(n[1].toLowerCase(),null,a,t);else if(n=/\[((?:[\w\-]|\\.)+)\s*=\s*['"]?((?:\\.|[^'"]+)+)['"]?\]/.exec(e)){var d=n[1].toLowerCase(),c=n[2];i="id"===d?o(c,a,t):"class"===d?r(c,a,t):"name"===d?l(c,a,t):s(d,c,a,t)}else for(var u,p=t.getElementsByTagName(a),h=0,f=p.length;h1){var u=[];return _each(c,function(){_each(_queryAll(this,t),function(){_inArray(this,u)<0&&u.push(this)})}),u}t=t||document;for(var p,h=[],f=/((?:\\.|[^\s>])+|[\s>])/g;p=f.exec(e);)" "!==p[1]&&h.push(p[1]);var m=[];if(1==h.length)return d(h[0],t);var g,v,_,b,y,k,w,S,C,E,x=!1;for(k=0,lenth=h.length;k"!==g){if(k>0){for(v=[],w=0,C=m.length;w0?n[0]:null}function _get(e){return K(e)[0]}function _getDoc(e){return e?e.ownerDocument||e.document||e:document}function _getWin(e){if(!e)return window;var t=_getDoc(e);return t.parentWindow||t.defaultView}function _setHtml(e,t){if(1==e.nodeType){var n=_getDoc(e);try{e.innerHTML=''+t;var i=n.getElementById("__kindeditor_temp_tag__");i.parentNode.removeChild(i)}catch(a){K(e).empty(),K("@"+t,n).each(function(){e.appendChild(this)})}}}function _hasClass(e,t){return _inString(t,e.className," ")}function _setAttr(e,t,n){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),e.setAttribute(t,""+n)}function _removeAttr(e,t){_IE&&_V<8&&"class"==t.toLowerCase()&&(t="className"),_setAttr(e,t,""),e.removeAttribute(t)}function _getNodeName(e){return e&&e.nodeName?e.nodeName.toLowerCase():""}function _computedCss(e,t){var n=_getWin(e),i=_toCamel(t),a="";if(n.getComputedStyle){var o=n.getComputedStyle(e,null);a=o[i]||o.getPropertyValue(t)||e.style[i]}else e.currentStyle&&(a=e.currentStyle[i]||e.style[i]);return a}function _hasVal(e){return!!_VALUE_TAG_MAP[_getNodeName(e)]}function _docElement(e){return e=e||document,_QUIRKS?e.body:e.documentElement}function _docHeight(e){var t=_docElement(e);return Math.max(t.scrollHeight,t.clientHeight)}function _docWidth(e){var t=_docElement(e);return Math.max(t.scrollWidth,t.clientWidth)}function _getScrollPos(e){e=e||document;var t,n;return _IE||_NEWIE||_OPERA?(t=_docElement(e).scrollLeft,n=_docElement(e).scrollTop):(t=_getWin(e).scrollX,n=_getWin(e).scrollY),{x:t,y:n}}function KNode(e){this.init(e)}function _updateCollapsed(e){return e.collapsed=e.startContainer===e.endContainer&&e.startOffset===e.endOffset,e}function _copyAndDelete(e,t,n){function i(i,a,o){var r,s=i.nodeValue.length;if(t){var d=i.cloneNode(!0);r=a>0?d.splitText(a):d,o0&&(c=i.splitText(a),e.setStart(i,a)),o=0&&c<=0&&(c=g.compareBoundaryPoints(_START_TO_START,e)),c>=0&&u<=0&&(u=g.compareBoundaryPoints(_END_TO_END,e)),u>=0&&p<=0&&(p=g.compareBoundaryPoints(_END_TO_START,e)),p>=0)return!1;if(f=m.nextSibling,d>0)if(1==m.nodeType)if(c>=0&&u<=0)t&&h.appendChild(m.cloneNode(!0)),n&&l.push(m);else{var v;if(t&&(v=m.cloneNode(!1),h.appendChild(v)),o(m,v)===!1)return!1}else if(3==m.nodeType){var _;if(_=m==s.startContainer?i(m,s.startOffset,m.nodeValue.length):m==s.endContainer?i(m,0,s.endOffset):i(m,0,m.nodeValue.length),t)try{h.appendChild(_)}catch(b){}}m=f}}var r=e.doc,l=[],s=e.cloneRange().down(),d=-1,c=-1,u=-1,p=-1,h=e.commonAncestor(),f=r.createDocumentFragment();if(3==h.nodeType){var m=i(h,e.startOffset,e.endOffset);return t&&f.appendChild(m),a(),t?f:e}o(h,f),n&&e.up().collapse(!0);for(var g=0,v=l.length;g0?l+=f.text.replace(/\r\n|\n|\r/g,"").length:l=0,h&&K(h).remove()}else 3==p.nodeType&&(d.moveStart("character",p.nodeValue.length),l+=p.nodeValue.length);s<0&&(r=p)}if(s<0&&1==r.nodeType)return{node:a,offset:K(a.lastChild).index()+1};if(s>0)for(;r.nextSibling&&1==r.nodeType;)r=r.nextSibling;if(d=e.duplicate(),_moveToElementText(d,a),d.setEndPoint("StartToEnd",i),l-=d.text.replace(/\r\n|\n|\r/g,"").length,s>0&&3==r.nodeType)for(var v=r.previousSibling;v&&3==v.nodeType;)l-=v.nodeValue.length,v=v.previousSibling;return{node:r,offset:l}}function _getEndRange(e,t){var n=e.ownerDocument||e,i=n.body.createTextRange();if(n==e)return i.collapse(!0),i;if(1==e.nodeType&&e.childNodes.length>0){var a,o,r=e.childNodes;if(0===t?(o=r[0],a=!0):(o=r[t-1],a=!1),!o)return i;if("head"===K(o).name)return 1===t&&(a=!0),2===t&&(a=!1),i.collapse(a),i;if(1==o.nodeType){var l,s=K(o);return s.isControl()&&(l=n.createElement("span"),a?s.before(l):s.after(l),o=l),_moveToElementText(i,o),i.collapse(a),l&&K(l).remove(),i}e=o,t=a?0:o.nodeValue.length}var d=n.createElement("span");return K(e).before(d),_moveToElementText(i,d),i.moveStart("character",t),K(d).remove(),i}function _toRange(e){function t(e){"tr"==K(e.node).name&&(e.node=e.node.cells[e.offset],e.offset=0)}var n,i;if(_IERANGE){if(e.item)return n=_getDoc(e.item(0)),i=new KRange(n),i.selectNode(e.item(0)),i;n=e.parentElement().ownerDocument;var a=_getStartEnd(e,!0),o=_getStartEnd(e,!1);return t(a),t(o),i=new KRange(n),i.setStart(a.node,a.offset),i.setEnd(o.node,o.offset),i}var r=e.startContainer;return n=r.ownerDocument||r,i=new KRange(n),i.setStart(r,e.startOffset),i.setEnd(e.endContainer,e.endOffset),i}function KRange(e){this.init(e)}function _range(e){return e.nodeName?new KRange(e):e.constructor===KRange?e:_toRange(e)}function _nativeCommand(e,t,n){try{e.execCommand(t,!1,n)}catch(i){}}function _nativeCommandValue(e,t){var n="";try{n=e.queryCommandValue(t)}catch(i){}return"string"!=typeof n&&(n=""),n}function _getSel(e){var t=_getWin(e);return _IERANGE?e.selection:t.getSelection()}function _getRng(e){var t,n=_getSel(e);try{t=n.rangeCount>0?n.getRangeAt(0):n.createRange()}catch(i){}return!_IERANGE||t&&(t.item||t.parentElement().ownerDocument===e)?t:null}function _singleKeyMap(e){var t,n,i={};return _each(e,function(e,a){t=e.split(",");for(var o=0,r=t.length;o]+>/g,"")}function _mergeWrapper(e,t){e=e.clone(!0);for(var n=_getInnerNode(e),i=e,a=!1;t;){for(;i;)i.name===t.name&&(_mergeAttrs(i,t.attr(),t.css()),a=!0),i=i.first();a||n.append(t.clone(!1)),a=!1,t=t.first()}return e}function _wrapNode(e,t){if(t=t.clone(!0),3==e.type)return _getInnerNode(t).append(e.clone(!1)),e.replaceWith(t),t;for(var n,i=e;(n=e.first())&&1==n.children().length;)e=n;n=e.first();for(var a=e.doc.createDocumentFragment();n;)a.appendChild(n[0]),n=n.next();return t=_mergeWrapper(i,t),a.firstChild&&_getInnerNode(t).append(a),i.replaceWith(t),t}function _mergeAttrs(e,t,n){_each(t,function(t,n){"style"!==t&&e.attr(t,n)}),_each(n,function(t,n){e.css(t,n)})}function _inPreElement(e){for(;e&&"body"!=e.name;){if(_PRE_TAG_MAP[e.name]||"div"==e.name&&e.hasClass("ke-script"))return!0;e=e.parent()}return!1}function KCmd(e){this.init(e)}function _cmd(e){if(e.nodeName){var t=_getDoc(e);e=_range(t).selectNodeContents(t.body).collapse(!1)}return new KCmd(e)}function _drag(e){var t=e.moveEl,n=e.moveFn,i=e.clickEl||t,a=e.beforeDrag,o=e.iframeFix===undefined||e.iframeFix,r=[document];o&&K("iframe").each(function(){var e=_formatUrl(this.src||"","absolute");if(!/^https?:\/\//.test(e)){var t;try{t=_iframeDoc(this)}catch(n){}if(t){var i=K(this).pos();K(t).data("pos-x",i.x),K(t).data("pos-y",i.y),r.push(t)}}}),i.mousedown(function(e){function o(e){e.preventDefault();var t=K(_getDoc(e.target)),a=_round((t.data("pos-x")||0)+e.pageX-f),o=_round((t.data("pos-y")||0)+e.pageY-m);n.call(i,c,u,p,h,a,o)}function l(e){e.preventDefault()}function s(e){e.preventDefault(),K(r).unbind("mousemove",o).unbind("mouseup",s).unbind("selectstart",l),d.releaseCapture&&d.releaseCapture(),K(d).removeClass("ke-dragging")}e.stopPropagation();var d=i.get(),c=_removeUnit(t.css("left")),u=_removeUnit(t.css("top")),p=t.width(),h=t.height(),f=e.pageX,m=e.pageY;K(d).addClass("ke-dragging"),a&&a(),K(r).mousemove(o).mouseup(s).bind("selectstart",l),d.setCapture&&d.setCapture()})}function KWidget(e){this.init(e)}function _widget(e){return new KWidget(e)}function _iframeDoc(e){return e=_get(e),e.contentDocument||e.contentWindow.document}function _getInitHtml(e,t,n,i){var a=[""===_direction?"":'','',""];return _isArray(n)||(n=[n]),_each(n,function(e,t){t&&a.push('')}),i&&a.push(""),a.push(""),a.join("\n")}function _elementVal(e,t){if(e.hasVal()){if(t===undefined){var n=e.val();return n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,"")}return e.val(t)}return e.html(t)}function KEdit(e){this.init(e)}function _edit(e){return new KEdit(e)}function _selectToolbar(e,t){var n=this,i=n.get(e);if(i){if(i.hasClass("ke-disabled"))return;t(i)}}function KToolbar(e){this.init(e)}function _toolbar(e){return new KToolbar(e)}function KMenu(e){this.init(e)}function _menu(e){return new KMenu(e)}function KColorPicker(e){this.init(e)}function _colorpicker(e){return new KColorPicker(e)}function KUploadButton(e){this.init(e)}function _uploadbutton(e){return new KUploadButton(e)}function _createButton(e){e=e||{};var t=e.name||"",n=K(''),i=K('');return e.click&&i.click(e.click),n.append(i),n}function KDialog(e){this.init(e)}function _dialog(e){return new KDialog(e)}function _tabs(e){var t=_widget(e),n=t.remove,i=e.afterSelect,a=t.div,o=[];a.addClass("ke-tabs").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()});var r=K('
      ');return a.append(r),t.add=function(e){var t=K('
    • '+e.title+"
    • ");t.data("tab",e),o.push(t),r.append(t)},t.selectedIndex=0,t.select=function(e){t.selectedIndex=e,_each(o,function(n,i){i.unbind(),n===e?(i.addClass("ke-tabs-li-selected"),K(i.data("tab").panel).show("")):(i.removeClass("ke-tabs-li-selected").removeClass("ke-tabs-li-on").mouseover(function(){K(this).addClass("ke-tabs-li-on")}).mouseout(function(){K(this).removeClass("ke-tabs-li-on")}).click(function(){t.select(n)}),K(i.data("tab").panel).hide())}),i&&i.call(t,e)},t.remove=function(){_each(o,function(){this.remove()}),r.remove(),n.call(t)},t}function _loadScript(e,t){var n=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),i=document.createElement("script");n.appendChild(i),i.src=e,i.charset="utf-8",i.onload=i.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState||(t&&t(),i.onload=i.onreadystatechange=null,n.removeChild(i))}}function _chopQuery(e){var t=e.indexOf("?");return t>0?e.substr(0,t):e}function _loadStyle(e){for(var t=document.getElementsByTagName("head")[0]||(_QUIRKS?document.body:document.documentElement),n=document.createElement("link"),i=_chopQuery(_formatUrl(e,"absolute")),a=K('link[rel="stylesheet"]',t),o=0,r=a.length;on&&(n=this.width)))});i.length>0&&"-"==i[0].title;)i.shift();for(;i.length>0&&"-"==i[i.length-1].title;)i.pop();var a=null;if(_each(i,function(e){"-"==this.title&&"-"==a.title&&delete i[e],a=this}),i.length>0){t.preventDefault();var o=K(e.edit.iframe).pos(),r=_menu({x:o.x+t.clientX,y:o.y+t.clientY,width:n,css:{visibility:"hidden"},shadowMode:e.shadowMode});_each(i,function(){this.title&&r.addItem(this)});var l=_docElement(r.doc),s=r.div.height();t.clientY+s>=l.clientHeight-100&&r.pos(r.x,_removeUnit(r.y)-s),r.div.css("visibility","visible"),e.menu=r}}})}function _bindNewlineEvent(){function e(e){for(var t=K(e.commonAncestor());t&&(1!=t.type||t.isStyle());)t=t.parent();return t.name}var t=this,n=t.edit.doc,i=t.newlineTag;if(!(_IE&&"br"!==i||_GECKO&&_V<3&&"p"!==i||_OPERA&&_V<9)){var a=_toMap("h1,h2,h3,h4,h5,h6,pre,li"),o=_toMap("p,h1,h2,h3,h4,h5,h6,pre,li,blockquote");K(n).keydown(function(r){if(!(13!=r.which||r.shiftKey||r.ctrlKey||r.altKey)){t.cmd.selection();var l=e(t.cmd.range);if("marquee"!=l&&"select"!=l)return"br"!==i||a[l]?void(o[l]||_nativeCommand(n,"formatblock","

      ")):(r.preventDefault(),void t.insertHtml("
      "+(_IE&&_V<9?"":"​")))}}),K(n).keyup(function(a){if(!(13!=a.which||a.shiftKey||a.ctrlKey||a.altKey)&&"br"!=i){if(_GECKO){var r=t.cmd.commonAncestor("p"),l=t.cmd.commonAncestor("a");return void(l&&""==l.text()&&(l.remove(!0),t.cmd.range.selectNodeContents(r[0]).collapse(!0),t.cmd.select()))}t.cmd.selection();var s=e(t.cmd.range);if("marquee"!=s&&"select"!=s){o[s]||_nativeCommand(n,"formatblock","

      ");var d=t.cmd.commonAncestor("div");if(d){for(var c=K("

      "),u=d[0].firstChild;u;){var p=u.nextSibling;c.append(u),u=p}d.before(c),d.remove(),t.cmd.range.selectNodeContents(c[0]),t.cmd.select()}}}})}}function _bindTabEvent(){var e=this,t=e.edit.doc;K(t).keydown(function(n){if(9==n.which){if(n.preventDefault(),e.afterTab)return void e.afterTab.call(e,n);var i=e.cmd,a=i.range;a.shrink(),a.collapsed&&1==a.startContainer.nodeType&&(a.insertNode(K("@ ",t)[0]),i.select()),e.insertHtml("    ")}})}function _bindFocusEvent(){var e=this;K(e.edit.textarea[0],e.edit.win).focus(function(t){e.afterFocus&&e.afterFocus.call(e,t),e.container.addClass("focus")}).blur(function(t){e.afterBlur&&e.afterBlur.call(e,t),e.container.removeClass("focus")})}function _removeBookmarkTag(e){return _trim(e.replace(/]*id="?__kindeditor_bookmark_\w+_\d+__"?[^>]*><\/span>/gi,""))}function _removeTempTag(e){return e.replace(/]+class="?__kindeditor_paste__"?[^>]*>[\s\S]*?<\/div>/gi,"")}function _addBookmarkToStack(e,t){if(0===e.length)return void e.push(t);var n=e[e.length-1];_removeBookmarkTag(t.html)!==_removeBookmarkTag(n.html)&&e.push(t)}function _undoToRedo(e,t){var n,i,a=this,o=a.edit,r=o.doc.body;if(0===e.length)return a;o.designMode?(n=a.cmd.range,i=n.createBookmark(!0), +i.html=r.innerHTML):i={html:r.innerHTML},_addBookmarkToStack(t,i);var l=e.pop();return _removeBookmarkTag(i.html)===_removeBookmarkTag(l.html)&&e.length>0&&(l=e.pop()),o.designMode?(o.html(l.html),l.start&&(n.moveToBookmark(l),a.select())):K(r).html(_removeBookmarkTag(l.html)),a}function KEditor(e){function t(e,t){KEditor.prototype[e]===undefined&&(n[e]=t),n.options[e]=t}var n=this;n.options={},_each(e,function(n,i){t(n,e[n])}),_each(K.options,function(e,i){n[e]===undefined&&t(e,i)});var i=K(n.srcElement||"').css("width","100%"),n.tabIndex=isNaN(parseInt(e.tabIndex,10))?n.srcElement.attr("tabindex"):parseInt(e.tabIndex,10),n.iframe.attr("tabindex",n.tabIndex),n.textarea.attr("tabindex",n.tabIndex),n.width&&n.setWidth(n.width),n.height&&n.setHeight(n.height),n.designMode?n.textarea.hide():n.iframe.hide(),l&&n.iframe.bind("load",function(e){n.iframe.unbind("load"),_IE?t():setTimeout(t,0)}),n.div.append(n.iframe),n.div.append(n.textarea),n.srcElement.hide(),!l&&t()},setWidth:function(e){return this.div.css("width",_addUnit(e)),this},setHeight:function(e){var t=this;return e=_addUnit(e),t.div.css("height",e),t.iframe.css("height",e),(_IE&&_V<8||_QUIRKS)&&(e=_addUnit(_removeUnit(e)-2)),t.textarea.css("height",e),t},remove:function(){var e=this,t=e.doc;K(t.body).unbind(),K(t).unbind(),K(e.win).unbind(),e._mousedownHandler&&K(document).unbind("mousedown",e._mousedownHandler),_elementVal(e.srcElement,e.html()),e.srcElement.show(),t.write(""),e.iframe.unbind(),e.textarea.unbind(),KEdit.parent.remove.call(e)},html:function(e,t){var n=this,i=n.doc;if(n.designMode){var a=i.body;return e===undefined?(e=t?""+a.parentNode.innerHTML+"":a.innerHTML,n.beforeGetHtml&&(e=n.beforeGetHtml(e)),_GECKO&&"
      "==e&&(e=""),e):(n.beforeSetHtml&&(e=n.beforeSetHtml(e)),_IE&&_V>=9&&(e=e.replace(/(<.*?checked=")checked(".*>)/gi,"$1$2")),K(a).html(e),n.afterSetHtml&&n.afterSetHtml(),n)}return e===undefined?n.textarea.val():(n.textarea.val(e),n)},design:function(e){var t,n=this;return(e===undefined?!n.designMode:e)?n.designMode||(t=n.html(),n.designMode=!0,n.html(t),n.textarea.hide(),n.iframe.show()):n.designMode&&(t=n.html(),n.designMode=!1,n.html(t),n.iframe.hide(),n.textarea.show()),n.focus()},focus:function(){var e=this;return e.designMode?e.win.focus():e.textarea[0].focus(),e},blur:function(){var e=this;if(_IE){var t=K('',e.div);e.div.append(t),t[0].focus(),t.remove()}else e.designMode?e.win.blur():e.textarea[0].blur();return e},afterChange:function(e){function t(t){setTimeout(function(){e(t)},1)}var n=this,i=n.doc,a=i.body;return K(i).keyup(function(t){t.ctrlKey||t.altKey||!_CHANGE_KEY_MAP[t.which]||e(t)}),K(i).mouseup(e).contextmenu(e),K(n.win).blur(e),K(a).bind("paste",t),K(a).bind("cut",t),n}}),K.EditClass=KEdit,K.edit=_edit,K.iframeDoc=_iframeDoc,_extend(KToolbar,KWidget,{init:function(e){function t(e){var t=K(e);return t.hasClass("ke-outline")?t:t.hasClass("ke-toolbar-icon")?t.parent():void 0}function n(e,n){var i=t(e.target);if(i){if(i.hasClass("ke-disabled"))return;if(i.hasClass("ke-selected"))return;i[n]("ke-on")}}var i=this;KToolbar.parent.init.call(i,e),i.disableMode=_undef(e.disableMode,!1),i.noDisableItemMap=_toMap(_undef(e.noDisableItems,[])),i._itemMap={},i.div.addClass("ke-toolbar").bind("contextmenu,mousedown,mousemove",function(e){e.preventDefault()}).attr("unselectable","on"),i.div.mouseover(function(e){n(e,"addClass")}).mouseout(function(e){n(e,"removeClass")}).click(function(e){var n=t(e.target);if(n){if(n.hasClass("ke-disabled"))return;i.options.click.call(this,e,n.attr("data-name"))}})},get:function(e){return this._itemMap[e]?this._itemMap[e]:this._itemMap[e]=K("span.ke-icon-"+e,this.div).parent()},select:function(e){return _selectToolbar.call(this,e,function(e){e.addClass("ke-selected")}),self},unselect:function(e){return _selectToolbar.call(this,e,function(e){e.removeClass("ke-selected").removeClass("ke-on")}),self},enable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-disabled"),n.opacity(1)),t},disable:function(e){var t=this,n=e.get?e:t.get(e);return n&&(n.removeClass("ke-selected").addClass("ke-disabled"),n.opacity(.5)),t},disableAll:function(e,t){var n=this,i=n.noDisableItemMap;return t&&(i=_toMap(t)),(e===undefined?!n.disableMode:e)?(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.disable(e)}),n.disableMode=!0):(K("span.ke-outline",n.div).each(function(){var e=K(this),t=e[0].getAttribute("data-name",2);i[t]||n.enable(e)}),n.disableMode=!1),n}}),K.ToolbarClass=KToolbar,K.toolbar=_toolbar,_extend(KMenu,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KMenu.parent.init.call(t,e),t.centerLineMode=_undef(e.centerLineMode,!0),t.div.addClass("ke-menu").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on")},addItem:function(e){var t=this;if("-"===e.title)return void t.div.append(K('
      '));var n=K('
      '),i=K('
      '),a=K('
      '),o=_addUnit(e.height),r=_undef(e.iconClass,"");t.div.append(n),o&&(n.css("height",o),a.css("line-height",o));var l;return t.centerLineMode&&(l=K('
      '),o&&l.css("height",o)),n.mouseover(function(e){K(this).addClass("ke-menu-item-on"),l&&l.addClass("ke-menu-item-center-on")}).mouseout(function(e){K(this).removeClass("ke-menu-item-on"),l&&l.removeClass("ke-menu-item-center-on")}).click(function(t){e.click.call(K(this)),t.stopPropagation()}).append(i),l&&n.append(l),n.append(a),e.checked&&(r="ke-icon-checked"),""!==r&&i.html(''),a.html(e.title),t},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),K(".ke-menu-item",e.div[0]).unbind(),KMenu.parent.remove.call(e),e}}),K.MenuClass=KMenu,K.menu=_menu,_extend(KColorPicker,KWidget,{init:function(e){var t=this;e.z=e.z||811213,KColorPicker.parent.init.call(t,e);var n=e.colors||[["#E53333","#E56600","#FF9900","#64451D","#DFC5A4","#FFE500"],["#009900","#006600","#99BB00","#B8D100","#60D978","#00D5FF"],["#337FE5","#003399","#4C33E5","#9933E5","#CC33E5","#EE33EE"],["#FFFFFF","#CCCCCC","#999999","#666666","#333333","#000000"]];t.selectedColor=(e.selectedColor||"").toLowerCase(),t._cells=[],t.div.addClass("ke-colorpicker").bind("click,mousedown",function(e){e.stopPropagation()}).attr("unselectable","on");var i=t.doc.createElement("table");t.div.append(i),i.className="ke-colorpicker-table",i.cellPadding=0,i.cellSpacing=0,i.border=0;var a=i.insertRow(0),o=a.insertCell(0);o.colSpan=n[0].length,t._addAttr(o,"","ke-colorpicker-cell-top");for(var r=0;r').css("background-color",t)):e.html(i.options.noColor),K(e).attr("unselectable","on"),i._cells.push(e)},remove:function(){var e=this;return _each(e._cells,function(){this.unbind()}),KColorPicker.parent.remove.call(e),e}}),K.ColorPickerClass=KColorPicker,K.colorpicker=_colorpicker,_extend(KUploadButton,{init:function(e){var t=this,n=K(e.button),i=e.fieldName||"file",a=e.url||"",o=n.val(),r=e.extraParams||{},l=n[0].className||"",s=e.target||"kindeditor_upload_iframe_"+(new Date).getTime();e.afterError=e.afterError||function(e){alert(e)};var d=[];for(var c in r)d.push('');var u=['
      ',e.target?"":'',e.form?'
      ':'
      ','',d.join(""),'',"",'',e.form?"
      ":"","
      "].join(""),p=K(u,n.doc);n.hide(),n.before(p),t.div=p,t.button=n,t.iframe=e.target?K('iframe[name="'+s+'"]'):K("iframe",p),t.form=e.form?K(e.form):K("form",p),t.fileBox=K(".ke-upload-file",p),t.options=e},submit:function(){var e=this,t=e.iframe;return t.bind("load",function(){t.unbind();var n=document.createElement("form");e.fileBox.before(n),K(n).append(e.fileBox),n.reset(),K(n).remove(!0);var i,a=K.iframeDoc(t),o=a.getElementsByTagName("pre")[0],r="";r=o?o.innerHTML:a.body.innerHTML,r=_unescape(r),t[0].src="javascript:false";try{i=K.json(r)}catch(l){e.options.afterError.call(e,""+a.body.parentNode.innerHTML+"")}i&&e.options.afterUpload.call(e,i)}),e.form[0].submit(),e},remove:function(){var e=this;return e.fileBox&&e.fileBox.unbind(),e.iframe.remove(),e.div.remove(),e.button.show(),e}}),K.UploadButtonClass=KUploadButton,K.uploadbutton=_uploadbutton,_extend(KDialog,KWidget,{init:function(e){var t=this,n=_undef(e.shadowMode,!0);e.z=e.z||811213,e.shadowMode=!1,e.autoScroll=_undef(e.autoScroll,!0),KDialog.parent.init.call(t,e);var i=e.title,a=K(e.body,t.doc),o=e.previewBtn,r=e.yesBtn,l=e.noBtn,s=e.closeBtn,d=_undef(e.showMask,!0);t.div.addClass("ke-dialog").bind("click,mousedown",function(e){e.stopPropagation()});var c=K('
      ').appendTo(t.div);_IE&&_V<7?t.iframeMask=K('').appendTo(t.div):n&&K('
      ').appendTo(t.div);var u=K('
      ');c.append(u),u.html(i),t.closeIcon=K('').click(s.click),u.append(t.closeIcon),t.draggable({clickEl:u,beforeDrag:e.beforeDrag});var p=K('
      ');c.append(p),p.append(a);var h=K('');if((o||r||l)&&c.append(h),_each([{btn:o,name:"preview"},{btn:r,name:"yes"},{btn:l,name:"no"}],function(){if(this.btn){var e=_createButton(this.btn);e.addClass("ke-dialog-"+this.name),h.append(e)}}),t.height&&p.height(_removeUnit(t.height)-u.height()-h.height()),t.div.width(t.div.width()),t.div.height(t.div.height()),t.mask=null,d){var f=_docElement(t.doc),m=Math.max(f.scrollWidth,f.clientWidth),g=Math.max(f.scrollHeight,f.clientHeight);t.mask=_widget({x:0,y:0,z:t.z-1,cls:"ke-dialog-mask",width:m,height:g})}t.autoPos(t.div.width(),t.div.height()),t.footerDiv=h,t.bodyDiv=p,t.headerDiv=u,t.isLoading=!1},setMaskIndex:function(e){var t=this;t.mask.div.css("z-index",e)},showLoading:function(e){e=_undef(e,"");var t=this,n=t.bodyDiv;return t.loading=K('
      '+e+"
      ").width(n.width()).height(n.height()).css("top",t.headerDiv.height()+"px"),n.css("visibility","hidden").after(t.loading),t.isLoading=!0,t},hideLoading:function(){return this.loading&&this.loading.remove(),this.bodyDiv.css("visibility","visible"),this.isLoading=!1,this},remove:function(){var e=this;return e.options.beforeRemove&&e.options.beforeRemove.call(e),e.mask&&e.mask.remove(),e.iframeMask&&e.iframeMask.remove(),e.closeIcon.unbind(),K("input",e.div).unbind(),K("button",e.div).unbind(),e.footerDiv.unbind(),e.bodyDiv.unbind(),e.headerDiv.unbind(),K("iframe",e.div).each(function(){K(this).remove()}),KDialog.parent.remove.call(e),e}}),K.DialogClass=KDialog,K.dialog=_dialog,K.tabs=_tabs,K.loadScript=_loadScript,K.loadStyle=_loadStyle,K.ajax=_ajax;var _plugins={},_language={};KEditor.prototype={lang:function(e){return _lang(e,this.langType)},loadPlugin:function(e,t){var n=this;return _plugins[e]?_isFunction(_plugins[e])?(_plugins[e].call(n,KindEditor),t&&t.call(n),n):(setTimeout(function(){n.loadPlugin(e,t)},100),n):(_plugins[e]="loading",_loadScript(n.pluginsPath+e+"/"+e+".js?ver="+encodeURIComponent(K.DEBUG?_TIME:_VERSION),function(){setTimeout(function(){_plugins[e]&&n.loadPlugin(e,t)},0)}),n)},handler:function(e,t){var n=this;return n._handlers[e]||(n._handlers[e]=[]),_isFunction(t)?(n._handlers[e].push(t),n):(_each(n._handlers[e],function(){t=this.call(n,t)}),t)},clickToolbar:function(e,t){var n=this,i="clickToolbar"+e;return t===undefined?n._handlers[i]?n.handler(i):(n.loadPlugin(e,function(){n.handler(i)}),n):n.handler(i,t)},updateState:function(){var e=this;return _each("justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,subscript,superscript,bold,italic,underline,strikethrough".split(","),function(t,n){e.cmd.state(n)?e.toolbar.select(n):e.toolbar.unselect(n)}),e},addContextmenu:function(e){return this._contextmenus.push(e),this},afterCreate:function(e){return this.handler("afterCreate",e)},beforeRemove:function(e){return this.handler("beforeRemove",e)},beforeGetHtml:function(e){return this.handler("beforeGetHtml",e)},beforeSetHtml:function(e){return this.handler("beforeSetHtml",e)},afterSetHtml:function(e){return this.handler("afterSetHtml",e)},create:function(){function e(){return 0===s.height()?void setTimeout(e,100):void t.resize(i,a,!1)}var t=this,n=t.fullscreenMode;if(t.isCreated)return t;if(t.srcElement.data("kindeditor"))return t;t.srcElement.data("kindeditor","true"),n?_docElement().style.overflow="hidden":_docElement().style.overflow="";var i=n?_docElement().clientWidth+"px":t.width,a=n?_docElement().clientHeight+"px":t.height;(_IE&&_V<8||_QUIRKS)&&(a=_addUnit(_removeUnit(a)+2));var o=t.container=K(t.layout);n?K(document.body).append(o):t.srcElement.before(o);var r=K(".toolbar",o),l=K(".edit",o),s=t.statusbar=K(".statusbar",o);o.removeClass("container").addClass("ke-container ke-container-"+t.themeType).css("width",i),n?(o.css({position:"absolute",left:0,top:0,"z-index":811211}),_GECKO||(t._scrollPos=_getScrollPos()),window.scrollTo(0,0),K(document.body).css({height:"1px",overflow:"hidden"}),K(document.body.parentNode).css("overflow","hidden"),t._fullscreenExecuted=!0):(t._fullscreenExecuted&&(K(document.body).css({height:"",overflow:""}),K(document.body.parentNode).css("overflow","")),t._scrollPos&&window.scrollTo(t._scrollPos.x,t._scrollPos.y));var d=[];K.each(t.items,function(e,n){"|"==n?d.push(''):"/"==n?d.push('
      '):(d.push(''),d.push(''))});var c=t.toolbar=_toolbar({src:r,html:d.join(""),noDisableItems:t.noDisableItems,click:function(e,n){if(e.stop(),t.menu){var i=t.menu.name;if(t.hideMenu(),i===n)return}t.clickToolbar(n)}}),u=_removeUnit(a)-c.div.height(),p=t.edit=_edit({height:u>0&&_removeUnit(a)>t.minHeight?u:t.minHeight,src:l,srcElement:t.srcElement,designMode:t.designMode,themesPath:t.themesPath,bodyClass:t.bodyClass,cssPath:t.cssPath,cssData:t.cssData,beforeGetHtml:function(e){return e=t.beforeGetHtml(e),e=_removeBookmarkTag(_removeTempTag(e)),_formatHtml(e,t.filterMode?t.htmlTags:null,t.urlType,t.wellFormatMode,t.indentChar)},beforeSetHtml:function(e){return e=_formatHtml(e,t.filterMode?t.htmlTags:null,"",!1),t.beforeSetHtml(e)},afterSetHtml:function(){t.edit=p=this,t.afterSetHtml()},afterCreate:function(){if(t.edit=p=this,t.cmd=p.cmd,t._docMousedownFn=function(e){t.menu&&t.hideMenu()},K(p.doc,document).mousedown(t._docMousedownFn),_bindContextmenuEvent.call(t),_bindNewlineEvent.call(t),_bindTabEvent.call(t),_bindFocusEvent.call(t),p.afterChange(function(e){p.designMode&&(t.updateState(),t.addBookmark(),t.options.afterChange&&t.options.afterChange.call(t))}),p.textarea.keyup(function(e){e.ctrlKey||e.altKey||!_INPUT_KEY_MAP[e.which]||t.options.afterChange&&t.options.afterChange.call(t)}),t.readonlyMode&&t.readonly(),t.isCreated=!0,""===t.initContent&&(t.initContent=t.html()),t._undoStack.length>0){var e=t._undoStack.pop();e.start&&(t.html(e.html),p.cmd.range.moveToBookmark(e),t.select())}t.afterCreate(),t.options.afterCreate&&t.options.afterCreate.call(t)}});return s.removeClass("statusbar").addClass("ke-statusbar").append(''),t._fullscreenResizeHandler&&(K(window).unbind("resize",t._fullscreenResizeHandler),t._fullscreenResizeHandler=null),e(),n?(t._fullscreenResizeHandler=function(e){t.isCreated&&t.resize(_docElement().clientWidth,_docElement().clientHeight,!1)},K(window).bind("resize",t._fullscreenResizeHandler),c.select("fullscreen")):(_GECKO&&K(window).bind("scroll",function(e){t._scrollPos=_getScrollPos()}),t.resizeType>0&&_drag({moveEl:o,clickEl:s,moveFn:function(e,n,i,a,o,r){a+=r,t.resize(null,a)}}),2===t.resizeType&&_drag({moveEl:o,clickEl:s.last(),moveFn:function(e,n,i,a,o,r){i+=o,a+=r,t.resize(i,a)}})),t},remove:function(){var e=this;return e.isCreated?(e.beforeRemove(),e.srcElement.data("kindeditor",""),e.menu&&e.hideMenu(),_each(e.dialogs,function(){e.hideDialog()}),K(document).unbind("mousedown",e._docMousedownFn),e.toolbar.remove(),e.edit.remove(),e.statusbar.last().unbind(),e.statusbar.unbind(),e.container.remove(),e.container=e.toolbar=e.edit=e.menu=null,e.dialogs=[],e.isCreated=!1,e):e},resize:function(e,t,n){var i=this;return n=_undef(n,!0),e&&(/%/.test(e)||(e=_removeUnit(e),e=e/gi,"").replace(/ /gi," ")):t.html(_escape(e))},isEmpty:function(){return""===_trim(this.text().replace(/\r\n|\n|\r/,""))},isDirty:function(){return _trim(this.initContent.replace(/\r\n|\n|\r|t/g,""))!==_trim(this.html().replace(/\r\n|\n|\r|t/g,""))},selectedHtml:function(){var e=this.isCreated?this.cmd.range.html():"";return e=_removeBookmarkTag(_removeTempTag(e))},count:function(e){var t=this;return e=(e||"html").toLowerCase(),"html"===e?t.html().length:"text"===e?t.text().replace(/<(?:img|embed).*?>/gi,"K").replace(/\r\n|\n|\r/g,"").length:0},exec:function(e){e=e.toLowerCase();var t=this,n=t.cmd,i=_inArray(e,"selectall,copy,paste,print".split(","))<0;return i&&t.addBookmark(!1),n[e].apply(n,_toArray(arguments,1)),i&&(t.updateState(),t.addBookmark(!1),t.options.afterChange&&t.options.afterChange.call(t)),t},insertHtml:function(e,t){return this.isCreated?(e=this.beforeSetHtml(e),this.exec("inserthtml",e,t),this):this},appendHtml:function(e){if(this.html(this.html()+e),this.isCreated){var t=this.cmd;t.range.selectNodeContents(t.doc.body).collapse(!1),t.select()}return this},sync:function(){return _elementVal(this.srcElement,this.html()),this},focus:function(){return this.isCreated?this.edit.focus():this.srcElement[0].focus(),this},blur:function(){return this.isCreated?this.edit.blur():this.srcElement[0].blur(),this},addBookmark:function(e){e=_undef(e,!0);var t,n=this,i=n.edit,a=i.doc.body,o=_removeTempTag(a.innerHTML);if(e&&n._undoStack.length>0){var r=n._undoStack[n._undoStack.length-1];if(Math.abs(o.length-_removeBookmarkTag(r.html).length)0){var n=t.dialogs[0],i=t.dialogs[t.dialogs.length-1];n.setMaskIndex(i.z+2),e.z=i.z+3,e.showMask=!1}var a=_dialog(e);return t.dialogs.push(a),a},hideDialog:function(){var e=this;if(e.dialogs.length>0&&e.dialogs.pop().remove(),e.dialogs.length>0){var t=e.dialogs[0],n=e.dialogs[e.dialogs.length-1];t.setMaskIndex(n.z-1)}return e},errorDialog:function(e){var t=this,n=t.createDialog({width:750,title:t.lang("uploadError"),body:'
      '}),i=K("iframe",n.div),a=K.iframeDoc(i);return a.open(),a.write(e),a.close(),K(a.body).css("background-color","#FFF"),i[0].contentWindow.focus(),t}},_instances=[],K.remove=function(e){_eachEditor(e,function(e){this.remove(),_instances.splice(e,1)})},K.sync=function(e){_eachEditor(e,function(){this.sync()})},K.html=function(e,t){_eachEditor(e,function(){this.html(t)})},K.insertHtml=function(e,t){_eachEditor(e,function(){this.insertHtml(t)})},K.appendHtml=function(e,t){_eachEditor(e,function(){this.appendHtml(t)})},_IE&&_V<7&&_nativeCommand(document,"BackgroundImageCache",!0),K.EditorClass=KEditor,K.editor=_editor,K.create=_create,K.instances=_instances,K.plugin=_plugin,K.lang=_lang,_plugin("core",function(e){var t=this,n={undo:"Z",redo:"Y",bold:"B",italic:"I",underline:"U",print:"P",selectall:"A"};if(t.afterSetHtml(function(){t.options.afterChange&&t.options.afterChange.call(t)}),t.afterCreate(function(){if("form"==t.syncType){for(var n=e(t.srcElement),i=!1;n=n.parent();)if("form"==n.name){i=!0;break}if(i){n.bind("submit",function(n){t.sync(),e(window).bind("unload",function(){t.edit.textarea.remove()})});var a=e('[type="reset"]',n);a.click(function(){t.html(t.initContent),t.cmd.selection()}),t.beforeRemove(function(){n.unbind(),a.unbind()})}}}),t.clickToolbar("source",function(){t.edit.designMode?(t.toolbar.disableAll(!0),t.edit.design(!1),t.toolbar.select("source")):(t.toolbar.disableAll(!1),t.edit.design(!0),t.toolbar.unselect("source"),_GECKO?setTimeout(function(){t.cmd.selection()},0):t.cmd.selection()),t.designMode=t.edit.designMode}),t.afterCreate(function(){t.designMode||t.toolbar.disableAll(!0).select("source")}),t.clickToolbar("fullscreen",function(){t.fullscreen()}),t.fullscreenShortcut){var i=!1;t.afterCreate(function(){if(e(t.edit.doc,t.edit.textarea).keyup(function(e){27==e.which&&setTimeout(function(){t.fullscreen()},0)}),i){if(_IE&&!t.designMode)return;t.focus()}i||(i=!0)})}_each("undo,redo".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.clickToolbar(i)})}),t.clickToolbar(i,function(){t[i]()})}),t.clickToolbar("formatblock",function(){var e=t.lang("formatblock.formatBlock"),n={h1:28,h2:24,h3:18,H4:14,p:12},i=t.cmd.val("formatblock"),a=t.createMenu({name:"formatblock",width:"en"==t.langType?200:150});_each(e,function(e,o){var r="font-size:"+n[e]+"px;";"h"===e.charAt(0)&&(r+="font-weight:bold;"),a.addItem({title:''+o+"",height:n[e]+12,checked:i===e||i===o,click:function(){t.select().exec("formatblock","<"+e+">").hideMenu()}})})}),t.clickToolbar("fontname",function(){var e=t.cmd.val("fontname"),n=t.createMenu({name:"fontname",width:150});_each(t.lang("fontname.fontName"),function(i,a){n.addItem({title:''+a+"",checked:e===i.toLowerCase()||e===a.toLowerCase(),click:function(){t.exec("fontname",i).hideMenu()}})})}),t.clickToolbar("fontsize",function(){var e=t.cmd.val("fontsize"),n=t.createMenu({name:"fontsize",width:150});_each(t.fontSizeTable,function(i,a){n.addItem({title:''+a+"",height:_removeUnit(a)+12,checked:e===a,click:function(){t.exec("fontsize",a).hideMenu()}})})}),_each("forecolor,hilitecolor".split(","),function(e,n){t.clickToolbar(n,function(){t.createMenu({name:n,selectedColor:t.cmd.val(n)||"default",colors:t.colorTable,click:function(e){t.exec(n,e).hideMenu()}})})}),_each("cut,copy,paste".split(","),function(e,n){t.clickToolbar(n,function(){t.focus();try{t.exec(n,null)}catch(e){alert(t.lang(n+"Error"))}})}),t.clickToolbar("about",function(){var e='
      KindEditor '+_VERSION+'
      Copyright © kindsoft.net All rights reserved.
      ';t.createDialog({name:"about",width:350,title:t.lang("about"),body:e})}),t.plugin.getSelectedLink=function(){return t.cmd.commonAncestor("a")},t.plugin.getSelectedImage=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return!/^ke-\w+$/i.test(e[0].className)})},t.plugin.getSelectedFlash=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-flash"==e[0].className})},t.plugin.getSelectedMedia=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-media"==e[0].className||"ke-rm"==e[0].className})},t.plugin.getSelectedAnchor=function(){return _getImageFromRange(t.edit.cmd.range,function(e){return"ke-anchor"==e[0].className})},_each("link,image,flash,media,anchor".split(","),function(e,n){var i=n.charAt(0).toUpperCase()+n.substr(1);_each("edit,delete".split(","),function(e,a){t.addContextmenu({title:t.lang(a+i),click:function(){t.loadPlugin(n,function(){t.plugin[n][a](),t.hideMenu()})},cond:t.plugin["getSelected"+i],width:150,iconClass:"edit"==a?"ke-icon-"+n:undefined})}),t.addContextmenu({title:"-"})}),t.plugin.getSelectedTable=function(){return t.cmd.commonAncestor("table")},t.plugin.getSelectedRow=function(){return t.cmd.commonAncestor("tr")},t.plugin.getSelectedCell=function(){return t.cmd.commonAncestor("td")||t.cmd.commonAncestor("th")},_each("prop,cellprop,colinsertleft,colinsertright,rowinsertabove,rowinsertbelow,rowmerge,colmerge,rowsplit,colsplit,coldelete,rowdelete,delete".split(","),function(e,n){ +var i=_inArray(n,["prop","delete"])<0?t.plugin.getSelectedCell:t.plugin.getSelectedTable;t.addContextmenu({title:t.lang("table"+n),click:function(){t.loadPlugin("table",function(){t.plugin.table[n](),t.hideMenu()})},cond:i,width:170,iconClass:"ke-icon-table"+n})}),t.addContextmenu({title:"-"}),_each("selectall,justifyleft,justifycenter,justifyright,justifyfull,insertorderedlist,insertunorderedlist,indent,outdent,subscript,superscript,hr,print,bold,italic,underline,strikethrough,removeformat,unlink".split(","),function(e,i){n[i]&&t.afterCreate(function(){_ctrl(this.edit.doc,n[i],function(){t.cmd.selection(),t.clickToolbar(i)})}),t.clickToolbar(i,function(){t.focus().exec(i,null)})}),t.afterCreate(function(){function n(){i.range.moveToBookmark(a),i.select(),_WEBKIT&&(e("div."+l,o).each(function(){e(this).after("
      ").remove(!0)}),e("span.Apple-style-span",o).remove(!0),e("span.Apple-tab-span",o).remove(!0),e("span[style]",o).each(function(){"nowrap"==e(this).css("white-space")&&e(this).remove(!0)}),e("meta",o).remove());var n=o[0].innerHTML;o.remove(),""!==n&&(_WEBKIT&&(n=n.replace(/(
      )\1/gi,"$1")),2===t.pasteType&&(n=n.replace(/(<(?:p|p\s[^>]*)>) *(<\/p>)/gi,""),/schemas-microsoft-com|worddocument|mso-\w+/i.test(n)?n=_clearMsWord(n,t.filterMode?t.htmlTags:e.options.htmlTags):(n=_formatHtml(n,t.filterMode?t.htmlTags:null),n=t.beforeSetHtml(n))),1===t.pasteType&&(n=n.replace(/ /gi," "),n=n.replace(/\n\s*\n/g,"\n"),n=n.replace(/]*>/gi,"\n"),n=n.replace(/<\/p>]*>/gi,"\n"),n=n.replace(/<[^>]+>/g,""),n=n.replace(/ {2}/g,"  "),"p"==t.newlineTag?/\n/.test(n)&&(n=n.replace(/^/,"

      ").replace(/$/,"

      ").replace(/\n/g,"

      ")):n=n.replace(/\n/g,"
      $&")),t.insertHtml(n,!0))}var i,a,o,r=t.edit.doc,l="__kindeditor_paste__",s=!1;e(r.body).bind("paste",function(d){if(0===t.pasteType)return void d.stop();if(!s){if(s=!0,e("div."+l,r).remove(),i=t.cmd.selection(),a=i.range.createBookmark(),o=e('

      ',r).css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",left:"-1981px",top:e(a.start).pos().y+"px","white-space":"nowrap"}),e(r.body).append(o),_IE){var c=i.range.get(!0);c.moveToElementText(o[0]),c.select(),c.execCommand("paste"),d.preventDefault()}else i.range.selectNodeContents(o[0]),i.select(),o[0].tabIndex=-1,o[0].focus();setTimeout(function(){n(),s=!1},0)}})}),t.beforeGetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*data-ke-input-tag="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t){return unescape(t)}),e=e.replace(/(]*)?>)/gi,function(e,t,n){return/\s+type="[^"]+"/i.test(e)?e:t+' type="text"'+n})),e.replace(/(<(?:noscript|noscript\s[^>]*)>)([\s\S]*?)(<\/noscript>)/gi,function(e,t,n,i){return t+_unescape(n).replace(/\s+/g," ")+i}).replace(/]*class="?ke-(flash|rm|media)"?[^>]*>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||""),i=_mediaAttrs(t["data-ke-tag"]),a=_undef(n.width,""),o=_undef(n.height,"");return/px/i.test(a)&&(a=_removeUnit(a)),/px/i.test(o)&&(o=_removeUnit(o)),i.width=_undef(t.width,a),i.height=_undef(t.height,o),_mediaEmbed(i)}).replace(/]*class="?ke-anchor"?[^>]*>/gi,function(e){var t=_getAttrList(e);return''}).replace(/]*data-ke-script-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/]*data-ke-noscript-attr="([^"]*)"[^>]*>([\s\S]*?)<\/div>/gi,function(e,t,n){return""+unescape(n)+""}).replace(/(<[^>]*)data-ke-src="([^"]*)"([^>]*>)/gi,function(e,t,n,i){return e=e.replace(/(\s+(?:href|src)=")[^"]*(")/i,function(e,t,i){return t+_unescape(n)+i}),e=e.replace(/\s+data-ke-src="[^"]*"/i,"")}).replace(/(<[^>]+\s)data-ke-(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+n})}),t.beforeSetHtml(function(e){return _IE&&_V<=8&&(e=e.replace(/]*>|<(select|button)[^>]*>[\s\S]*?<\/\1>/gi,function(e){var t=_getAttrList(e),n=_getCssList(t.style||"");return"none"==n.display?'
      ':e})),e.replace(/]*type="([^"]+)"[^>]*>(?:<\/embed>)?/gi,function(e){var n=_getAttrList(e);return n.src=_undef(n.src,""),n.width=_undef(n.width,0),n.height=_undef(n.height,0),_mediaImg(t.themesPath+"common/blank.gif",n)}).replace(/]*name="([^"]+)"[^>]*>(?:<\/a>)?/gi,function(e){var n=_getAttrList(e);return n.href!==undefined?e:''}).replace(/]*)>([\s\S]*?)<\/script>/gi,function(e,t,n){return'
      '+escape(n)+"
      "}).replace(/]*)>([\s\S]*?)<\/noscript>/gi,function(e,t,n){return'
      '+escape(n)+"
      "}).replace(/(<[^>]*)(href|src)="([^"]*)"([^>]*>)/gi,function(e,t,n,i,a){return e.match(/\sdata-ke-src="[^"]*"/i)?e:e=t+n+'="'+i+'" data-ke-src="'+_escape(i)+'"'+a}).replace(/(<[^>]+\s)(on\w+="[^"]*"[^>]*>)/gi,function(e,t,n){return t+"data-ke-"+n}).replace(/]*\s+border="0"[^>]*>/gi,function(e){return e.indexOf("ke-zeroborder")>=0?e:_addClassToTag(e,"ke-zeroborder")})})})}}(window),KindEditor.lang({source:"HTML代码",preview:"预览",undo:"后退(Ctrl+Z)",redo:"前进(Ctrl+Y)",cut:"剪切(Ctrl+X)",copy:"复制(Ctrl+C)",paste:"粘贴(Ctrl+V)",plainpaste:"粘贴为无格式文本",wordpaste:"从Word粘贴",selectall:"全选(Ctrl+A)",justifyleft:"左对齐",justifycenter:"居中",justifyright:"右对齐",justifyfull:"两端对齐",insertorderedlist:"编号",insertunorderedlist:"项目符号",indent:"增加缩进",outdent:"减少缩进",subscript:"下标",superscript:"上标",formatblock:"段落",fontname:"字体",fontsize:"文字大小",forecolor:"文字颜色",hilitecolor:"文字背景",bold:"粗体(Ctrl+B)",italic:"斜体(Ctrl+I)",underline:"下划线(Ctrl+U)",strikethrough:"删除线",removeformat:"删除格式",image:"图片",multiimage:"批量图片上传",flash:"Flash",media:"视音频",table:"表格",tablecell:"单元格",hr:"插入横线",emoticons:"插入表情",link:"超级链接",unlink:"取消超级链接",fullscreen:"全屏显示",about:"关于",print:"打印(Ctrl+P)",filemanager:"文件空间",code:"插入程序代码",map:"Google地图",baidumap:"百度地图",lineheight:"行距",clearhtml:"清理HTML代码",pagebreak:"插入分页符",quickformat:"一键排版",insertfile:"插入文件",template:"插入模板",anchor:"锚点",yes:"确定",no:"取消",close:"关闭",editImage:"图片属性",deleteImage:"删除图片",editFlash:"Flash属性",deleteFlash:"删除Flash",editMedia:"视音频属性",deleteMedia:"删除视音频",editLink:"超级链接属性",deleteLink:"取消超级链接",editAnchor:"锚点属性",deleteAnchor:"删除锚点",tableprop:"表格属性",tablecellprop:"单元格属性",tableinsert:"插入表格",tabledelete:"删除表格",tablecolinsertleft:"左侧插入列",tablecolinsertright:"右侧插入列",tablerowinsertabove:"上方插入行",tablerowinsertbelow:"下方插入行",tablerowmerge:"向下合并单元格",tablecolmerge:"向右合并单元格",tablerowsplit:"拆分行",tablecolsplit:"拆分列",tablecoldelete:"删除列",tablerowdelete:"删除行",noColor:"无颜色",pleaseSelectFile:"请选择文件。",invalidImg:"请输入有效的URL地址。\n只允许jpg,gif,bmp,png格式。",invalidMedia:"请输入有效的URL地址。\n只允许swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb格式。",invalidWidth:"宽度必须为数字。",invalidHeight:"高度必须为数字。",invalidBorder:"边框必须为数字。",invalidUrl:"请输入有效的URL地址。",invalidRows:"行数为必选项,只允许输入大于0的数字。",invalidCols:"列数为必选项,只允许输入大于0的数字。",invalidPadding:"边距必须为数字。",invalidSpacing:"间距必须为数字。",invalidJson:"服务器发生故障。",uploadSuccess:"上传成功。",cutError:"您的浏览器安全设置不允许使用剪切操作,请使用快捷键(Ctrl+X)来完成。",copyError:"您的浏览器安全设置不允许使用复制操作,请使用快捷键(Ctrl+C)来完成。",pasteError:"您的浏览器安全设置不允许使用粘贴操作,请使用快捷键(Ctrl+V)来完成。",ajaxLoading:"加载中,请稍候 ...",uploadLoading:"上传中,请稍候 ...",uploadError:"上传错误","plainpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","wordpaste.comment":"请使用快捷键(Ctrl+V)把内容粘贴到下面的方框里。","code.pleaseInput":"请输入程序代码。","link.url":"URL","link.linkType":"打开类型","link.newWindow":"新窗口","link.selfWindow":"当前窗口","flash.url":"URL","flash.width":"宽度","flash.height":"高度","flash.upload":"上传","flash.viewServer":"文件空间","media.url":"URL","media.width":"宽度","media.height":"高度","media.autostart":"自动播放","media.upload":"上传","media.viewServer":"文件空间","image.remoteImage":"网络图片","image.localImage":"本地上传","image.remoteUrl":"图片地址","image.localUrl":"上传文件","image.size":"图片大小","image.width":"宽","image.height":"高","image.resetSize":"重置大小","image.align":"对齐方式","image.defaultAlign":"默认方式","image.leftAlign":"左对齐","image.rightAlign":"右对齐","image.imgTitle":"图片说明","image.upload":"浏览...","image.viewServer":"图片空间","multiimage.uploadDesc":"允许用户同时上传<%=uploadLimit%>张图片,单张图片容量不超过<%=sizeLimit%>","multiimage.startUpload":"开始上传","multiimage.clearAll":"全部清空","multiimage.insertAll":"全部插入","multiimage.queueLimitExceeded":"文件数量超过限制。","multiimage.fileExceedsSizeLimit":"文件大小超过限制。","multiimage.zeroByteFile":"无法上传空文件。","multiimage.invalidFiletype":"文件类型不正确。","multiimage.unknownError":"发生异常,无法上传。","multiimage.pending":"等待上传","multiimage.uploadError":"上传失败","filemanager.emptyFolder":"空文件夹","filemanager.moveup":"移到上一级文件夹","filemanager.viewType":"显示方式:","filemanager.viewImage":"缩略图","filemanager.listImage":"详细信息","filemanager.orderType":"排序方式:","filemanager.fileName":"名称","filemanager.fileSize":"大小","filemanager.fileType":"类型","insertfile.url":"URL","insertfile.title":"文件说明","insertfile.upload":"上传","insertfile.viewServer":"文件空间","table.cells":"单元格数","table.rows":"行数","table.cols":"列数","table.size":"大小","table.width":"宽度","table.height":"高度","table.percent":"%","table.px":"px","table.space":"边距间距","table.padding":"边距","table.spacing":"间距","table.align":"对齐方式","table.textAlign":"水平对齐","table.verticalAlign":"垂直对齐","table.alignDefault":"默认","table.alignLeft":"左对齐","table.alignCenter":"居中","table.alignRight":"右对齐","table.alignTop":"顶部","table.alignMiddle":"中部","table.alignBottom":"底部","table.alignBaseline":"基线","table.border":"边框","table.borderWidth":"边框","table.borderColor":"颜色","table.backgroundColor":"背景颜色","map.address":"地址: ","map.search":"搜索","baidumap.address":"地址: ","baidumap.search":"搜索","baidumap.insertDynamicMap":"插入动态地图","anchor.name":"锚点名称","formatblock.formatBlock":{h1:"标题 1",h2:"标题 2",h3:"标题 3",h4:"标题 4",p:"正 文"},"fontname.fontName":{SimSun:"宋体",NSimSun:"新宋体",FangSong_GB2312:"仿宋_GB2312",KaiTi_GB2312:"楷体_GB2312",SimHei:"黑体","Microsoft YaHei":"微软雅黑",Arial:"Arial","Arial Black":"Arial Black","Times New Roman":"Times New Roman","Courier New":"Courier New",Tahoma:"Tahoma",Verdana:"Verdana"},"lineheight.lineHeight":[{1:"单倍行距"},{1.5:"1.5倍行距"},{2:"2倍行距"},{2.5:"2.5倍行距"},{3:"3倍行距"}],"template.selectTemplate":"可选模板","template.replaceContent":"替换当前内容","template.fileList":{"1.html":"图片和文字","2.html":"表格","3.html":"项目编号"}},"zh_CN"),KindEditor.plugin("anchor",function(e){var t=this,n="anchor",i=t.lang(n+".");t.plugin.anchor={edit:function(){var a=['
      ','
      ','",'',"
      ","
      "].join(""),o=t.createDialog({name:n,width:300,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(e){t.insertHtml('').hideDialog().focus()}}}),r=o.div,l=e('input[name="name"]',r),s=t.plugin.getSelectedAnchor();s&&l.val(unescape(s.attr("data-ke-name"))),l[0].focus(),l[0].select()},"delete":function(){t.plugin.getSelectedAnchor().remove()}},t.clickToolbar(n,t.plugin.anchor.edit)}),KindEditor.plugin("autoheight",function(e){function t(){i.iframe.height(o),n.resize(null,Math.max((e.IE?a.scrollHeight:a.offsetHeight)+76,o))}var n=this;if(n.autoHeightMode){var i=n.edit,a=i.doc.body,o=e.removeUnit(n.height);i.iframe[0].scroll="no",a.style.overflowY="hidden",i.afterChange(t),n.isCreated?t():n.afterCreate(t)}}),KindEditor.plugin("baidumap",function(e){var t=this,n="baidumap",i=t.lang(n+"."),a=e.undef(t.mapWidth,558),o=e.undef(t.mapHeight,360);t.clickToolbar(n,function(){function r(){l=m[0].contentWindow,s=e.iframeDoc(m)}var l,s,d=['
      ','
      ','
      ',i.address+' ','','',"","
      ",'
      ',' ","
      ",'
      ',"
      ",'
      ',"
      "].join(""),c=t.createDialog({name:n,width:a+42,title:t.lang(n),body:d,yesBtn:{name:t.lang("yes"),click:function(e){var n=l.map,i=n.getCenter(),r=i.lng+","+i.lat,s=n.getZoom(),d=[f[0].checked?t.pluginsPath+"baidumap/index.html":"http://api.map.baidu.com/staticimage","?center="+encodeURIComponent(r),"&zoom="+encodeURIComponent(s),"&width="+a,"&height="+o,"&markers="+encodeURIComponent(r),"&markerStyles="+encodeURIComponent("l,A")].join("");f[0].checked?t.insertHtml(''):t.exec("insertimage",d),t.hideDialog().focus()}},beforeRemove:function(){h.remove(),s&&s.write(""),m.remove()}}),u=c.div,p=e('[name="address"]',u),h=e('[name="searchBtn"]',u),f=e('[name="insertDynamicMap"]',c.div),m=e('');m.bind("load",function(){m.unbind("load"),e.IE?r():setTimeout(r,0)}),e(".ke-map",u).replaceWith(m),h.click(function(){l.search(p.val())})})}),KindEditor.plugin("clearhtml",function(e){var t=this,n="clearhtml";t.clickToolbar(n,function(){t.focus();var n=t.html();n=n.replace(/(]*>)([\s\S]*?)(<\/script>)/gi,""),n=n.replace(/(]*>)([\s\S]*?)(<\/style>)/gi,""),n=e.formatHtml(n,{a:["href","target"],embed:["src","width","height","type","loop","autostart","quality",".width",".height","align","allowscriptaccess"],img:["src","width","height","border","alt","title",".width",".height"],table:["border"],"td,th":["rowspan","colspan"],"div,hr,br,tbody,tr,p,ol,ul,li,blockquote,h1,h2,h3,h4,h5,h6":[]}),t.html(n),t.cmd.selection(!0),t.addBookmark()})}),KindEditor.plugin("code",function(e){var t=this,n="code";t.clickToolbar(n,function(){var i=t.lang(n+"."),a=['
      ','
      ','","
      ",'',"
      "].join(""),o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var a=e(".ke-code-type",o.div).val(),l=r.val(),s=""===a?"":" lang-"+a,d='
      \n'+e.escape(l)+"
      ";return""===e.trim(l)?(alert(i.pleaseInput),void r[0].focus()):void t.insertHtml(d).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("emoticons",function(e){var t=this,n="emoticons",i=t.emoticonsPath||t.pluginsPath+"emoticons/images/",a=void 0===t.allowPreviewEmoticons||t.allowPreviewEmoticons,o=1;t.clickToolbar(n,function(){function r(n,a,o){k?n.mouseover(function(){a>v?(k.css("left",0),k.css("right","")):(k.css("left",""),k.css("right",0)),w.attr("src",i+o+".gif"),e(this).addClass("ke-on")}):n.mouseover(function(){e(this).addClass("ke-on")}),n.mouseout(function(){e(this).removeClass("ke-on")}),n.click(function(e){t.insertHtml('').hideMenu().focus(),e.stop()})}function l(t,n){var a=document.createElement("table");n.append(a),k&&(e(a).mouseover(function(){k.show("block")}),e(a).mouseout(function(){k.hide()}),b.push(e(a))),a.className="ke-table",a.cellPadding=0,a.cellSpacing=0,a.border=0;for(var o=(t-1)*m+f,l=0;l
      ').css("background-position","-"+24*o+"px 0px").css("background-image","url("+i+"static.gif)");c.append(h),b.push(c),o++}return a}function s(){e.each(b,function(){this.unbind()})}function d(e,t){e.click(function(e){s(),C.parentNode.removeChild(C),S.remove(),C=l(t,_),c(t),o=t,e.stop()})}function c(t){S=e('
      '),_.append(S);for(var n=1;n<=g;n++){if(t!==n){var i=e('
      ['+n+"]");d(i,n),S.append(i),b.push(i)}else S.append(e("@["+n+"]"));S.append(e("@ "))}}var u=5,p=9,h=135,f=0,m=u*p,g=Math.ceil(h/m),v=Math.floor(p/2),_=e('
      '),b=[],y=t.createMenu({name:n,beforeRemove:function(){s()}});y.div.append(_);var k,w;a&&(k=e('
      ').css("right",0),w=e(''),_.append(k),k.append(w));var S,C=l(o,_);c(o)})}),KindEditor.plugin("filemanager",function(e){function t(e,t,n){return e+" ("+Math.ceil(t/1024)+"KB, "+n+")"}function n(e,n){n.is_dir?e.attr("title",n.filename):e.attr("title",t(n.filename,n.filesize,n.datetime))}var i=this,a="filemanager",o=e.undef(i.fileManagerJson,i.basePath+"php/file_manager_json.php"),r=i.pluginsPath+a+"/images/",l=i.lang(a+".");i.plugin.filemanagerDialog=function(t){function s(t,n,a){var r="path="+t+"&order="+n+"&dir="+m;b.showLoading(i.lang("ajaxLoading")),e.ajax(e.addParam(o,r+"&"+(new Date).getTime()),function(e){b.hideLoading(),a(e)})}function d(t,n,i,a){var o=e.formatUrl(n.current_url+i.filename,"absolute"),r=encodeURIComponent(n.current_dir_path+i.filename+"/");i.is_dir?t.click(function(e){s(r,C.val(),a)}):i.is_photo?t.click(function(e){v.call(this,o,i.filename)}):t.click(function(e){v.call(this,o,i.filename)}),E.push(t)}function c(t,n){function i(){"VIEW"==S.val()?s(t.current_dir_path,C.val(),p):s(t.current_dir_path,C.val(),u)}e.each(E,function(){this.unbind()}),w.unbind(),S.unbind(),C.unbind(),t.current_dir_path&&w.click(function(e){s(t.moveup_dir_path,C.val(),n)}),S.change(i),C.change(i),k.html("")}function u(t){c(t,u);var n=document.createElement("table");n.className="ke-table",n.cellPadding=0,n.cellSpacing=0,n.border=0,k.append(n);for(var i=t.file_list,a=0,o=i.length;a'),m=e(p[0].insertCell(0)).addClass("ke-cell ke-name").append(f).append(document.createTextNode(" "+s.filename));!s.is_dir||s.has_file?(p.css("cursor","pointer"),m.attr("title",s.filename),d(m,t,s,u)):m.attr("title",l.emptyFolder),e(p[0].insertCell(1)).addClass("ke-cell ke-size").html(s.is_dir?"-":Math.ceil(s.filesize/1024)+"KB"),e(p[0].insertCell(2)).addClass("ke-cell ke-datetime").html(s.datetime)}}function p(t){c(t,p);for(var i=t.file_list,a=0,o=i.length;a');k.append(u);var h=e('
      ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});u.append(h);var f=t.current_url+s.filename,m=s.is_dir?r+"folder-64.gif":s.is_photo?f:r+"file-64.gif",g=e(''+s.filename+'');!s.is_dir||s.has_file?(h.css("cursor","pointer"),n(h,s),d(h,t,s,p)):h.attr("title",l.emptyFolder),h.append(g),u.append('
      '+s.filename+"
      ")}}var h=e.undef(t.width,650),f=e.undef(t.height,510),m=e.undef(t.dirName,""),g=e.undef(t.viewType,"VIEW").toUpperCase(),v=t.clickFn,_=['
      ','
      ','
      ',' ',''+l.moveup+"","
      ",'
      ',l.viewType+' ",l.orderType+' ","
      ",'
      ',"
      ",'
      ',"
      "].join(""),b=i.createDialog({name:a,width:h,height:f,title:i.lang(a),body:_}),y=b.div,k=e(".ke-plugin-filemanager-body",y),w=(e('[name="moveupImg"]',y),e('[name="moveupLink"]',y)),S=(e('[name="viewServer"]',y),e('[name="viewType"]',y)),C=e('[name="orderType"]',y),E=[];return S.val(g),s("",C.val(),"VIEW"==g?p:u),b}}),KindEditor.plugin("flash",function(e){var t=this,n="flash",i=t.lang(n+"."),a=e.undef(t.allowFlashUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.flash={edit:function(){var c=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",' ',"
      ",'
      ','",' ',"
      ","
      "].join(""),u=t.createDialog({name:n,width:450,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(".swf"),width:a,height:o,quality:"high"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p);if(h.val("http://"),a){var v=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=flash"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});v.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),v.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"flash",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var _=t.plugin.getSelectedFlash();if(_){var b=e.mediaAttrs(_.attr("data-ke-tag"));h.val(b.src),m.val(e.removeUnit(_.css("width"))||b.width||0),g.val(e.removeUnit(_.css("height"))||b.height||0)}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedFlash().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.flash.edit)}),KindEditor.plugin("image",function(e){var t=this,n="image",i=e.undef(t.allowImageUpload,!0),a=e.undef(t.allowImageRemote,!0),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.allowFileManager,!1),l=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),s=e.undef(t.imageTabIndex,0),d=t.pluginsPath+"image/images/",c=e.undef(t.extraFileUploadParams,{}),u=e.undef(t.filePostName,"imgFile"),p=e.undef(t.fillDescAfterUploadImage,!1),h=t.lang(n+".");t.plugin.imageDialog=function(i){function a(e,t){U.val(e),A.val(t),R=e,M=t}var s=(i.imageUrl,e.undef(i.imageWidth,""),e.undef(i.imageHeight,""),e.undef(i.imageTitle,""),e.undef(i.imageAlign,""),e.undef(i.showRemote,!0)),f=e.undef(i.showLocal,!0),m=e.undef(i.tabIndex,0),g=i.clickFn,v="kindeditor_upload_iframe_"+(new Date).getTime(),_=[];for(var b in c)_.push('');var y,k=['
      ','
      ','",'","
      "].join(""),w=f||r?450:400,S=f&&s?300:250,C=t.createDialog({name:n,width:w,height:S,title:t.lang(n),body:k,yesBtn:{name:t.lang("yes"),click:function(n){if(!C.isLoading){if(f&&s&&y&&1===y.selectedIndex||!s)return""==D.fileBox.val()?void alert(t.lang("pleaseSelectFile")):(C.showLoading(t.lang("uploadLoading")),D.submit(),void T.val(""));var i=e.trim(x.val()),a=U.val(),o=A.val(),r=N.val(),l="";return I.each(function(){if(this.checked)return l=this.value,!1}),"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void x[0].focus()):/^\d*$/.test(a)?/^\d*$/.test(o)?void g.call(t,i,r,a,o,0,l):(alert(t.lang("invalidHeight")),void A[0].focus()):(alert(t.lang("invalidWidth")),void U[0].focus())}}},beforeRemove:function(){K.unbind(),U.unbind(),A.unbind(),F.unbind()}}),E=C.div,x=e('[name="url"]',E),T=e('[name="localUrl"]',E),K=e('[name="viewServer"]',E),U=e('.tab1 [name="width"]',E),A=e('.tab1 [name="height"]',E),F=e(".ke-refresh-btn",E),N=e('.tab1 [name="title"]',E),I=e('.tab1 [name="align"]',E);s&&f?(y=e.tabs({src:e(".tabs",E),afterSelect:function(e){}}),y.add({title:h.remoteImage,panel:e(".tab1",E)}),y.add({title:h.localImage,panel:e(".tab2",E)}),y.select(m)):s?e(".tab1",E).show():f&&e(".tab2",E).show();var D=e.uploadbutton({button:e(".ke-upload-button",E)[0],fieldName:u,form:e(".ke-form",E),target:v,width:70,afterUpload:function(i){if(C.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),t.afterUpload&&t.afterUpload.call(t,a,i,n),p?(e(".ke-dialog-row #remoteUrl",E).val(a),e(".ke-tabs-li",E)[0].click(),e(".ke-refresh-btn",E).click()):g.call(t,a,i.title,i.width,i.height,i.border,i.align)}else alert(i.message)},afterError:function(e){C.hideLoading(),t.errorDialog(e)}});D.fileBox.change(function(e){T.val(D.fileBox.val())}),r?K.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"VIEW",dirName:"image",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',E).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):K.hide();var R=0,M=0;return F.click(function(t){var n=e('',document).css({position:"absolute",visibility:"hidden",top:0,left:"-1000px"});n.bind("load",function(){a(n.width(),n.height()),n.remove()}),e(document.body).append(n)}),U.change(function(e){R>0&&A.val(Math.round(M/R*parseInt(this.value,10)))}),A.change(function(e){M>0&&U.val(Math.round(R/M*parseInt(this.value,10)))}),x.val(i.imageUrl),a(i.imageWidth,i.imageHeight),N.val(i.imageTitle),I.each(function(){if(this.value===i.imageAlign)return this.checked=!0,!1}),s&&0===m&&(x[0].focus(),x[0].select()),C},t.plugin.image={edit:function(){var e=t.plugin.getSelectedImage();t.plugin.imageDialog({imageUrl:e?e.attr("data-ke-src"):"http://",imageWidth:e?e.width():"",imageHeight:e?e.height():"",imageTitle:e?e.attr("title"):"",imageAlign:e?e.attr("align"):"",showRemote:a,showLocal:i,tabIndex:e?0:s,clickFn:function(n,i,a,o,r,l){e?(e.attr("src",n),e.attr("data-ke-src",n),e.attr("width",a),e.attr("height",o),e.attr("title",i),e.attr("align",l),e.attr("alt",i)):t.exec("insertimage",n,i,a,o,r,l),setTimeout(function(){t.hideDialog().focus()},0)}})},"delete":function(){var e=t.plugin.getSelectedImage();"a"==e.parent().name&&(e=e.parent()),e.remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.image.edit)}),KindEditor.plugin("insertfile",function(e){var t=this,n="insertfile",i=e.undef(t.allowFileUpload,!0),a=e.undef(t.allowFileManager,!1),o=e.undef(t.formatUploadUrl,!0),r=e.undef(t.uploadJson,t.basePath+"php/upload_json.php"),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=t.lang(n+".");t.plugin.fileDialog=function(c){var u=e.undef(c.fileUrl,"http://"),p=e.undef(c.fileTitle,""),h=c.clickFn,f=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",'
      ',"
      ","",""].join(""),m=t.createDialog({name:n,width:450,title:t.lang(n),body:f,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(v.val()),a=b.val();return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void v[0].focus()):(""===e.trim(a)&&(a=i),void h.call(t,i,a))}}}),g=m.div,v=e('[name="url"]',g),_=e('[name="viewServer"]',g),b=e('[name="title"]',g); +if(i){var y=e.uploadbutton({button:e(".ke-upload-button",g)[0],fieldName:s,url:e.addParam(r,"dir=file"),extraParams:l,afterUpload:function(i){if(m.hideLoading(),0===i.error){var a=i.url;o&&(a=e.formatUrl(a,"absolute")),v.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){m.hideLoading(),t.errorDialog(e)}});y.fileBox.change(function(e){m.showLoading(t.lang("uploadLoading")),y.submit()})}else e(".ke-upload-button",g).hide();a?_.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"file",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',g).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):_.hide(),v.val(u),b.val(p),v[0].focus(),v[0].select()},t.clickToolbar(n,function(){t.plugin.fileDialog({clickFn:function(e,n){var i=''+n+"";t.insertHtml(i).hideDialog().focus()}})})}),KindEditor.plugin("lineheight",function(e){var t=this,n="lineheight",i=t.lang(n+".");t.clickToolbar(n,function(){var a="",o=t.cmd.commonNode({"*":".line-height"});o&&(a=o.css("line-height"));var r=t.createMenu({name:n,width:150});e.each(i.lineHeight,function(n,i){e.each(i,function(e,n){r.addItem({title:n,checked:a===e,click:function(){t.cmd.toggle('',{span:".line-height="+e}),t.updateState(),t.addBookmark(),t.hideMenu()}})})})})}),KindEditor.plugin("link",function(e){var t=this,n="link";t.plugin.link={edit:function(){var i=t.lang(n+"."),a='
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(l.val());return"http://"==i||e.invalidUrl(i)?(alert(t.lang("invalidUrl")),void l[0].focus()):void t.exec("createlink",i,s.val()).hideDialog().focus()}}}),r=o.div,l=e('input[name="url"]',r),s=e('select[name="type"]',r);l.val("http://"),s[0].options[0]=new Option(i.newWindow,"_blank"),s[0].options[1]=new Option(i.selfWindow,""),t.cmd.selection();var d=t.plugin.getSelectedLink();d&&(t.cmd.range.selectNode(d[0]),t.cmd.select(),l.val(d.attr("data-ke-src")),s.val(d.attr("target"))),l[0].focus(),l[0].select()},"delete":function(){t.exec("unlink",null)}},t.clickToolbar(n,t.plugin.link.edit)}),KindEditor.plugin("map",function(e){var t=this,n="map",i=t.lang(n+".");t.clickToolbar(n,function(){function a(){o=p[0].contentWindow,r=e.iframeDoc(p)}var o,r,l=['
      ','
      ',i.address+' ','','',"","
      ",'
      ',"
      "].join(""),s=t.createDialog({name:n,width:600,title:t.lang(n),body:l,yesBtn:{name:t.lang("yes"),click:function(e){var n=(o.geocoder,o.map),i=n.getCenter().lat()+","+n.getCenter().lng(),a=n.getZoom(),r=n.getMapTypeId(),l="http://maps.googleapis.com/maps/api/staticmap";l+="?center="+encodeURIComponent(i),l+="&zoom="+encodeURIComponent(a),l+="&size=558x360",l+="&maptype="+encodeURIComponent(r),l+="&markers="+encodeURIComponent(i),l+="&language="+t.langType,l+="&sensor=false",t.exec("insertimage",l).hideDialog().focus()}},beforeRemove:function(){u.remove(),r&&r.write(""),p.remove()}}),d=s.div,c=e('[name="address"]',d),u=e('[name="searchBtn"]',d),p=(["",'',"",'',"","",'','
      ',""].join("\n"),e(''));p.bind("load",function(){p.unbind("load"),e.IE?a():setTimeout(a,0)}),e(".ke-map",d).replaceWith(p),u.click(function(){o.search(c.val())})})}),KindEditor.plugin("media",function(e){var t=this,n="media",i=t.lang(n+"."),a=e.undef(t.allowMediaUpload,!0),o=e.undef(t.allowFileManager,!1),r=e.undef(t.formatUploadUrl,!0),l=e.undef(t.extraFileUploadParams,{}),s=e.undef(t.filePostName,"imgFile"),d=e.undef(t.uploadJson,t.basePath+"php/upload_json.php");t.plugin.media={edit:function(){var c=['
      ','
      ','",'  ','  ','','',"","
      ",'
      ','",'',"
      ",'
      ','",'',"
      ",'
      ','",' ',"
      ","
      "].join(""),u=t.createDialog({name:n,width:450,height:230,title:t.lang(n),body:c,yesBtn:{name:t.lang("yes"),click:function(n){var i=e.trim(h.val()),a=m.val(),o=g.val();if("http://"==i||e.invalidUrl(i))return alert(t.lang("invalidUrl")),void h[0].focus();if(!/^\d*$/.test(a))return alert(t.lang("invalidWidth")),void m[0].focus();if(!/^\d*$/.test(o))return alert(t.lang("invalidHeight")),void g[0].focus();var r=e.mediaImg(t.themesPath+"common/blank.gif",{src:i,type:e.mediaType(i),width:a,height:o,autostart:v[0].checked?"true":"false",loop:"true"});t.insertHtml(r).hideDialog().focus()}}}),p=u.div,h=e('[name="url"]',p),f=e('[name="viewServer"]',p),m=e('[name="width"]',p),g=e('[name="height"]',p),v=e('[name="autostart"]',p);if(h.val("http://"),a){var _=e.uploadbutton({button:e(".ke-upload-button",p)[0],fieldName:s,extraParams:l,url:e.addParam(d,"dir=media"),afterUpload:function(i){if(u.hideLoading(),0===i.error){var a=i.url;r&&(a=e.formatUrl(a,"absolute")),h.val(a),t.afterUpload&&t.afterUpload.call(t,a,i,n),alert(t.lang("uploadSuccess"))}else alert(i.message)},afterError:function(e){u.hideLoading(),t.errorDialog(e)}});_.fileBox.change(function(e){u.showLoading(t.lang("uploadLoading")),_.submit()})}else e(".ke-upload-button",p).hide();o?f.click(function(n){t.loadPlugin("filemanager",function(){t.plugin.filemanagerDialog({viewType:"LIST",dirName:"media",clickFn:function(n,i){t.dialogs.length>1&&(e('[name="url"]',p).val(n),t.afterSelectFile&&t.afterSelectFile.call(t,n),t.hideDialog())}})})}):f.hide();var b=t.plugin.getSelectedMedia();if(b){var y=e.mediaAttrs(b.attr("data-ke-tag"));h.val(y.src),m.val(e.removeUnit(b.css("width"))||y.width||0),g.val(e.removeUnit(b.css("height"))||y.height||0),v[0].checked="true"===y.autostart}h[0].focus(),h[0].select()},"delete":function(){t.plugin.getSelectedMedia().remove(),t.addBookmark()}},t.clickToolbar(n,t.plugin.media.edit)}),function(e){function t(e){this.init(e)}e.extend(t,{init:function(t){function n(t,n){e(".ke-status > div",t).hide(),e(".ke-message",t).addClass("ke-error").show().html(e.escape(n))}var i=this;t.afterError=t.afterError||function(e){alert(e)},i.options=t,i.progressbars={},i.div=e(t.container).html(['
      ','
      ','
      ','',"
      ",'
      '+t.uploadDesc+"
      ",'','',"","
      ",'
      ',"
      "].join("")),i.bodyDiv=e(".ke-swfupload-body",i.div);var a={debug:!1,upload_url:t.uploadUrl,flash_url:t.flashUrl,file_post_name:t.filePostName,button_placeholder:e(".ke-swfupload-button > input",i.div)[0],button_image_url:t.buttonImageUrl,button_width:t.buttonWidth,button_height:t.buttonHeight,button_cursor:SWFUpload.CURSOR.HAND,file_types:t.fileTypes,file_types_description:t.fileTypesDesc,file_upload_limit:t.fileUploadLimit,file_size_limit:t.fileSizeLimit,post_params:t.postParams,file_queued_handler:function(e){e.url=i.options.fileIconUrl,i.appendFile(e)},file_queue_error_handler:function(n,i,a){var o="";switch(i){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:o=t.queueLimitExceeded;break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:o=t.fileExceedsSizeLimit;break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:o=t.zeroByteFile;break;case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:o=t.invalidFiletype;break;default:o=t.unknownError}e.DEBUG&&alert(o)},upload_start_handler:function(t){var n=this,i=e('div[data-id="'+t.id+'"]',n.bodyDiv);e(".ke-status > div",i).hide(),e(".ke-progressbar",i).show()},upload_progress_handler:function(e,t,n){var a=Math.round(100*t/n),o=i.progressbars[e.id];o.bar.css("width",Math.round(80*a/100)+"px"),o.percent.html(a+"%")},upload_error_handler:function(t,a,o){if(t&&t.filestatus==SWFUpload.FILE_STATUS.ERROR){var r=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0);n(r,i.options.errorMessage)}},upload_success_handler:function(t,a){var o=e('div[data-id="'+t.id+'"]',i.bodyDiv).eq(0),r={};try{r=e.json(a)}catch(l){i.options.afterError.call(this,""+a+"")}return 0!==r.error?void n(o,e.DEBUG?r.message:i.options.errorMessage):(t.url=r.url,e(".ke-img",o).attr("src",t.url).attr("data-status",t.filestatus).data("data",r),void e(".ke-status > div",o).hide())}};i.swfu=new SWFUpload(a),e(".ke-swfupload-startupload input",i.div).click(function(){i.swfu.startUpload()})},getUrlList:function(){var t=[];return e(".ke-img",self.bodyDiv).each(function(){var n=e(this),i=n.attr("data-status");i==SWFUpload.FILE_STATUS.COMPLETE&&t.push(n.data("data"))}),t},removeFile:function(t){var n=this;n.swfu.cancelUpload(t);var i=e('div[data-id="'+t+'"]',n.bodyDiv);e(".ke-photo",i).unbind(),e(".ke-delete",i).unbind(),i.remove()},removeFiles:function(){var t=this;e(".ke-item",t.bodyDiv).each(function(){t.removeFile(e(this).attr("data-id"))})},appendFile:function(t){var n=this,i=e('
      ');n.bodyDiv.append(i);var a=e('
      ').mouseover(function(t){e(this).addClass("ke-on")}).mouseout(function(t){e(this).removeClass("ke-on")});i.append(a);var o=e(''+t.name+'');a.append(o),e('').appendTo(a).click(function(){n.removeFile(t.id)});var r=e('
      ').appendTo(a);e(['
      ','
      ','
      0%
      '].join("")).hide().appendTo(r),e('
      '+n.options.pendingMessage+"
      ").appendTo(r),i.append('
      '+t.name+"
      "),n.progressbars[t.id]={bar:e(".ke-progressbar-bar-inner",a),percent:e(".ke-progressbar-percent",a)}},remove:function(){this.removeFiles(),this.swfu.destroy(),this.div.html("")}}),e.swfupload=function(e,n){return new t(e,n)}}(KindEditor),KindEditor.plugin("multiimage",function(e){var t=this,n="multiimage",i=(e.undef(t.formatUploadUrl,!0),e.undef(t.uploadJson,t.basePath+"php/upload_json.php")),a=t.pluginsPath+"multiimage/images/",o=e.undef(t.imageSizeLimit,"1MB"),r=(e.undef(t.imageFileTypes,"*.jpg;*.gif;*.png"),e.undef(t.imageUploadLimit,20)),l=e.undef(t.filePostName,"imgFile"),s=t.lang(n+".");t.plugin.multiImageDialog=function(d){var c=d.clickFn,u=e.tmpl(s.uploadDesc,{uploadLimit:r,sizeLimit:o}),p=['
      ','
      ',"
      ","
      "].join(""),h=t.createDialog({name:n,width:650,height:510,title:t.lang(n),body:p,previewBtn:{name:s.insertAll,click:function(e){c.call(t,m.getUrlList())}},yesBtn:{name:s.clearAll,click:function(e){m.removeFiles()}},beforeRemove:function(){(!e.IE||e.V<=8)&&m.remove()}}),f=h.div,m=e.swfupload({container:e(".swfupload",f),buttonImageUrl:a+("zh_CN"==t.langType?"select-files-zh_CN.png":"select-files-en.png"),buttonWidth:"zh_CN"==t.langType?72:88,buttonHeight:23,fileIconUrl:a+"image.png",uploadDesc:u,startButtonValue:s.startUpload,uploadUrl:e.addParam(i,"dir=image"),flashUrl:a+"swfupload.swf",filePostName:l,fileTypes:"*.jpg;*.jpeg;*.gif;*.png;*.bmp",fileTypesDesc:"Image Files",fileUploadLimit:r,fileSizeLimit:o,postParams:e.undef(t.extraFileUploadParams,{}),queueLimitExceeded:s.queueLimitExceeded,fileExceedsSizeLimit:s.fileExceedsSizeLimit,zeroByteFile:s.zeroByteFile,invalidFiletype:s.invalidFiletype,unknownError:s.unknownError,pendingMessage:s.pending,errorMessage:s.uploadError,afterError:function(e){t.errorDialog(e)}});return h},t.clickToolbar(n,function(){t.plugin.multiImageDialog({clickFn:function(n){0!==n.length&&(e.each(n,function(e,n){t.afterUpload&&t.afterUpload.call(t,n.url,n,"multiimage"),t.exec("insertimage",n.url,n.title,n.width,n.height,n.border,n.align)}),setTimeout(function(){t.hideDialog().focus()},0))}})})}),function(){window.SWFUpload=function(e){this.initSWFUpload(e)},SWFUpload.prototype.initSWFUpload=function(e){try{this.customSettings={},this.settings=e,this.eventQueue=[],this.movieName="KindEditor_SWFUpload_"+SWFUpload.movieCount++,this.movieElement=null,SWFUpload.instances[this.movieName]=this,this.initSettings(),this.loadFlash(),this.displayDebugInfo()}catch(t){throw delete SWFUpload.instances[this.movieName],t}},SWFUpload.instances={},SWFUpload.movieCount=0,SWFUpload.version="2.2.0 2009-03-25",SWFUpload.QUEUE_ERROR={QUEUE_LIMIT_EXCEEDED:-100,FILE_EXCEEDS_SIZE_LIMIT:-110,ZERO_BYTE_FILE:-120,INVALID_FILETYPE:-130},SWFUpload.UPLOAD_ERROR={HTTP_ERROR:-200,MISSING_UPLOAD_URL:-210,IO_ERROR:-220,SECURITY_ERROR:-230,UPLOAD_LIMIT_EXCEEDED:-240,UPLOAD_FAILED:-250,SPECIFIED_FILE_ID_NOT_FOUND:-260,FILE_VALIDATION_FAILED:-270,FILE_CANCELLED:-280,UPLOAD_STOPPED:-290},SWFUpload.FILE_STATUS={QUEUED:-1,IN_PROGRESS:-2,ERROR:-3,COMPLETE:-4,CANCELLED:-5},SWFUpload.BUTTON_ACTION={SELECT_FILE:-100,SELECT_FILES:-110,START_UPLOAD:-120},SWFUpload.CURSOR={ARROW:-1,HAND:-2},SWFUpload.WINDOW_MODE={WINDOW:"window",TRANSPARENT:"transparent",OPAQUE:"opaque"},SWFUpload.completeURL=function(e){if("string"!=typeof e||e.match(/^https?:\/\//i)||e.match(/^\//))return e;var t=(window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""),window.location.pathname.lastIndexOf("/"));return t<=0?path="/":path=window.location.pathname.substr(0,t)+"/",path+e},SWFUpload.prototype.initSettings=function(){this.ensureDefault=function(e,t){this.settings[e]=void 0==this.settings[e]?t:this.settings[e]},this.ensureDefault("upload_url",""),this.ensureDefault("preserve_relative_urls",!1),this.ensureDefault("file_post_name","Filedata"),this.ensureDefault("post_params",{}),this.ensureDefault("use_query_string",!1),this.ensureDefault("requeue_on_error",!1),this.ensureDefault("http_success",[]),this.ensureDefault("assume_success_timeout",0),this.ensureDefault("file_types","*.*"),this.ensureDefault("file_types_description","All Files"),this.ensureDefault("file_size_limit",0),this.ensureDefault("file_upload_limit",0),this.ensureDefault("file_queue_limit",0),this.ensureDefault("flash_url","swfupload.swf"),this.ensureDefault("prevent_swf_caching",!0),this.ensureDefault("button_image_url",""),this.ensureDefault("button_width",1),this.ensureDefault("button_height",1),this.ensureDefault("button_text",""),this.ensureDefault("button_text_style","color: #000000; font-size: 16pt;"),this.ensureDefault("button_text_top_padding",0),this.ensureDefault("button_text_left_padding",0),this.ensureDefault("button_action",SWFUpload.BUTTON_ACTION.SELECT_FILES),this.ensureDefault("button_disabled",!1),this.ensureDefault("button_placeholder_id",""),this.ensureDefault("button_placeholder",null),this.ensureDefault("button_cursor",SWFUpload.CURSOR.ARROW),this.ensureDefault("button_window_mode",SWFUpload.WINDOW_MODE.WINDOW),this.ensureDefault("debug",!1),this.settings.debug_enabled=this.settings.debug,this.settings.return_upload_start_handler=this.returnUploadStart,this.ensureDefault("swfupload_loaded_handler",null),this.ensureDefault("file_dialog_start_handler",null),this.ensureDefault("file_queued_handler",null),this.ensureDefault("file_queue_error_handler",null),this.ensureDefault("file_dialog_complete_handler",null),this.ensureDefault("upload_start_handler",null),this.ensureDefault("upload_progress_handler",null),this.ensureDefault("upload_error_handler",null),this.ensureDefault("upload_success_handler",null),this.ensureDefault("upload_complete_handler",null),this.ensureDefault("debug_handler",this.debugMessage),this.ensureDefault("custom_settings",{}),this.customSettings=this.settings.custom_settings,this.settings.prevent_swf_caching&&(this.settings.flash_url=this.settings.flash_url+(this.settings.flash_url.indexOf("?")<0?"?":"&")+"preventswfcaching="+(new Date).getTime()),this.settings.preserve_relative_urls||(this.settings.upload_url=SWFUpload.completeURL(this.settings.upload_url),this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url)),delete this.ensureDefault},SWFUpload.prototype.loadFlash=function(){var e,t;if(null!==document.getElementById(this.movieName))throw"ID "+this.movieName+" is already in use. The Flash Object could not be added";if(e=document.getElementById(this.settings.button_placeholder_id)||this.settings.button_placeholder,void 0==e)throw"Could not find the placeholder element: "+this.settings.button_placeholder_id;t=document.createElement("div"),t.innerHTML=this.getFlashHTML(),e.parentNode.replaceChild(t.firstChild,e),void 0==window[this.movieName]&&(window[this.movieName]=this.getMovieElement())},SWFUpload.prototype.getFlashHTML=function(){var e="";return KindEditor.IE&&KindEditor.V>8&&(e=' classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'),['','','','','','','',""].join("")},SWFUpload.prototype.getFlashVars=function(){var e=this.buildParamString(),t=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(t),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(e),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("")},SWFUpload.prototype.getMovieElement=function(){if(void 0==this.movieElement&&(this.movieElement=document.getElementById(this.movieName)),null===this.movieElement)throw"Could not find Flash element";return this.movieElement},SWFUpload.prototype.buildParamString=function(){var e=this.settings.post_params,t=[];if("object"==typeof e)for(var n in e)e.hasOwnProperty(n)&&t.push(encodeURIComponent(n.toString())+"="+encodeURIComponent(e[n].toString()));return t.join("&")},SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,!1);var e=null;if(e=this.getMovieElement(),e&&"unknown"==typeof e.CallFunction){for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}try{e.parentNode.removeChild(e)}catch(i){}}return window[this.movieName]=null,SWFUpload.instances[this.movieName]=null,delete SWFUpload.instances[this.movieName],this.movieElement=null,this.settings=null,this.customSettings=null,this.eventQueue=null,this.movieName=null,!0}catch(a){return!1}},SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",this.settings.button_placeholder?"Set":"Not Set","\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",("function"==typeof this.settings.swfupload_loaded_handler).toString(),"\n","\t","file_dialog_start_handler assigned: ",("function"==typeof this.settings.file_dialog_start_handler).toString(),"\n","\t","file_queued_handler assigned: ",("function"==typeof this.settings.file_queued_handler).toString(),"\n","\t","file_queue_error_handler assigned: ",("function"==typeof this.settings.file_queue_error_handler).toString(),"\n","\t","upload_start_handler assigned: ",("function"==typeof this.settings.upload_start_handler).toString(),"\n","\t","upload_progress_handler assigned: ",("function"==typeof this.settings.upload_progress_handler).toString(),"\n","\t","upload_error_handler assigned: ",("function"==typeof this.settings.upload_error_handler).toString(),"\n","\t","upload_success_handler assigned: ",("function"==typeof this.settings.upload_success_handler).toString(),"\n","\t","upload_complete_handler assigned: ",("function"==typeof this.settings.upload_complete_handler).toString(),"\n","\t","debug_handler assigned: ",("function"==typeof this.settings.debug_handler).toString(),"\n"].join(""))},SWFUpload.prototype.addSetting=function(e,t,n){return void 0==t?this.settings[e]=n:this.settings[e]=t},SWFUpload.prototype.getSetting=function(e){return void 0!=this.settings[e]?this.settings[e]:""},SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement(),returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+""),returnValue=eval(returnString)}catch(ex){throw"Call to "+functionName+" failed"}return void 0!=returnValue&&"object"==typeof returnValue.post&&(returnValue=this.unescapeFilePostParams(returnValue)),returnValue},SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile")},SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles")},SWFUpload.prototype.startUpload=function(e){this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelUpload=function(e,t){t!==!1&&(t=!0),this.callFlash("CancelUpload",[e,t])},SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload")},SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats")},SWFUpload.prototype.setStats=function(e){this.callFlash("SetStats",[e])},SWFUpload.prototype.getFile=function(e){return"number"==typeof e?this.callFlash("GetFileByIndex",[e]):this.callFlash("GetFile",[e])},SWFUpload.prototype.addFileParam=function(e,t,n){return this.callFlash("AddFileParam",[e,t,n])},SWFUpload.prototype.removeFileParam=function(e,t){this.callFlash("RemoveFileParam",[e,t])},SWFUpload.prototype.setUploadURL=function(e){this.settings.upload_url=e.toString(),this.callFlash("SetUploadURL",[e])},SWFUpload.prototype.setPostParams=function(e){this.settings.post_params=e,this.callFlash("SetPostParams",[e])},SWFUpload.prototype.addPostParam=function(e,t){this.settings.post_params[e]=t,this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.removePostParam=function(e){delete this.settings.post_params[e],this.callFlash("SetPostParams",[this.settings.post_params])},SWFUpload.prototype.setFileTypes=function(e,t){this.settings.file_types=e,this.settings.file_types_description=t,this.callFlash("SetFileTypes",[e,t])},SWFUpload.prototype.setFileSizeLimit=function(e){this.settings.file_size_limit=e,this.callFlash("SetFileSizeLimit",[e])},SWFUpload.prototype.setFileUploadLimit=function(e){this.settings.file_upload_limit=e,this.callFlash("SetFileUploadLimit",[e])},SWFUpload.prototype.setFileQueueLimit=function(e){this.settings.file_queue_limit=e,this.callFlash("SetFileQueueLimit",[e])},SWFUpload.prototype.setFilePostName=function(e){this.settings.file_post_name=e,this.callFlash("SetFilePostName",[e])},SWFUpload.prototype.setUseQueryString=function(e){this.settings.use_query_string=e,this.callFlash("SetUseQueryString",[e])},SWFUpload.prototype.setRequeueOnError=function(e){this.settings.requeue_on_error=e,this.callFlash("SetRequeueOnError",[e])},SWFUpload.prototype.setHTTPSuccess=function(e){"string"==typeof e&&(e=e.replace(" ","").split(",")),this.settings.http_success=e,this.callFlash("SetHTTPSuccess",[e])},SWFUpload.prototype.setAssumeSuccessTimeout=function(e){this.settings.assume_success_timeout=e,this.callFlash("SetAssumeSuccessTimeout",[e])},SWFUpload.prototype.setDebugEnabled=function(e){this.settings.debug_enabled=e,this.callFlash("SetDebugEnabled",[e])},SWFUpload.prototype.setButtonImageURL=function(e){void 0==e&&(e=""),this.settings.button_image_url=e,this.callFlash("SetButtonImageURL",[e])},SWFUpload.prototype.setButtonDimensions=function(e,t){this.settings.button_width=e,this.settings.button_height=t;var n=this.getMovieElement();void 0!=n&&(n.style.width=e+"px",n.style.height=t+"px"),this.callFlash("SetButtonDimensions",[e,t])},SWFUpload.prototype.setButtonText=function(e){this.settings.button_text=e,this.callFlash("SetButtonText",[e])},SWFUpload.prototype.setButtonTextPadding=function(e,t){this.settings.button_text_top_padding=t,this.settings.button_text_left_padding=e,this.callFlash("SetButtonTextPadding",[e,t])},SWFUpload.prototype.setButtonTextStyle=function(e){this.settings.button_text_style=e,this.callFlash("SetButtonTextStyle",[e])},SWFUpload.prototype.setButtonDisabled=function(e){this.settings.button_disabled=e,this.callFlash("SetButtonDisabled",[e])},SWFUpload.prototype.setButtonAction=function(e){this.settings.button_action=e,this.callFlash("SetButtonAction",[e])},SWFUpload.prototype.setButtonCursor=function(e){this.settings.button_cursor=e,this.callFlash("SetButtonCursor",[e])},SWFUpload.prototype.queueEvent=function(e,t){void 0==t?t=[]:t instanceof Array||(t=[t]);var n=this;if("function"==typeof this.settings[e])this.eventQueue.push(function(){this.settings[e].apply(this,t)}),setTimeout(function(){n.executeNextEvent()},0);else if(null!==this.settings[e])throw"Event handler "+e+" is unknown or is not a function"; +},SWFUpload.prototype.executeNextEvent=function(){var e=this.eventQueue?this.eventQueue.shift():null;"function"==typeof e&&e.apply(this)},SWFUpload.prototype.unescapeFilePostParams=function(e){var t,n=/[$]([0-9a-f]{4})/i,i={};if(void 0!=e){for(var a in e.post)if(e.post.hasOwnProperty(a)){t=a;for(var o;null!==(o=n.exec(t));)t=t.replace(o[0],String.fromCharCode(parseInt("0x"+o[1],16)));i[t]=e.post[a]}e.post=i}return e},SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface")}catch(e){return!1}},SWFUpload.prototype.flashReady=function(){var e=this.getMovieElement();return e?(this.cleanUp(e),void this.queueEvent("swfupload_loaded_handler")):void this.debug("Flash called back ready but the flash movie can't be found.")},SWFUpload.prototype.cleanUp=function(e){try{if(this.movieElement&&"unknown"==typeof e.CallFunction){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var t in e)try{"function"==typeof e[t]&&(e[t]=null)}catch(n){}}}catch(i){}window.__flash__removeCallback=function(e,t){try{e&&(e[t]=null)}catch(n){}}},SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler")},SWFUpload.prototype.fileQueued=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("file_queued_handler",e)},SWFUpload.prototype.fileQueueError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("file_queue_error_handler",[e,t,n])},SWFUpload.prototype.fileDialogComplete=function(e,t,n){this.queueEvent("file_dialog_complete_handler",[e,t,n])},SWFUpload.prototype.uploadStart=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("return_upload_start_handler",e)},SWFUpload.prototype.returnUploadStart=function(e){var t;if("function"==typeof this.settings.upload_start_handler)e=this.unescapeFilePostParams(e),t=this.settings.upload_start_handler.call(this,e);else if(void 0!=this.settings.upload_start_handler)throw"upload_start_handler must be a function";void 0===t&&(t=!0),t=!!t,this.callFlash("ReturnUploadStart",[t])},SWFUpload.prototype.uploadProgress=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_progress_handler",[e,t,n])},SWFUpload.prototype.uploadError=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_error_handler",[e,t,n])},SWFUpload.prototype.uploadSuccess=function(e,t,n){e=this.unescapeFilePostParams(e),this.queueEvent("upload_success_handler",[e,t,n])},SWFUpload.prototype.uploadComplete=function(e){e=this.unescapeFilePostParams(e),this.queueEvent("upload_complete_handler",e)},SWFUpload.prototype.debug=function(e){this.queueEvent("debug_handler",e)},SWFUpload.prototype.debugMessage=function(e){if(this.settings.debug){var t,n=[];if("object"==typeof e&&"string"==typeof e.name&&"string"==typeof e.message){for(var i in e)e.hasOwnProperty(i)&&n.push(i+": "+e[i]);t=n.join("\n")||"",n=t.split("\n"),t="EXCEPTION: "+n.join("\nEXCEPTION: "),SWFUpload.Console.writeLine(t)}else SWFUpload.Console.writeLine(e)}},SWFUpload.Console={},SWFUpload.Console.writeLine=function(e){var t,n;try{t=document.getElementById("SWFUpload_Console"),t||(n=document.createElement("form"),document.getElementsByTagName("body")[0].appendChild(n),t=document.createElement("textarea"),t.id="SWFUpload_Console",t.style.fontFamily="monospace",t.setAttribute("wrap","off"),t.wrap="off",t.style.overflow="auto",t.style.width="700px",t.style.height="350px",t.style.margin="5px",n.appendChild(t)),t.value+=e+"\n",t.scrollTop=t.scrollHeight-t.clientHeight}catch(i){alert("Exception: "+i.name+" Message: "+i.message)}}}(),function(){"function"==typeof SWFUpload&&(SWFUpload.queue={},SWFUpload.prototype.initSettings=function(e){return function(){"function"==typeof e&&e.call(this),this.queueSettings={},this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0,this.queueSettings.user_upload_complete_handler=this.settings.upload_complete_handler,this.queueSettings.user_upload_start_handler=this.settings.upload_start_handler,this.settings.upload_complete_handler=SWFUpload.queue.uploadCompleteHandler,this.settings.upload_start_handler=SWFUpload.queue.uploadStartHandler,this.settings.queue_complete_handler=this.settings.queue_complete_handler||null}}(SWFUpload.prototype.initSettings),SWFUpload.prototype.startUpload=function(e){this.queueSettings.queue_cancelled_flag=!1,this.callFlash("StartUpload",[e])},SWFUpload.prototype.cancelQueue=function(){this.queueSettings.queue_cancelled_flag=!0,this.stopUpload();for(var e=this.getStats();e.files_queued>0;)this.cancelUpload(),e=this.getStats()},SWFUpload.queue.uploadStartHandler=function(e){var t;return"function"==typeof this.queueSettings.user_upload_start_handler&&(t=this.queueSettings.user_upload_start_handler.call(this,e)),t=t!==!1,this.queueSettings.queue_cancelled_flag=!t,t},SWFUpload.queue.uploadCompleteHandler=function(e){var t,n=this.queueSettings.user_upload_complete_handler;if(e.filestatus===SWFUpload.FILE_STATUS.COMPLETE&&this.queueSettings.queue_upload_count++,t="function"==typeof n?n.call(this,e)!==!1:e.filestatus!==SWFUpload.FILE_STATUS.QUEUED){var i=this.getStats();i.files_queued>0&&this.queueSettings.queue_cancelled_flag===!1?this.startUpload():this.queueSettings.queue_cancelled_flag===!1?(this.queueEvent("queue_complete_handler",[this.queueSettings.queue_upload_count]),this.queueSettings.queue_upload_count=0):(this.queueSettings.queue_cancelled_flag=!1,this.queueSettings.queue_upload_count=0)}})}(),KindEditor.plugin("pagebreak",function(e){var t=this,n="pagebreak",i=e.undef(t.pagebreakHtml,'
      ');t.clickToolbar(n,function(){var n=t.cmd,a=n.range;t.focus();var o="br"==t.newlineTag||e.WEBKIT?"":'';if(t.insertHtml(i+o),""!==o){var r=e("#__kindeditor_tail_tag__",t.edit.doc);a.selectNodeContents(r[0]),r.removeAttr("id"),n.select()}})}),KindEditor.plugin("plainpaste",function(e){var t=this,n="plainpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
      '+i.comment+'
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=r.val();i=e.escape(i),i=i.replace(/ {2}/g,"  "),i="p"==t.newlineTag?i.replace(/^/,"

      ").replace(/$/,"

      ").replace(/\n/g,"

      "):i.replace(/\n/g,"
      $&"),t.insertHtml(i).hideDialog().focus()}}}),r=e("textarea",o.div);r[0].focus()})}),KindEditor.plugin("preview",function(e){var t=this,n="preview";t.clickToolbar(n,function(){var i=(t.lang(n+"."),'

      '),a=t.createDialog({name:n,width:750,title:t.lang(n),body:i}),o=e("iframe",a.div),r=e.iframeDoc(o);r.open(),r.write(t.fullHtml()),r.close(),e(r.body).css("background-color","#FFF"),o[0].contentWindow.focus()})}),KindEditor.plugin("quickformat",function(e){function t(e){for(var t=e.first();t&&t.first();)t=t.first();return t}var n=this,i="quickformat",a=e.toMap("blockquote,center,div,h1,h2,h3,h4,h5,h6,p");n.clickToolbar(i,function(){n.focus();for(var i,o=n.edit.doc,r=n.cmd.range,l=e(o.body).first(),s=[],d=[],c=r.createBookmark(!0);l;){i=l.next();var u=t(l);u&&"img"==u.name||(a[l.name]?(l.html(l.html().replace(/^(\s| | )+/gi,"")),l.css("text-indent","2em")):d.push(l),(!i||a[i.name]||a[l.name]&&!a[i.name])&&(d.length>0&&s.push(d),d=[])),l=i}e.each(s,function(t,n){var i=e('

      ',o);n[0].before(i),e.each(n,function(e,t){i.append(t)})}),r.moveToBookmark(c),n.addBookmark()})}),KindEditor.plugin("table",function(e){function t(e,t){t=t.toLowerCase(),e.css("background-color",t),t&&e.css("color","#000000"===t?"#FFFFFF":"#000000"),"input"===e.name?e.val(t):e.html(t)}function n(n,i,a){function o(){e.each(h,function(){this.remove()}),h=[],e(document).unbind("click,mousedown",o),n.unbind("click,mousedown",o)}i.bind("click,mousedown",function(e){e.stopPropagation()}),i.click(function(i){o();var r=e(this),l=r.pos(),d=e.colorpicker({x:l.x,y:l.y+r.height(),z:811214,selectedColor:e(this).html(),colors:s.colorTable,noColor:s.lang("table.defaultBorderColor"),shadowMode:s.shadowMode,click:function(e){t(r,e),o(),a&&a(e)}});h.push(d),e(document).bind("click,mousedown",o),n.bind("click,mousedown",o)})}function i(e,t,n){for(var i=0,a=0,o=t.cells.length;a
      "],l=n.find("tbody>tr:first").children(),d=0;l.each(function(){var e=$(this),t=e.attr("colspan");d+=t?parseInt(t):1});for(var c=0;c"+(e.IE?" ":"
      ")+"");r.push("
      "),o=$(r.join("")),n.prepend(o)}}else o.remove()}i&&i("header",t.header)}void 0!==t.stripedRows&&(n.toggleClass("table-striped",!!t.stripedRows),i&&i("stripedRows",t.stripedRows)),void 0!==t.hoverRows&&(n.toggleClass("table-hover",!!t.hoverRows),i&&i("hoverRows",t.hoverRows)),void 0!==t.autoWidth&&(n.toggleClass("table-auto",!!t.autoWidth),i&&i("autoWidth",t.autoWidth)),void 0!==t.borderColor&&(n.find("td,th").css("border","1px solid "+t.borderColor),i&&i("borderColor",t.borderColor))}}function r(t,n,i,a){if(t*n){for(var o=$('
      '),r=$(""),l=0;l"),c=0;c"+(e.IE?" ":"
      ")+"");d.append(u)}r.append(d)}o.append(r);var p=$("
      ").append(o).html();return e.IE||(p+="
      "),s.insertHtml(p),o}}function l(i){for(var a=$(i[0]),r=[""],l=[""],c=0;c<6;++c){r.push('{tableHead}'),l.push("");for(var u=0;u<6;++u)l.push('{tableContent}');l.push("")}r.push(""),l.push("");var h=['
      ','
      ','
      ','
      ',"",'
      ','
      ','
      ',"
      ",'
      ',"",'
      ','
      ',"
      ",'
      ',"",'
      ','{borderColor}','',"
      ","
      ","
      ",'
      ','',r.join(""),l.join(""),"
      ","","",""].join("").format(p),f=$(h),m=f.find(".ke-plugin-table-example"),g=s.cmd.range.createBookmark(),v=f.find(".ke-plugin-table-input-color"),_=e(v[0]);f.on("change.kTable","input[name]",function(){var e=$(this),t={};t[e.attr("name")]=e.is('[type="checkbox"]')?e.is(":checked"):e.val(),o(t,m)});var b=s.createDialog({name:d+"test",width:550,title:s.lang(d),body:f[0],beforeRemove:function(){f.off(".kTable")},yesBtn:{name:s.lang("yes"),click:function(e){o({borderColor:f.find('[name="borderColor"]').val(),header:f.find('[name="header"]').is(":checked"),stripedRows:f.find('[name="stripedRows"]').is(":checked"),hoverRows:f.find('[name="hoverRows"]').is(":checked"),autoWidth:f.find('[name="autoWidth"]:checked').val()},a),s.hideDialog().focus(),s.cmd.range.moveToBookmark(g),s.cmd.select(),s.addBookmark()}}});n(b.div,_,function(e){o({borderColor:e},m)}),o({borderColor:a.find("td,th").first().css("borderColor"),header:a.find("thead").length,stripedRows:a.hasClass("table-striped"),hoverRows:a.hasClass("table-hover"),autoWidth:a.hasClass("table-auto")},m,function(e,n){switch(e){case"borderColor":t(_,n||"#dddddd");break;case"header":f.find('[name="header"]').prop("checked",!!n);break;case"stripedRows":f.find('[name="stripedRows"]').prop("checked",!!n);break;case"hoverRows":f.find('[name="hoverRows"]').prop("checked",!!n);break;case"autoWidth":f.find('[name="autoWidth"][value="'+(n?"auto":"")+'"]').prop("checked",!0)}})}var s=this,d="table",c={zh_cn:{name:"表格",xRxC:"{0}行 × {1}列",headerRow:"标题行",headerCol:"标题列",tableStyle:"表格样式",addHeaderRow:"添加表格标题行",stripedRows:"隔行变色效果",hoverRows:"鼠标悬停效果",autoChangeTableWidth:"自动调整表格尺寸",tableWidthFixed:"按表格文字自适应",tableWidthFull:"按页面宽度自适应",tableBorder:"表格边框",tableHead:"标题",tableContent:"内容"},zh_tw:{name:"表格",xRxC:"{0}行×{1}列",headerRow:"標題行",headerCol:"標題列",tableStyle:"表格樣式",addHeaderRow:"添加表格標題行",stripedRows:"隔行變色效果",hoverRows:"鼠標懸停效果",autoChangeTableWidth:"自動調整表格尺寸",tableWidthFixed:"按表格文字自適應",tableWidthFull:"按頁面寬度自適應",tableBorder:"表格邊框",tableHead:"標題",tableContent:"內容"},en:{name:"Table",xRxC:"{0} Rows × {1} Columns",headerRow:"Header Row",headerCol:"Header Column",tableStyle:"Table style",addHeaderRow:"Add header row",stripedRows:"Striped effection",hoverRows:"Mouse hover effection",autoChangeTableWidth:"Automatically adjust table size",tableWidthFixed:"Adaptive by form text",tableWidthFull:"Page width adaptive",tableBorder:"Table border",tableHead:"Title",tableContent:"Text"}},u=[],p=$.extend({},s.lang("table."),c[($.clientLang||$.zui.clientLang)()]),h=[];s.plugin.table={prop:function(){var e=s.plugin.getSelectedTable();e&&e.length&&l(e)},cellprop:function(){var i=['
      ','
      ','",p.width+'   ','   ",p.height+'   ','","
      ",'
      ','",p.textAlign+' ",p.verticalAlign+' ","
      ",'
      ','",p.borderColor+' ',"
      ",'
      ','",'',"
      ","
      "].join(""),a=s.cmd.range.createBookmark(),o=s.createDialog({name:d,width:500,title:s.lang("tablecell"),body:i,beforeRemove:function(){_.unbind()},yesBtn:{name:s.lang("yes"),click:function(t){var n=l.val(),i=c.val(),o=u.val(),r=h.val(),d=(f.val(),m.val(),g.val()),p=v.val(),b=e(_[0]).html()||"",k=e(_[1]).html()||"";return/^\d*$/.test(n)?/^\d*$/.test(i)?(y.css({width:""!==n?n+o:"",height:""!==i?i+r:"","background-color":k,"text-align":d,"vertical-align":p,"border-style":"solid","border-color":b}),s.hideDialog().focus(),s.cmd.range.moveToBookmark(a),s.cmd.select(),void s.addBookmark()):(alert(s.lang("invalidHeight")),void c[0].focus()):(alert(s.lang("invalidWidth")),void l[0].focus())}}}),r=o.div,l=e('[name="width"]',r).val(100),c=e('[name="height"]',r),u=e('[name="widthType"]',r),h=e('[name="heightType"]',r),f=e('[name="padding"]',r).val(2),m=e('[name="spacing"]',r).val(0),g=e('[name="textAlign"]',r),v=e('[name="verticalAlign"]',r),_=e(".ke-input-color",r);n(r,_.eq(0)),n(r,_.eq(1)),t(_.eq(0),"#000000"),t(_.eq(1),""),l[0].focus(),l[0].select();var b,y=s.plugin.getSelectedCell(),k=y[0].style.width||y[0].width||"",w=y[0].style.height||y[0].height||"";(b=/^(\d+)((?:px|%)*)$/.exec(k))?(l.val(b[1]),u.val(b[2])):l.val(""),(b=/^(\d+)((?:px|%)*)$/.exec(w))&&(c.val(b[1]),h.val(b[2])),g.val(y[0].style.textAlign||""),v.val(y[0].style.verticalAlign||""),t(_.eq(0),e.toHex(y[0].style.borderColor||"")),t(_.eq(1),e.toHex(y[0].style.backgroundColor||"")),l[0].focus(),l[0].select()},insert:function(){console.warn("Table insert not available.")},"delete":function(){var e=s.plugin.getSelectedTable();s.cmd.range.setStartBefore(e[0]).collapse(!0),s.cmd.select(),e.remove(),s.addBookmark()},colinsert:function(t){var n=s.plugin.getSelectedTable()[0],a=s.plugin.getSelectedRow()[0],o=s.plugin.getSelectedCell()[0],r=o.cellIndex+t;r+=n.rows[0].cells.length-a.cells.length;for(var l=0,d=n.rows.length;l"),u.innerHTML=e.IE?"":"
      ",r=i(n,c,u)}s.cmd.range.selectNodeContents(o).collapse(!0),s.cmd.select(),s.addBookmark()},colinsertleft:function(){this.colinsert(0)},colinsertright:function(){this.colinsert(1)},rowinsert:function(t){var n=s.plugin.getSelectedTable()[0],i=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=i.rowIndex;1===t&&(o=i.rowIndex+(a.rowSpan-1)+t);for(var r=n.insertRow(o),l=0,d=i.cells.length;l1&&(d-=i.cells[l].rowSpan-1);var c=r.insertCell(l);1===t&&i.cells[l].colSpan>1&&(c.colSpan=i.cells[l].colSpan),c.innerHTML=e.IE?"":"
      "}for(var u=o;u>=0;u--){var p=n.rows[u].cells;if(p.length>l){for(var h=a.cellIndex;h>=0;h--)p[h].rowSpan>1&&(p[h].rowSpan+=1);break}}s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()},rowinsertabove:function(){this.rowinsert(0)},rowinsertbelow:function(){this.rowinsert(1)},rowmerge:function(){var e=s.plugin.getSelectedTable()[0],t=s.plugin.getSelectedRow()[0],n=s.plugin.getSelectedCell()[0],i=t.rowIndex,a=i+n.rowSpan,o=e.rows[a];if(!(e.rows.length<=a)){var r=n.cellIndex;if(!(o.cells.length<=r)){var l=o.cells[r];n.colSpan===l.colSpan&&(n.rowSpan+=l.rowSpan,o.deleteCell(r),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark())}}},colmerge:function(){var e=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),t=s.plugin.getSelectedCell()[0],n=(e.rowIndex,t.cellIndex),i=n+1;if(!(e.cells.length<=i)){var a=e.cells[i];t.rowSpan===a.rowSpan&&(t.colSpan+=a.colSpan,e.deleteCell(i),s.cmd.range.selectNodeContents(t).collapse(!0),s.cmd.select(),s.addBookmark())}},rowsplit:function(){var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],a=s.plugin.getSelectedCell()[0],o=n.rowIndex;if(1!==a.rowSpan){for(var r=i(t,n,a),l=1,d=a.rowSpan;l1&&(u.colSpan=a.colSpan),u.innerHTML=e.IE?"":"
      ",r=i(t,c,u)}e(a).removeAttr("rowSpan"),s.cmd.range.selectNodeContents(a).collapse(!0),s.cmd.select(),s.addBookmark()}},colsplit:function(){var t=(s.plugin.getSelectedTable()[0],s.plugin.getSelectedRow()[0]),n=s.plugin.getSelectedCell()[0],i=n.cellIndex;if(1!==n.colSpan){for(var a=1,o=n.colSpan;a1&&(r.rowSpan=n.rowSpan),r.innerHTML=e.IE?"":"
      "}e(n).removeAttr("colSpan"),s.cmd.range.selectNodeContents(n).collapse(!0),s.cmd.select(),s.addBookmark()}},coldelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=i.cellIndex,o=0,r=t.rows.length;o1?(d.colSpan-=1,1===d.colSpan&&e(d).removeAttr("colSpan")):l.deleteCell(a),d.rowSpan>1&&(o+=d.rowSpan-1)}0===n.cells.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()},rowdelete:function(){for(var t=s.plugin.getSelectedTable()[0],n=s.plugin.getSelectedRow()[0],i=s.plugin.getSelectedCell()[0],a=n.rowIndex,o=i.rowSpan-1;o>=0;o--)t.deleteRow(a+o);0===t.rows.length?(s.cmd.range.setStartBefore(t).collapse(!0),s.cmd.select(),e(t).remove()):s.cmd.selection(!0),s.addBookmark()}},s.clickToolbar(d,function(){if(!s.menu){var e=s.createMenu({name:d,beforeRemove:function(){a()}}),t=$('
      '),n=$('
      '+p.xRxC.format(0,0)+"
      ");t.append(n);var i=$('
      ');i.on("mouseenter.kTable",".ke-plugin-table-grid-cell",function(){var e=$(this),t=e.data("row"),a=e.data("col");n.text(p.xRxC.format(t,a));var o=i.find(".ke-plugin-table-grid-cell");o.each(function(){var e=$(this),n=e.data("row"),i=e.data("col");n<=t&&i<=a?e.css({border:"1px solid #2286d2",background:"#eff7ff"}):e.css({border:"1px solid #ddd",background:"#f1f1f1"})})}).on("click.kTable",".ke-plugin-table-grid-cell",function(e){var t=$(this),n=t.data("row"),i=t.data("col");r(n,i),s.hideMenu().focus(),s.addBookmark(),e.stopPropagation()});for(var o=1;o<11;o++)for(var l=1;l<11;l++)i.append('
      ');u.push(i),t.append(i),e.div.append(t[0])}})}),KindEditor.lang({table:KindEditor.lang("table")}),KindEditor.plugin("template",function(e){function t(t){return a+t+"?ver="+encodeURIComponent(e.DEBUG?e.TIME:e.VERSION)}var n=this,i="template",a=(n.lang(i+"."),n.pluginsPath+i+"/html/");n.clickToolbar(i,function(){var a=n.lang(i+"."),o=['
      ','
      ','
      ',a.selectTemplate+"
      ",'
      ',' ","
      ",'
      ',"
      ",'',"
      "].join("");var r=n.createDialog({name:i,width:500,title:n.lang(i),body:html,yesBtn:{name:n.lang("yes"),click:function(t){var i=e.iframeDoc(d);n[s[0].checked?"html":"insertHtml"](i.body.innerHTML).hideDialog().focus()}}}),l=e("select",r.div),s=e('[name="replaceFlag"]',r.div),d=e("iframe",r.div);s[0].checked=!0,d.attr("src",t(l.val())),l.change(function(){d.attr("src",t(this.value))})})}),KindEditor.plugin("wordpaste",function(e){var t=this,n="wordpaste";t.clickToolbar(n,function(){var i=t.lang(n+"."),a='
      '+i.comment+'
      ',o=t.createDialog({name:n,width:450,title:t.lang(n),body:a,yesBtn:{name:t.lang("yes"),click:function(n){var i=s.body.innerHTML;i=e.clearMsWord(i,t.filterMode?t.htmlTags:e.options.htmlTags),t.insertHtml(i).hideDialog().focus()}}}),r=o.div,l=e("iframe",r),s=e.iframeDoc(l);e.IE||(s.designMode="on"),s.open(),s.write("WordPaste"),s.write(''),e.IE||s.write("
      "),s.write(""),s.close(),e.IE&&(s.body.contentEditable="true"),l[0].contentWindow.focus()})}); \ No newline at end of file diff --git a/www/js/my.full.js b/www/js/my.full.js index 7c8e3bb17c..d8b48221f6 100644 --- a/www/js/my.full.js +++ b/www/js/my.full.js @@ -302,6 +302,10 @@ function ajaxDelete(url, replaceID, notice) if($('#' + replaceID).find('table.datatable').length) $('#' + replaceID).find('table.datatable').datatable(); }); } + else if(data.result == 'fail' && typeof(data.message) == 'string') + { + bootbox.alert(data.message); + } } }); } @@ -717,6 +721,33 @@ function getFingerprint() return fingerprint; } +/** + * Convert plain text URLs into HTML hyperlinks + * + * @access public + * @return void + */ +function convertURL() +{ + if($('.article-content, .article>.content').size() == 0) return; + + $('.article-content, .article>.content').each(function() + { + var aTags = new Array(); + var content = $(this).html(); + $(this).find('a').each(function(i) + { + aTags[i] = $(this).prop('outerHTML'); + content = content.replace(aTags[i], ''); + }); + + var regexp = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|\&|-|%|;)+)/g; + content = content.replace(regexp, function($url){ return "" + $url + "";}); + for(i in aTags) content = content.replace('', aTags[i]); + $(this).html(content); + }); +} + /* Ping the server every some minutes to keep the session. */ needPing = true; @@ -727,6 +758,7 @@ $(document).ready(function() checkTutorial(); revertModuleCookie(); + convertURL(); $(document).on('click', '#helpMenuItem .close-help-tab', function(){$('#helpMenuItem').prev().remove();$('#helpMenuItem').remove();}); }); diff --git a/www/js/zui/min.js b/www/js/zui/min.js index 78bf45e284..015017db94 100644 --- a/www/js/zui/min.js +++ b/www/js/zui/min.js @@ -1,8 +1,8 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-12-18 + * ZUI: Zentao template - v1.9.0 - 2019-04-16 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git - * Copyright (c) 2018 cnezsoft.com; Licensed MIT + * Copyright (c) 2019 cnezsoft.com; Licensed MIT */ !function(t,e,i){"use strict";if("undefined"==typeof t)throw new Error("ZUI requires jQuery");t.zui||(t.zui=function(e){t.isPlainObject(e)&&t.extend(t.zui,e)});var n={all:-1,left:0,middle:1,right:2},o=0;t.zui({uuid:function(t){var e=1e3*(new Date).getTime()+o++%1e3;return t?e:e.toString(36)},callEvent:function(e,n,o){if(t.isFunction(e)){o!==i&&(e=t.proxy(e,o));var s=e(n);return n&&(n.result=s),!(s!==i&&!s)}return 1},clientLang:function(){var i,n=e.config;if("undefined"!=typeof n&&n.clientLang&&(i=n.clientLang),!i){var o=t("html").attr("lang");i=o?o:navigator.userLanguage||navigator.userLanguage||"zh_cn"}return i.replace("-","_").toLowerCase()},strCode:function(t){var e=0;if(t&&t.length)for(var i=0;i0&&(o=s.data(e.substring(a+1))),o&&o.options){var h=o.options[r];t.isFunction(h)&&(l.result=t.zui.callEvent(h,l,o))}return s.trigger(l),l},t.fn.callComEvent=function(e,n,o){o===i||t.isArray(o)||(o=[o]);var s=this,a=s.triggerHandler(n,o),r=e.options[n];return r&&(a=r.apply(e,o)),a}}(jQuery,window,void 0),function(t){"use strict";t.fn.fixOlPd=function(e){return e=e||10,this.each(function(){var i=t(this);i.css("paddingLeft",Math.ceil(Math.log10(i.children().length))*e+10)})},t(function(){t(".ol-pd-fix,.article ol").fixOlPd()})}(jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i="zui.alert",n=function(i){t(i).on("click",e,this.close)};n.prototype.close=function(e){function n(){a.trigger("closed."+i).remove()}var o=t(this),s=o.attr("data-target");s||(s=o.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t(s);e&&e.preventDefault(),a.length||(a=o.hasClass("alert")?o:o.parent()),a.trigger(e=t.Event("close."+i)),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one(t.support.transition.end,n).emulateTransitionEnd(150):n())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),s=o.data(i);s||o.data(i,s=new n(this)),"string"==typeof e&&s[e].call(o)})},t.fn.alert.Constructor=n,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click."+i+".data-api",e,n.prototype.close)}(window.jQuery),function(t,e){"use strict";var i="zui.pager",n={page:1,recTotal:0,recPerPage:10},o={zh_cn:{pageOfText:"第 {0} 页",prev:"上一页",next:"下一页",first:"第一页",last:"最后一页","goto":"跳转",pageOf:"第 {page} 页",totalPage:"共 {totalPage} 页",totalCount:"共 {recTotal} 项",pageSize:"每页 {recPerPage} 项",itemsRange:"第 {start} ~ {end} 项",pageOfTotal:"第 {page}/{totalPage} 页"},zh_tw:{pageOfText:"第 {0} 頁",prev:"上一頁",next:"下一頁",first:"第一頁",last:"最後一頁","goto":"跳轉",pageOf:"第 {page} 頁",totalPage:"共 {totalPage} 頁",totalCount:"共 {recTotal} 項",pageSize:"每頁 {recPerPage} 項",itemsRange:"第 {start} ~ {end} 項",pageOfTotal:"第 {page}/{totalPage} 頁"},en:{pageOfText:"Page {0}",prev:"Prev",next:"Next",first:"First",last:"Last","goto":"Goto",pageOf:"Page {page}",totalPage:"{totalPage} pages",totalCount:"{recTotal} in total",pageSize:"{recPerPage} per page",itemsRange:"From {start} to {end}",pageOfTotal:"Page {page} of {totalPage}"}},s=function(e,n){var a=this;a.name=i,a.$=t(e),n=a.options=t.extend({},s.DEFAULTS,this.$.data(),n);var r=n.lang||t.zui.clientLang();a.lang=t.isPlainObject(r)?t.extend(!0,{},o[r.lang||t.zui.clientLang()],r):o[r],a.state={},a.set(n.page,n.recTotal,n.recPerPage,!0),a.$.on("click",".pager-goto-btn",function(){var e=t(this).closest(".pager-goto"),i=parseInt(e.find(".pager-goto-input").val());NaN!==i&&a.set(i)}).on("click",".pager-item",function(){var e=t(this).data("page");"number"==typeof e&&e>0&&a.set(e)}).on("click",".pager-size-menu [data-size]",function(){var e=t(this).data("size");"number"==typeof e&&e>0&&a.set(-1,-1,e)})};s.prototype.set=function(e,i,o,s){var a=this;"object"==typeof e&&null!==e&&(o=e.recPerPage,i=e.recTotal,e=e.page);var r=a.state;r||(r=t.extend({},n));var l=t.extend({},r);return"number"==typeof o&&o>0&&(r.recPerPage=o),"number"==typeof i&&i>=0&&(r.recTotal=i),"number"==typeof e&&e>=0&&(r.page=e),r.totalPage=r.recTotal&&r.recPerPage?Math.ceil(r.recTotal/r.recPerPage):1,r.page=Math.max(0,Math.min(r.page,r.totalPage)),r.pageRecCount=r.recTotal,r.page&&r.recTotal&&(r.page1&&(r.pageRecCount=r.recTotal-r.recPerPage*(r.page-1))),r.skip=r.page>1?(r.page-1)*r.recPerPage:0,r.start=r.skip+1,r.end=r.skip+r.pageRecCount,r.prev=r.page>1?r.page-1:0,r.next=r.page').attr("href",i?s.createLink(i,s.state):"###").html(n);return o||(a=t("
    • ").append(a).toggleClass("active",i===s.state.page).toggleClass("disabled",!i||i===s.state.page)),a},s.prototype.createNavItems=function(t){var i=this,n=i.$,o=i.state,s=o.totalPage,a=o.page,r=function(t,o){if(t===!1)return void n.append(i.createLinkItem(0,o||i.options.navEllipsisItem));o===e&&(o=t);for(var s=t;s<=o;++s)n.append(i.createLinkItem(s))};t===e&&(t=i.options.maxNavCount||10),r(1),s>1&&(s<=t?r(2,s):as-t+2?(r(!1),r(s-t+2,s)):(r(!1),r(a-Math.ceil((t-4)/2),a+Math.floor((t-4)/2)),r(!1),r(s)))},s.prototype.createGoto=function(){var e=this,i=this.state,n=t('
      ");return n},s.prototype.createSizeMenu=function(){var e=this,i=this.state,n=t(''),o=e.options.pageSizeOptions;"string"==typeof o&&(o=o.split(","));for(var s=0;s'+a+"
    • ").toggleClass("active",a===i.recPerPage);n.append(r)}return t('
      ').addClass(e.options.menuDirection).append(n)},s.prototype.createElement=function(e,i,n){var o=this,s=t.proxy(o.createLinkItem,o),a=o.lang;switch(e){case"prev":return s(n.prev,a.prev);case"prev_icon":return s(n.prev,'');case"next":return s(n.next,a.next);case"next_icon":return s(n.next,'');case"first":return s(1,a.first);case"first_icon":return s(1,'');case"last":return s(n.totalPage,a.last);case"last_icon":return s(n.totalPage,'');case"space":case"|":return t('
    • ');case"nav":case"pages":return void o.createNavItems();case"total_text":return t(('
      '+a.totalCount+"
      ").format(n));case"page_text":return t(('
      '+a.pageOf+"
      ").format(n));case"total_page_text":return t(('
      '+a.totalPage+"
      ").format(n));case"page_of_total_text":return t(('
      '+a.pageOfTotal+"
      ").format(n));case"page_size_text":return t(('
      '+a.pageSize+"
      ").format(n));case"items_range_text":return t(('
      '+a.itemsRange+"
      ").format(n));case"goto":return o.createGoto();case"size_menu":return o.createSizeMenu();default:return t("
    • ").html(e.format(n))}},s.prototype.createLink=function(i,n){i===e&&(i=this.state.page),n===e&&(n=this.state);var o=this.options.linkCreator;return"string"==typeof o?o.format(t.extend({},n,{page:i})):t.isFunction(o)?o(i,n):"#page="+i},s.prototype.render=function(e){var i=this,n=i.state,o=i.options.elementCreator||i.createElement,s=t.isPlainObject(o);e=e||i.elements||i.options.elements,"string"==typeof e&&(e=e.split(",")),i.elements=e,i.$.empty();for(var a=0;a").append(h)),i.$.append(h))}var c=null;return i.$.children("li").each(function(){var e=t(this),i=!!e.children(".pager-item").length;c?c.toggleClass("pager-item-right",!i):i&&e.addClass("pager-item-left"),c=i?e:null}),c&&c.addClass("pager-item-right"),i.$.callComEvent(i,"onRender",[n]),i},s.DEFAULTS=t.extend({elements:["first_icon","prev_icon","pages","next_icon","last_icon","page_of_total_text","items_range_text","total_text"],prevIcon:"icon-double-angle-left",nextIcon:"icon-double-angle-right",firstIcon:"icon-step-backward",lastIcon:"icon-step-forward",navEllipsisItem:'',maxNavCount:10,menuDirection:"dropdown",pageSizeOptions:[10,20,30,50,100]},n),t.fn.pager=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.pager.Constructor=s,t(function(){t('[data-ride="pager"]').pager()})}(jQuery,void 0),+function(t){"use strict";var e="zui.tab",i=function(e){this.element=t(e)};i.prototype.show=function(){var i=this.element,n=i.closest("ul:not(.dropdown-menu)"),o=i.attr("data-target")||i.attr("data-tab");if(o||(o=i.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!i.parent("li").hasClass("active")){var s=n.find(".active:last a")[0],a=t.Event("show."+e,{relatedTarget:s});if(i.trigger(a),!a.isDefaultPrevented()){var r=t(o);this.activate(i.parent("li"),n),this.activate(r,r.parent(),function(){i.trigger({type:"shown."+e,relatedTarget:s})})}}},i.prototype.activate=function(e,i,n){function o(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),n&&n()}var s=i.find("> .active"),a=n&&t.support.transition&&s.hasClass("fade");a?s.one(t.support.transition.end,o).emulateTransitionEnd(150):o(),s.removeClass("in")};var n=t.fn.tab;t.fn.tab=function(n){return this.each(function(){var o=t(this),s=o.data(e);s||o.data(e,s=new i(this)),"string"==typeof n&&s[n]()})},t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=n,this},t(document).on("click.zui.tab.data-api",'[data-toggle="tab"], [data-tab]',function(e){e.preventDefault(),t(this).tab("show")})}(window.jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;t(this).one("bsTransitionEnd",function(){i=!0});var o=function(){i||t(n).trigger(t.support.transition.end)};return setTimeout(o,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(t){"use strict";var e="zui.collapse",i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i=t.Event("show."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.$parent&&this.$parent.find(".in");if(n&&n.length){var o=n.data(e);if(o&&o.transitioning)return;n.collapse("hide"),o||n.data(e,null)}var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("in")[s]("auto"),this.transitioning=0,this.$element.trigger("shown."+e)};if(!t.support.transition)return a.call(this);var r=t.camelCase(["scroll",s].join("-"));this.$element.one(t.support.transition.end,t.proxy(a,this)).emulateTransitionEnd(350)[s](this.$element[0][r])}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide."+e);if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var o=function(){this.transitioning=0,this.$element.trigger("hidden."+e).removeClass("collapsing").addClass("collapse")};return t.support.transition?void this.$element[n](0).one(t.support.transition.end,t.proxy(o,this)).emulateTransitionEnd(350):o.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var n=t.fn.collapse;t.fn.collapse=function(n){return this.each(function(){var o=t(this),s=o.data(e),a=t.extend({},i.DEFAULTS,o.data(),"object"==typeof n&&n);s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click."+e+".data-api","[data-toggle=collapse]",function(i){var n,o=t(this),s=o.attr("data-target")||i.preventDefault()||(n=o.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,""),a=t(s),r=a.data(e),l=r?"toggle":o.data(),h=o.attr("data-parent"),c=h&&t(h);r&&r.transitioning||(c&&c.find('[data-toggle=collapse][data-parent="'+h+'"]').not(o).addClass("collapsed"),o[a.hasClass("in")?"addClass":"removeClass"]("collapsed")),a.collapse(l)})}(window.jQuery),function(t,e){"use strict";var i=1200,n=992,o=768,s=e(t),a=function(){var t=s.width();e("html").toggleClass("screen-desktop",t>=n&&t=i).toggleClass("screen-tablet",t>=o&&t=n)},r="",l=navigator.userAgent;l.match(/(iPad|iPhone|iPod)/i)?r+=" os-ios":l.match(/android/i)?r+=" os-android":l.match(/Win/i)?r+=" os-windows":l.match(/Mac/i)?r+=" os-mac":l.match(/Linux/i)?r+=" os-linux":l.match(/X11/i)&&(r+=" os-unix"),"ontouchstart"in document.documentElement&&(r+=" is-touchable"),e("html").addClass(r),s.resize(a),a()}(window,jQuery),function(t){"use strict";var e={zh_cn:'您的浏览器版本过低,无法体验所有功能,建议升级或者更换浏览器。 了解更多...',zh_tw:'您的瀏覽器版本過低,無法體驗所有功能,建議升級或者更换瀏覽器。了解更多...',en:'Your browser is too old, it has been unable to experience the colorful internet. We strongly recommend that you upgrade a better one. Learn more...'},i=function(){var t=this.isIE()||this.isIE10()||!1;if(t)for(var e=10;e>5;e--)if(this.isIE(e)){t=e;break}this.ie=t,this.cssHelper()};i.prototype.cssHelper=function(){var e=this.ie,i=t("html");i.toggleClass("ie",e).removeClass("ie-6 ie-7 ie-8 ie-9 ie-10"),e&&i.addClass("ie-"+e).toggleClass("gt-ie-7 gte-ie-8 support-ie",e>=8).toggleClass("lte-ie-7 lt-ie-8 outdated-ie",e<8).toggleClass("gt-ie-8 gte-ie-9",e>=9).toggleClass("lte-ie-8 lt-ie-9",e<9).toggleClass("gt-ie-9 gte-ie-10",e>=10).toggleClass("lte-ie-9 lt-ie-10",e<10)},i.prototype.tip=function(i){var n=t("#browseHappyTip");n.length||(n=t('
      '),n.prependTo("body")),n.find(".content").html(i||this.browseHappyTip||e[t.zui.clientLang()||"zh_cn"])},i.prototype.isIE=function(t){if(10===t)return this.isIE10();var e=document.createElement("b");return e.innerHTML="",1===e.getElementsByTagName("i").length},i.prototype.isIE10=function(){return!1},t.zui({browser:new i}),t(function(){t("body").hasClass("disabled-browser-tip")||t.zui.browser.ie&&t.zui.browser.ie<8&&t.zui.browser.tip()})}(jQuery),function(){"use strict";Date.ONEDAY_TICKS=864e5,Date.prototype.format||(Date.prototype.format=function(t){var e={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S+":this.getMilliseconds()};/(y+)/i.test(t)&&(t=t.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length)));for(var i in e)new RegExp("("+i+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[i]:("00"+e[i]).substr((""+e[i]).length)));return t}),Date.prototype.addMilliseconds||(Date.prototype.addMilliseconds=function(t){return this.setTime(this.getTime()+t),this}),Date.prototype.addDays||(Date.prototype.addDays=function(t){return this.addMilliseconds(t*Date.ONEDAY_TICKS),this}),Date.prototype.clone||(Date.prototype.clone=function(){var t=new Date;return t.setTime(this.getTime()),t}),Date.isLeapYear||(Date.isLeapYear=function(t){return t%4===0&&t%100!==0||t%400===0}),Date.getDaysInMonth||(Date.getDaysInMonth=function(t,e){return[31,Date.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}),Date.prototype.isLeapYear||(Date.prototype.isLeapYear=function(){return Date.isLeapYear(this.getFullYear())}),Date.prototype.clearTime||(Date.prototype.clearTime=function(){return this.setHours(0),this.setMinutes(0),this.setSeconds(0),this.setMilliseconds(0),this}),Date.prototype.getDaysInMonth||(Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth())}),Date.prototype.addMonths||(Date.prototype.addMonths=function(t){var e=this.getDate();return this.setDate(1),this.setMonth(this.getMonth()+t),this.setDate(Math.min(e,this.getDaysInMonth())),this}),Date.prototype.getLastWeekday||(Date.prototype.getLastWeekday=function(t){t=t||1;for(var e=this.clone();e.getDay()!=t;)e.addDays(-1);return e.clearTime(),e}),Date.prototype.isSameDay||(Date.prototype.isSameDay=function(t){return t.toDateString()===this.toDateString()}),Date.prototype.isSameWeek||(Date.prototype.isSameWeek=function(t){var e=this.getLastWeekday(),i=e.clone().addDays(7);return t>=e&&t0){var i;if(arguments.length<=2&&"object"==typeof t)for(var n in t)void 0!==t[n]&&(i=new RegExp("("+(arguments[1]?arguments[1].replace("0",n):"{"+n+"}")+")","g"),e=e.replace(i,t[n]));else for(var o=0;oi.length)&&(e=i.length),e-=t.length;var n=i.indexOf(t,e);return n!==-1&&n===e}),String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return e=e||0,this.lastIndexOf(t,e)===e}),String.prototype.includes||(String.prototype.includes=function(){return String.prototype.indexOf.apply(this,arguments)!==-1})}(),/*! * jQuery resize event - v1.1 @@ -16,8 +16,8 @@ function(t,e,i){"$:nomunge";function n(){o=e[r](function(){s.each(function(){var * Copyright 2006, 2014 Klaus Hartl * Released under the MIT license */ -function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){function e(t){return r.raw?t:encodeURIComponent(t)}function i(t){return r.raw?t:decodeURIComponent(t)}function n(t){return e(r.json?JSON.stringify(t):String(t))}function o(t){0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return t=decodeURIComponent(t.replace(a," ")),r.json?JSON.parse(t):t}catch(e){}}function s(e,i){var n=r.raw?e:o(e);return t.isFunction(i)?i(n):n}var a=/\+/g,r=t.cookie=function(o,a,l){if(void 0!==a&&!t.isFunction(a)){if(l=t.extend({},r.defaults,l),"number"==typeof l.expires){var h=l.expires,c=l.expires=new Date;c.setTime(+c+864e5*h)}return document.cookie=[e(o),"=",n(a),l.expires?"; expires="+l.expires.toUTCString():"",l.path?"; path="+l.path:"",l.domain?"; domain="+l.domain:"",l.secure?"; secure":""].join("")}for(var d=o?void 0:{},u=document.cookie?document.cookie.split("; "):[],p=0,f=u.length;p=0;t--)delete this.page[i[t]];this.set(s,this.page)}},a.prototype.pageRemove=function(t){"undefined"!=typeof this.page[t]&&(this.page[t]=null,this.pageSave())},a.prototype.pageClear=function(){this.page={},this.pageSave()},a.prototype.pageGet=function(t,e){var i=this.page[t];return void 0===e||null!==i&&void 0!==i?i:e},a.prototype.pageSet=function(t,i){e.isPlainObject(t)?e.extend(!0,this.page,t):this.page[this.serialize(t)]=i,this.pageSave()},a.prototype.check=function(){if(!this.enable&&!this.slience)throw new Error("Browser not support localStorage or enable status been set true.");return this.enable},a.prototype.length=function(){return this.check()?i.getLength?i.getLength():i.length:0},a.prototype.removeItem=function(t){return i.removeItem(t),this},a.prototype.remove=function(t){return this.removeItem(t)},a.prototype.getItem=function(t){return i.getItem(t)},a.prototype.get=function(t,e){var i=this.deserialize(this.getItem(t));return"undefined"!=typeof i&&null!==i||"undefined"==typeof e?i:e},a.prototype.key=function(t){return i.key(t)},a.prototype.setItem=function(t,e){return i.setItem(t,e),this},a.prototype.set=function(t,e){return void 0===e?this.remove(t):(this.setItem(t,this.serialize(e)),this)},a.prototype.clear=function(){return i.clear(),this},a.prototype.forEach=function(t){for(var e=this.length(),n=e-1;n>=0;n--){var o=i.key(n);t(o,this.get(o))}return this},a.prototype.getAll=function(){var t={};return this.forEach(function(e,i){t[e]=i}),t},a.prototype.serialize=function(t){return"string"==typeof t?t:JSON.stringify(t)},a.prototype.deserialize=function(t){if("string"==typeof t)try{return JSON.parse(t)}catch(e){return t||void 0}},e.zui({store:new a})}(window,jQuery),function(t){"use strict";var e="zui.searchBox",i=function(e,n){var o=this;o.name=name,o.$=t(e),o.options=n=t.extend({},i.DEFAULTS,o.$.data(),n);var s=o.$.is(n.inputSelector)?o.$:o.$.find(n.inputSelector);if(s.length){var a=function(){o.changeTimer&&(clearTimeout(o.changeTimer),o.changeTimer=null)},r=function(){a();var t=o.getSearch();if(t!==o.lastValue){var e=""===t;s.toggleClass("empty",e),o.$.callComEvent(o,"onSearchChange",[t,e]),o.lastValue=t}};o.$input=s=s.first(),s.on(n.listenEvent,function(t){o.changeTimer=setTimeout(function(){r()},n.changeDelay)}).on("focus",function(t){s.addClass("focus"),o.$.callComEvent(o,"onFocus",[t])}).on("blur",function(t){s.removeClass("focus"),o.$.callComEvent(o,"onBlur",[t])}).on("keydown",function(t){var e=0,i=t.which;27===i&&n.escToClear?(this.setSearch("",!0),r(),e=1):13===i&&n.onPressEnter&&(r(),o.$.callComEvent(o,"onPressEnter",[t]));var s=o.$.callComEvent(o,"onKeyDown",[t]);s===!1&&(e=1),e&&t.preventDefault()}),o.$.on("click",".search-clear-btn",function(t){o.setSearch("",!0),r(),o.focus(),t.preventDefault()}),r()}else console.error("ZUI: search box init error, cannot find search box input element.")};i.DEFAULTS={inputSelector:'input[type="search"],input[type="text"]',listenEvent:"change input paste",changeDelay:500},i.prototype.getSearch=function(){return this.$input&&t.trim(this.$input.val())},i.prototype.setSearch=function(t,e){var i=this.$input;i&&(i.val(t),e||i.trigger("change"))},i.prototype.focus=function(){this.$input&&this.$input.focus()},t.fn.searchBox=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.searchBox.Constructor=i}(jQuery),function(t,e){"use strict";var i="zui.draggable",n={container:"body",move:!0},o=0,s=function(e,i){var s=this;s.$=t(e),s.id=o++,s.options=t.extend({},n,s.$.data(),i),s.init()};s.DEFAULTS=n,s.NAME=i,s.prototype.init=function(){var n,o,s,a,r,l=this,h=l.$,c="before",d="drag",u="finish",p="."+i+"."+l.id,f="mousedown"+p,g="mouseup"+p,m="mousemove"+p,v=l.options,y=v.selector,b=v.handle,w=h,x=t.isFunction(v.move),C=function(t){var e=t.pageX,i=t.pageY;r=!0;var o={left:e-s.x,top:i-s.y};w.removeClass("drag-ready").addClass("dragging"),v.move&&(x?v.move(o,w):w.css(o)),v[d]&&v[d]({event:t,element:w,startOffset:s,pos:o,offset:{x:e-n.x,y:i-n.y},smallOffset:{x:e-a.x,y:i-a.y}}),a.x=e,a.y=i,v.stopPropagation&&t.stopPropagation()},_=function(i){if(t(e).off(p),!r)return void w.removeClass("drag-ready");var o={left:i.pageX-s.x,top:i.pageY-s.y};w.removeClass("drag-ready dragging"),v.move&&(x?v.move(o,w):w.css(o)),v[u]&&v[u]({event:i,element:w,startOffset:s,pos:o,offset:{x:i.pageX-n.x,y:i.pageY-n.y},smallOffset:{x:i.pageX-a.x,y:i.pageY-a.y}}),i.preventDefault(),v.stopPropagation&&i.stopPropagation()},k=function(i){var l=t.zui.getMouseButtonCode(v.mouseButton);if(!(l>-1&&i.button!==l)){var h=t(this);if(y&&(w=b?h.closest(y):h),v[c]){var d=v[c]({event:i,element:w});if(d===!1)return}var u=t(v.container),p=w.offset();o=u.offset(),n={x:i.pageX,y:i.pageY},s={x:i.pageX-p.left+o.left,y:i.pageY-p.top+o.top},a=t.extend({},n),r=!1,w.addClass("drag-ready"),i.preventDefault(),v.stopPropagation&&i.stopPropagation(),t(e).on(m,C).on(g,_)}};b?h.on(f,b,k):y?h.on(f,y,k):h.on(f,k)},s.prototype.destroy=function(){var n="."+i+"."+this.id;this.$.off(n),t(e).off(n),this.$.data(i,null)},t.fn.draggable=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},t.fn.draggable.Constructor=s}(jQuery,document),function(t,e,i){"use strict";var n="zui.droppable",o={target:".droppable-target",deviation:5,sensorOffsetX:0,sensorOffsetY:0,dropToClass:"drop-to"},s=0,a=function(e,i){var n=this;n.id=s++,n.$=t(e),n.options=t.extend({},o,n.$.data(),i),n.init()};a.DEFAULTS=o,a.NAME=n,a.prototype.trigger=function(e,i){return t.zui.callEvent(this.options[e],i,this)},a.prototype.init=function(){var o,s,a,r,l,h,c,d,u,p,f,g,m,v=this,y=v.$,b=v.options,w=b.deviation,x="."+n+"."+v.id,C="mousedown"+x,_="mouseup"+x,k="mousemove"+x,T=b.selector,S=b.handle,D=b.flex,M=b.container,P=b.canMoveHere,F=b.dropToClass,L=y,z=!1,I=M?t(b.container).first():T?y:t("body"),$=function(e){if(z&&(f={left:e.pageX,top:e.pageY},!(i.abs(f.left-d.left)s&&f.top>a&&f.left-1&&i.button!==n)){var f=t(this);T&&(L=S?f.closest(T):f),L.hasClass("drag-shadow")||b.before&&b.before({event:i,element:L})===!1||(z=!0,o=t.isFunction(b.target)?b.target(L,y):I.find(b.target),s=null,a=null,r=!1,l=!0,h=null,c=L.offset(),u=I.offset(),u.top=u.top-I.scrollTop(),u.left=u.left-I.scrollLeft(),d={left:i.pageX,top:i.pageY},g=t.extend({},d),p={left:d.left-c.left,top:d.top-c.top},L.addClass("drag-from"),t(e).on(k,$).on(_,E),m=setTimeout(function(){t(e).on(C,E)},10),i.preventDefault(),b.stopPropagation&&i.stopPropagation())}};S?y.on(C,S,A):T?y.on(C,T,A):y.on(C,A)},a.prototype.destroy=function(){var i="."+n+"."+this.id;this.$.off(i),t(e).off(i),this.$.data(n,null)},a.prototype.reset=function(){this.destroy(),this.init()},t.fn.droppable=function(e){return this.each(function(){var i=t(this),o=i.data(n),s="object"==typeof e&&e;o||i.data(n,o=new a(this,s)),"string"==typeof e&&o[e]()})},t.fn.droppable.Constructor=a}(jQuery,document,Math),+function(t,e){"use strict";function i(e,i,s){return this.each(function(){var a=t(this),r=a.data(n),l=t.extend({},o.DEFAULTS,a.data(),"object"==typeof e&&e);r||a.data(n,r=new o(this,l)),"string"==typeof e?r[e](i,s):l.show&&r.show(i,s)})}var n="zui.modal",o=function(i,o){var s=this;s.options=o,s.$body=t(document.body),s.$element=t(i),s.$backdrop=s.isShown=null,s.scrollbarWidth=0,o.moveable===e&&(s.options.moveable=s.$element.hasClass("modal-moveable")),o.remote&&s.$element.find(".modal-content").load(o.remote,function(){s.$element.trigger("loaded."+n)})};o.VERSION="3.2.0",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0,position:"fit"};var s=function(e,i){var n=t(window);i.left=Math.max(0,Math.min(i.left,n.width()-e.outerWidth())),i.top=Math.max(0,Math.min(i.top,n.height()-e.outerHeight())),e.css(i)};o.prototype.toggle=function(t,e){return this.isShown?this.hide():this.show(t,e)},o.prototype.ajustPosition=function(i){var o=this,a=o.options;if(i===e&&(i=a.position),i!==e&&null!==i){t.isFunction(i)&&(i=i(o));var r=o.$element.find(".modal-dialog"),l=t(window).height(),h={maxHeight:"initial",overflow:"visible"},c=r.find(".modal-body").css(h);if(a.scrollInside){var d=a.headerHeight;"number"!=typeof d?d=r.find(".modal-header").height():t.isFunction(d)&&(d=d($header)),h.maxHeight=l-d,c.outerHeight()>h.maxHeight&&(h.overflow="auto")}c.css(h);var u=Math.max(0,(l-r.outerHeight())/2);if("fit"===i?i={top:u>50?Math.floor(2*u/3):u}:"center"===i?i={top:u}:t.isPlainObject(i)||(i={top:i}),r.hasClass("modal-moveable")){var p=null,f=a.rememberPos;f&&(f===!0?p=o.$element.data("modal-pos"):t.zui.store&&(p=t.zui.store.pageGet(n+".rememberPos."+f))),i=t.extend(i,{left:Math.max(0,(t(window).width()-r.outerWidth())/2)},p),"inside"===a.moveable?s(r,i):r.css(i)}else r.css(i)}},o.prototype.setMoveale=function(){t.fn.draggable||console.error("Moveable modal requires draggable.js.");var e=this,i=e.options,o=e.$element.find(".modal-dialog").removeClass("modal-dragged");o.toggleClass("modal-moveable",!!i.moveable),e.$element.data("modal-moveable-setup")||o.draggable({container:e.$element,handle:".modal-header",before:function(){var t=o.css("margin-top");t&&"0px"!==t&&o.css("top",t).css("margin-top","").addClass("modal-dragged")},finish:function(o){var s=i.rememberPos;s&&(e.$element.data("modal-pos",o.pos),t.zui.store&&s!==!0&&t.zui.store.pageSet(n+".rememberPos."+s,o.pos))},move:"inside"!==i.moveable||function(t){s(o,t)}})},o.prototype.show=function(e,i){var s=this,a=t.Event("show."+n,{relatedTarget:e});s.$element.trigger(a),s.$element.toggleClass("modal-scroll-inside",!!s.options.scrollInside),s.isShown||a.isDefaultPrevented()||(s.isShown=!0,s.options.moveable&&s.setMoveale(),s.checkScrollbar(),s.options.backdrop!==!1&&(s.$body.addClass("modal-open"),s.setScrollbar()),s.escape(),s.$element.on("click.dismiss."+n,'[data-dismiss="modal"]',function(t){s.hide(),t.stopPropagation()}),s.backdrop(function(){var a=t.support.transition&&s.$element.hasClass("fade");s.$element.parent().length||s.$element.appendTo(s.$body),s.$element.show().scrollTop(0),a&&s.$element[0].offsetWidth,s.$element.addClass("in").attr("aria-hidden",!1),s.ajustPosition(i),s.enforceFocus();var r=t.Event("shown."+n,{relatedTarget:e});a?s.$element.find(".modal-dialog").one("bsTransitionEnd",function(){s.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(o.TRANSITION_DURATION):s.$element.trigger("focus").trigger(r)}))},o.prototype.hide=function(e){e&&e.preventDefault();var i=this;e=t.Event("hide."+n),i.$element.trigger(e),i.isShown&&!e.isDefaultPrevented()&&(i.isShown=!1,i.options.backdrop!==!1&&(i.$body.removeClass("modal-open"),i.resetScrollbar()),i.escape(),t(document).off("focusin."+n),i.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss."+n),t.support.transition&&i.$element.hasClass("fade")?i.$element.one("bsTransitionEnd",t.proxy(i.hideModal,i)).emulateTransitionEnd(o.TRANSITION_DURATION):i.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin."+n).on("focusin."+n,t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?t(document).on("keydown.dismiss."+n,t.proxy(function(i){if(27==i.which){var o=t.Event("escaping."+n),s=this.$element.triggerHandler(o,"esc");if(s!=e&&!s)return;this.hide()}},this)):this.isShown||t(document).off("keydown.dismiss."+n)},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$element.trigger("hidden."+n)})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,s=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var a=t.support.transition&&s;if(this.$backdrop=t('').appendTo("body").data(n,r);var d=function(e,n){var o=i[e];t.isFunction(o)&&c.on(n+s,o)};d("onShow","show"),d("shown","shown"),d("onHide","hide"),d("hidden","hidden"),d("loaded","loaded"),c.on("shown"+s,function(){r.isShown=!0}).on("hidden"+s,function(){r.isShown=!1}),this.$modal=c,this.$dialog=c.find(".modal-dialog"),i.mergeOptions&&(this.options=i)},r.prototype.show=function(i){var s=t.extend({},this.options,{url:this.$trigger?this.$trigger.attr("href")||this.$trigger.attr("data-url")||this.$trigger.data("url"):this.options.url},i);this.init(s);var r=this,l=this.$modal,h=this.$dialog,c=s.custom,d=h.find(".modal-body").css("padding",""),u=h.find(".modal-header"),p=h.find(".modal-content");l.toggleClass("fade",s.fade).addClass(s.className).toggleClass("modal-loading",!this.isShown).toggleClass("modal-scroll-inside",!!s.scrollInside),h.toggleClass("modal-md","md"===s.size).toggleClass("modal-sm","sm"===s.size).toggleClass("modal-lg","lg"===s.size).toggleClass("modal-fullscreen","fullscreen"===s.size),u.toggle(s.showHeader),u.find(".modal-icon").attr("class","modal-icon icon-"+s.icon),u.find(".modal-title-name").text(s.title||""),s.size&&"fullscreen"===s.size&&(s.width="",s.height="");var f=function(){clearTimeout(this.resizeTask),this.resizeTask=setTimeout(function(){r.ajustPosition(s.position)},100)},g=function(t,e){return"undefined"==typeof t&&(t=s.delay),setTimeout(function(){h=l.find(".modal-dialog"),s.width&&"auto"!=s.width&&h.css("width",s.width),s.height&&"auto"!=s.height&&(h.css("height",s.height),"iframe"===s.type&&d.css("height",h.height()-u.outerHeight())),r.ajustPosition(s.position),l.removeClass("modal-loading"),"iframe"!=s.type&&h.off("resize."+n).on("resize."+n,f),e&&e()},t)};if("custom"===s.type&&c)if(t.isFunction(c)){var m=c({modal:l,options:s,modalTrigger:r,ready:g});typeof m===a&&(d.html(m),g())}else c instanceof t?(d.html(t("
      ").append(c.clone()).html()),g()):(d.html(c),g());else if(s.url){var v=function(){var t=l.callComEvent(r,"broken");t&&(d.html(t),g())};if(l.attr("ref",s.url),"iframe"===s.type){l.addClass("modal-iframe"),this.firstLoad=!0;var y="iframe-"+s.name;u.detach(),d.detach(),p.empty().append(u).append(d),d.css("padding",0).html(''),s.waittime>0&&(r.waitTimeout=g(s.waittime,v));var b=document.getElementById(y);b.onload=b.onreadystatechange=function(){var i=!!s.scrollInside;if(r.firstLoad&&l.addClass("modal-loading"),!this.readyState||"complete"==this.readyState){r.firstLoad=!1,s.waittime>0&&clearTimeout(r.waitTimeout);try{l.attr("ref",b.contentWindow.location.href);var o=e.frames[y].$;if(o&&"auto"===s.height&&"fullscreen"!=s.size){var a=o("body").addClass("body-modal").toggleClass("body-modal-scroll-inside",i);s.iframeBodyClass&&a.addClass(s.iframeBodyClass);var h=[],c=function(n){l.removeClass("fade");var o=a.outerHeight();if(n===!0&&s.onlyIncreaseHeight&&(o=Math.max(o,d.data("minModalHeight")||0),d.data("minModalHeight",o)),i){var r=s.headerHeight;"number"!=typeof r?r=u.height():t.isFunction(r)&&(r=r(u));var c=t(e).height();o=Math.min(o,c-r)}for(h.length>1&&o===h[0]&&(o=Math.max(o,h[1])),h.push(o);h.length>2;)h.shift();d.css("height",o),s.fade&&l.addClass("fade"),g()};l.callComEvent(r,"loaded",{modalType:"iframe",jQuery:o}),setTimeout(c,100),a.off("resize."+n).on("resize."+n,c),i&&t(e).off("resize."+n).on("resize."+n,c)}else g()}catch(p){g()}}}}else t.ajax(t.extend({url:s.url,success:function(i){try{var n=t(i);n.filter(".modal-dialog").length?h.replaceWith(n):n.filter(".modal-content").length?h.find(".modal-content").replaceWith(n):d.wrapInner(n)}catch(s){e.console&&e.console.warn&&console.warn("ZUI: Cannot recogernize remote content.",{error:s,data:i}),l.html(i)}l.callComEvent(r,"loaded",{modalType:o}),g()},error:v},s.ajaxOptions))}l.modal({show:"show",backdrop:s.backdrop,moveable:s.moveable,rememberPos:s.rememberPos,keyboard:s.keyboard,scrollInside:s.scrollInside})},r.prototype.close=function(i,n){var o=this;(i||n)&&o.$modal.on("hidden"+s,function(){t.isFunction(i)&&i(),typeof n===a&&n.length&&!o.$modal.data("cancel-reload")&&("this"===n?e.location.reload():e.location=n)}),o.$modal.modal("hide")},r.prototype.toggle=function(t){this.isShown?this.close():this.show(t)},r.prototype.ajustPosition=function(e){e=e===i?this.options.position:e,t.isFunction(e)&&(e=e(this)),this.$modal.modal("ajustPosition",e)},t.zui({ModalTrigger:r,modalTrigger:new r}),t.fn.modalTrigger=function(e,i){return t(this).each(function(){var o=t(this),s=o.data(n),l=t.extend({title:o.attr("title")||o.text(),url:o.attr("href"),type:o.hasClass("iframe")?"iframe":""},o.data(),t.isPlainObject(e)&&e);s||o.data(n,s=new r(l,o)),typeof e==a?s[e](i):l.show&&s.show(i),o.on((l.trigger||"click")+".toggle."+n,function(e){l=t.extend(l,{url:o.attr("href")||o.attr("data-url")||o.data("url")||l.url}),s.toggle(l),o.is("a")&&e.preventDefault()})})};var l=t.fn.modal;t.fn.modal=function(e,i){return t(this).each(function(){var n=t(this);n.hasClass("modal")?l.call(n,e,i):n.modalTrigger(e,i)})},t.fn.modal.bs=l;var h=function(e){return e=t(e?e:".modal.modal-trigger"),e&&e instanceof t?e:null},c=function(i,o,s){var a=i;if(t.isFunction(i)){var r=s;s=o,o=i,i=r}i=h(i),i&&i.length?i.each(function(){t(this).data(n).close(o,s)}):t("body").hasClass("modal-open")||t(".modal.in").length||t("body").hasClass("body-modal")&&e.parent.$.zui.closeModal(a,o,s)},d=function(t,e){e=h(e),e&&e.length&&e.modal("ajustPosition",t)};t.zui({closeModal:c,ajustModalPosition:d}),t(document).on("click."+n+".data-api",'[data-toggle="modal"]',function(e){var i=t(this),o=i.attr("href"),s=null;try{s=t(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,""))}catch(a){}s&&s.length||(i.data(n)?i.trigger(".toggle."+n):i.modalTrigger({show:!0})),i.is("a")&&e.preventDefault()}).on("click."+n+".data-api",'[data-dismiss="modal"]',function(){t.zui.closeModal()})}(window.jQuery,window,void 0),+function(t){"use strict";var e=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'
      ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.prototype.init=function(e,i,n){this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(n);for(var o=this.options.trigger.split(" "),s=o.length;s--;){var a=o[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focus",l="hover"==a?"mouseleave":"blur";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,n){i[t]!=n&&(e[t]=n)}),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget)[this.type](this.getDelegateOptions()).data("zui."+this.type);return clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show()},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget)[this.type](this.getDelegateOptions()).data("zui."+this.type);return clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide()},e.prototype.show=function(e){var i=t.Event("show.zui."+this.type);if((e||this.hasContent())&&this.enabled){var n=this;if(n.$element.trigger(i),i.isDefaultPrevented())return;var o=n.tip();n.setContent(e),n.options.animation&&o.addClass("fade");var s="function"==typeof n.options.placement?n.options.placement.call(n,o[0],n.$element[0]):n.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s),n.options.container?o.appendTo(n.options.container):o.insertAfter(n.$element);var l=n.getPosition(),h=o[0].offsetWidth,c=o[0].offsetHeight;if(r){var d=n.$element.parent(),u=s,p=document.documentElement.scrollTop||document.body.scrollTop,f="body"==n.options.container?window.innerWidth:d.outerWidth(),g="body"==n.options.container?window.innerHeight:d.outerHeight(),m="body"==n.options.container?0:d.offset().left;s="bottom"==s&&l.top+l.height+c-p>g?"top":"top"==s&&l.top-p-c<0?"bottom":"right"==s&&l.right+h>f?"left":"left"==s&&l.left-h

      '}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTarget();if(e)return e.find(".arrow").length<1&&t.addClass("no-arrow"),void t.html(e.html());var i=this.getTitle(),n=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](i),t.find(".popover-content")[this.options.html?"html":"text"](n),t.removeClass("fade top bottom left right in"),this.options.tipId&&t.attr("id",this.options.tipId),this.options.tipClass&&t.addClass(this.options.tipClass),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTarget()||this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.getTarget=function(){var e=this.$element,i=this.options,n=e.attr("data-target")||("function"==typeof i.target?i.target.call(e[0]):i.target);return!!n&&("$next"==n?e.next(".popover"):t(n))},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},e.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip};var i=t.fn.popover;t.fn.popover=function(i){return this.each(function(){var n=t(this),o=n.data("zui.popover"),s="object"==typeof i&&i;o||n.data("zui.popover",o=new e(this,s)),"string"==typeof i&&o[i]()})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(window.jQuery),+function(t){"use strict";function e(){t(o).remove(),t(s).each(function(e){var o=i(t(this));o.hasClass("open")&&(o.trigger(e=t.Event("hide."+n)),e.isDefaultPrevented()||o.removeClass("open").trigger("hidden."+n))})}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var n;try{n=i&&t(i)}catch(o){}return n&&n.length?n:e.parent()}var n="zui.dropdown",o=".dropdown-backdrop",s="[data-toggle=dropdown]",a=function(e){t(e).on("click."+n,this.toggle)};a.prototype.toggle=function(o){var s=t(this);if(!s.is(".disabled, :disabled")){var a=i(s),r=a.hasClass("open");if(e(),!r){if("ontouchstart"in document.documentElement&&!a.closest(".navbar-nav").length&&t('',s={type:"default",placement:"top",time:4e3,parent:"body",icon:null,close:!0,fade:!0,scale:!0},a={},r=function(e,r){t.isPlainObject(e)&&(r=e,e=r.message);var l=this;r=l.options=t.extend({},s,r),l.id=r.id||n++;var h=a[l.id];h&&h.destroy(),a[l.id]=l,l.message=(r.icon?' ':"")+e,l.$=t(o.format(r)).toggleClass("fade",r.fade).toggleClass("scale",r.scale).attr("id","messager-"+l.id),r.cssClass&&l.$.addClass(r.cssClass);var c=!1,d=l.$.find(".messager-actions"),u=function(e){var n=t('',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},o=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};o.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},o.prototype.init=function(){var e=this,n=e.options,o=e.$,s=o.parent(),a=!1;s.hasClass("colorpicker")?e.$picker=s:(e.$picker=t(n.template||i),a=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),o.attr("data-provide",null),a&&o.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var o=new t.zui.Color(n);e.colors[o.toCssStr()]=o}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=o.val(),s=t.zui.Color.isColor(i);o.parent().toggleClass("has-error",!(s||n.optional&&""===i)),s?e.setValue(i,!0):n.optional&&""===i?o.tooltip("hide"):o.is(":focus")||o.tooltip("show",n.errorTip)};o.is("input:not([type=hidden])")?(n.tooltip&&o.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),o.on("keyup paste input change",r)):o.appendTo(e.$picker),r()},o.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var o=t('',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("
    • ").css({width:n.tileSize,height:n.tileSize}).append(o)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},o.prototype.updateColors=function(e){var i=(this.$picker,this.$menu.children("li:not(.heading)").remove()),n=this.options,e=e||this.colors,o=this,s=0;if(t.each(e,function(t,e){o.addColor(e),s++}),n.optional){var a=t('
    • ').css({width:n.tileSize,height:n.tileSize});this.$menu.append(a),s++}i.css("width",Math.min(s,n.lineCount)*n.tileSize+6)},o.prototype.setValue=function(e,i){var n=this,o=n.options,s=n.$btn;n.$menu.find(".cp-tile.active").removeClass("active");var a="",r=o.updateBtn;if("auto"===r){var l=s.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var h=new t.zui.Color(e);a=h.toCssStr().toLowerCase(),r&&(t.isFunction(r)?r(a,s,n):s.css({background:a,color:h.contrast().toCssStr(),borderColor:h.luma()>.43?"#ccc":a})),n.colors[a]||n.addColor(h),i||n.$.val().toLowerCase()===a||n.$.val(a).trigger("change"),n.$menu.find('.cp-tile[data-color="'+a+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",h)}else r&&(t.isFunction(r)?r(null,s,n):s.attr("style",null)),i||""===n.$.val()||n.$.val(a).trigger("change"),o.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);o.updateBorder&&t(o.updateBorder).css("border-color",a),o.updateBackground&&t(o.updateBackground).css("background-color",a),o.updateColor&&t(o.updateColor).css("color",a),o.updateText&&t(o.updateText).text(a)},o.prototype.getOptions=function(e){var i=t.extend({},o.DEFAULTS,this.$.data(),e);"string"==typeof i.colors&&(i.colors=i.colors.split(","));var s=(i.lang||t.zui.clientLang()).toLowerCase();i.errorTip||(i.errorTip=n[s].errorTip),t.fn.tooltip||(i.btnTip=!1),this.options=i},t.fn.colorPicker=function(i){return this.each(function(){var n=t(this),s=n.data(e),a="object"==typeof i&&i;s||n.data(e,s=new o(this,a)),"string"==typeof i&&s[i]()})},t.fn.colorPicker.Constructor=o,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=n+=1),o[t%o.length]}var n=0,o=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),o=n.chart||"pie",s=t(n.target);if(s.length){var a=null;if("pie"===o){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),o=i();n.attr("data-id",e).find(".chart-color-dot").css("background",o),r.push({label:n.find(".chart-label").text(),value:parseInt(n.find(".chart-value").text()),color:o,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),a=s.pieChart(r,n),s.on("mousemove",function(t){var e=a.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.barChart(r,n)}else if("line"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.lineChart(r,n)}null!==a&&e.data("zui.chart",a)}})},t(".table-chart").tableChart();var s=function(i,n){var o=t(i);if(!o.data("initProgressPie")){o.data("initProgressPie",1);var s=o.is("canvas")?o:o.find("canvas"),a=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(o.find(".progress-value").text())},n,o.data()),r=s.length;r||(s=t("").appendTo(o)),s.attr("width")!==e?a.width=s.attr("width"):s.attr("width",a.width),s.attr("height")!==e?a.height=s.attr("height"):s.attr("height",a.height),r||8!=t.zui.browser.ie||G_vmlCanvasManager.initElement(s[0]),"auto"===a.animation&&(a.animation=a.width>30),a.value=Math.max(0,Math.min(100,a.value)),o.addClass("progress-pie-"+a.width);var l=[{value:a.value,label:a.name,color:a.color,circleBeginEnd:!0},{value:100-a.value,label:"",color:a.backColor}];s[a.doughnut?"doughnutChart":"pieChart"](l,t.extend({segmentShowStroke:!1,animation:a.animation,showTooltips:a.showTip,tooltipTemplate:a.tipTemplate,percentageInnerCutout:a.doughnutSize,reverseDrawOrder:!0,animationEasing:"easeInOutQuart",onAnimationProgress:a.realValue?function(t){o.find(".progress-value").text(Math.floor(a.realValue*t))}:e,onAnimationComplete:a.realValue?function(t){o.find(".progress-value").text(a.realValue)}:e},a.chartOptions))}};jQuery.fn.progressPie=function(e){t(this).each(function(){var i=t(this);if(!i.closest(".hidden").length){var n=i.closest(".tab-pane");n.length&&!n.hasClass("active")?t('[data-toggle="tab"][data-target="#'+n.attr("id")+'"]').one("shown.zui.tab",function(){s(i,e)}):s(this,e)}})},t(function(){t(".table-chart").tableChart();var e=t(".progress-pie");e.length>100?setTimeout(function(){e.progressPie()},1e3):e.progressPie()})}(jQuery,void 0),function(t){jQuery.fn.sparkline=function(e){t(this).each(function(){var i=t(this),n=t.extend({values:i.attr("values"),width:i.width()-4,height:i.height()-4},i.data(),e),o=n.height,s=[],a=n.width,r=n.values.split(","),l=0;for(var h in r){var c=parseFloat(r[h]);NaN!=c&&(s.push(c),l=Math.max(c,l))}var d=(Math.min(l,30),Math.min(a,Math.max(10,s.length*a/30))),u=i.children("canvas");u.length||(i.append(''),u=i.children("canvas")),u.attr("width",d).attr("height",o);var p={labels:s,datasets:[{fillColor:t.getThemeColor("pale")||"rgba(0,0,255,0.05)",strokeColor:t.getThemeColor("primary")||"#0054EC",pointColor:t.getThemeColor("secondary")||"rgba(255,136,0,1)",pointStrokeColor:"#fff",data:s}]},f={animation:!0,scaleOverride:!0,scaleStepWidth:Math.ceil(l/10),scaleSteps:10,scaleStartValue:0,showScale:!1,showTooltips:!1,pointDot:!1,scaleShowGridLines:!1,datasetStrokeWidth:1},g=t(u).lineChart(p,f);i.data("sparklineChart",g)})},t(function(){t(".sparkline").sparkline()})}(jQuery),function(t){t(function(){t.fn.fixedDate=function(){return t(this).each(function(){var e=t(this).attr("autocomplete","off");"0000-00-00"==e.val()&&e.focus(function(){"0000-00-00"==e.val()&&e.val("").datetimepicker("update")}).blur(function(){""==e.val()&&e.val("0000-00-00")})})};var e={language:t("html").attr("lang"),weekStart:1,todayBtn:1,autoclose:1,todayHighlight:1,startView:2,forceParse:0,showMeridian:1,format:"yyyy-mm-dd hh:ii",startDate:"1970-1-1"},i=t.extend({},e,{minView:2,format:"yyyy-mm-dd"}),n=t.extend({},e,{startView:1,minView:0,maxView:1,format:"hh:ii"});t(".datepicker-wrapper").click(function(){t(this).find(".form-date, .form-datetime, .form-time").datetimepicker("show").focus()}),window.datepickerOptions=e,t.fn.datepicker=function(e){return this.datetimepicker(t.extend({},i,e))},t.fn.timepicker=function(e){return this.datetimepicker(t.extend({},n,e))},t.fn.datepickerAll=function(){return this.find(".form-datetime").fixedDate().datetimepicker(e),this.find(".form-date").fixedDate().datepicker(),this.find(".form-time").fixedDate().timepicker(),this},t("body").datepickerAll()})}(jQuery),function(t){var e=function(e,i){i=t.extend({idStart:0,idEnd:9,chosen:!0,datetimepicker:!0,colorPicker:!0,hotkeys:!0},i,e.data());var n=e.find(".template");!n.length&&i.template&&(n=t(i.template));var o=0,s=0,a=function(t){t.is("select.chosen")?t.next(".chosen-container").find("input").focus():t.focus()},r=function(t){var i=e.find("[data-ctrl-index]:focus,.chosen-container-active").first();if(i.length){if(i.is(".chosen-container-active")){if(i.hasClass("chosen-with-drop")&&("down"===t||"up"===t))return;i=i.prev("select.chosen")}var n=i.data("ctrlIndex"),r=i.closest("tr").data("row");"down"===t?r0?r-=1:r=s-1:"left"===t?n>0?n-=1:n=o-1:"right"===t&&(n").html(a);return r.attr("data-row",e).addClass(n.attr("class")).removeClass("template"),i.rowCreator&&i.rowCreator(r,e,i),o?o.after(r):h.append(r),c(r),r};t.extend(l,{createRow:u,template:d});for(var p=i.idStart;p<=i.idEnd;++p)u(p)}else c(e);e.on("click",".btn-copy",function(){var e=t(this),i=t(e.data("copyFrom")).val(),n=t(e.data("copyTo")).val(i).addClass("highlight");setTimeout(function(){n.removeClass("highlight")},2e3)}),i.hotkeys&&t(document).on("keydown",function(t){var e={"Ctrl+#37":"left","Ctrl+#39":"right","#38":"up","#40":"down","Ctrl+#38":"up","Ctrl+#40":"down"},i=[];t.ctrlKey&&i.push("Ctrl"),i.push("#"+t.keyCode);var n=e[i.join("+")];n&&(r(n),t.ctrlKey&&(t.stopPropagation(),t.preventDefault()))}),e.data("zui.batchActionForm",l)};t.fn.batchActionForm=function(i){return this.each(function(){e(t(this),i)})}}(jQuery),function(t,e){"use strict";var i="zui.table",n={zh_cn:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},zh_tw:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},en:{selectedItems:"Seleted {0} items",attrTotal:"{0} total {1}"}},o=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),s=function(e,o){var a=this;a.name=i;var r=a.$=t(e);o=a.options=t.extend({},s.DEFAULTS,this.$.data(),o);var l=o.lang||"zh_cn";a.lang=t.isPlainObject(l)?t.extend(!0,{},n[l.lang||t.zui.clientLang()],l):n[l],r.attr("id")||(r.attr("id","table-"+t.zui.uuid()),o.hot&&console.warn("ZUI: table hot replace id not defined, the element id attribute should be set.")),r.attr("data-ride")||r.attr("data-ride","table"),a.getTable().find("thead>tr>th").each(function(){var e=t(this);if(!e.attr("title")){var i=t.trim(e.find("a").text()||e.text()||"");i.length&&e.attr("title",i)}}),o.checkable&&(r.on("click",".check-all",function(){a.checkAll(!t(this).hasClass("checked"))}).on("click","tbody>tr",function(e){t(e.target).closest('.btn,a,.not-check,.form-control,input[type="text"],.chosen-container').length||a.checkRow(t(this))}).on("click",'tbody input[type="checkbox"],tbody label[for]',function(e){e.stopPropagation();var i=t(this);i.is("label")&&(i=i.closest(".checkbox-primary").find('input[type="checkbox"]')),a.checkRow(i.closest("tr"),i.is(":checked"))}),o.selectable&&r.selectable(t.extend({},{selector:a.isDataTable?".fixed-left tbody>tr":"tbody>tr",selectClass:"",trigger:".c-id",clickBehavior:"multi",listenClick:!1,select:function(e){a.checkRow(e.target,!0),t.cookie("ajax_dragSelected")||(t.cookie("ajax_dragSelected","on",{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("dragSelected"))},unselect:function(t){a.checkRow(t.target,!1)},rangeStyle:{border:"1px solid #006af1",backgroundColor:"rgba(50,128,252,0.2)",borderRadius:"2px"}},t.isPlainObject(o.selectable)?o.selectable:null)));var h=a.$form=r.is("form")?r:r.find("form");h.length&&(o.ajaxForm?h.ajaxForm(t.isPlainObject(o.ajaxForm)?o.ajaxForm:null):h.on("click","[data-form-action]",function(){h.attr("action",t(this).data("formAction")).submit()})),(o.fixFooter||o.fixHeader)&&(a.pageFooterHeight=t("#footer").outerHeight(),a.updateFixUI(),t(window).on("scroll resize",function(){a.updateFixUI()}).on("sidebar.toggle",function(){setTimeout(function(){a.updateFixUI()},200)})),o.group&&(r.on("click",".group-toggle",function(){a.toggleRowGroup(t(this).closest("tr").data("id"))}),t(document).on("click",".group-collapse-all",function(){a.toggleGroups(!1)}).on("click",".group-expand-all",function(){a.toggleGroups(!0)})),a.defaultStatistic=r.find(".table-statistic").html(),a.updateStatistic(),a.initModals(),a.checkItems={},a.updateCheckUI()};s.prototype.reload=function(e){var i=this,n=i.options,o=n.replaceId;if(!o)return e&&e();"self"===o&&(o=i.$.attr("id"));var s=t("
      ");i.$.addClass("load-indicator loading"),s.load(window.location.href+" #"+o,function(){i.$.empty().html(s.children().html()).removeClass("load-indicator loading"),i.$.trigger("beforeTableReload"),i.updateStatistic(),i.initModals(),i.$.datepickerAll();var o=i.$.find("tbody>tr"),a=!1;t.each(i.checkItems,function(t,e){e&&(i.checkRow(o.filter('[data-id="'+t+'"]'),!0,!0),a=!0)}),a&&i.updateCheckUI(),i.$.trigger("tableReload");var r=t("#mainMenu>.btn-toolbar>.btn-active-text>.label");r.length&&r.text(i.getTable().find("tbody:first>tr:not(.table-children)").length),i.$.find('[data-ride="pager"]').pager(),e&&e(),n.afterReload&&n.afterReload()})},s.prototype.initModals=function(){var e=this,i=e.options,n=e.$.find(i.iframeModalTrigger);if(n.length){var o={type:"iframe",onHide:i.replaceId?function(){var n=t.cookie("selfClose");(1==n||i.hot)&&(t("#triggerModal").data("cancel-reload",1),e.reload(function(){t.cookie("selfClose",0)}))}:null};n.modalTrigger(o)}},s.prototype.getTable=function(){var t=this.$;if(this.isDataTable)return t.find("div.datatable");var e=t.is("table")?t:t.find("table:not(.fixed-header-copy)").first();return e.is(".datatable")&&(this.isDataTable=!0,e=t.find("div.datatable")),e},s.prototype.toggleGroups=function(e){var i=this,n={};i.$.find("tbody>tr").each(function(){var o=t(this).closest("tr").data("id");n[o]||i.toggleRowGroup(o,e)})},s.prototype.toggleRowGroup=function(i,n){var o=this.$.find('tbody>tr[data-id="'+i+'"]'),s=o.filter(".group-summary"),a=n===e?!s.hasClass("hidden"):!!n;o.not(".group-summary").toggleClass("hidden",!a),s.toggleClass("hidden",a),t("body").toggleClass("table-group-collapsed",!this.$.find("tbody>tr.group-summary.hidden").length)},s.prototype.updateStatistic=function(){var i=this,n=i.$.find(".table-statistic");if(n.length){if(i.defaultStatistic===e&&(i.defaultStatistic=n.html()),i.options.statisticCreator)return void n.html(i.options.statisticCreator(i)||i.defaultStatistic);var o=i.statisticCols;if(!o&&o!==!1){o={};var s=!1;i.getTable().find("thead th").each(function(e){var i=t(this),n=i.data("statistic");n&&(s=!0,o[e]={format:n,name:i.text()})}),i.statisticCols=!!s&&o}var a=0;o&&t.each(o,function(t){o[t].total=0,o[t].checkedTotal=0}),i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr").each(function(){var e=t(this),i=e.hasClass("checked"),n=e.children("td");i&&a++,o&&t.each(o,function(t){var e=parseFloat(n.eq(t).text());isNaN(e)&&(e=0),o[t].total+=e,i&&(o[t].checkedTotal+=e)})});var r=[];if(a)r.push(i.lang.selectedItems.format(a));else if(i.defaultStatistic)return void n.html(i.defaultStatistic);o&&t.each(o,function(t){var e=o[t],n=e[a?"checkedTotal":"total"];e.format&&(n=e.format.format(n)),r.push(i.lang.attrTotal.format(e.name,n))}),n.html(r.join(", "))}},s.prototype.updateFixUI=function(e){var i=this,n=(new Date).getTime();if(!e&&(i.lastUpdateCall&&clearTimeout(i.lastUpdateCall),!i.lastUpdateTime||n-i.lastUpdateTime<100))return void(i.lastUpdateCall=setTimeout(function(){i.updateFixUI(!0)},30));if(i.lastUpdateTime=n,i.lastUpdateCall&&(clearTimeout(i.lastUpdateCall),i.lastUpdateCall=null),o){var s=i.getTable();if(s.parent().is(".table-responsive")){var a=s.find("thead"),r=0;a.find("th").each(function(){r+=t(this).outerWidth()}),s.css("min-width",r)}}i.options.fixHeader&&!i.isDataTable&&i.fixHeader(),i.options.fixFooter&&i.fixFooter()},s.prototype.fixHeader=function(){var e=this,i=e.getTable(),n=i.find("thead"),o=n[0].getBoundingClientRect(),s=e.options.fixFooter,a=t.isFunction(s)?s(o,n):o.top<("number"==typeof s?s:-5),r=e.$.find(".fix-table-copy-wrapper"),l=i.parent(),h=l.is(".table-responsive");if(a){if(r.length||(r=t('
      ').append(t('
      ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var c=l[0].getBoundingClientRect();r.css({left:c.left,width:l.width()}),r.find(".fixed-header-copy").css({left:o.left-c.left,position:"relative",minWidth:i.width()}),l.data("fixHeaderScroll")||l.data("fixHeaderScroll",1).on("scroll",function(){e.fixHeader()})}else r.css({left:o.left,width:o.width});var d=r.find("th");n.find("th").each(function(e){d.eq(e).css("width",t(this).outerWidth())})}else r.remove()},s.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var s=n.find("tbody");if(!s.length)return;e=s[0].getBoundingClientRect(),e=s[0].getBoundingClientRect()}var a=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(a)?a(e,o):e.bottom>window.innerHeight-50-("number"==typeof a?a:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},s.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},s.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var s=t.find('input[type="checkbox"]');s.length&&(i===e&&(i=!s.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,s.prop("checked",i).trigger("change"),n||o.updateCheckUI())},s.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,s=null,a=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),s&&s.toggleClass("row-check-end",!r&&o),r&&(a+=1),s=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",a>0).find(".check-all").toggleClass("checked",!(!l||a!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},s.DEFAULTS={checkable:!0,ajaxForm:!1,selectable:!0,fixHeader:!0,fixFooter:!0,iframeWidth:900,replaceId:"self",hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.table.Constructor=s,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n){e===!1?t("form").enableForm(e,i,n):t("form.form-disabled").enableForm(!0,i,n)};var s=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(a,r){var l=t(a);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});t.isFunction(r)&&(r={complete:r}),r=t.extend({},n,l.data(),r);var h=r.beforeSubmit,c=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,s,a){if(l.enableForm(!1),(h&&h(n,s,a))!==!1){var r={},c=s.find('[type="file"]');r.fileapi=c.length&&c[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&s.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=s.attr("enctype")==p||s.attr("encoding")==p,g=r.fileapi&&r.formdata,m=(u||f)&&!g;m&&(""==o&&(o=a.url),a.url!=o&&(a.url=o),a.url=a.url.indexOf("&")>=0?a.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":a.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest"); -}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
      ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
      ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
      '+(n.errorText||window.lang&&window.lang.timeout)+"
      "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e,s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
      ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(t){var e=this,i=e.$,o=e.getFile(),s=!o;i.toggleClass("normal",!s).toggleClass("empty",s),o?(e.oldName=o.name,i.find(".file-title").text(o.name).attr("title",o.name),i.find(".file-size").text(n(o.size)),i.find(".file-editbox").val(o.name).attr("size",o.name.length),e.options.onSelect&&e.options.onSelect(o,e)):i.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
      ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s)}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
      ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

      '+lang.timeout+'

      '+i+'

      '),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
    • '+t(this).text()+'
    • '),n.append('
    • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
      ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file +function(t){function e(e){if("string"==typeof e.data){var i=e.handler,n=e.data.toLowerCase().split(" ");e.handler=function(e){if(this===e.target||!/textarea|select/i.test(e.target.nodeName)&&"text"!==e.target.type){var o="keypress"!==e.type&&t.hotkeys.specialKeys[e.which],s=String.fromCharCode(e.which).toLowerCase(),a="",r={};e.altKey&&"alt"!==o&&(a+="alt+"),e.ctrlKey&&"ctrl"!==o&&(a+="ctrl+"),e.metaKey&&!e.ctrlKey&&"meta"!==o&&(a+="meta+"),e.shiftKey&&"shift"!==o&&(a+="shift+"),o?r[a+o]=!0:(r[a+s]=!0,r[a+t.hotkeys.shiftNums[s]]=!0,"shift+"===a&&(r[t.hotkeys.shiftNums[s]]=!0));for(var l=0,h=n.length;l","/":"?","\\":"|"}},t.each(["keydown","keyup","keypress"],function(){t.event.special[this]={add:e}})}(jQuery),function(t){"use strict";function e(e,i){if(e===!1)return e;if(!e)return i;e===!0?e={add:!0,"delete":!0,edit:!0,sort:!0}:"string"==typeof e&&(e=e.split(","));var n;return t.isArray(e)&&(n={},t.each(e,function(e,i){t.isPlainObject(i)?n[i.action]=i:n[i]=!0}),e=n),t.isPlainObject(e)&&(n={},t.each(e,function(e,i){i?n[e]=t.extend({type:e},a[e],t.isPlainObject(i)?i:null):n[e]=!1}),e=n),i?t.extend(!0,{},i,e):e}function i(e,i,n){return i=i||e.type,t(n||e.template).addClass("tree-action").attr(t.extend({"data-type":i,title:e.title||""},e.attr)).data("action",e)}var n="zui.tree",o=0,s=function(e,i){this.name=n,this.$=t(e),this.getOptions(i),this._init()},a={sort:{template:''},add:{template:''},edit:{template:''},"delete":{template:''}};s.DEFAULTS={animate:null,initialState:"normal",toggleTemplate:''},s.prototype.add=function(e,i,n,o,s){var a,r=t(e),l=this.options;if(r.is("li")?(a=r.children("ul"),a.length||(a=t("
        "),r.append(a),this._initList(a,r))):a=r,a){var h=this;t.isArray(i)||(i=[i]),t.each(i,function(e,i){var n=t("
      • ").data(i).appendTo(a);void 0!==i.id&&n.attr("data-id",i.id);var o=l.itemWrapper?t(l.itemWrapper===!0?'
      • ').append(i(h.add,"add",h.add.templateInList)).appendTo(n)}h.sort&&n.sortable(t.extend({dragCssClass:"tree-drag-holder",trigger:".sort-handler",selector:"li:not(.tree-action-item)",finish:function(t){r.callEvent("action",{action:h.sort,$list:n,target:t.target,item:a})}},h.sort.options,t.isPlainObject(this.options.sortable)?this.options.sortable:null))}o&&(o.hasClass("open")||a&&a.open)&&o.addClass("open in")},s.prototype._initItem=function(n,o,s,a){if(void 0===o){var r=n.prev("li");o=r.length?r.data("idx")+1:1}if(s=s||n.closest("ul"),n.attr("data-idx",o).removeClass("tree-single-item"),!n.data("id")){var l=o;s.hasClass("tree")||(l=s.parent("li").data("id")+"-"+l),n.attr("data-id",l)}n.hasClass("active")&&s.parent("li").addClass("has-active-item"),a=a||n.data();var h=e(a.actions,this.actions);if(h){var c=n.find(".tree-actions");c.length||(c=t('
        ').appendTo(this.options.itemWrapper?n.find(".tree-item-wrapper"):n),t.each(h,function(t,e){e&&c.append(i(e,t))}))}var d=n.children("ul");d.length&&this._initList(d,n,o,a)},s.prototype._init=function(){var i=this.options,s=this;this.actions=e(i.actions),this.$.addClass("tree"),i.animate&&this.$.addClass("tree-animate"),this._initList(this.$);var a=i.initialState,r=t.zui&&t.zui.store&&t.zui.store.enable;r&&(this.selector=n+"::"+(i.name||"")+"#"+(this.$.attr("id")||o++),this.store=t.zui.store[i.name?"get":"pageGet"](this.selector,{})),"preserve"===a&&(r?this.isPreserve=!0:this.options.initialState=a="normal"),this.reload(i.data),r&&(this.isPreserve=!0),"expand"===a?this.expand():"collapse"===a&&this.collapse(),this.$.on("click",'.list-toggle,a[href="#"],.tree-toggle',function(e){var i=t(this),n=i.parent("li");s.callEvent("hit",{target:n,item:n.data()}),s.toggle(n),i.is("a")&&e.preventDefault()}).on("click",".tree-action",function(){var e=t(this),i=e.data();if(i.action&&(i=i.action),"sort"!==i.type){var n=e.closest("li:not(.tree-action-item)");s.callEvent("action",{action:i,target:this,$item:n,item:n.data()})}})},s.prototype.preserve=function(e,i,n){if(this.isPreserve)if(e)i=i||e.data("id"),n=void 0===n&&e.hasClass("open"),n?this.store[i]=n:delete this.store[i],this.store.time=(new Date).getTime(),t.zui.store[this.options.name?"set":"pageSet"](this.selector,this.store);else{var o=this;this.store={},this.$.find("li").each(function(){o.preserve(t(this))})}},s.prototype.expand=function(t,e,i){t?(t.addClass("open"),!e&&this.options.animate?setTimeout(function(){t.addClass("in")},10):t.addClass("in")):t=this.$.find("li.has-list").addClass("open in"),i||this.preserve(t),this.callEvent("expand",t,this)},s.prototype.show=function(e,i,n){var o=this;e.each(function(){var e=t(this);if(o.expand(e,i,n),e)for(var s=e.parent("ul");s&&s.length&&!s.hasClass("tree");){var a=s.parent("li");a.length?(o.expand(a,i,n),s=a.parent("ul")):s=!1}})},s.prototype.collapse=function(t,e,i){t?!e&&this.options.animate?(t.removeClass("in"),setTimeout(function(){t.removeClass("open")},300)):t.removeClass("open in"):t=this.$.find("li.has-list").removeClass("open in"),i||this.preserve(t),this.callEvent("collapse",t,this)},s.prototype.toggle=function(t){var e=t&&t.hasClass("open")||t===!1||void 0===t&&this.$.find("li.has-list.open").length;this[e?"collapse":"expand"](t)},s.prototype.getOptions=function(e){this.options=t.extend({},s.DEFAULTS,this.$.data(),e),null===this.options.animate&&this.$.hasClass("tree-animate")&&(this.options.animate=!0)},s.prototype.toData=function(e,i){t.isFunction(e)&&(i=e,e=null),e=e||this.$;var n=this;return e.children("li:not(.tree-action-item)").map(function(){var e=t(this),o=e.data();delete o["zui.droppable"];var s=e.children("ul");return s.length&&(o.children=n.toData(s)),t.isFunction(i)?i(o,e):o}).get()},s.prototype.callEvent=function(e,i){var n;return t.isFunction(this.options[e])&&(n=this.options[e](i,this)),this.$.trigger(t.Event(e+"."+this.name,i)),n},t.fn.tree=function(e,i){return this.each(function(){var o=t(this),a=o.data(n),r="object"==typeof e&&e;a||o.data(n,a=new s(this,r)),"string"==typeof e&&a[e](i)})},t.fn.tree.Constructor=s,t(function(){t('[data-ride="tree"]').tree()})}(jQuery),function(t){"use strict";var e="zui.colorPicker",i='
        ',n={zh_cn:{errorTip:"不是有效的颜色值"},zh_tw:{errorTip:"不是有效的顏色值"},en:{errorTip:"Not a valid color value"}},o=function(i,n){this.name=e,this.$=t(i),this.getOptions(n),this.init()};o.DEFAULTS={colors:["#00BCD4","#388E3C","#3280fc","#3F51B5","#9C27B0","#795548","#F57C00","#F44336","#E91E63"],pullMenuRight:!0,wrapper:"btn-wrapper",tileSize:30,lineCount:5,optional:!0,tooltip:"top",icon:"caret-down",updateBtn:"auto"},o.prototype.init=function(){var e=this,n=e.options,o=e.$,s=o.parent(),a=!1;s.hasClass("colorpicker")?e.$picker=s:(e.$picker=t(n.template||i),a=!0),e.$picker.addClass(n.wrapper).find(".cp-title").toggle(void 0!==n.title).text(n.title),e.$menu=e.$picker.find(".dropdown-menu").toggleClass("pull-right",n.pullMenuRight),e.$btn=e.$picker.find(".btn.dropdown-toggle"),e.$btn.find(".ic").addClass("icon-"+n.icon),n.btnTip&&e.$picker.attr("data-toggle","tooltip").tooltip({title:n.btnTip,placement:n.tooltip,container:"body"}),o.attr("data-provide",null),a&&o.after(e.$picker),e.colors={},t.each(n.colors,function(i,n){if(t.zui.Color.isColor(n)){var o=new t.zui.Color(n);e.colors[o.toCssStr()]=o}}),e.updateColors(),e.$picker.on("click",".cp-tile",function(){e.setValue(t(this).data("color"))});var r=function(){var i=o.val(),s=t.zui.Color.isColor(i);o.parent().toggleClass("has-error",!(s||n.optional&&""===i)),s?e.setValue(i,!0):n.optional&&""===i?o.tooltip("hide"):o.is(":focus")||o.tooltip("show",n.errorTip)};o.is("input:not([type=hidden])")?(n.tooltip&&o.attr("data-toggle","tooltip").tooltip({trigger:"manual",placement:n.tooltip,tipClass:"tooltip-danger",container:"body"}),o.on("keyup paste input change",r)):o.appendTo(e.$picker),r()},o.prototype.addColor=function(e){e instanceof t.zui.Color||(e=new t.zui.Color(e));var i=e.toCssStr(),n=this.options;this.colors[i]||(this.colors[i]=e);var o=t('
        ',{titile:e}).data("color",e).css({color:e.contrast().toCssStr(),background:i,"border-color":e.luma()>.43?"#ccc":"transparent"}).attr("data-color",i);this.$menu.append(t("
      • ").css({width:n.tileSize,height:n.tileSize}).append(o)),n.optional&&this.$menu.find(".cp-tile.empty").parent().detach().appendTo(this.$menu)},o.prototype.updateColors=function(e){var i=(this.$picker,this.$menu.children("li:not(.heading)").remove()),n=this.options,e=e||this.colors,o=this,s=0;if(t.each(e,function(t,e){o.addColor(e),s++}),n.optional){var a=t('
      • ').css({width:n.tileSize,height:n.tileSize});this.$menu.append(a),s++}i.css("width",Math.min(s,n.lineCount)*n.tileSize+6)},o.prototype.setValue=function(e,i){var n=this,o=n.options,s=n.$btn;n.$menu.find(".cp-tile.active").removeClass("active");var a="",r=o.updateBtn;if("auto"===r){var l=s.find(".color-bar");r=!l.length||function(t){l.css("background",t||"")}}if(e){var h=new t.zui.Color(e);a=h.toCssStr().toLowerCase(),r&&(t.isFunction(r)?r(a,s,n):s.css({background:a,color:h.contrast().toCssStr(),borderColor:h.luma()>.43?"#ccc":a})),n.colors[a]||n.addColor(h),i||n.$.val().toLowerCase()===a||n.$.val(a).trigger("change"),n.$menu.find('.cp-tile[data-color="'+a+'"]').addClass("active"),n.$.tooltip("hide"),n.$.trigger("colorchange",h)}else r&&(t.isFunction(r)?r(null,s,n):s.attr("style",null)),i||""===n.$.val()||n.$.val(a).trigger("change"),o.optional&&n.$.tooltip("hide"),n.$menu.find(".cp-tile.empty").addClass("active"),n.$.trigger("colorchange",null);o.updateBorder&&t(o.updateBorder).css("border-color",a),o.updateBackground&&t(o.updateBackground).css("background-color",a),o.updateColor&&t(o.updateColor).css("color",a),o.updateText&&t(o.updateText).text(a)},o.prototype.getOptions=function(e){var i=t.extend({},o.DEFAULTS,this.$.data(),e);"string"==typeof i.colors&&(i.colors=i.colors.split(","));var s=(i.lang||t.zui.clientLang()).toLowerCase();i.errorTip||(i.errorTip=n[s].errorTip),t.fn.tooltip||(i.btnTip=!1),this.options=i},t.fn.colorPicker=function(i){return this.each(function(){var n=t(this),s=n.data(e),a="object"==typeof i&&i;s||n.data(e,s=new o(this,a)),"string"==typeof i&&s[i]()})},t.fn.colorPicker.Constructor=o,t(function(){t('[data-provide="colorpicker"]').colorPicker()})}(jQuery),function(t,e){function i(t){return t===e&&(t=n+=1),o[t%o.length]}var n=0,o=["#00a9fc","#ff5d5d","#fdc137","#00da88","#7ec5ff","#8666b8","#bd7b46","#ff9100","#ff3d00","#f57f17","#00e5ff","#00b0ff","#2979ff","#3d5afe","#651fff","#d500f9","#f50057","#ff1744"];jQuery.fn.tableChart=function(){t(this).each(function(){var e=t(this),n=e.data(),o=n.chart||"pie",s=t(n.target);if(s.length){var a=null;if("pie"===o){n=t.extend({scaleShowLabels:!0,scaleLabel:"<%=label%>: <%=value%>"},n);var r=[],l=e.find("tbody > tr").each(function(e){var n=t(this),o=i();n.attr("data-id",e).find(".chart-color-dot").css("background",o),r.push({label:n.find(".chart-label").text(),value:parseInt(n.find(".chart-value").text()),color:o,id:e})});r.length>1?n.scaleLabelPlacement="outside":1===r.length&&(n.scaleLabelPlacement="inside",r.push({label:"",value:r[0].value/2e3,color:"#fff",showLabel:!1})),a=s.pieChart(r,n),s.on("mousemove",function(t){var e=a.getSegmentsAtEvent(t);l.removeClass("active"),e.length&&l.filter('[data-id="'+e[0].id+'"]').addClass("active")})}else if("bar"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.barChart(r,n)}else if("line"===o){var h=i(),c=[],d={label:e.find("thead .chart-label").text(),color:h,data:[]},l=e.find("tbody > tr").each(function(e){var i=t(this);c.push(i.find(".chart-label").text()),d.data.push(parseInt(i.find(".chart-value").text())),i.find(".chart-color-dot").css("background",h)}),r={labels:c,datasets:[d]};c.length&&(n.barValueSpacing=5),a=s.lineChart(r,n)}null!==a&&e.data("zui.chart",a)}})},t(".table-chart").tableChart();var s=function(i,n){var o=t(i);if(!o.data("initProgressPie")){o.data("initProgressPie",1);var s=o.is("canvas")?o:o.find("canvas"),a=t.extend({value:0,color:t.getThemeColor("primary")||"#006af1",backColor:t.getThemeColor("pale")||"#E9F2FB",doughnut:!0,doughnutSize:85,width:20,height:20,showTip:!1,name:"",tipTemplate:"<%=value%>%",animation:"auto",realValue:parseFloat(o.find(".progress-value").text())},n,o.data()),r=s.length;r||(s=t("").appendTo(o)),s.attr("width")!==e?a.width=s.attr("width"):s.attr("width",a.width),s.attr("height")!==e?a.height=s.attr("height"):s.attr("height",a.height),r||8!=t.zui.browser.ie||G_vmlCanvasManager.initElement(s[0]),"auto"===a.animation&&(a.animation=a.width>30),a.value=Math.max(0,Math.min(100,a.value)),o.addClass("progress-pie-"+a.width);var l=[{value:a.value,label:a.name,color:a.color,circleBeginEnd:!0},{value:100-a.value,label:"",color:a.backColor}];s[a.doughnut?"doughnutChart":"pieChart"](l,t.extend({segmentShowStroke:!1,animation:a.animation,showTooltips:a.showTip,tooltipTemplate:a.tipTemplate,percentageInnerCutout:a.doughnutSize,reverseDrawOrder:!0,animationEasing:"easeInOutQuart",onAnimationProgress:a.realValue?function(t){o.find(".progress-value").text(Math.floor(a.realValue*t))}:e,onAnimationComplete:a.realValue?function(t){o.find(".progress-value").text(a.realValue)}:e},a.chartOptions))}};jQuery.fn.progressPie=function(e){t(this).each(function(){var i=t(this);if(!i.closest(".hidden").length){var n=i.closest(".tab-pane");n.length&&!n.hasClass("active")?t('[data-toggle="tab"][data-target="#'+n.attr("id")+'"]').one("shown.zui.tab",function(){s(i,e)}):s(this,e)}})},t(function(){t(".table-chart").tableChart();var e=t(".progress-pie");e.length>100?setTimeout(function(){e.progressPie()},1e3):e.progressPie()})}(jQuery,void 0),function(t){jQuery.fn.sparkline=function(e){t(this).each(function(){var i=t(this),n=t.extend({values:i.attr("values"),width:i.width()-4,height:i.height()-4},i.data(),e),o=n.height,s=[],a=n.width,r=n.values.split(","),l=0;for(var h in r){var c=parseFloat(r[h]);NaN!=c&&(s.push(c),l=Math.max(c,l))}var d=(Math.min(l,30),Math.min(a,Math.max(10,s.length*a/30))),u=i.children("canvas");u.length||(i.append(''),u=i.children("canvas")),u.attr("width",d).attr("height",o);var p={labels:s,datasets:[{fillColor:t.getThemeColor("pale")||"rgba(0,0,255,0.05)",strokeColor:t.getThemeColor("primary")||"#0054EC",pointColor:t.getThemeColor("secondary")||"rgba(255,136,0,1)",pointStrokeColor:"#fff",data:s}]},f={animation:!0,scaleOverride:!0,scaleStepWidth:Math.ceil(l/10),scaleSteps:10,scaleStartValue:0,showScale:!1,showTooltips:!1,pointDot:!1,scaleShowGridLines:!1,datasetStrokeWidth:1},g=t(u).lineChart(p,f);i.data("sparklineChart",g)})},t(function(){t(".sparkline").sparkline()})}(jQuery),function(t){t(function(){t.fn.fixedDate=function(){return t(this).each(function(){var e=t(this).attr("autocomplete","off");"0000-00-00"==e.val()&&e.focus(function(){"0000-00-00"==e.val()&&e.val("").datetimepicker("update")}).blur(function(){""==e.val()&&e.val("0000-00-00")})})};var e={language:t("html").attr("lang"),weekStart:1,todayBtn:1,autoclose:1,todayHighlight:1,startView:2,forceParse:0,showMeridian:1,format:"yyyy-mm-dd hh:ii",startDate:"1970-1-1"},i=t.extend({},e,{minView:2,format:"yyyy-mm-dd"}),n=t.extend({},e,{startView:1,minView:0,maxView:1,format:"hh:ii"});t(".datepicker-wrapper").click(function(){t(this).find(".form-date, .form-datetime, .form-time").datetimepicker("show").focus()}),window.datepickerOptions=e,t.fn.datepicker=function(e){return this.datetimepicker(t.extend({},i,e))},t.fn.timepicker=function(e){return this.datetimepicker(t.extend({},n,e))},t.fn.datepickerAll=function(){return this.find(".form-datetime").fixedDate().datetimepicker(e),this.find(".form-date").fixedDate().datepicker(),this.find(".form-time").fixedDate().timepicker(),this},t("body").datepickerAll()})}(jQuery),function(t){var e=function(e,i){i=t.extend({idStart:0,idEnd:9,chosen:!0,datetimepicker:!0,colorPicker:!0,hotkeys:!0},i,e.data());var n=e.find(".template");!n.length&&i.template&&(n=t(i.template));var o=0,s=0,a=function(t){t.is("select.chosen")?t.next(".chosen-container").find("input").focus():t.focus()},r=function(t){var i=e.find("[data-ctrl-index]:focus,.chosen-container-active").first();if(i.length){if(i.is(".chosen-container-active")){if(i.hasClass("chosen-with-drop")&&("down"===t||"up"===t))return;i=i.prev("select.chosen")}var n=i.data("ctrlIndex"),r=i.closest("tr").data("row");"down"===t?r0?r-=1:r=s-1:"left"===t?n>0?n-=1:n=o-1:"right"===t&&(n").html(a);return r.attr("data-row",e).addClass(n.attr("class")).removeClass("template"),i.rowCreator&&i.rowCreator(r,e,i),o?o.after(r):h.append(r),c(r),r};t.extend(l,{createRow:u,template:d});for(var p=i.idStart;p<=i.idEnd;++p)u(p)}else c(e);e.on("click",".btn-copy",function(){var e=t(this),i=t(e.data("copyFrom")).val(),n=t(e.data("copyTo")).val(i).addClass("highlight");setTimeout(function(){n.removeClass("highlight")},2e3)}),i.hotkeys&&t(document).on("keydown",function(t){var e={"Ctrl+#37":"left","Ctrl+#39":"right","#38":"up","#40":"down","Ctrl+#38":"up","Ctrl+#40":"down"},i=[];t.ctrlKey&&i.push("Ctrl"),i.push("#"+t.keyCode);var n=e[i.join("+")];n&&(r(n),t.ctrlKey&&(t.stopPropagation(),t.preventDefault()))}),e.data("zui.batchActionForm",l)};t.fn.batchActionForm=function(i){return this.each(function(){e(t(this),i)})}}(jQuery),function(t,e){"use strict";var i="zui.table",n={zh_cn:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},zh_tw:{selectedItems:"已选择 {0} 项",attrTotal:"{0}总计 {1}"},en:{selectedItems:"Seleted {0} items",attrTotal:"{0} total {1}"}},o=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),s=function(e,o){var a=this;a.name=i;var r=a.$=t(e);o=a.options=t.extend({},s.DEFAULTS,this.$.data(),o);var l=o.lang||"zh_cn";a.lang=t.isPlainObject(l)?t.extend(!0,{},n[l.lang||t.zui.clientLang()],l):n[l],r.attr("id")||(r.attr("id","table-"+t.zui.uuid()),o.hot&&console.warn("ZUI: table hot replace id not defined, the element id attribute should be set.")),r.attr("data-ride")||r.attr("data-ride","table"),a.getTable().find("thead>tr>th").each(function(){var e=t(this);if(!e.attr("title")){var i=t.trim(e.find("a").text()||e.text()||"");i.length&&e.attr("title",i)}}),o.checkable&&(r.on("click",".check-all",function(){a.checkAll(!t(this).hasClass("checked"))}).on("click","tbody>tr",function(e){t(e.target).closest('.btn,a,.not-check,.form-control,input[type="text"],.chosen-container').length||a.checkRow(t(this))}).on("click",'tbody input[type="checkbox"],tbody label[for]',function(e){e.stopPropagation();var i=t(this);i.is("label")&&(i=i.closest(".checkbox-primary").find('input[type="checkbox"]')),a.checkRow(i.closest("tr"),i.is(":checked"))}),o.selectable&&r.selectable(t.extend({},{selector:a.isDataTable?".fixed-left tbody>tr":"tbody>tr",selectClass:"",trigger:".c-id",clickBehavior:"multi",listenClick:!1,select:function(e){a.checkRow(e.target,!0),t.cookie("ajax_dragSelected")||(t.cookie("ajax_dragSelected","on",{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("dragSelected"))},unselect:function(t){a.checkRow(t.target,!1)},rangeStyle:{border:"1px solid #006af1",backgroundColor:"rgba(50,128,252,0.2)",borderRadius:"2px"}},t.isPlainObject(o.selectable)?o.selectable:null)));var h=a.$form=r.is("form")?r:r.find("form");h.length&&(o.ajaxForm?h.ajaxForm(t.isPlainObject(o.ajaxForm)?o.ajaxForm:null):h.on("click","[data-form-action]",function(){h.attr("action",t(this).data("formAction")).submit()})),(o.fixFooter||o.fixHeader)&&(a.pageFooterHeight=t("#footer").outerHeight(),a.updateFixUI(),t(window).on("scroll resize",function(){a.updateFixUI()}).on("sidebar.toggle",function(){setTimeout(function(){a.updateFixUI()},200)})),o.group&&(r.on("click",".group-toggle",function(){a.toggleRowGroup(t(this).closest("tr").data("id"))}),t(document).on("click",".group-collapse-all",function(){a.toggleGroups(!1)}).on("click",".group-expand-all",function(){a.toggleGroups(!0)})),a.defaultStatistic=r.find(".table-statistic").html(),a.updateStatistic(),a.initModals(),a.checkItems={},a.updateCheckUI()};s.prototype.reload=function(e){var i=this,n=i.options,o=n.replaceId;if(!o)return e&&e();"self"===o&&(o=i.$.attr("id"));var s=t("
        ");i.$.addClass("load-indicator loading"),s.load(window.location.href+" #"+o,function(){i.$.empty().html(s.children().html()).removeClass("load-indicator loading"),i.$.trigger("beforeTableReload"),i.updateStatistic(),i.initModals(),i.$.datepickerAll();var o=i.$.find("tbody>tr"),a=!1;t.each(i.checkItems,function(t,e){e&&(i.checkRow(o.filter('[data-id="'+t+'"]'),!0,!0),a=!0)}),a&&i.updateCheckUI(),i.$.trigger("tableReload");var r=t("#mainMenu>.btn-toolbar>.btn-active-text>.label");r.length&&r.text(i.getTable().find("tbody:first>tr:not(.table-children)").length),i.$.find('[data-ride="pager"]').pager(),e&&e(),n.afterReload&&n.afterReload()})},s.prototype.initModals=function(){var e=this,i=e.options,n=e.$.find(i.iframeModalTrigger);if(n.length){var o={type:"iframe",onHide:i.replaceId?function(){var n=t.cookie("selfClose");(1==n||i.hot)&&(t("#triggerModal").data("cancel-reload",1),e.reload(function(){t.cookie("selfClose",0)}))}:null};n.modalTrigger(o)}},s.prototype.getTable=function(){var t=this.$;if(this.isDataTable)return t.find("div.datatable");var e=t.is("table")?t:t.find("table:not(.fixed-header-copy)").first();return e.is(".datatable")&&(this.isDataTable=!0,e=t.find("div.datatable")),e},s.prototype.toggleGroups=function(e){var i=this,n={};i.$.find("tbody>tr").each(function(){var o=t(this).closest("tr").data("id");n[o]||i.toggleRowGroup(o,e)})},s.prototype.toggleRowGroup=function(i,n){var o=this.$.find('tbody>tr[data-id="'+i+'"]'),s=o.filter(".group-summary"),a=n===e?!s.hasClass("hidden"):!!n;o.not(".group-summary").toggleClass("hidden",!a),s.toggleClass("hidden",a),t("body").toggleClass("table-group-collapsed",!this.$.find("tbody>tr.group-summary.hidden").length)},s.prototype.updateStatistic=function(){var i=this,n=i.$.find(".table-statistic");if(n.length){if(i.defaultStatistic===e&&(i.defaultStatistic=n.html()),i.options.statisticCreator)return void n.html(i.options.statisticCreator(i)||i.defaultStatistic);var o=i.statisticCols;if(!o&&o!==!1){o={};var s=!1;i.getTable().find("thead th").each(function(e){var i=t(this),n=i.data("statistic");n&&(s=!0,o[e]={format:n,name:i.text()})}),i.statisticCols=!!s&&o}var a=0;o&&t.each(o,function(t){o[t].total=0,o[t].checkedTotal=0}),i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr").each(function(){var e=t(this),i=e.hasClass("checked"),n=e.children("td");i&&a++,o&&t.each(o,function(t){var e=parseFloat(n.eq(t).text());isNaN(e)&&(e=0),o[t].total+=e,i&&(o[t].checkedTotal+=e)})});var r=[];if(a)r.push(i.lang.selectedItems.format(a));else if(i.defaultStatistic)return void n.html(i.defaultStatistic);o&&t.each(o,function(t){var e=o[t],n=e[a?"checkedTotal":"total"];e.format&&(n=e.format.format(n)),r.push(i.lang.attrTotal.format(e.name,n))}),n.html(r.join(", "))}},s.prototype.updateFixUI=function(e){var i=this,n=(new Date).getTime();if(!e&&(i.lastUpdateCall&&clearTimeout(i.lastUpdateCall),!i.lastUpdateTime||n-i.lastUpdateTime<100))return void(i.lastUpdateCall=setTimeout(function(){i.updateFixUI(!0)},30));if(i.lastUpdateTime=n,i.lastUpdateCall&&(clearTimeout(i.lastUpdateCall),i.lastUpdateCall=null),o){var s=i.getTable();if(s.parent().is(".table-responsive")){var a=s.find("thead"),r=0;a.find("th").each(function(){r+=t(this).outerWidth()}),s.css("min-width",r)}}i.options.fixHeader&&!i.isDataTable&&i.fixHeader(),i.options.fixFooter&&i.fixFooter()},s.prototype.fixHeader=function(){var e=this,i=e.getTable(),n=i.find("thead"),o=n[0].getBoundingClientRect(),s=e.options.fixFooter,a=t.isFunction(s)?s(o,n):o.top<("number"==typeof s?s:-5),r=e.$.find(".fix-table-copy-wrapper"),l=i.parent(),h=l.is(".table-responsive");if(a){if(r.length||(r=t('
        ').append(t('
        ').addClass(i.attr("class")).append(n.clone())).insertAfter(i)),h){var c=l[0].getBoundingClientRect();r.css({left:c.left,width:l.width()}),r.find(".fixed-header-copy").css({left:o.left-c.left,position:"relative",minWidth:i.width()}),l.data("fixHeaderScroll")||l.data("fixHeaderScroll",1).on("scroll",function(){e.fixHeader()})}else r.css({left:o.left,width:o.width});var d=r.find("th");n.find("th").each(function(e){d.eq(e).css("width",t(this).outerWidth())})}else r.remove()},s.prototype.fixFooter=function(){var e,i=this,n=i.getTable(),o=i.$.find(".table-footer");if(i.isDataTable)e=n[0].getBoundingClientRect();else{var s=n.find("tbody");if(!s.length)return;e=s[0].getBoundingClientRect(),e=s[0].getBoundingClientRect()}var a=i.options.fixFooter;o.toggleClass("fixed-footer",!!r);var r=t.isFunction(a)?a(e,o):e.bottom>window.innerHeight-50-("number"==typeof a?a:i.pageFooterHeight||5);o.toggleClass("fixed-footer",!!r),n.toggleClass("with-footer-fixed",!!r),n.trigger("fixFooter",r);var l=t("body"),h=l.hasClass("body-modal");if(r){var c=n.parent(),d=c.is(".table-responsive");o.css({bottom:i.pageFooterHeight||0,left:d?c[0].getBoundingClientRect().left:e.left,width:d?c.width():e.width}),h&&l.css("padding-bottom",40)}else o.css({width:"",left:0,bottom:0}),h&&l.css("padding-bottom",0)},s.prototype.checkAll=function(e){var i=this,n=i.$.find(i.isDataTable?".fixed-left tbody>tr":"tbody>tr");n.each(function(){i.checkRow(t(this),e,!0)}),i.updateCheckUI()},s.prototype.checkRow=function(t,i,n){var o=this;o.isDataTable&&!t.is(".datatable-row-left")&&(t=o.getTable().find('.datatable-row-left[data-index="'+t.data("index")+'"]'));var s=t.find('input[type="checkbox"]');s.length&&(i===e&&(i=!s.is(":checked")),o.isDataTable?o.getTable().find('.datatable-row[data-index="'+t.data("index")+'"]').toggleClass("checked",i):t.toggleClass("checked",i),this.checkItems[t.data("id")]=i,s.prop("checked",i).trigger("change"),n||o.updateCheckUI())},s.prototype.updateCheckUI=function(){var e=this,i=e.getTable(),n=i.find(e.isDataTable?".fixed-left tbody>tr":"tbody>tr").not(".group-summary"),o=!1,s=null,a=0,r=!1,l=n.length;n.each(function(n){var h=t(this),c=h.find('input[type="checkbox"]');r=c.is(":checked");var d=e.isDataTable?i.find('.datatable-row[data-index="'+h.data("index")+'"]'):h;d.toggleClass("checked",r),d.toggleClass("row-check-begin",r&&!o),s&&s.toggleClass("row-check-end",!r&&o),r&&(a+=1),s=d,o=r,l===n+1&&d.toggleClass("row-check-end",r)}),e.$.toggleClass("has-row-checked",a>0).find(".check-all").toggleClass("checked",!(!l||a!==l)),e.updateStatistic(),e.options.onCheckChange&&e.options.onCheckChange()},s.DEFAULTS={checkable:!0,ajaxForm:!1,selectable:!0,fixHeader:!0,fixFooter:!0,iframeWidth:900,replaceId:"self",hot:!1,iframeModalTrigger:".iframe"},t.fn.table=function(e){return this.each(function(){var n=t(this),o=n.data(i),a="object"==typeof e&&e;o||n.data(i,o=new s(this,a)),"string"==typeof e&&o[e]()})},s.NAME=i,t.fn.table.Constructor=s,t(function(){t('[data-ride="table"]').table()})}(jQuery,void 0),function(t,e,i){t.fn._ajaxForm=t.fn.ajaxForm;var n={timeout:e.config?e.config.timeout:0,dataType:"json",method:"post"},o="";t.fn.enableForm=function(e,n,o){return e===i&&(e=!0),this.each(function(){var i=t(this);n||i.find('[type="submit"]').attr("disabled",e?null:"disabled"),!o&&i.hasClass("load-indicator")&&i.toggleClass("loading",!e),i.toggleClass("form-disabled",!e)})},t.enableForm=function(e,i,n){e===!1?t("form").enableForm(e,i,n):t("form.form-disabled").enableForm(!0,i,n)};var s=function(e,i,n){"string"==typeof i&&(n=i,i=null),n=n||"show",t.zui.messager?t.zui.messager[n](e,i):alert(e)};t.ajaxForm=function(a,r){var l=t(a);if(l.length>1)return l.each(function(){t.ajaxForm(this,r)});t.isFunction(r)&&(r={complete:r}),r=t.extend({},n,l.data(),r);var h=r.beforeSubmit,c=r.error,d=r.success,u=r.finish;delete r.finish,delete r.success,delete r.onError,delete r.beforeSubmit,r=t.extend({beforeSubmit:function(n,s,a){if(l.enableForm(!1),(h&&h(n,s,a))!==!1){var r={},c=s.find('[type="file"]');r.fileapi=c.length&&c[0].files!==i,r.formdata=e.FormData!==i;var d=r.fileapi&&s.find('input[type="file"]:enabled').filter(function(){return""!==t(this).val()}),u=d.length,p="multipart/form-data",f=s.attr("enctype")==p||s.attr("encoding")==p,g=r.fileapi&&r.formdata,m=u&&!g||f&&!r.formdata;m&&(""==o&&(o=a.url),a.url!=o&&(a.url=o),a.url=a.url.indexOf("&")>=0?a.url+"&HTTP_X_REQUESTED_WITH=XMLHttpRequest":a.url+"?HTTP_X_REQUESTED_WITH=XMLHttpRequest"); +}},success:function(i,n,o){if((d&&d(i,n,o,l))!==!1){try{"string"==typeof i&&(i=JSON.parse(i))}catch(a){}if(null===i||"object"!=typeof i)return i?alert(i):s("No response.","danger");var h=r.responser?t(r.responser):l.find(".form-responser");h.length||(h=t("#responser"));var c=i.message,p=function(){var n=i.callback;if(n){var o=n.indexOf("("),s=(o>0?n.substr(0,o):n).split("."),a=e,r=s[0];s.length>1&&(r=s[1],"top"===s[0]?a=e.top:"parent"===s[0]&&(a=e.parent));var h=a[r];if(t.isFunction(h)){var c=[];return o>0&&")"==n[n.length-1]&&(c=t.parseJSON("["+n.substring(o+1,n.length-1)+"]")),c.push(i),h.apply(l,c)}}};if("success"===i.result){if(l.enableForm(!0,1),c){var f=l.find('[type="submit"]'),g=!1;f.length&&(f.popover({container:"body",trigger:"manual",content:c,tipClass:"popover-in-modal popover-success popover-form-result",placement:i.placement||r.popoverPlacement||"right"}).popover("show"),setTimeout(function(){f.popover("destroy")},r.popoverTime||2e3),g=!0),h.length&&(h.html(''+c+"").show().delay(3e3).fadeOut(100),g=!0),g||s(c,"success")}if(u)return u(i,!0,l);if((r.closeModal||i.closeModal)&&setTimeout(t.zui.closeModal,r.closeModalTime||2e3),p()===!1)return;var m=r.locate||i.locate;if(m)if("loadInModal"==m){var v=t(".modal");setTimeout(function(){v.load(v.attr("ref"),function(){t(this).find(".modal-dialog").css("width",t(this).data("width")),t.zui.ajustModalPosition()})},1e3)}else if("parent"===m||"top"===m)e[m]&&setTimeout(function(){e[m].location.reload()},1200);else{var y="reload"==m?e.location.href:m;setTimeout(function(){e.location.href=y},1200)}var b=r.ajaxReload||i.ajaxReload;if(b){var w=t(b);w.length&&w.load(e.location.href+" "+b,function(){w.find('[data-toggle="modal"]').modalTrigger()})}}else{if(l.enableForm(),"string"==typeof c)h.length?h.html(''+c+"").show().delay(3e3).fadeOut(100):s(c,"danger");else if("object"==typeof c){var x=!1,C=[];t.each(c,function(e,i){var n=t.isArray(i)?i.join(";"):i,o=t("#"+e);if(!o.length)return void C.push(n);var s=e+"Label",a=t("#"+s);if(!a.length){var r=o.closest(".input-group").length,l=o.closest("td").length;a=t('
        ').appendTo(l?o.closest("td"):r?o.closest(".input-group").parent():o.parent())}a.empty().append(n),o.addClass("has-error");var h=function(){var e=t("#"+s);if(e.length)return e.remove(),o.removeClass("has-error"),!0};o.on("change input mousedown",h);var c=t("#"+e+"_chosen");c.length&&c.find(".chosen-single,.chosen-choices").addClass("has-error").on("mousedown",function(){h()===!0&&t(this).removeClass("has-error")}),x||(o.focus(),x=!0)}),C.length&&s(C.join(";"),"danger")}if(u)return u(i,!1,l);if(p()===!1)return}}},error:function(t,i,n){if((c&&c(t,i,n,l))!==!1){l.enableForm();var o="timeout"==i||"error"==i?e.lang?e.lang.timeout:i:t.responseText+i+n;s(o,"danger")}}},r),l._ajaxForm(r).data("zui.ajaxform",!0),l.on("click","[data-form-action]",function(){l.attr("action",t(this).data("formAction")).submit()})},t.fn.ajaxForm=function(e){return this.each(function(){t.ajaxForm(this,e)})},t.fn.setInputRequired=function(){return this.each(function(){var e=t(this),i=e.parent();i.is(".input-control,td")?i.addClass("required"):e.is(".chosen")?e.attr("required",null).next(".chosen-container").addClass("required"):i.addClass("required"),e.attr("required",null);var n=i.closest(".input-group");n.length&&1===n.find(".required,input[required],select[required]").length&&n.addClass("required")})},t(function(){t('.form-ajax,form[data-type="ajax"]').ajaxForm(),setTimeout(function(){var i=e.config.requiredFields,n=t("form");i&&(i=i.split(",")),i&&i.length&&t.each(i,function(t,e){n.find("#"+e).attr("required","required")}),n.find("input[required],select[required],textarea[required]").setInputRequired()},400),t("#hiddenwin"),t('form[target="hiddenwin"]').on("submit",function(){var e=t(this);e.data("zui.ajaxform")||e.enableForm(!1).data("disabledTime",(new Date).getTime())}).on("click",function(){var e=t(this),i=e.data("disabledTime");i&&(new Date).getTime()-i>1e4&&e.enableForm(!0).data("disabledTime",null)})})}(jQuery,window,void 0),function(t){"use strict";var e="zui.searchList",i=function(t,e){if(t&&t.length)for(var i=0;i
        ').append(a)),i.$menu.append(a),i.$menu.removeClass("loading"),i.isLoaded=!0,e&&e(!0)},error:function(){i.$menu.removeClass("loading").append('
        '+(n.errorText||window.lang&&window.lang.timeout)+"
        "),e&&e(!1)}},n.ajax))},n.prototype.scrollTo=function(t){t.length&&t[0].scrollIntoView({behavior:"smooth"})},n.prototype.getItems=function(){return this.$.find(this.options.selector).addClass("search-list-item")},n.prototype.getActiveItem=function(){return this.getItems().filter(".active:first")},n.prototype.search=function(e){var n=this,o=void 0===e||null===e||""===e;n.$.toggleClass("has-search-text",!o);var s=n.getItems().removeClass("active");if(o)s.removeClass("hidden");else{var a=t.trim(e).split(" ");s.each(function(){var e=t(this),n=e.text()+" "+(e.data("key")||e.data("filter"));e.toggleClass("hidden",!i(a,n))})}n.scrollTo(s.not(".hidden").first().addClass("active"))},n.DEFAULTS={selector:".list-group a:not(.not-list-item)",searchBox:".search-box",onSelectItem:null},t.fn.searchList=function(i){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof i&&i;s||o.data(e,s=new n(this,a)),"string"==typeof i&&s[i]()})},n.NAME=e,t.fn.searchList.Constructor=n,t(function(){t('[data-ride="searchList"]').searchList()})}(jQuery),function(t){"use strict";var e="zui.labelSelector",i=function(n,o){var s=this;s.name=e,s.$=t(n),o=s.options=t.extend({},i.DEFAULTS,this.$.data(),o),s.$.hide(),s.update()};i.prototype.select=function(t){t+="",this.$wrapper.find(".label.active").removeClass("active"),this.$wrapper.find('.label[data-value="'+t+'"]').addClass("active"),this.$.val(t).trigger("change")},i.prototype.update=function(){var e=this,i=e.options,n=e.$wrapper;if(!n){if(i.wrapper)n=t(i.wrapper);else{var o=e.$.next();n=o.hasClass(".label-selector")?o:t('
        ')}n.parent().length||e.$.after(n),e.$wrapper=n,n.on("click",".label",function(i){var n=e.$.val(),o=t(this).data("value");e.hasEmptyValue!==!1&&o==n&&(o=e.hasEmptyValue),e.select(o),i.preventDefault()})}n.empty();var s=e.$.val();e.hasEmptyValue=!1,e.$.children("option").each(function(){var e=t(this),o={label:e.text(),value:e.val()},a=""===o.value||"0"===o.value,r=t(i.labelTemplate||'');i.labelClass&&!a&&r.addClass(i.labelClass),i.labelCreator?r=i.labelCreator(r):(r.data("option",o).attr("data-value",o.value),a&&!o.label?r.addClass("empty").append(''):r.text(o.label).toggleClass("active",s===o.value)),n.append(r)})},i.DEFAULTS={},t.fn.labelSelector=function(n){return this.each(function(){var o=t(this),s=o.data(e),a="object"==typeof n&&n;s||o.data(e,s=new i(this,a)),"string"==typeof n&&s[n]()})},i.NAME=e,t.fn.labelSelector.Constructor=i,t(function(){t('[data-provide="labelSelector"]').labelSelector()})}(jQuery),function(t){"use strict";var e="zui.fileInput",i=t.BYTE_UNITS={B:1,KB:1024,MB:1048576,GB:1073741824,TB:1099511627776},n=t.formatBytes=function(t,e,n){return void 0===e&&(e=2),n||(n=ta.fileMaxSize&&(h.val(""),(window.bootbox||window).alert(a.fileSizeError.format(n(a.fileMaxSize)))),r.update()}),r.update()};s.prototype.getFile=function(){var t=this.$input.prop("files");return t&&t[0]},s.prototype.update=function(){var t=this,e=t.$,i=t.getFile(),o=!i;e.toggleClass("normal",!o).toggleClass("empty",o),i?(t.oldName=i.name,e.find(".file-title").text(i.name).attr("title",i.name),e.find(".file-size").text(n(i.size)),e.find(".file-editbox").val(i.name).attr("size",i.name.length),t.options.onSelect&&t.options.onSelect(i,t)):e.find(".file-editbox").val("")},s.DEFAULTS={fileMaxSize:0,fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInput=function(i){return this.each(function(){var n=t(this),o=n.data(e),a="object"==typeof i&&i;o||n.data(e,o=new s(this,a)),"string"==typeof i&&o[i]()})},s.NAME=e,t.fn.fileInput.Constructor=s,t(function(){t('[data-provide="fileInput"]').fileInput()});var a="zui.fileInputList",r=function(e,i){var n=this;n.name=a;var o=n.$=t(e);i=n.options=t.extend({},r.DEFAULTS,this.$.data(),i),n.$template=o.find(".file-input").detach(),n.add()};r.prototype.add=function(){var t=this,e=t.options,i=t.$template.clone();"before"===e.appendWay?t.$.prepend(i):t.$.append(i),i.fileInput({fileMaxSize:e.eachFileMaxSize,fileSizeError:e.fileSizeError,onDelete:function(e){e.$.remove(),t.options.onDelete&&t.options.onDelete(e,t)},onSelect:function(e,i){t.add(),t.options.onSelect&&t.options.onSelect(e,i,t)}})},r.DEFAULTS={fileMaxSize:0,eachFileMaxSize:0,appendWay:"after",fileSizeError:"无法上传大于 {0} 的文件。"},t.fn.fileInputList=function(e){return this.each(function(){var i=t(this),n=i.data(a),o="object"==typeof e&&e;n||i.data(a,n=new r(this,o)),"string"==typeof e&&n[e]()})},r.NAME=a,t.fn.fileInputList.Constructor=r,t(function(){t('[data-provide="fileInputList"]').fileInputList()})}(jQuery),function(t){window.config||(window.config={}),t.createLink=window.createLink=function(t,e,n,o,s){if(o||(o=config.defaultView),s||(s=!1),n)for(n=n.split("&"),i=0;i'+d+"")}}t.val()||(time=e(s.format("hh:mm")),time=time-time%10+10,t.val(n(time)))};t.fn.timeSpanControl=function(i){return this.each(function(){var a=t(this),r=t.extend({},i,a.data()),l=a.find('[name="begin"],.control-time-begin'),h=a.find('[name="end"],.control-time-end'),c=function(){var t=l.val();if(a.find(".hide-empty-begin").toggleClass("hide",!t),t){var i=n(e(t)+30);h.find('option[value="'+i+'"]').length&&h.val(i),r.onChange&&r.onChange(h,i)}};if(a.data("timeSpanControlInit")){if(r.begin){var d=o(r.begin).format("hh:mm");l.find('option[value="'+d+'"]').length&&l.val(d),r.onChange&&r.onChange(l,d)}if(r.end){var u=o(r.end).format("hh:mm");h.find('option[value="'+u+'"]').length&&h.val(u),r.onChange&&r.onChange(h,u)}}else l.on("change",c),s(l,r.begin),s(h,r.end),a.data("timeSpanControlInit",!0);r.end||c()})},t.timeSpanControl={convertTimeToNum:e,convertNumToTime:n,initTimeSelect:s,createTime:o};var a=t.setSearchType=function(e,i){var n=t("#searchType");e||(e=n.val()),e=e||"bug",n.val(e);var o=t("#searchTypeMenu");o.find("li.selected").removeClass("selected");var s=o.find('a[data-value="'+e+'"]'),a=s.text();s.parent().addClass("selected"),t("#searchTypeName").text(a),i||t("#searchInput").focus()};t.gotoObject=function(e,i){e||(e=t("#searchType").val()),i||(i=t("#searchInput").val()),i&&e&&(window.location.href=t.createLink(e,"testsuite"===e?"library":"view","id="+i))},t(function(){a(null,!0),t(document).on("keydown",function(e){e.ctrlKey&&71===e.keyCode&&(t("#searchInput").val("").focus(),e.stopPropagation(),e.preventDefault())})}),t.removeAnchor=window.removeAnchor=function(t){var e=t.lastIndexOf("#");return e>-1?t.substr(0,e):t},t.refreshPage=function(){location.href=removeAnchor(location.href)},t.selectLang=window.selectLang=function(e){t.cookie("lang",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectLang"),t.refreshPage()},t.selectTheme=window.selectTheme=function(e){t.cookie("theme",e,{expires:config.cookieLife,path:config.webRoot}),t.ajaxSendScore("selectTheme"),t.refreshPage()},t.chosenDefaultOptions={middle_highlight:!0,disable_search_threshold:1,compact_search:!0,allow_single_deselect:!0,placeholder_text_single:" ",placeholder_text_multiple:" ",search_contains:!0,drop_direction:function(){var e=t(this.container).closest(".table-responsive:not(.scroll-none)");if(e.length){if(this.drop_directionFixed)return this.drop_directionFixed;var i="down",n=this.container.find(".chosen-drop"),o=this.container.position(),s=n.outerHeight();return o.top>=s&&o.top+s{page}/{totalPage}
      ',"next_icon","last_icon"],onPageChange:function(e,i){e.recPerPage!==i.recPerPage&&t.cookie(this.options.pageCookie,e.recPerPage,{expires:config.cookieLife,path:config.webRoot}),e.recPerPage!==i.recPerPage&&(window.location.href=this.createLink())}}),t.zui.Messager.DEFAULTS.cssClass="messagger-zt",t.fn.reverseOrder=function(){return this.each(function(){var e=t(this);e.prependTo(e.parent())})};var r=function(e,i){var n=t(e);i=t.extend({},n.data(),i);var o=n.find(".histories-list"),s=!0,a=!1;n.on("click",".btn-reverse",function(){o.children("li").reverseOrder(),s=!s,t(this).find(".icon").toggleClass("icon-arrow-up",s).toggleClass("icon-arrow-down",!s);var e="#lastComment",i=t(e);i.length&&window.KindEditor&&(window.KindEditor.remove(e),i.kindeditor())}).on("click",".btn-expand-all",function(){var e=t(this).find(".icon");a=!a,e.toggleClass("icon-plus",!a).toggleClass("icon-minus",a),o.children("li").toggleClass("show-changes",a)}).on("click",".btn-expand",function(){t(this).closest("li").toggleClass("show-changes")}).on("click",".btn-strip",function(){var e=t(this),n=e.find(".icon"),o=n.hasClass("icon-code");n.toggleClass("icon-code",!o).toggleClass("icon-text",o),e.attr("title",o?i.original:i.textdiff),e.closest("li").toggleClass("show-original",o)}),o.find(".btn-strip").attr("title",i.original);var r=n.find(".modal-comment").modal({show:!1}).on("shown.zui.modal",function(){var t=r.find("#comment");t.length&&(t.focus(),window.editor&&window.editor.comment&&window.editor.comment.focus())}).on("show.zui.modal",function(){var e=r.find("#comment");e.length&&!e.data("keditor")&&t.fn.kindeditor&&e.kindeditor()});n.on("click",".btn-comment",function(t){r.modal("toggle"),t.preventDefault()}).on("click",".btn-edit-comment,.btn-hide-form",function(){t(this).closest("li").toggleClass("show-form")});var l=n.find(".comment-edit-form");l.ajaxForm({success:function(t,e,i,n){setTimeout(function(){l.closest("li").removeClass("show-form")},2e3)}})};t.fn.histories=function(t){return this.each(function(){r(this,t)})},t(function(){t(".histories").histories()});var l=0,h=0;t.toggleSidebar=function(e){var i=t("#sidebar");if(i.length){var n=t("main");if(void 0===e)e=n.hasClass("hide-sidebar");else if(e&&!n.hasClass("hide-sidebar"))return;n.toggleClass("hide-sidebar",!e),clearTimeout(l),t.zui.store.set(h,e);var o=i.children(".cell"),s={overflow:"visible",maxHeight:"initial"};e?(i.addClass("showing"),l=setTimeout(function(){i.removeClass("showing"),i.trigger("sidebar.toggle",e)},210)):(i.trigger("sidebar.toggle",e),t(window).width()<1900&&(s={overflow:"hidden",maxHeight:t(window).height()-45})),o.css(s)}};var c=t.initSidebar=function(){var e=t("#sidebar");if(e.length){if(e.data("init"))return!0;h="sidebar:"+(e.data("id")||config.currentModule+"/"+config.currentMethod);var i=t("main");i.on("click",".sidebar-toggle",function(){t.toggleSidebar(i.hasClass("hide-sidebar"))});var n=t.zui.store.get(h,e.data("hide")!==!1);n===!1&&e.addClass("no-animate"),t.toggleSidebar(n),n===!1&&setTimeout(function(){e.removeClass("no-animate")},500);var o=function(){var i=e.find(".sidebar-toggle");if(i.length){var n=i[0].getBoundingClientRect(),o=t(window).height(),s=Math.max(0,Math.floor(Math.min(o-40,n.top+n.height)-Math.max(n.top,0))/2)+(n.top<0?0-n.top:0);i.find(".icon").css("top",s)}};return o(),e.on("sidebar.toggle",o),t(window).on("resize",o).on("scroll",o),e.data("init",1),!0}};c()||t(c),t.toggleQueryBox=function(e,i){var n=t(i||"#queryBox");n.length&&(void 0===e&&(e=!n.hasClass("show")),n.toggleClass("show",!!e),n.data("init")||(n.addClass("load-indicator loading").data("init",1),t.get(t.createLink("search","buildForm"),function(t){n.html(t).removeClass("loading")})),t(".querybox-toggle").toggleClass("querybox-opened",e))},t(function(){var e=t("#queryBox");e.length&&(t(document).on("click",".querybox-toggle",function(){t.toggleQueryBox()}),e.hasClass("show")&&t.toggleQueryBox(!0))}),t.extend(t.fn.colorPicker.Constructor.DEFAULTS,{colors:["#3DA7F5","#75C941","#2DBDB2","#797EC9","#FFAF38","#FF4E3E"]}),window.setCheckedCookie=function(){var e=[],i=t('#mainContent .main-table tbody>tr input[type="checkbox"]:checked');i.each(function(){var i=parseInt(t(this).val(),10);NaN!==i&&e.push(i)}),t.cookie("checkedItem",e.join(","),{expires:config.cookieLife,path:config.webRoot})},t.extend(t.fn.modal.bs.Constructor.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:100}),t.extend(t.zui.ModalTrigger.DEFAULTS,{scrollInside:!0,backdrop:"static",headerHeight:40}),t.fn.initIframeModal=function(){return this.each(function(){var e=t(this);if(!e.parents('[data-ride="table"],.skip-iframe-modal').length){var i={type:"iframe"};e.hasClass("export")&&t.extend(i,{width:800,shown:setCheckedCookie},e.data()),e.modalTrigger(i)}})},t(function(){t("a.iframe,.export").initIframeModal()});var d=function(){var e,i,n=t(this),o=t.extend({limitSize:40,suffix:"…"},n.data()),s=n.text();if(s.length>o.limitSize){e=s,i=s.substr(0,o.limitSize)+o.suffix,n.text(i).addClass("limit-text-on");var a=o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle");a.text(a.data("textExpand")),a.on("click",function(){var t=n.toggleClass("limit-text-on").hasClass("limit-text-on");n.text(t?i:e),a.text(a.data(t?"textExpand":"textCollapse"))})}else(o.toggleBtn?t(o.toggleBtn):n.next(".text-limit-toggle")).hide()};t.fn.textLimit=function(){return this.each(d)},t(function(){t(".text-limit").textLimit()}),t.fixedTableHead=window.fixedTableHead=function(e,i){var n=t(e);if(n.is("table")||(n=n.find("table")),n.length){var o=t(i||window),s=null,a=function(){var e=n.children("thead"),i=e[0].getBoundingClientRect(),o=n.next(".fixed-head-table");if(i.top<0){var a=e.width();if(o.length){if(s!==a){s=a;var r=o.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())})}}else{var o=t("
      ").addClass(n.attr("class")),l=e.clone(),r=l.find("th");e.find("th").each(function(e){r.eq(e).width(t(this).width())}),o.append(l).insertAfter(n)}o.css({left:i.left,width:i.width}).show()}else o.hide()};o.on("scroll",a).on("resize",a),a()}},t(document).on("click","tr[data-url]",function(){var e=t(this),i=e.data("href")||e.data("url");i&&(window.location.href=i)}),"yes"===config.onlybody&&self===parent&&(window.location.href=window.location.href.replace("?onlybody=yes","").replace("&onlybody=yes","")),t(function(){t("body").addClass("m-{currentModule}-{currentMethod}".format(config))});var u,p,f,g,m,v=function(){u||(u=t("#subNavbar"),p=t("#pageNav"),f=t("#pageActions"),g=u.children(".nav"),m=g.outerWidth());var e=u.outerWidth(),i=p.outerWidth()||0,n=f.outerWidth()||0;if(i=i?i+15:0,n=n?n+15:0,!i&&!n)return void g.css({maxWidth:null,left:null,position:"static"});var o=Math.max(300,e-i-n),s=Math.min(o,m),a=(e-s)/2,r=i&&a.btn-toolbar");if(e.length){var i,n,o=!1,s=null,a=e.children(),r=a.length;for(a.each(function(e){i=t(this),n=i.is(".divider"),n&&!s&&i.hide(),o||n||(o=!0),s=n?null:i,!n||e!==r-1&&0!==e||i.hide()});i.length&&i.is(".divider");)i=i.hide().prev();o||e.hide()}};t(function(){t(".input-group,.btn-group").fixInputGroup(),k()}),window.holders&&t.each(window.holders,function(e){var i=t("#"+e);i.length&&i.is("input")&&i.attr("placeholder",window.holders[e])});var T=function(){var e,i="en"==config.clientLang?"http://www.zentao.pm/book/zentaomanual/8.html?fullScreen=zentao":"http://www.zentao.net/book/zentaopmshelp.html?fullScreen=zentao",n=t("#navbar > .nav").first(),o=1e4,s=function(){clearTimeout(e),t("#helpContent").removeClass("show-error")},a=t.openHelp=function(){s(),n.children("li.active:not(#helpMenuItem)").removeClass("active").addClass("close-help-tab"),t("#helpMenuItem").addClass("active");var a=t("#helpContent");if(a.length){if(t("body").hasClass("show-help-tab"))return void t("#helpIframe").get(0).contentWindow.location.replace(i)}else{a=t('

      '+lang.timeout+'

      '+i+'

      '),t("#header").after(a);var r=t("#helpIframe").get(0);e=setTimeout(function(){t("#helpContent").addClass("show-error")},o),r.onload=r.onreadystatechange=function(){this.readyState&&"complete"!=this.readyState||s()}}t("body").addClass("show-help-tab")},r=t.closeHelp=function(){t("body").removeClass("show-help-tab"),t("#helpMenuItem").removeClass("active"),n.find("li.close-help-tab").removeClass("close-help-tab").addClass("active").find("a").focus()};t(document).on("click",".open-help-tab",function(e){var i=t("#helpMenuItem");i.length||(i=t('
    • '+t(this).text()+'
    • '),n.append('
    • ').append(i)),a(),e.preventDefault()}).on("click",".close-help-tab",function(t){r(),t.stopPropagation(),t.preventDefault()})};t(T),t(function(){var e=t(".table-responsive"),i=function(){e.each(function(){this.scrollHeight-3<=this.clientHeight&&this.scrollWidth-3<=this.clientWidth?t(this).addClass("scroll-none").css("overflow","visible"):t(this).removeClass("scroll-none").css("overflow","auto")})};e.length&&(i(),t(window).on("resize",i))});var S=function(){var e=this.value?this.scrollHeight+2+"px":"32px";this.style.height="auto",this.style.height=e,t(this).closest("tr").find("textarea").each(function(){this.style.height=e})};t.autoResizeTextarea=function(e){t(e).each(S)},t(function(){t("textarea.autosize").each(S),t(document).on("input keyup paste change","textarea.autosize",S)}),t(function(){var e=t("#dropMenu");e.length&&e.on("click",".toggle-right-col",function(t){e.toggleClass("show-right-col"),t.stopPropagation(),t.preventDefault()})});var D="undefined"!=typeof InstallTrigger;t.zui.browser.firefox=D,t("html").toggleClass("is-firefox",D).toggleClass("not-firefox",!D),t(function(){var e=t("#mainContent>.main-col"),i=e.children(".main-actions"),n=i.prev();if(i.length&&n.length){t('
      ').css("height",i.outerHeight()).insertAfter(i);var o=function(){var e=n[0].getBoundingClientRect(),o=e.top+e.height+120>t(window).height();t("body").toggleClass("main-actions-fixed",o),o&&i.width(n.width())};t.resetToolbarPosition=o,o(),t(window).on("resize scroll",o)}}),t(document).on("show.zui.modal",function(e){t("body.body-modal").length&&window.parent&&window.parent!==window&&t(e.target).is(".modal")&&window.parent.$("body").addClass("hide-modal-close")}).on("hidden.zui.modal",function(){t("body.body-modal").length&&window.parent&&window.parent!==window&&window.parent.$("body").removeClass("hide-modal-close")})}(jQuery); \ No newline at end of file diff --git a/www/theme/default/style.css b/www/theme/default/style.css index 15f4dc5578..820d6a939a 100644 --- a/www/theme/default/style.css +++ b/www/theme/default/style.css @@ -15,7 +15,14 @@ /* Finish task #5068*/ .main-table .table{cursor:pointer;} +.table-striped > tbody > tr:nth-child(2n+1) > td, .table-striped > tbody > tr:nth-child(2n+1) > th{background:none;} -.xuanxuan-card{padding-bottom:55px;} -.xuancard-actions{width: 100%;text-align: center; padding: 10px 0;} -.xuancard-actions.fixed{position: fixed; background: #fff; border-top: 1px solid #ddd; bottom: 0; margin-bottom: 0; z-index: 999; box-shadow: 0 -2px 10px rgba(0,0,0,0.15);} +#dropMenu.show-right-col{width:502px;max-width:520px;} +#dropMenu.has-search-text{width:250px;max-width:260px;} +#dropMenu.has-search-text .col-right{margin-left:0px;} +#dropMenu>.search-box{max-width:240px;} +#dropMenu .list-group{width:250px; max-width:260px;} +#dropMenu.show-right-col>.list-group{width:502px;max-width:520px;} +#dropMenu.show-right-col .col-left>.list-group{width:250px;max-width:260px;} +#dropMenu.show-right-col .col-right>.list-group{width:250px;max-width:260px;} +#dropMenu .col-footer{width:230px;} diff --git a/www/theme/default/x.style.css b/www/theme/default/x.style.css index 6dbcc33e48..cc2bbff026 100644 --- a/www/theme/default/x.style.css +++ b/www/theme/default/x.style.css @@ -1,7 +1,12 @@ -body{padding:0px; margin: 0px} +body{padding:0px; margin: 0px;background-color: #fff;} #header{display: none} #footer{display: none} #header+#main{min-width:auto} #main{padding: 0px;} #main .container{padding: 0px;} -#mainMenu{margin-top:0px;} +#mainMenu{margin-top:0px;background-color: #efefef;} +#mainContent .cell{box-shadow:none; -webkit-box-shadow: none;} + +.xuanxuan-card{padding-bottom:55px;} +.xuancard-actions{width: 100%;text-align: center; padding: 10px 0;} +.xuancard-actions.fixed{position: fixed; background: #fff; border-top: 1px solid #ddd; bottom: 0; margin-bottom: 0; z-index: 999; box-shadow: 0 -2px 10px rgba(0,0,0,0.15);} diff --git a/www/theme/zui/css/min.css b/www/theme/zui/css/min.css index 55444242e4..89ba4f65a7 100644 --- a/www/theme/zui/css/min.css +++ b/www/theme/zui/css/min.css @@ -1,9 +1,9 @@ /*! - * ZUI: Zentao template - v1.8.1 - 2018-11-20 + * ZUI: Zentao template - v1.9.0 - 2019-03-29 * http://zui.sexy * GitHub: https://github.com/easysoft/zui.git - * Copyright (c) 2018 cnezsoft.com; Licensed MIT - *//*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-spacing:0;border-collapse:collapse}#userMenu:after,#userMenu:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fixed-md:after,.container-fixed-md:before,.container-fixed-sm:after,.container-fixed-sm:before,.container-fixed-xs:after,.container-fixed-xs:before,.container-fixed:after,.container-fixed:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.dl-inline:after,.dl-inline:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager-justify:after,.pager-justify:before,.pager-loose:after,.pager-loose:before,.row:after,.row:before,.table-footer:after,.table-footer:before{display:table;content:" "}#userMenu:after,.btn-toolbar:after,.clearfix:after,.container-fixed-md:after,.container-fixed-sm:after,.container-fixed-xs:after,.container-fixed:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.dl-inline:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager-justify:after,.pager-loose:after,.row:after,.table-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none}.showing{display:block}.hidden{display:none!important;visibility:hidden!important}.show{display:block!important;visibility:visible!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.with-padding{padding:5px 12px}.no-padding{padding:0!important}.no-margin{margin:0!important}.inline-block.visible-xs,.inline.visible-xs,.visible-xs,td.visible-xs,th.visible-xs,tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}.inline.visible-xs{display:inline!important}.inline-block.visible-xs{display:inline-block!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}.inline.visible-xs.visible-sm{display:inline!important}.inline-block.visible-xs.visible-sm{display:inline-block!important}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-xs.visible-md{display:block!important}.inline.visible-xs.visible-md{display:inline!important}.inline-block.visible-xs.visible-md{display:inline-block!important}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-xs.visible-lg{display:block!important}.inline.visible-xs.visible-lg{display:inline!important}.inline-block.visible-xs.visible-lg{display:inline-block!important}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}.inline-block.visible-sm,.inline.visible-sm,.visible-sm,td.visible-sm,th.visible-sm,tr.visible-sm{display:none!important}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}.inline.visible-sm.visible-xs{display:inline!important}.inline-block.visible-sm.visible-xs{display:inline-block!important}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}.inline.visible-sm{display:inline!important}.inline-block.visible-sm{display:inline-block!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-sm.visible-md{display:block!important}.inline.visible-sm.visible-md{display:inline!important}.inline-block.visible-sm.visible-md{display:inline-block!important}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-sm.visible-lg{display:block!important}.inline.visible-sm.visible-lg{display:inline!important}.inline-block.visible-sm.visible-lg{display:inline-block!important}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}.inline-block.visible-md,.inline.visible-md,.visible-md,td.visible-md,th.visible-md,tr.visible-md{display:none!important}@media (max-width:767px){.visible-md.visible-xs{display:block!important}.inline.visible-md.visible-xs{display:inline!important}.inline-block.visible-md.visible-xs{display:inline-block!important}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}.inline.visible-md.visible-sm{display:inline!important}.inline-block.visible-md.visible-sm{display:inline-block!important}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-md{display:block!important}.inline.visible-md{display:inline!important}.inline-block.visible-md{display:inline-block!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-md.visible-lg{display:block!important}.inline.visible-md.visible-lg{display:inline!important}.inline-block.visible-md.visible-lg{display:inline-block!important}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}.inline-block.visible-lg,.inline.visible-lg,.visible-lg,td.visible-lg,th.visible-lg,tr.visible-lg{display:none!important}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}.inline.visible-lg.visible-xs{display:inline!important}.inline-block.visible-lg.visible-xs{display:inline-block!important}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}.inline.visible-lg.visible-sm{display:inline!important}.inline-block.visible-lg.visible-sm{display:inline-block!important}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-lg.visible-md{display:block!important}.inline.visible-lg.visible-md{display:inline!important}.inline-block.visible-lg.visible-md{display:inline-block!important}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-lg{display:block!important}.inline.visible-lg{display:inline!important}.inline-block.visible-lg{display:inline-block!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}.inline.hidden-xs{display:inline!important}.inline-block.hidden-xs{display:inline-block!important}tr.hidden-xs{display:table-row!important}td.hidden-xs,th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,.inline-block.hidden-xs,.inline.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,.inline-block.hidden-xs.hidden-sm,.inline.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-xs.hidden-md,.inline-block.hidden-xs.hidden-md,.inline.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-xs.hidden-lg,.inline-block.hidden-xs.hidden-lg,.inline.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}.inline.hidden-sm{display:inline!important}.inline-block.hidden-sm{display:inline-block!important}tr.hidden-sm{display:table-row!important}td.hidden-sm,th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,.inline-block.hidden-sm.hidden-xs,.inline.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,.inline-block.hidden-sm,.inline.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-sm.hidden-md,.inline-block.hidden-sm.hidden-md,.inline.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-sm.hidden-lg,.inline-block.hidden-sm.hidden-lg,.inline.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}.inline.hidden-md{display:inline!important}.inline-block.hidden-md{display:inline-block!important}tr.hidden-md{display:table-row!important}td.hidden-md,th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,.inline-block.hidden-md.hidden-xs,.inline.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,.inline-block.hidden-md.hidden-sm,.inline.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-md,.inline-block.hidden-md,.inline.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-md.hidden-lg,.inline-block.hidden-md.hidden-lg,.inline.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}.inline.hidden-lg{display:inline!important}.inline-block.hidden-lg{display:inline-block!important}tr.hidden-lg{display:table-row!important}td.hidden-lg,th.hidden-lg{display:table-cell!important}@media (max-width:767px){.hidden-lg.hidden-xs,.inline-block.hidden-lg.hidden-xs,.inline.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,.inline-block.hidden-lg.hidden-sm,.inline.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-lg.hidden-md,.inline-block.hidden-lg.hidden-md,.inline.hidden-lg.hidden-md,td.hidden-lg.hidden-md,th.hidden-lg.hidden-md,tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-lg,.inline-block.hidden-lg,.inline.hidden-lg,td.hidden-lg,th.hidden-lg,tr.hidden-lg{display:none!important}}.inline-block.visible-print,.inline.visible-print,.visible-print,td.visible-print,th.visible-print,tr.visible-print{display:none!important}@media print{.visible-print{display:block!important}.inline.visible-print{display:inline!important}.inline-block.visible-print{display:inline-block!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}.hidden-print,.inline-block.hidden-print,.inline.hidden-print,td.hidden-print,th.hidden-print,tr.hidden-print{display:none!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-size:13px;line-height:1.42857143;color:#3c4353;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3c4353;text-decoration:none;cursor:pointer;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;-o-transition-property:color,background,opacity,left,top,right,bottom,-o-transform;transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;transition-property:color,background,transform,opacity,left,top,right,bottom;transition-property:color,background,transform,opacity,left,top,right,bottom,-webkit-transform,-o-transform}a:focus,a:hover{color:#0c64eb;text-decoration:none}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a.disabled,a.disabled:focus,a.disabled:hover,a[disabled],a[disabled]:focus,a[disabled]:hover{color:#aaa;text-decoration:none;cursor:default}audio,canvas,img,video{max-width:100%;vertical-align:middle}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}::-moz-selection{text-shadow:none;background:#b3d4fc}::selection{text-shadow:none;background:#b3d4fc}fieldset{padding:0;margin:0;border:0}textarea{resize:vertical}ol,ul{padding-left:20px}.container,.container-fixed,.container-fixed-md,.container-fixed-sm,.container-fixed-xs,.container-fluid{padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{max-width:972px}}@media (min-width:992px){.container{max-width:1760px}}@media (min-width:1800px){.container{max-width:1760px}}.container-fixed{width:1760px}.container-fixed-md{width:1760px}.container-fixed-sm{width:972px}.container-fixed-xs{width:748px}.row{margin-right:-10px;margin-left:-10px}.col,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:10px;padding-left:10px}.col,.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-1,.col-xs-1{width:8.33333333%}.col-2,.col-xs-2{width:16.66666667%}.col-3,.col-xs-3{width:25%}.col-4,.col-xs-4{width:33.33333333%}.col-5,.col-xs-5{width:41.66666667%}.col-6,.col-xs-6{width:50%}.col-7,.col-xs-7{width:58.33333333%}.col-8,.col-xs-8{width:66.66666667%}.col-9,.col-xs-9{width:75%}.col-10,.col-xs-10{width:83.33333333%}.col-11,.col-xs-11{width:91.66666667%}.col-12,.col-xs-12{width:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1800px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:14px;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:85%}cite{font-style:normal}.text-gray,.text-muted{color:#838a9d}.text-gray a,.text-muted a{color:#757d92}.text-gray a:active,.text-gray a:hover,.text-muted a:active,.text-muted a:hover{color:#3c4353}.text-primary{color:#0c64eb}.text-warning,.text-yellow{color:#ff9800}.text-danger,.text-red{color:#ff5d5d}.text-green,.text-success{color:#00da88}.text-blue,.text-info{color:#2196f3}.text-brown,.text-important{color:#bd7b46}.text-purple,.text-special{color:#8666b8}.text-link{color:#3c4353}.text-link:active,.text-link:hover{color:#3c4353}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.nobr,.text-nowrap{overflow:hidden;white-space:nowrap}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}.dl-inline dt{display:inline-block}.dl-inline dd{display:inline-block;padding-right:1em}.dl-inline dd:last-child{padding-right:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}blockquote{padding:10px 20px;margin:0 0 20px;font-size:16.25px;border-left:5px solid #eee}blockquote ol,blockquote p,blockquote ul{font-weight:300}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#838a9d}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}.ol-pd-2{padding-left:40px}.ol-pd-3{padding-left:60px}.ol-pd-4{padding-left:80px}.bg-black,.bg-default{color:#fff;background-color:#3c4353}.bg-primary{color:#fff;background-color:#0c64eb}.bg-green,.bg-success{color:#fff;background-color:#00da88}.bg-blue,.bg-info{color:#fff;background-color:#2196f3}.bg-warning,.bg-yellow{color:#fff;background-color:#ff9800}.bg-danger,.bg-red{color:#fff;background-color:#ff5d5d}.bg-brown,.bg-important{color:#fff;background-color:#bd7b46}.bg-purple,.bg-special{color:#fff;background-color:#8666b8}.hl-default,.hl-gray{background-color:#f1f1f1}.hl-primary{background-color:#e9f2fb}.hl-green,.hl-success{background-color:#e8f5e9}.hl-blue,.hl-info{background-color:#e3f2fd}.hl-warning,.hl-yellow{background-color:#fff3e0}.hl-danger,.hl-red{background-color:#ffebee}.hl-brown,.hl-important{background-color:#efebe9}.hl-purple,.hl-special{background-color:#f3e5f5}.header-dividing,.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Arial,Tahoma,'Microsoft Yahei','PingFang SC','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#838a9d}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1{font-size:24px}h2{font-size:20px}h3{font-size:18px}h4{font-size:14px}h5{font-size:13px}h6{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}hr.divider-sm{margin-top:10px;margin-bottom:10px}hr.divider{margin:0}.label{display:inline;padding:.2em .6em .2em;font-size:85.71428571%;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#838a9d;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;background-color:#697084}.label.label-outline{color:#838a9d;background:0 0;border:1px solid #838a9d}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-badge{display:inline-block;min-width:18px;padding:3px 7px;font-size:12px;line-height:1;border-radius:9px}.label-dot{display:inline-block;width:8px;height:8px;padding:0;line-height:20px;text-indent:-9999em;border-radius:50%}.label-dot:empty{display:inline-block}.label-primary{background-color:#0c64eb}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#0a4fba}.label-primary.label-outline{color:#0c64eb;background:0 0;border:1px solid #0c64eb}.label-success{background-color:#00da88}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#00a768}.label-success.label-outline{color:#00da88;background:0 0;border:1px solid #00da88}.label-info{background-color:#2196f3}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#0c7cd5}.label-info.label-outline{color:#2196f3;background:0 0;border:1px solid #2196f3}.label-warning{background-color:#ff9800}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#cc7a00}.label-warning.label-outline{color:#ff9800;background:0 0;border:1px solid #ff9800}.label-danger{background-color:#ff5d5d}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#ff2a2a}.label-danger.label-outline{color:#ff5d5d;background:0 0;border:1px solid #ff5d5d}.btn .label,.nav-primary>li>a>.label{position:relative;top:-1px}.btn-danger .label,.btn-info .label,.btn-primary .label,.btn-success .label,.btn-warning .label{background-color:rgba(0,0,0,.2)}.list-group-item.active>.label,.nav-pills>.active>a>.label,.nav-primary>.active>a>.label{color:#3c4353;background-color:#fff}.nav>li>a>.label{margin-left:3px}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#838a9d}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:8px;margin-bottom:20px;overflow:hidden;background-color:#e9f2fb;border-radius:3px}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#0c64eb;border-radius:3px;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#00da88}.progress-bar-info{background-color:#2196f3}.progress-bar-warning{background-color:#ff9800}.progress-bar-danger{background-color:#ff5d5d}.avatar{position:relative;display:block;width:30px;height:30px;overflow:hidden;line-height:30px;text-align:center;background-position:center;-webkit-background-size:cover;background-size:cover;border-radius:4px}.avatar img{display:block;width:100%;height:100%;margin:0}.avatar-sm{width:20px;height:20px;font-size:12px;line-height:20px}.avatar-lg{width:40px;height:40px;font-size:20px;line-height:40px}.avatar-lg>.icon{font-size:20px}.avatar-xl{width:70px;height:70px;font-size:35px;line-height:70px}.avatar-xl>.icon{font-size:35px}.avatar-circle{border-radius:50%}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:inherit;color:#3c4353;border:0;border-bottom:1px solid #eee}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:5px 0 0;margin-top:0\9;line-height:normal}input[type=file]{display:block}select[multiple],select[size]{height:auto}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}.form-control::-webkit-input-placeholder{color:#838a9d}.form-control::-moz-placeholder{color:#838a9d}.form-control::placeholder{color:#838a9d}.form-control{display:block;width:100%;height:32px;padding:5px 8px;font-size:13px;line-height:1.42857143;color:#222;vertical-align:middle;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control.focus,.form-control:focus{border-color:#0c64eb;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#f5f5f5}.form-control[readonly]{cursor:default}textarea.form-control{height:auto;min-height:32px}.form-group{margin-bottom:10px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:3px;margin-top:4px\9;margin-left:-20px}.os-android .checkbox input[type=checkbox],.os-android .checkbox-inline input[type=checkbox],.os-android .radio input[type=radio],.os-android .radio-inline input[type=radio]{margin-top:0}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.input-sm{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-lg{height:39px;line-height:39px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning>label{color:#ff9800}.has-warning .form-control{border-color:#ff9800;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#cc7a00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166}.has-warning .input-group-addon{color:#ff9800;background-color:#fff3e0;border-color:#ff9800}.has-error .help-block,.has-error>label{color:#ff5d5d}.has-error .form-control{border-color:#ff5d5d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#ff2a2a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3}.has-error .input-group-addon{color:#ff5d5d;background-color:#ffebee;border-color:#ff5d5d}.has-success .help-block,.has-success>label{color:#00da88}.has-success .form-control{border-color:#00da88;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#00a768;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8}.has-success .input-group-addon{color:#00da88;background-color:#e8f5e9;border-color:#00da88}.form-control-static{min-height:33px;padding-top:6px;padding-bottom:6px;margin-bottom:0}.help-block{display:block;margin:5px 0;color:#74809b}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .form-group>label,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:6px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.form-horizontal .form-group>label{text-align:right}}.required{position:relative}.required:after{position:absolute;top:0;right:-10px;display:inline-block;font-size:14px;color:#ff5d5d;content:'*'}.form-horizontal .required:after{top:5px;right:-1px}.form-condensed .form-group{margin-bottom:10px}.form-condensed .form-control{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.form-condensed .form-control{height:24px;line-height:24px}textarea.form-condensed .form-control{height:auto}.form-condensed textarea.form-control{height:auto}.form-condensed .btn{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.form-condensed .input-group>.form-control,.form-condensed .input-group>.input-group-addon,.form-condensed .input-group>.input-group-btn>.btn{padding:2px 8px;font-size:12px;border-radius:3px}.form-condensed .input-group .form-control:first-child,.form-condensed .input-group-addon:first-child,.form-condensed .input-group-btn:first-child>.btn,.form-condensed .input-group-btn:first-child>.btn-group>.btn,.form-condensed .input-group-btn:first-child>.dropdown-toggle,.form-condensed .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.form-condensed .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.form-condensed .input-group .form-control:last-child,.form-condensed .input-group-addon:last-child,.form-condensed .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.form-condensed .input-group-btn:first-child>.btn:not(:first-child),.form-condensed .input-group-btn:last-child>.btn,.form-condensed .input-group-btn:last-child>.btn-group>.btn,.form-condensed .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.form-condensed .input-group-addon:first-child{border-right:0}.form-condensed .input-group-addon:last-child{border-left:0}.form-condensed .input-group-addon.fix-border,.form-condensed .input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.form-condensed.form-horizontal .checkbox,.form-condensed.form-horizontal .checkbox-inline,.form-condensed.form-horizontal .form-group>label,.form-condensed.form-horizontal .radio,.form-condensed.form-horizontal .radio-inline{padding-top:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.load-indicator{position:relative}.load-indicator:after,.load-indicator:before{position:absolute;color:#838a9d;text-align:center;visibility:hidden;opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:visibility,opacity;-o-transition-property:visibility,opacity;transition-property:visibility,opacity}.load-indicator:before{top:0;right:0;bottom:0;left:0;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:50px;font-size:12px;content:attr(data-loading);background-color:rgba(255,255,255,.65);-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.load-indicator:after{top:50%;left:50%;z-index:11;display:block;width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;text-transform:none;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.load-indicator.loading:after,.load-indicator.loading:before{visibility:visible;opacity:1}table{max-width:100%;background-color:transparent}caption{padding:8px 10px;color:#838a9d;text-align:left}th{text-align:left}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db;-webkit-transition:background .2s cubic-bezier(.175,.885,.32,1);-o-transition:background .2s cubic-bezier(.175,.885,.32,1);transition:background .2s cubic-bezier(.175,.885,.32,1)}.table>thead>tr>th{font-weight:700;color:#3c4353;vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.table>tbody+tbody{border-top:2px solid #cbd0db}.table-fixed{table-layout:fixed}.table-fixed td,.table-fixed th{overflow:hidden;white-space:nowrap}.table-fixed .nofixed,.table-fixed tfoot>tr>td,.table-fixed tfoot>tr>th{overflow:visible}.table-borderless td,.table-borderless th,.table-borderless thead>tr>th{border:none}.table-auto{width:auto;max-width:100%}.table-condensed td,.table-condensed th{padding:5px}.table-bordered{border:1px solid #cbd0db}.table-bordered td,.table-bordered th{border:1px solid #cbd0db}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#e9f2fb}table col[class*=col-]{display:table-column;float:none}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe9c6}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#e8f5e9;border-color:#c7e6c4}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d6edd8;border-color:#b7deb3}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#ffebee;border-color:#ffd1e0}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ffd1d8;border-color:#ffb8ce}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fff3e0;border-color:#ffe0c6}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ffe9c6;border-color:#ffd2ad}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #cbd0db}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered th{border-top:none}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.alert{padding:15px;margin-bottom:20px;color:#313744;background-color:#f1f1f1;border-radius:3px;-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.alert hr{border-top-color:#e4e4e4}.alert .alert-link{color:#22262f}.alert h4{margin-top:0;color:inherit}.alert hr{margin:10px 0}.alert p,.alert ul{margin-bottom:0}.alert p+p{margin-top:5px}.alert-link{font-weight:700}.alert>[class*=icon-]{float:left;margin-top:-5px;font-size:42px;opacity:.6;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1)}.alert>[class*=icon-]+.content{min-height:30px;margin-left:64px}.alert.with-icon{display:table;width:100%}.alert.with-icon>[class*=icon-],.alert.with-icon>[class*=icon-]+.content{display:table-cell;float:none;min-height:0;margin:0;vertical-align:middle}.alert.with-icon>[class*=icon-]{width:48px;text-align:center}.alert.with-icon>[class*=icon-]+.content{padding-left:1em}.alert-block{margin:0;border-radius:0}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-6px;right:-21px;color:inherit}.alert-primary{color:#313744;background-color:#e9f2fb}.alert-primary hr{border-top-color:#cbe0f6}.alert-primary .alert-link{color:#22262f}.alert-success{color:#00c178;background-color:#e8f5e9}.alert-success hr{border-top-color:#c7e6c4}.alert-success .alert-link{color:#009d62}.alert-info{color:#0d8aee;background-color:#e3f2fd}.alert-info hr{border-top-color:#9ce0f8}.alert-info .alert-link{color:#0b76cc}.alert-warning{color:#e68900;background-color:#fff3e0}.alert-warning hr{border-top-color:#ffe0c6}.alert-warning .alert-link{color:#c27400}.alert-danger{color:#ff4343;background-color:#ffebee}.alert-danger hr{border-top-color:#ffd1e0}.alert-danger .alert-link{color:#ff2020}.alert-inverse{color:#fff;background-color:#3c4353;border-color:#3c4353}.alert-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-primary-inverse{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.alert-primary-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-success-inverse{color:#fff;background-color:#00da88;border-color:#00da88}.alert-success-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-success-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-info-inverse{color:#fff;background-color:#2196f3;border-color:#2196f3}.alert-info-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-info-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-warning-inverse{color:#fff;background-color:#ff9800;border-color:#ff9800}.alert-warning-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-warning-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-danger-inverse{color:#fff;background-color:#ff5d5d;border-color:#ff5d5d}.alert-danger-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-danger-inverse .alert-link{color:rgba(255,255,255,.8)}.input-control-icon-left,.input-control-icon-right,.input-control-label-left,.input-control-label-right{position:absolute;top:1px;z-index:5;height:30px;line-height:30px;opacity:.5}.input-control-icon-left,.input-control-icon-right{width:30px;text-align:center}.input-control-icon-left,.input-control-label-left{left:1px}.input-control-icon-right,.input-control-label-right{right:1px}.input-control-label-left,.input-control-label-right{width:70px;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.has-label-left-sm>.input-control-label-left,.has-label-left-sm>.input-control-label-right{width:55px}.has-label-left-lg>.input-control-label-left,.has-label-left-lg>.input-control-label-right{width:95px}.input-control{position:relative}.input-control.has-icon-left>.form-control{padding-left:30px}.input-control.has-icon-right>.form-control{padding-right:30px}.input-control.has-label-left>.form-control{padding-left:70px}.input-control.has-label-right>.form-control{padding-right:70px}.input-control.has-label-left-sm>.form-control{padding-left:55px}.input-control.has-label-right-sm>.form-control{padding-right:55px}.input-control.has-label-left-lg>.form-control{padding-left:95px}.input-control.has-label-right-lg>.form-control{padding-right:95px}.input-control>a:hover{background-color:#f1f1f1;opacity:1}.form-control:focus+[class^=input-control-],.form-control:focus+[class^=input-control-]+[class^=input-control-]{opacity:1}.form-control:focus+.input-control-label-left{color:#16a8f8}.empty+.search-clear-btn,.empty+.search-icon+.search-clear-btn{opacity:0!important}input:placeholder-shown+.search-clear-btn,input:placeholder-shown+.search-icon+.search-clear-btn{opacity:0!important}.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control{border-radius:16px}.search-box-circle+.input-group-btn>.btn{border-radius:0 16px 16px 0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:5px 12px;font-size:13px;font-weight:400;line-height:1;color:#3c4353;text-align:center;background-color:#eee;border:1px solid #dcdcdc;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon.fix-border{border-right:0;border-left:0}.input-group-addon:empty{width:1px;padding:0}.input-group-addon.fix-padding{width:1px;padding:0}.input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:39px;line-height:39px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon.input-sm{padding:2px 8px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:14px;border-radius:6px}.code,code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code,kbd{padding:2px 4px;font-size:90%;color:#37474f;background-color:#f3f5f7;border-radius:4px}kbd{padding:1px 4px;font-weight:700;color:#666;background-color:#f1f1f1;border:1px solid #d8d8d8;border-bottom-width:2px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:1.38461538;color:#3c4353;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;margin:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.com{color:#93a1a1}.lit{color:#195f91}.clo,.opn,.pun{color:#93a1a1}.fun{color:#dc322f}.atv,.str{color:#d14}.kwd,.prettyprint .tag{color:#1e347b}.atn,.dec,.typ,.var{color:teal}.pln{color:#48484c}.prettyprint.linenums{-webkit-box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0;box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0}.prettyprint ol.linenums{padding-left:35px;margin-bottom:0;line-height:20px;color:#bebec5;text-shadow:0 1px 0 #fff}.pager{display:inline-block;padding-left:0;margin:20px 0;list-style:none}.pager>li{display:inline}.pager>li>a,.pager>li>span{position:relative;float:left;padding:5px 12px;margin-left:-1px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #cbd0db}.pager>li:first-child>a,.pager>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{z-index:2;background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#0c64eb;border-color:#0c64eb}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#cbd0db;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#cbd0db}.pager-justify{display:block}.pager-justify .next>a,.pager-justify .next>span{float:right;border-radius:4px}.pager-justify .previous>a,.pager-justify .previous>span{float:left;border-radius:4px}.pager-goto{width:100px;text-align:center}.pager>li>div{float:left}.pager>li .pager-goto,.pager>li .pager-size-menu,.pager>li.space{margin:0 5px}.pager-label{position:relative;float:left;padding:5px 4px;margin-left:-1px;line-height:1.42857143;text-decoration:none;border:1px solid transparent}.pager-item-left>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager-item-right>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager-lg>li>a,.pager-lg>li>span{padding:10px 16px;font-size:14px}.pager-lg>li:first-child>a,.pager-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pager-lg>li:last-child>a,.pager-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pager-sm>li>a,.pager-sm>li>span{padding:2px 8px;font-size:12px}.pager-sm>li:first-child>a,.pager-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pager-sm>li:last-child>a,.pager-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager-pills>li:first-child>a,.pager-pills>li:first-child>span{border-radius:16px 0 0 16px}.pager-pills>li:last-child>a,.pager-pills>li:last-child>span{border-radius:0 16px 16px 0}.pager-pills.pager-justify>li>a,.pager-pills.pager-justify>li>span{border-radius:16px}.pager-loose{display:block;margin:20px 0}.pager-loose.pager-pills>li>a,.pager-loose.pager-pills>li>span{border-radius:16px}.pager-loose>li>a,.pager-loose>li>span{margin-left:5px;border-radius:4px}.pager-loose>li:first-child>a,.pager-loose>li:first-child>span{margin-left:0}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>.nav-heading{padding:8px 15px;font-weight:700;color:#838a9d}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:8px 15px;color:#3c4353}.nav>li>a:focus,.nav>li>a:hover{color:#0c64eb;text-decoration:none;background-color:#f1f1f1}.nav>li.disabled>a{color:#cbd0db}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#cbd0db;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f1f1f1;border-color:#3c4353}.nav>li>a>img{max-width:none}.nav-default>li{float:left}.nav-default>li>a{border-radius:4px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:20px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0c64eb}.nav-primary>li{float:left;margin-left:-1px}.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #cbd0db}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.nav-secondary>li{float:left}.nav-secondary>li>a{border-bottom:2px solid #eee}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0c64eb;border-bottom-color:#0c64eb}.nav-secondary>li.nav-heading{border-bottom:2px solid #eee}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{margin-left:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li+li{margin-top:-1px}.nav-stacked.nav-primary>li:first-child{margin-top:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #cbd0db}.nav-stacked.nav-secondary>li>a{border:none;border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li+li{margin-top:-1px}.nav-stacked.nav-secondary>li:first-child{margin-top:0}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0c64eb;box-shadow:inset 2px 0 0 #0c64eb}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #cbd0db}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs{border-bottom:1px solid #cbd0db}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #cbd0db}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#838a9d;cursor:default;background-color:#fff;border:1px solid #cbd0db;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}@-moz-document url-prefix(){.nav-tabs>li.active>a:focus .nav-tabs>li>a:focus{outline:0}}.nav-tabs.nav-stacked{border-right:1px solid #cbd0db;border-bottom:none}.nav-tabs.nav-stacked>li{float:none;margin-right:-1px;margin-bottom:0}.nav-tabs.nav-stacked>li>a{margin-right:0;border-radius:4px 0 0 4px}.nav-tabs.nav-stacked>li.active>a,.nav-tabs.nav-stacked>li.active>a:focus,.nav-tabs.nav-stacked>li.active>a:hover{border:1px solid #cbd0db;border-right-color:transparent}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:40px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:10px;padding-left:10px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:40px;padding:10px 15px;font-size:14px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:3px;margin-right:3px;margin-bottom:3px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:5px -10px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-nav.nav-justified>li{float:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:4px;margin-bottom:4px}.navbar-text{float:left;margin-top:10px;margin-bottom:10px}@media (min-width:768px){.navbar-text{margin-right:10px;margin-left:10px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f7f7f7;border-color:#dedede}.navbar-default .navbar-brand{color:#3c4353}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#272b35;background-color:transparent}.navbar-default .navbar-text{color:#3c4353}.navbar-default .navbar-nav>li>a{color:#3c4353}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#cbd0db}.navbar-default .navbar-toggle .icon-bar{background-color:#838a9d}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#dedede}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#3c4353}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#3c4353}.navbar-default .navbar-link:hover{color:#222}.navbar-default .btn-link{color:#3c4353}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#222}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#16a8f8;border-color:#068cd5}.navbar-inverse .navbar-brand{color:#cbd0db}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#cbd0db}.navbar-inverse .navbar-nav>li>a{color:#cbd0db}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#079ced}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0795e3}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#48baf9}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cbd0db}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#cbd0db}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-form{padding:10px 10px;margin-top:4px;margin-right:-10px;margin-bottom:4px;margin-left:-10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.scale{-webkit-transition:all .15s ease;-o-transition:all .15s ease;transition:all .15s ease;-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.scale.in{-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-button,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-button,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@media (min-width:768px){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button{width:0;height:0}::-webkit-scrollbar-button:end:increment,::-webkit-scrollbar-button:start:decrement{display:block}::-webkit-scrollbar-button:vertical:end:decrement,::-webkit-scrollbar-button:vertical:start:increment{display:none}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-color:transparent;border-style:solid}::-webkit-scrollbar-track:vertical::-webkit-scrollbar-track:horizontal{background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box}::-webkit-scrollbar-thumb{min-height:28px;padding-top:100;background-color:rgba(0,0,0,.2);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:2px;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-width:0}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal>.loader{display:none}.modal.modal-loading .modal-dialog{opacity:0}.modal.modal-loading .loader{position:absolute;top:35%;left:50%;display:block;width:80px;margin-left:-40px;font-size:56px;color:#fff;text-align:center}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-iframe .modal-body{overflow:hidden!important}.modal-iframe .modal-body>iframe{border-radius:0 0 6px 6px}.modal-dialog{position:relative;width:auto;margin:0 auto;pointer-events:initial;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-dialog.modal-moveable{position:absolute;margin:0}.modal-dialog.modal-moveable .modal-header{cursor:move}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.modal-fullscreen{position:relative;width:100%!important;height:100%!important;margin:0;border-radius:0}.modal-fullscreen .modal-body{position:absolute;top:52px;right:0;bottom:0;left:0;overflow-y:auto}.body-modal-scroll-inside{overflow:auto}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#3c4353;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#3c4353}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#3c4353}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip-primary .tooltip-inner{background-color:#0c64eb}.tooltip-primary.tooltip.top .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-left .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-right .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.right .tooltip-arrow{border-right-color:#0c64eb}.tooltip-primary.tooltip.left .tooltip-arrow{border-left-color:#0c64eb}.tooltip-primary.tooltip.bottom .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-success .tooltip-inner{background-color:#00da88}.tooltip-success.tooltip.top .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-left .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-right .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.right .tooltip-arrow{border-right-color:#00da88}.tooltip-success.tooltip.left .tooltip-arrow{border-left-color:#00da88}.tooltip-success.tooltip.bottom .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#00da88}.tooltip-info .tooltip-inner{background-color:#2196f3}.tooltip-info.tooltip.top .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-left .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-right .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.right .tooltip-arrow{border-right-color:#2196f3}.tooltip-info.tooltip.left .tooltip-arrow{border-left-color:#2196f3}.tooltip-info.tooltip.bottom .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-warning .tooltip-inner{background-color:#ff9800}.tooltip-warning.tooltip.top .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-left .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-right .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.right .tooltip-arrow{border-right-color:#ff9800}.tooltip-warning.tooltip.left .tooltip-arrow{border-left-color:#ff9800}.tooltip-warning.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-danger .tooltip-inner{background-color:#ff5d5d}.tooltip-danger.tooltip.top .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-left .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-right .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.right .tooltip-arrow{border-right-color:#ff5d5d}.tooltip-danger.tooltip.left .tooltip-arrow{border-left-color:#ff5d5d}.tooltip-danger.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff5d5d}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:300px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover.no-arrow.top{margin-top:0}.popover.no-arrow.right{margin-left:0}.popover.no-arrow.bottom{margin-top:0}.popover.no-arrow.left{margin-left:0}.modal .popover,.popover-in-modal{z-index:1050}.popover-title{padding:8px 14px;margin:0;font-size:13px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{content:"";border-width:10px}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom .arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-primary{border-color:#0c64eb}.popover-primary .popover-title{color:#fff;background-color:#0c64eb}.popover-primary.popover.top .arrow{border-top-color:#0c64eb}.popover-primary.popover.right .arrow{border-right-color:#0c64eb}.popover-primary.popover.left .arrow{border-left-color:#0c64eb}.popover-primary.popover.bottom .arrow,.popover-primary.popover.bottom .arrow:after{border-bottom-color:#0c64eb}.popover-success{border-color:#00da88}.popover-success .popover-title{color:#fff;background-color:#00da88}.popover-success.popover.top .arrow{border-top-color:#00da88}.popover-success.popover.right .arrow{border-right-color:#00da88}.popover-success.popover.left .arrow{border-left-color:#00da88}.popover-success.popover.bottom .arrow,.popover-success.popover.bottom .arrow:after{border-bottom-color:#00da88}.popover-info{border-color:#2196f3}.popover-info .popover-title{color:#fff;background-color:#2196f3}.popover-info.popover.top .arrow{border-top-color:#2196f3}.popover-info.popover.right .arrow{border-right-color:#2196f3}.popover-info.popover.left .arrow{border-left-color:#2196f3}.popover-info.popover.bottom .arrow,.popover-info.popover.bottom .arrow:after{border-bottom-color:#2196f3}.popover-warning{border-color:#ff9800}.popover-warning .popover-title{color:#fff;background-color:#ff9800}.popover-warning.popover.top .arrow{border-top-color:#ff9800}.popover-warning.popover.right .arrow{border-right-color:#ff9800}.popover-warning.popover.left .arrow{border-left-color:#ff9800}.popover-warning.popover.bottom .arrow,.popover-warning.popover.bottom .arrow:after{border-bottom-color:#ff9800}.popover-danger{border-color:#ff5d5d}.popover-danger .popover-title{color:#fff;background-color:#ff5d5d}.popover-danger.popover.top .arrow{border-top-color:#ff5d5d}.popover-danger.popover.right .arrow{border-right-color:#ff5d5d}.popover-danger.popover.left .arrow{border-left-color:#ff5d5d}.popover-danger.popover.bottom .arrow,.popover-danger.popover.bottom .arrow:after{border-bottom-color:#ff5d5d}.caret{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:100px;padding:5px 0;margin:2px 0 0;font-size:13px;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#eee}.dropdown-menu>li>a{display:block;padding:5px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#3c4353;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#cbd0db}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.dropdown-hover .dropdown-menu{margin:-1px 0}.dropdown-hover:hover>.dropdown-menu,.open>.dropdown-menu{display:block}.dropdown-hover:hover>a,.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;font-weight:700;line-height:1.42857143;color:#838a9d}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0 dotted;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:4px}.dropdown-submenu.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:4px}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;content:" ";border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu>a{min-width:100px}.dropdown-submenu>.dropdown-menu.pull-left{right:100%;left:auto}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0c64eb}.messager{display:table;margin:10px;overflow:hidden;color:#fff;pointer-events:auto;background-color:#3c4353;background-color:rgba(0,0,0,.8);border-radius:20px;-webkit-transition-property:opacity,-webkit-transform!important;-o-transition-property:opacity,-o-transform!important;transition-property:opacity,-webkit-transform!important;transition-property:opacity,transform!important;transition-property:opacity,transform,-webkit-transform,-o-transform!important}.messager-content{display:table-cell;padding:10px 15px;vertical-align:top}.messager-content>[class^=icon-]{display:inline-block;margin-right:8px}.messager-actions{display:table-cell;vertical-align:top}.messager-actions>.action{min-width:40px;height:40px;padding:0 12px;color:#fafafa;color:rgba(255,255,255,.6);text-align:center;text-shadow:none;background:0 0;border:none}.messager-actions>.action.close{padding-bottom:5px;font-size:20px;font-weight:400;opacity:1}.messager-actions>.action:hover{color:#fff;background:rgba(0,0,0,.1)}.messager-actions .action-icon+.action-text{margin-left:8px}.messagers-holder{position:fixed;z-index:99999;padding:10px;pointer-events:none}.messagers-holder.top{top:0}.messagers-holder.top-left{top:0;left:0}.messagers-holder.top-right{top:0;right:0}.messagers-holder.bottom{bottom:0}.messagers-holder.bottom-left{bottom:0;left:0}.messagers-holder.bottom-right{right:0;bottom:0}.messagers-holder.bottom-right .messager,.messagers-holder.top-right .messager{margin-left:auto}.messagers-holder.center{top:0}.messagers-holder.bottom,.messagers-holder.center,.messagers-holder.top{right:0;left:0}.messagers-holder.bottom .messager,.messagers-holder.center .messager,.messagers-holder.top .messager{margin:10px auto}.messager-primary{background-color:#0c64eb}.messager-success{background-color:#00da88}.messager-info{background-color:#2196f3}.messager-warning{background-color:#ff9800}.messager-danger{background-color:#ff5d5d}.messager-important{background-color:#bd7b46}.messager-special{background-color:#8666b8}.article{padding:20px}.article>header h1,.article>header h2,.article>header h3{margin-bottom:20px;line-height:1.5}.article>header>.abstract,.article>header>dl{padding:10px 15px;font-size:12px;color:#67738e;background-color:#f1f1f1}.article>header>.abstract>p:last-child,.article>header>dl>p:last-child{margin-bottom:0}.article>header>dl{margin:0;border-bottom:1px solid #e9e9e9}.article>header>dl.pull-right{background-color:transparent;border:none}.article>footer{border-top:1px dashed #d8d8d8}.article>footer>p{padding:10px 15px}.article-content,.article>.content{padding:20px 0;font-size:14px;line-height:1.57142857}.article-content h1,.article>.content h1{font-size:20px}.article-content h2,.article>.content h2{font-size:18px}.article-content h3,.article>.content h3{font-size:16px}.article-content h4,.article>.content h4{margin-top:15px;font-size:14px}.article-content h5,.article>.content h5{margin-top:15px;font-size:13px}.article-content h6,.article>.content h6{margin-top:15px;font-size:11px}.article-content img,.article>.content img{margin:10px 0}.article-content p>img+img,.article>.content p>img+img{margin-left:10px}.article-content p>img[align=right],.article>.content p>img[align=right]{margin-left:10px}.article-content dl,.article>.content dl{padding-right:2em;padding-left:2em}.article-content table,.article>.content table{margin-bottom:20px}.article-content table td,.article-content table th,.article>.content table td,.article>.content table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db}.article-content table>thead>tr>th,.article>.content table>thead>tr>th{vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.article-content p{margin-bottom:0}.article-content table{width:100%}.article>.content table td,.article>.content table th,.article>.content table>thead>tr>th{border:1px solid #cbd0db}body.article-content{padding:8px}.article-condensed{padding:20px 0}.article-condensed>header{padding:0 20px}.article-condensed>header>.abstract,.article-condensed>header>dl{padding:10px 15px;margin:0 -20px}.article-condensed>.article-content,.article-condensed>.content{padding:20px}.article-condensed>.article-content>img,.article-condensed>.article-content>pre,.article-condensed>.content>img,.article-condensed>.content>pre{margin-right:-20px;margin-left:-20px;border-radius:0}.article-condensed>.article-content>pre,.article-condensed>.content>pre{border-right:none;border-left:none}.article-condensed>footer{border-top:1px dashed #d8d8d8}.article-condensed>footer>p{padding:10px 15px}.article-condensed>footer>.pager-justify>.previous>a{border-left:none;border-radius:0}.article-condensed>footer>.pager-justify>.next>a{border-right:none;border-radius:0}/*! + * Copyright (c) 2019 cnezsoft.com; Licensed MIT + *//*! normalize.css v2.1.3 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:0 0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-spacing:0;border-collapse:collapse}#userMenu:after,#userMenu:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fixed-md:after,.container-fixed-md:before,.container-fixed-sm:after,.container-fixed-sm:before,.container-fixed-xs:after,.container-fixed-xs:before,.container-fixed:after,.container-fixed:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.dl-inline:after,.dl-inline:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager-justify:after,.pager-justify:before,.pager-loose:after,.pager-loose:before,.row:after,.row:before,.table-footer:after,.table-footer:before{display:table;content:" "}#userMenu:after,.btn-toolbar:after,.clearfix:after,.container-fixed-md:after,.container-fixed-sm:after,.container-fixed-xs:after,.container-fixed:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.dl-inline:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager-justify:after,.pager-loose:after,.row:after,.table-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none}.showing{display:block}.hidden{display:none!important;visibility:hidden!important}.show{display:block!important;visibility:visible!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}.with-padding{padding:5px 12px}.no-padding{padding:0!important}.no-margin{margin:0!important}.inline-block.visible-xs,.inline.visible-xs,.visible-xs,td.visible-xs,th.visible-xs,tr.visible-xs{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}.inline.visible-xs{display:inline!important}.inline-block.visible-xs{display:inline-block!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-xs.visible-sm{display:block!important}.inline.visible-xs.visible-sm{display:inline!important}.inline-block.visible-xs.visible-sm{display:inline-block!important}tr.visible-xs.visible-sm{display:table-row!important}td.visible-xs.visible-sm,th.visible-xs.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-xs.visible-md{display:block!important}.inline.visible-xs.visible-md{display:inline!important}.inline-block.visible-xs.visible-md{display:inline-block!important}tr.visible-xs.visible-md{display:table-row!important}td.visible-xs.visible-md,th.visible-xs.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-xs.visible-lg{display:block!important}.inline.visible-xs.visible-lg{display:inline!important}.inline-block.visible-xs.visible-lg{display:inline-block!important}tr.visible-xs.visible-lg{display:table-row!important}td.visible-xs.visible-lg,th.visible-xs.visible-lg{display:table-cell!important}}.inline-block.visible-sm,.inline.visible-sm,.visible-sm,td.visible-sm,th.visible-sm,tr.visible-sm{display:none!important}@media (max-width:767px){.visible-sm.visible-xs{display:block!important}.inline.visible-sm.visible-xs{display:inline!important}.inline-block.visible-sm.visible-xs{display:inline-block!important}tr.visible-sm.visible-xs{display:table-row!important}td.visible-sm.visible-xs,th.visible-sm.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}.inline.visible-sm{display:inline!important}.inline-block.visible-sm{display:inline-block!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-sm.visible-md{display:block!important}.inline.visible-sm.visible-md{display:inline!important}.inline-block.visible-sm.visible-md{display:inline-block!important}tr.visible-sm.visible-md{display:table-row!important}td.visible-sm.visible-md,th.visible-sm.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-sm.visible-lg{display:block!important}.inline.visible-sm.visible-lg{display:inline!important}.inline-block.visible-sm.visible-lg{display:inline-block!important}tr.visible-sm.visible-lg{display:table-row!important}td.visible-sm.visible-lg,th.visible-sm.visible-lg{display:table-cell!important}}.inline-block.visible-md,.inline.visible-md,.visible-md,td.visible-md,th.visible-md,tr.visible-md{display:none!important}@media (max-width:767px){.visible-md.visible-xs{display:block!important}.inline.visible-md.visible-xs{display:inline!important}.inline-block.visible-md.visible-xs{display:inline-block!important}tr.visible-md.visible-xs{display:table-row!important}td.visible-md.visible-xs,th.visible-md.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-md.visible-sm{display:block!important}.inline.visible-md.visible-sm{display:inline!important}.inline-block.visible-md.visible-sm{display:inline-block!important}tr.visible-md.visible-sm{display:table-row!important}td.visible-md.visible-sm,th.visible-md.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-md{display:block!important}.inline.visible-md{display:inline!important}.inline-block.visible-md{display:inline-block!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-md.visible-lg{display:block!important}.inline.visible-md.visible-lg{display:inline!important}.inline-block.visible-md.visible-lg{display:inline-block!important}tr.visible-md.visible-lg{display:table-row!important}td.visible-md.visible-lg,th.visible-md.visible-lg{display:table-cell!important}}.inline-block.visible-lg,.inline.visible-lg,.visible-lg,td.visible-lg,th.visible-lg,tr.visible-lg{display:none!important}@media (max-width:767px){.visible-lg.visible-xs{display:block!important}.inline.visible-lg.visible-xs{display:inline!important}.inline-block.visible-lg.visible-xs{display:inline-block!important}tr.visible-lg.visible-xs{display:table-row!important}td.visible-lg.visible-xs,th.visible-lg.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-lg.visible-sm{display:block!important}.inline.visible-lg.visible-sm{display:inline!important}.inline-block.visible-lg.visible-sm{display:inline-block!important}tr.visible-lg.visible-sm{display:table-row!important}td.visible-lg.visible-sm,th.visible-lg.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1799px){.visible-lg.visible-md{display:block!important}.inline.visible-lg.visible-md{display:inline!important}.inline-block.visible-lg.visible-md{display:inline-block!important}tr.visible-lg.visible-md{display:table-row!important}td.visible-lg.visible-md,th.visible-lg.visible-md{display:table-cell!important}}@media (min-width:1800px){.visible-lg{display:block!important}.inline.visible-lg{display:inline!important}.inline-block.visible-lg{display:inline-block!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}.hidden-xs{display:block!important}.inline.hidden-xs{display:inline!important}.inline-block.hidden-xs{display:inline-block!important}tr.hidden-xs{display:table-row!important}td.hidden-xs,th.hidden-xs{display:table-cell!important}@media (max-width:767px){.hidden-xs,.inline-block.hidden-xs,.inline.hidden-xs,td.hidden-xs,th.hidden-xs,tr.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-xs.hidden-sm,.inline-block.hidden-xs.hidden-sm,.inline.hidden-xs.hidden-sm,td.hidden-xs.hidden-sm,th.hidden-xs.hidden-sm,tr.hidden-xs.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-xs.hidden-md,.inline-block.hidden-xs.hidden-md,.inline.hidden-xs.hidden-md,td.hidden-xs.hidden-md,th.hidden-xs.hidden-md,tr.hidden-xs.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-xs.hidden-lg,.inline-block.hidden-xs.hidden-lg,.inline.hidden-xs.hidden-lg,td.hidden-xs.hidden-lg,th.hidden-xs.hidden-lg,tr.hidden-xs.hidden-lg{display:none!important}}.hidden-sm{display:block!important}.inline.hidden-sm{display:inline!important}.inline-block.hidden-sm{display:inline-block!important}tr.hidden-sm{display:table-row!important}td.hidden-sm,th.hidden-sm{display:table-cell!important}@media (max-width:767px){.hidden-sm.hidden-xs,.inline-block.hidden-sm.hidden-xs,.inline.hidden-sm.hidden-xs,td.hidden-sm.hidden-xs,th.hidden-sm.hidden-xs,tr.hidden-sm.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm,.inline-block.hidden-sm,.inline.hidden-sm,td.hidden-sm,th.hidden-sm,tr.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-sm.hidden-md,.inline-block.hidden-sm.hidden-md,.inline.hidden-sm.hidden-md,td.hidden-sm.hidden-md,th.hidden-sm.hidden-md,tr.hidden-sm.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-sm.hidden-lg,.inline-block.hidden-sm.hidden-lg,.inline.hidden-sm.hidden-lg,td.hidden-sm.hidden-lg,th.hidden-sm.hidden-lg,tr.hidden-sm.hidden-lg{display:none!important}}.hidden-md{display:block!important}.inline.hidden-md{display:inline!important}.inline-block.hidden-md{display:inline-block!important}tr.hidden-md{display:table-row!important}td.hidden-md,th.hidden-md{display:table-cell!important}@media (max-width:767px){.hidden-md.hidden-xs,.inline-block.hidden-md.hidden-xs,.inline.hidden-md.hidden-xs,td.hidden-md.hidden-xs,th.hidden-md.hidden-xs,tr.hidden-md.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-md.hidden-sm,.inline-block.hidden-md.hidden-sm,.inline.hidden-md.hidden-sm,td.hidden-md.hidden-sm,th.hidden-md.hidden-sm,tr.hidden-md.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-md,.inline-block.hidden-md,.inline.hidden-md,td.hidden-md,th.hidden-md,tr.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-md.hidden-lg,.inline-block.hidden-md.hidden-lg,.inline.hidden-md.hidden-lg,td.hidden-md.hidden-lg,th.hidden-md.hidden-lg,tr.hidden-md.hidden-lg{display:none!important}}.hidden-lg{display:block!important}.inline.hidden-lg{display:inline!important}.inline-block.hidden-lg{display:inline-block!important}tr.hidden-lg{display:table-row!important}td.hidden-lg,th.hidden-lg{display:table-cell!important}@media (max-width:767px){.hidden-lg.hidden-xs,.inline-block.hidden-lg.hidden-xs,.inline.hidden-lg.hidden-xs,td.hidden-lg.hidden-xs,th.hidden-lg.hidden-xs,tr.hidden-lg.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-lg.hidden-sm,.inline-block.hidden-lg.hidden-sm,.inline.hidden-lg.hidden-sm,td.hidden-lg.hidden-sm,th.hidden-lg.hidden-sm,tr.hidden-lg.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1799px){.hidden-lg.hidden-md,.inline-block.hidden-lg.hidden-md,.inline.hidden-lg.hidden-md,td.hidden-lg.hidden-md,th.hidden-lg.hidden-md,tr.hidden-lg.hidden-md{display:none!important}}@media (min-width:1800px){.hidden-lg,.inline-block.hidden-lg,.inline.hidden-lg,td.hidden-lg,th.hidden-lg,tr.hidden-lg{display:none!important}}.inline-block.visible-print,.inline.visible-print,.visible-print,td.visible-print,th.visible-print,tr.visible-print{display:none!important}@media print{.visible-print{display:block!important}.inline.visible-print{display:inline!important}.inline-block.visible-print{display:inline-block!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}.hidden-print,.inline-block.hidden-print,.inline.hidden-print,td.hidden-print,th.hidden-print,tr.hidden-print{display:none!important}}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,'PingFang SC','Source Han Sans CN','Source Han Sans','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-size:13px;line-height:1.42857143;color:#3c4353;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3c4353;text-decoration:none;cursor:pointer;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;-o-transition-property:color,background,opacity,left,top,right,bottom,-o-transform;transition-property:color,background,opacity,left,top,right,bottom,-webkit-transform;transition-property:color,background,transform,opacity,left,top,right,bottom;transition-property:color,background,transform,opacity,left,top,right,bottom,-webkit-transform,-o-transform}a:focus,a:hover{color:#0c64eb;text-decoration:none}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a.disabled,a.disabled:focus,a.disabled:hover,a[disabled],a[disabled]:focus,a[disabled]:hover{color:#aaa;text-decoration:none;cursor:default}audio,canvas,img,video{max-width:100%;vertical-align:middle}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}::-moz-selection{text-shadow:none;background:#b3d4fc}::selection{text-shadow:none;background:#b3d4fc}fieldset{padding:0;margin:0;border:0}textarea{resize:vertical}ol,ul{padding-left:20px}.container,.container-fixed,.container-fixed-md,.container-fixed-sm,.container-fixed-xs,.container-fluid{padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{max-width:972px}}@media (min-width:992px){.container{max-width:1760px}}@media (min-width:1800px){.container{max-width:1760px}}.container-fixed{width:1760px}.container-fixed-md{width:1760px}.container-fixed-sm{width:972px}.container-fixed-xs{width:748px}.row{margin-right:-10px;margin-left:-10px}.col,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:10px;padding-left:10px}.col,.col-xs,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-1,.col-xs-1{width:8.33333333%}.col-2,.col-xs-2{width:16.66666667%}.col-3,.col-xs-3{width:25%}.col-4,.col-xs-4{width:33.33333333%}.col-5,.col-xs-5{width:41.66666667%}.col-6,.col-xs-6{width:50%}.col-7,.col-xs-7{width:58.33333333%}.col-8,.col-xs-8{width:66.66666667%}.col-9,.col-xs-9{width:75%}.col-10,.col-xs-10{width:83.33333333%}.col-11,.col-xs-11{width:91.66666667%}.col-12,.col-xs-12{width:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}}@media (min-width:1800px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:14px;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:85%}cite{font-style:normal}.text-gray,.text-muted{color:#838a9d}.text-gray a,.text-muted a{color:#757d92}.text-gray a:active,.text-gray a:hover,.text-muted a:active,.text-muted a:hover{color:#3c4353}.text-primary{color:#0c64eb}.text-warning,.text-yellow{color:#ff9800}.text-danger,.text-red{color:#ff5d5d}.text-green,.text-success{color:#00da88}.text-blue,.text-info{color:#2196f3}.text-brown,.text-important{color:#bd7b46}.text-purple,.text-special{color:#8666b8}.text-link{color:#3c4353}.text-link:active,.text-link:hover{color:#3c4353}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.nobr,.text-nowrap{overflow:hidden;white-space:nowrap}.text-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}.dl-inline dt{display:inline-block}.dl-inline dd{display:inline-block;padding-right:1em}.dl-inline dd:last-child{padding-right:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}blockquote{padding:10px 20px;margin:0 0 20px;font-size:16.25px;border-left:5px solid #eee}blockquote ol,blockquote p,blockquote ul{font-weight:300}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.42857143;color:#838a9d}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}.ol-pd-2{padding-left:40px}.ol-pd-3{padding-left:60px}.ol-pd-4{padding-left:80px}.bg-black,.bg-default{color:#fff;background-color:#3c4353}.bg-primary{color:#fff;background-color:#0c64eb}.bg-green,.bg-success{color:#fff;background-color:#00da88}.bg-blue,.bg-info{color:#fff;background-color:#2196f3}.bg-warning,.bg-yellow{color:#fff;background-color:#ff9800}.bg-danger,.bg-red{color:#fff;background-color:#ff5d5d}.bg-brown,.bg-important{color:#fff;background-color:#bd7b46}.bg-purple,.bg-special{color:#fff;background-color:#8666b8}.hl-default,.hl-gray{background-color:#f1f1f1}.hl-primary{background-color:#e9f2fb}.hl-green,.hl-success{background-color:#e8f5e9}.hl-blue,.hl-info{background-color:#e3f2fd}.hl-warning,.hl-yellow{background-color:#fff3e0}.hl-danger,.hl-red{background-color:#ffebee}.hl-brown,.hl-important{background-color:#efebe9}.hl-purple,.hl-special{background-color:#f3e5f5}.header-dividing,.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}h1,h2,h3,h4,h5,h6{font-family:"Helvetica Neue",Helvetica,Tahoma,Arial,'PingFang SC','Source Han Sans CN','Source Han Sans','Hiragino Sans GB','WenQuanYi Micro Hei',sans-serif;font-weight:700;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#838a9d}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1{font-size:24px}h2{font-size:20px}h3{font-size:18px}h4{font-size:14px}h5{font-size:13px}h6{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}hr.divider-sm{margin-top:10px;margin-bottom:10px}hr.divider{margin:0}.label{display:inline;padding:.2em .6em .2em;font-size:85.71428571%;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#838a9d;border-radius:.25em}.label[href]:focus,.label[href]:hover{color:#fff;background-color:#697084}.label.label-outline{color:#838a9d;background:0 0;border:1px solid #838a9d}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-badge{display:inline-block;min-width:18px;padding:3px 7px;font-size:12px;line-height:1;border-radius:9px}.label-dot{display:inline-block;width:8px;height:8px;padding:0;line-height:20px;text-indent:-9999em;border-radius:50%}.label-dot:empty{display:inline-block}.label-primary{background-color:#0c64eb}.label-primary[href]:focus,.label-primary[href]:hover{color:#fff;background-color:#0a4fba}.label-primary.label-outline{color:#0c64eb;background:0 0;border:1px solid #0c64eb}.label-success{background-color:#00da88}.label-success[href]:focus,.label-success[href]:hover{color:#fff;background-color:#00a768}.label-success.label-outline{color:#00da88;background:0 0;border:1px solid #00da88}.label-info{background-color:#2196f3}.label-info[href]:focus,.label-info[href]:hover{color:#fff;background-color:#0c7cd5}.label-info.label-outline{color:#2196f3;background:0 0;border:1px solid #2196f3}.label-warning{background-color:#ff9800}.label-warning[href]:focus,.label-warning[href]:hover{color:#fff;background-color:#cc7a00}.label-warning.label-outline{color:#ff9800;background:0 0;border:1px solid #ff9800}.label-danger{background-color:#ff5d5d}.label-danger[href]:focus,.label-danger[href]:hover{color:#fff;background-color:#ff2a2a}.label-danger.label-outline{color:#ff5d5d;background:0 0;border:1px solid #ff5d5d}.btn .label,.nav-primary>li>a>.label{position:relative;top:-1px}.btn-danger .label,.btn-info .label,.btn-primary .label,.btn-success .label,.btn-warning .label{background-color:rgba(0,0,0,.2)}.list-group-item.active>.label,.nav-pills>.active>a>.label,.nav-primary>.active>a>.label{color:#3c4353;background-color:#fff}.nav>li>a>.label{margin-left:3px}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#838a9d}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:8px;margin-bottom:20px;overflow:hidden;background-color:#e9f2fb;border-radius:3px}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#0c64eb;border-radius:3px;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#00da88}.progress-bar-info{background-color:#2196f3}.progress-bar-warning{background-color:#ff9800}.progress-bar-danger{background-color:#ff5d5d}.avatar{position:relative;display:block;width:30px;height:30px;overflow:hidden;line-height:30px;text-align:center;background-position:center;-webkit-background-size:cover;background-size:cover;border-radius:4px}.avatar img{display:block;width:100%;height:100%;margin:0}.avatar-sm{width:20px;height:20px;font-size:12px;line-height:20px}.avatar-lg{width:40px;height:40px;font-size:20px;line-height:40px}.avatar-lg>.icon{font-size:20px}.avatar-xl{width:70px;height:70px;font-size:35px;line-height:70px}.avatar-xl>.icon{font-size:35px}.avatar-circle{border-radius:50%}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:19.5px;line-height:inherit;color:#3c4353;border:0;border-bottom:1px solid #eee}label{display:inline-block;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:5px 0 0;margin-top:0\9;line-height:normal}input[type=file]{display:block}select[multiple],select[size]{height:auto}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}.form-control::-webkit-input-placeholder{color:#838a9d}.form-control::-moz-placeholder{color:#838a9d}.form-control::placeholder{color:#838a9d}.form-control{display:block;width:100%;height:32px;padding:5px 8px;font-size:13px;line-height:1.42857143;color:#222;vertical-align:middle;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.form-control.focus,.form-control:focus{border-color:#0c64eb;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(12,100,235,.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#f5f5f5}.form-control[readonly]{cursor:default}textarea.form-control{height:auto;min-height:32px}.form-group{margin-bottom:10px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:3px;margin-top:4px\9;margin-left:-20px}.os-android .checkbox input[type=checkbox],.os-android .checkbox-inline input[type=checkbox],.os-android .radio input[type=radio],.os-android .radio-inline input[type=radio]{margin-top:0}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.input-sm{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:24px;line-height:24px}textarea.input-sm{height:auto}.input-lg{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-lg{height:39px;line-height:39px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning>label{color:#ff9800}.has-warning .form-control{border-color:#ff9800;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#cc7a00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc166}.has-warning .input-group-addon{color:#ff9800;background-color:#fff3e0;border-color:#ff9800}.has-error .help-block,.has-error>label{color:#ff5d5d}.has-error .form-control{border-color:#ff5d5d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#ff2a2a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ffc3c3}.has-error .input-group-addon{color:#ff5d5d;background-color:#ffebee;border-color:#ff5d5d}.has-success .help-block,.has-success>label{color:#00da88}.has-success .form-control{border-color:#00da88;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#00a768;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #41ffb8}.has-success .input-group-addon{color:#00da88;background-color:#e8f5e9;border-color:#00da88}.form-control-static{min-height:33px;padding-top:6px;padding-bottom:6px;margin-bottom:0}.help-block{display:block;margin:5px 0;color:#74809b}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{float:none;margin-left:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .form-group>label,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:6px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.form-horizontal .form-group>label{text-align:right}}.required{position:relative}.required:after{position:absolute;top:0;right:-10px;display:inline-block;font-size:14px;color:#ff5d5d;content:'*'}.form-horizontal .required:after{top:5px;right:-1px}.form-condensed .form-group{margin-bottom:10px}.form-condensed .form-control{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.form-condensed .form-control{height:24px;line-height:24px}textarea.form-condensed .form-control{height:auto}.form-condensed textarea.form-control{height:auto}.form-condensed .btn{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.form-condensed .input-group>.form-control,.form-condensed .input-group>.input-group-addon,.form-condensed .input-group>.input-group-btn>.btn{padding:2px 8px;font-size:12px;border-radius:3px}.form-condensed .input-group .form-control:first-child,.form-condensed .input-group-addon:first-child,.form-condensed .input-group-btn:first-child>.btn,.form-condensed .input-group-btn:first-child>.btn-group>.btn,.form-condensed .input-group-btn:first-child>.dropdown-toggle,.form-condensed .input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.form-condensed .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.form-condensed .input-group .form-control:last-child,.form-condensed .input-group-addon:last-child,.form-condensed .input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.form-condensed .input-group-btn:first-child>.btn:not(:first-child),.form-condensed .input-group-btn:last-child>.btn,.form-condensed .input-group-btn:last-child>.btn-group>.btn,.form-condensed .input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.form-condensed .input-group-addon:first-child{border-right:0}.form-condensed .input-group-addon:last-child{border-left:0}.form-condensed .input-group-addon.fix-border,.form-condensed .input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.form-condensed.form-horizontal .checkbox,.form-condensed.form-horizontal .checkbox-inline,.form-condensed.form-horizontal .form-group>label,.form-condensed.form-horizontal .radio,.form-condensed.form-horizontal .radio-inline{padding-top:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.load-indicator{position:relative}.load-indicator:after,.load-indicator:before{position:absolute;color:#838a9d;text-align:center;visibility:hidden;opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:visibility,opacity;-o-transition-property:visibility,opacity;transition-property:visibility,opacity}.load-indicator:before{top:0;right:0;bottom:0;left:0;z-index:10;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-top:50px;font-size:12px;content:attr(data-loading);background-color:rgba(255,255,255,.65);-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.load-indicator:after{top:50%;left:50%;z-index:11;display:block;width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;text-transform:none;content:"\e982";-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.load-indicator.loading:after,.load-indicator.loading:before{visibility:visible;opacity:1}table{max-width:100%;background-color:transparent}caption{padding:8px 10px;color:#838a9d;text-align:left}th{text-align:left}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db;-webkit-transition:background .2s cubic-bezier(.175,.885,.32,1);-o-transition:background .2s cubic-bezier(.175,.885,.32,1);transition:background .2s cubic-bezier(.175,.885,.32,1)}.table>thead>tr>th{font-weight:700;color:#3c4353;vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.table>tbody+tbody{border-top:2px solid #cbd0db}.table-fixed{table-layout:fixed}.table-fixed td,.table-fixed th{overflow:hidden;white-space:nowrap}.table-fixed .nofixed,.table-fixed tfoot>tr>td,.table-fixed tfoot>tr>th{overflow:visible}.table-borderless td,.table-borderless th,.table-borderless thead>tr>th{border:none}.table-auto{width:auto;max-width:100%}.table-condensed td,.table-condensed th{padding:5px}.table-bordered{border:1px solid #cbd0db}.table-bordered td,.table-bordered th{border:1px solid #cbd0db}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#e9f2fb}table col[class*=col-]{display:table-column;float:none}table td[class*=col-],table th[class*=col-]{display:table-cell;float:none}.table tr.active>td,.table tr.active>th,.table tr>td.active,.table tr>th.active{background-color:#ffe9c6}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#e8f5e9;border-color:#c7e6c4}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d6edd8;border-color:#b7deb3}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#ffebee;border-color:#ffd1e0}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ffd1d8;border-color:#ffb8ce}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fff3e0;border-color:#ffe0c6}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#ffe9c6;border-color:#ffd2ad}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #cbd0db}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered th{border-top:none}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}.alert{padding:15px;margin-bottom:20px;color:#313744;background-color:#f1f1f1;border-radius:3px;-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.alert hr{border-top-color:#e4e4e4}.alert .alert-link{color:#22262f}.alert h4{margin-top:0;color:inherit}.alert hr{margin:10px 0}.alert p,.alert ul{margin-bottom:0}.alert p+p{margin-top:5px}.alert-link{font-weight:700}.alert>[class*=icon-]{float:left;margin-top:-5px;font-size:42px;opacity:.6;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1)}.alert>[class*=icon-]+.content{min-height:30px;margin-left:64px}.alert.with-icon{display:table;width:100%}.alert.with-icon>[class*=icon-],.alert.with-icon>[class*=icon-]+.content{display:table-cell;float:none;min-height:0;margin:0;vertical-align:middle}.alert.with-icon>[class*=icon-]{width:48px;text-align:center}.alert.with-icon>[class*=icon-]+.content{padding-left:1em}.alert-block{margin:0;border-radius:0}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-6px;right:-21px;color:inherit}.alert-primary{color:#313744;background-color:#e9f2fb}.alert-primary hr{border-top-color:#cbe0f6}.alert-primary .alert-link{color:#22262f}.alert-success{color:#00c178;background-color:#e8f5e9}.alert-success hr{border-top-color:#c7e6c4}.alert-success .alert-link{color:#009d62}.alert-info{color:#0d8aee;background-color:#e3f2fd}.alert-info hr{border-top-color:#9ce0f8}.alert-info .alert-link{color:#0b76cc}.alert-warning{color:#e68900;background-color:#fff3e0}.alert-warning hr{border-top-color:#ffe0c6}.alert-warning .alert-link{color:#c27400}.alert-danger{color:#ff4343;background-color:#ffebee}.alert-danger hr{border-top-color:#ffd1e0}.alert-danger .alert-link{color:#ff2020}.alert-inverse{color:#fff;background-color:#3c4353;border-color:#3c4353}.alert-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-primary-inverse{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.alert-primary-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-primary-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-success-inverse{color:#fff;background-color:#00da88;border-color:#00da88}.alert-success-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-success-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-info-inverse{color:#fff;background-color:#2196f3;border-color:#2196f3}.alert-info-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-info-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-warning-inverse{color:#fff;background-color:#ff9800;border-color:#ff9800}.alert-warning-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-warning-inverse .alert-link{color:rgba(255,255,255,.8)}.alert-danger-inverse{color:#fff;background-color:#ff5d5d;border-color:#ff5d5d}.alert-danger-inverse hr{border-top-color:#cbd0db;border-top-color:rgba(203,208,219,.25)}.alert-danger-inverse .alert-link{color:rgba(255,255,255,.8)}.input-control-icon-left,.input-control-icon-right,.input-control-label-left,.input-control-label-right{position:absolute;top:1px;z-index:5;height:30px;line-height:30px;opacity:.5}.input-control-icon-left,.input-control-icon-right{width:30px;text-align:center}.input-control-icon-left,.input-control-label-left{left:1px}.input-control-icon-right,.input-control-label-right{right:1px}.input-control-label-left,.input-control-label-right{width:70px;padding:0 8px;overflow:hidden;text-overflow:ellipsis}.has-label-left-sm>.input-control-label-left,.has-label-left-sm>.input-control-label-right{width:55px}.has-label-left-lg>.input-control-label-left,.has-label-left-lg>.input-control-label-right{width:95px}.input-control{position:relative}.input-control.has-icon-left>.form-control{padding-left:30px}.input-control.has-icon-right>.form-control{padding-right:30px}.input-control.has-label-left>.form-control{padding-left:70px}.input-control.has-label-right>.form-control{padding-right:70px}.input-control.has-label-left-sm>.form-control{padding-left:55px}.input-control.has-label-right-sm>.form-control{padding-right:55px}.input-control.has-label-left-lg>.form-control{padding-left:95px}.input-control.has-label-right-lg>.form-control{padding-right:95px}.input-control>a:hover{background-color:#f1f1f1;opacity:1}.form-control:focus+[class^=input-control-],.form-control:focus+[class^=input-control-]+[class^=input-control-]{opacity:1}.form-control:focus+.input-control-label-left{color:#16a8f8}.empty+.search-clear-btn,.empty+.search-icon+.search-clear-btn{opacity:0!important}input:placeholder-shown+.search-clear-btn,input:placeholder-shown+.search-icon+.search-clear-btn{opacity:0!important}.search-box-circle .input-control-icon-left,.search-box-circle .input-control-icon-right,.search-box-circle>.form-control{border-radius:16px}.search-box-circle+.input-group-btn>.btn{border-radius:0 16px 16px 0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:5px 12px;font-size:13px;font-weight:400;line-height:1;color:#3c4353;text-align:center;background-color:#eee;border:1px solid #dcdcdc;border-radius:4px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group-addon.fix-border{border-right:0;border-left:0}.input-group-addon:empty{width:1px;padding:0}.input-group-addon.fix-padding{width:1px;padding:0}.input-group-btn.fix-border>.btn{border-right:0;border-left:0;border-radius:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:first-child{border-right:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:39px;padding:10px 16px;font-size:14px;line-height:1.25;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:39px;line-height:39px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:24px;padding:2px 8px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:24px;line-height:24px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon.input-sm{padding:2px 8px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:14px;border-radius:6px}.code,code,kbd,pre,samp{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code,kbd{padding:2px 4px;font-size:90%;color:#37474f;background-color:#f3f5f7;border-radius:4px}kbd{padding:1px 4px;font-weight:700;color:#666;background-color:#f1f1f1;border:1px solid #d8d8d8;border-bottom-width:2px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:12px;line-height:1.38461538;color:#3c4353;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;margin:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.com{color:#93a1a1}.lit{color:#195f91}.clo,.opn,.pun{color:#93a1a1}.fun{color:#dc322f}.atv,.str{color:#d14}.kwd,.prettyprint .tag{color:#1e347b}.atn,.dec,.typ,.var{color:teal}.pln{color:#48484c}.prettyprint.linenums{-webkit-box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0;box-shadow:inset 40px 0 0 #fbfbfc,inset 41px 0 0 #ececf0}.prettyprint ol.linenums{padding-left:35px;margin-bottom:0;line-height:20px;color:#bebec5;text-shadow:0 1px 0 #fff}.pager{display:inline-block;padding-left:0;margin:20px 0;list-style:none}.pager>li{display:inline}.pager>li>a,.pager>li>span{position:relative;float:left;padding:5px 12px;margin-left:-1px;line-height:1.42857143;text-decoration:none;background-color:#fff;border:1px solid #cbd0db}.pager>li:first-child>a,.pager>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pager>li:last-child>a,.pager>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager>li>a:focus,.pager>li>a:hover,.pager>li>span:focus,.pager>li>span:hover{z-index:2;background-color:#eee}.pager>li.active>a,.pager>li.active>a:hover,.pager>li.active>span,.pager>li.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#0c64eb;border-color:#0c64eb}.pager>li.disabled>a,.pager>li.disabled>a:focus,.pager>li.disabled>a:hover,.pager>li.disabled>span,.pager>li.disabled>span:focus,.pager>li.disabled>span:hover{color:#cbd0db;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#cbd0db}.pager-justify{display:block}.pager-justify .next>a,.pager-justify .next>span{float:right;border-radius:4px}.pager-justify .previous>a,.pager-justify .previous>span{float:left;border-radius:4px}.pager-goto{width:100px;text-align:center}.pager>li>div{float:left}.pager>li .pager-goto,.pager>li .pager-size-menu,.pager>li.space{margin:0 5px}.pager-label{position:relative;float:left;padding:5px 4px;margin-left:-1px;line-height:1.42857143;text-decoration:none;border:1px solid transparent}.pager-item-left>a{border-top-left-radius:4px;border-bottom-left-radius:4px}.pager-item-right>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.pager-lg>li>a,.pager-lg>li>span{padding:10px 16px;font-size:14px}.pager-lg>li:first-child>a,.pager-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pager-lg>li:last-child>a,.pager-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pager-sm>li>a,.pager-sm>li>span{padding:2px 8px;font-size:12px}.pager-sm>li:first-child>a,.pager-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pager-sm>li:last-child>a,.pager-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager-pills>li:first-child>a,.pager-pills>li:first-child>span{border-radius:16px 0 0 16px}.pager-pills>li:last-child>a,.pager-pills>li:last-child>span{border-radius:0 16px 16px 0}.pager-pills.pager-justify>li>a,.pager-pills.pager-justify>li>span{border-radius:16px}.pager-loose{display:block;margin:20px 0}.pager-loose.pager-pills>li>a,.pager-loose.pager-pills>li>span{border-radius:16px}.pager-loose>li>a,.pager-loose>li>span{margin-left:5px;border-radius:4px}.pager-loose>li:first-child>a,.pager-loose>li:first-child>span{margin-left:0}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>.nav-heading{padding:8px 15px;font-weight:700;color:#838a9d}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:8px 15px;color:#3c4353}.nav>li>a:focus,.nav>li>a:hover{color:#0c64eb;text-decoration:none;background-color:#f1f1f1}.nav>li.disabled>a{color:#cbd0db}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#cbd0db;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f1f1f1;border-color:#3c4353}.nav>li>a>img{max-width:none}.nav-default>li{float:left}.nav-default>li>a{border-radius:4px}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:20px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#0c64eb}.nav-primary>li{float:left;margin-left:-1px}.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.nav-primary>li:last-child>a{border-top-right-radius:4px;border-bottom-right-radius:4px}.nav-primary>li>a{border:1px solid #cbd0db}.nav-primary>li.active>a,.nav-primary>li.active>a:focus,.nav-primary>li.active>a:hover{color:#fff;background-color:#0c64eb;border-color:#0c64eb}.nav-secondary>li{float:left}.nav-secondary>li>a{border-bottom:2px solid #eee}.nav-secondary>li.active>a,.nav-secondary>li.active>a:focus,.nav-secondary>li.active>a:hover{color:#0c64eb;border-bottom-color:#0c64eb}.nav-secondary>li.nav-heading{border-bottom:2px solid #eee}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-stacked.nav-primary>li,.nav-stacked.nav-primary>li>a{margin-left:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.nav-stacked.nav-primary>li+li{margin-top:-1px}.nav-stacked.nav-primary>li:first-child{margin-top:0}.nav-stacked.nav-primary>li:first-child.nav-heading,.nav-stacked.nav-primary>li:first-child>a{margin-left:0;border-top-left-radius:4px;border-top-right-radius:4px}.nav-stacked.nav-primary>li:last-child>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-stacked.nav-primary>li.nav-heading{background-color:#f1f1f1;border:1px solid #cbd0db}.nav-stacked.nav-secondary>li>a{border:none;border-top-right-radius:4px;border-bottom-right-radius:4px;-webkit-box-shadow:inset 2px 0 0 #f5f5f5;box-shadow:inset 2px 0 0 #f5f5f5}.nav-stacked.nav-secondary>li>a:hover{-webkit-box-shadow:inset 2px 0 0 #eee;box-shadow:inset 2px 0 0 #eee}.nav-stacked.nav-secondary>li+li{margin-top:-1px}.nav-stacked.nav-secondary>li:first-child{margin-top:0}.nav-stacked.nav-secondary>li.active>a,.nav-stacked.nav-secondary>li.active>a:focus,.nav-stacked.nav-secondary>li.active>a:hover{background-color:#f5f5f5;-webkit-box-shadow:inset 2px 0 0 #0c64eb;box-shadow:inset 2px 0 0 #0c64eb}.nav-stacked.nav-secondary>li.nav-heading{border-bottom:1px solid #cbd0db}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs{border-bottom:1px solid #cbd0db}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #cbd0db}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#838a9d;cursor:default;background-color:#fff;border:1px solid #cbd0db;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{padding-right:0;padding-left:0;margin-bottom:5px;text-align:center}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs.nav-justified.nav-primary>li+li>a{border-left:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}@-moz-document url-prefix(){.nav-tabs>li.active>a:focus .nav-tabs>li>a:focus{outline:0}}.nav-tabs.nav-stacked{border-right:1px solid #cbd0db;border-bottom:none}.nav-tabs.nav-stacked>li{float:none;margin-right:-1px;margin-bottom:0}.nav-tabs.nav-stacked>li>a{margin-right:0;border-radius:4px 0 0 4px}.nav-tabs.nav-stacked>li.active>a,.nav-tabs.nav-stacked>li.active>a:focus,.nav-tabs.nav-stacked>li.active>a:hover{border:1px solid #cbd0db;border-right-color:transparent}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #cbd0db}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #cbd0db;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:40px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:10px;padding-left:10px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-10px;margin-left:-10px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:40px;padding:10px 15px;font-size:14px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-10px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:3px;margin-right:3px;margin-bottom:3px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:5px -10px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px}.navbar-nav.nav-justified>li{float:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:4px;margin-bottom:4px}.navbar-text{float:left;margin-top:10px;margin-bottom:10px}@media (min-width:768px){.navbar-text{margin-right:10px;margin-left:10px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-10px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f7f7f7;border-color:#dedede}.navbar-default .navbar-brand{color:#3c4353}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#272b35;background-color:transparent}.navbar-default .navbar-text{color:#3c4353}.navbar-default .navbar-nav>li>a{color:#3c4353}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#cbd0db}.navbar-default .navbar-toggle .icon-bar{background-color:#838a9d}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#dedede}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#3c4353}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#222;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#3c4353}.navbar-default .navbar-link:hover{color:#222}.navbar-default .btn-link{color:#3c4353}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#222}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#16a8f8;border-color:#068cd5}.navbar-inverse .navbar-brand{color:#cbd0db}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#cbd0db}.navbar-inverse .navbar-nav>li>a{color:#cbd0db}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#079ced}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#0795e3}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#48baf9}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#068cd5}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#cbd0db}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:#34b3f9}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#48baf9}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#cbd0db}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-form{padding:10px 10px;margin-top:4px;margin-right:-10px;margin-bottom:4px;margin-left:-10px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{float:none;margin-left:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.scale{-webkit-transition:all .15s ease;-o-transition:all .15s ease;transition:all .15s ease;-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.scale.in{-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.scrollbar-hover::-webkit-scrollbar,.scrollbar-hover::-webkit-scrollbar-button,.scrollbar-hover::-webkit-scrollbar-thumb,.scrollbar-hover::-webkit-scrollbar-track{visibility:hidden}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-button,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:visible}@media (min-width:768px){::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button{width:0;height:0}::-webkit-scrollbar-button:end:increment,::-webkit-scrollbar-button:start:decrement{display:block}::-webkit-scrollbar-button:vertical:end:decrement,::-webkit-scrollbar-button:vertical:start:increment{display:none}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-color:transparent;border-style:solid}::-webkit-scrollbar-track:vertical::-webkit-scrollbar-track:horizontal{background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box}::-webkit-scrollbar-thumb{min-height:28px;background-color:rgba(0,0,0,.2);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:2px;-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.4);-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,.25)}::-webkit-scrollbar-thumb:active{background-color:rgba(0,0,0,.5);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.35)}::-webkit-scrollbar-thumb:horizontal,::-webkit-scrollbar-thumb:vertical,::-webkit-scrollbar-track:horizontal,::-webkit-scrollbar-track:vertical{border-width:0}::-webkit-scrollbar-track:hover{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.1)}::-webkit-scrollbar-track:active{background-color:rgba(0,0,0,.05);-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.14),inset -1px -1px 0 rgba(0,0,0,.07)}}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal>.loader{display:none}.modal.modal-loading .modal-dialog{opacity:0}.modal.modal-loading .loader{position:absolute;top:35%;left:50%;display:block;width:80px;margin-left:-40px;font-size:56px;color:#fff;text-align:center}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-iframe .modal-body{overflow:hidden!important}.modal-iframe .modal-body>iframe{border-radius:0 0 6px 6px}.modal-dialog{position:relative;width:auto;margin:0 auto;pointer-events:initial;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-dialog.modal-moveable{position:absolute;margin:0}.modal-dialog.modal-moveable .modal-header{cursor:move}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.modal-fullscreen{position:relative;width:100%!important;height:100%!important;margin:0;border-radius:0}.modal-fullscreen .modal-body{position:absolute;top:52px;right:0;bottom:0;left:0;overflow-y:auto}.body-modal-scroll-inside{overflow:auto}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=100);opacity:1}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#3c4353;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#3c4353}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#3c4353}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#3c4353}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#3c4353}.tooltip-primary .tooltip-inner{background-color:#0c64eb}.tooltip-primary.tooltip.top .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-left .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.top-right .tooltip-arrow{border-top-color:#0c64eb}.tooltip-primary.tooltip.right .tooltip-arrow{border-right-color:#0c64eb}.tooltip-primary.tooltip.left .tooltip-arrow{border-left-color:#0c64eb}.tooltip-primary.tooltip.bottom .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-primary.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#0c64eb}.tooltip-success .tooltip-inner{background-color:#00da88}.tooltip-success.tooltip.top .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-left .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.top-right .tooltip-arrow{border-top-color:#00da88}.tooltip-success.tooltip.right .tooltip-arrow{border-right-color:#00da88}.tooltip-success.tooltip.left .tooltip-arrow{border-left-color:#00da88}.tooltip-success.tooltip.bottom .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#00da88}.tooltip-success.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#00da88}.tooltip-info .tooltip-inner{background-color:#2196f3}.tooltip-info.tooltip.top .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-left .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.top-right .tooltip-arrow{border-top-color:#2196f3}.tooltip-info.tooltip.right .tooltip-arrow{border-right-color:#2196f3}.tooltip-info.tooltip.left .tooltip-arrow{border-left-color:#2196f3}.tooltip-info.tooltip.bottom .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-info.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#2196f3}.tooltip-warning .tooltip-inner{background-color:#ff9800}.tooltip-warning.tooltip.top .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-left .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.top-right .tooltip-arrow{border-top-color:#ff9800}.tooltip-warning.tooltip.right .tooltip-arrow{border-right-color:#ff9800}.tooltip-warning.tooltip.left .tooltip-arrow{border-left-color:#ff9800}.tooltip-warning.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-warning.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff9800}.tooltip-danger .tooltip-inner{background-color:#ff5d5d}.tooltip-danger.tooltip.top .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-left .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.top-right .tooltip-arrow{border-top-color:#ff5d5d}.tooltip-danger.tooltip.right .tooltip-arrow{border-right-color:#ff5d5d}.tooltip-danger.tooltip.left .tooltip-arrow{border-left-color:#ff5d5d}.tooltip-danger.tooltip.bottom .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-left .tooltip-arrow{border-bottom-color:#ff5d5d}.tooltip-danger.tooltip.bottom-right .tooltip-arrow{border-bottom-color:#ff5d5d}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:300px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:4px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover.no-arrow.top{margin-top:0}.popover.no-arrow.right{margin-left:0}.popover.no-arrow.bottom{margin-top:0}.popover.no-arrow.left{margin-left:0}.modal .popover,.popover-in-modal{z-index:1050}.popover-title{padding:8px 14px;margin:0;font-size:13px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{content:"";border-width:10px}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom .arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left .arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-primary{border-color:#0c64eb}.popover-primary .popover-title{color:#fff;background-color:#0c64eb}.popover-primary.popover.top .arrow{border-top-color:#0c64eb}.popover-primary.popover.right .arrow{border-right-color:#0c64eb}.popover-primary.popover.left .arrow{border-left-color:#0c64eb}.popover-primary.popover.bottom .arrow,.popover-primary.popover.bottom .arrow:after{border-bottom-color:#0c64eb}.popover-success{border-color:#00da88}.popover-success .popover-title{color:#fff;background-color:#00da88}.popover-success.popover.top .arrow{border-top-color:#00da88}.popover-success.popover.right .arrow{border-right-color:#00da88}.popover-success.popover.left .arrow{border-left-color:#00da88}.popover-success.popover.bottom .arrow,.popover-success.popover.bottom .arrow:after{border-bottom-color:#00da88}.popover-info{border-color:#2196f3}.popover-info .popover-title{color:#fff;background-color:#2196f3}.popover-info.popover.top .arrow{border-top-color:#2196f3}.popover-info.popover.right .arrow{border-right-color:#2196f3}.popover-info.popover.left .arrow{border-left-color:#2196f3}.popover-info.popover.bottom .arrow,.popover-info.popover.bottom .arrow:after{border-bottom-color:#2196f3}.popover-warning{border-color:#ff9800}.popover-warning .popover-title{color:#fff;background-color:#ff9800}.popover-warning.popover.top .arrow{border-top-color:#ff9800}.popover-warning.popover.right .arrow{border-right-color:#ff9800}.popover-warning.popover.left .arrow{border-left-color:#ff9800}.popover-warning.popover.bottom .arrow,.popover-warning.popover.bottom .arrow:after{border-bottom-color:#ff9800}.popover-danger{border-color:#ff5d5d}.popover-danger .popover-title{color:#fff;background-color:#ff5d5d}.popover-danger.popover.top .arrow{border-top-color:#ff5d5d}.popover-danger.popover.right .arrow{border-right-color:#ff5d5d}.popover-danger.popover.left .arrow{border-left-color:#ff5d5d}.popover-danger.popover.bottom .arrow,.popover-danger.popover.bottom .arrow:after{border-bottom-color:#ff5d5d}.caret{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:100px;padding:5px 0;margin:2px 0 0;font-size:13px;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#eee}.dropdown-menu>li>a{display:block;padding:5px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#3c4353;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#0c64eb;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#cbd0db}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.dropdown-hover .dropdown-menu{margin:-1px 0}.dropdown-hover:hover>.dropdown-menu,.open>.dropdown-menu{display:block}.dropdown-hover:hover>a,.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;font-weight:700;line-height:1.42857143;color:#838a9d}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0 dotted;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:4px}.dropdown-submenu.open>.dropdown-menu,.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;border-radius:4px}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;content:" ";border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu>a{min-width:100px}.dropdown-submenu>.dropdown-menu.pull-left{right:100%;left:auto}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#fff;text-decoration:none;background-color:#0c64eb}.messager{display:table;margin:10px;overflow:hidden;color:#fff;pointer-events:auto;background-color:#3c4353;background-color:rgba(0,0,0,.8);border-radius:20px;-webkit-transition-property:opacity,-webkit-transform!important;-o-transition-property:opacity,-o-transform!important;transition-property:opacity,-webkit-transform!important;transition-property:opacity,transform!important;transition-property:opacity,transform,-webkit-transform,-o-transform!important}.messager-content{display:table-cell;padding:10px 15px;vertical-align:top}.messager-content>[class^=icon-]{display:inline-block;margin-right:8px}.messager-actions{display:table-cell;vertical-align:top}.messager-actions>.action{min-width:40px;height:40px;padding:0 12px;color:#fafafa;color:rgba(255,255,255,.6);text-align:center;text-shadow:none;background:0 0;border:none}.messager-actions>.action.close{padding-bottom:5px;font-size:20px;font-weight:400;opacity:1}.messager-actions>.action:hover{color:#fff;background:rgba(0,0,0,.1)}.messager-actions .action-icon+.action-text{margin-left:8px}.messagers-holder{position:fixed;z-index:99999;padding:10px;pointer-events:none}.messagers-holder.top{top:0}.messagers-holder.top-left{top:0;left:0}.messagers-holder.top-right{top:0;right:0}.messagers-holder.bottom{bottom:0}.messagers-holder.bottom-left{bottom:0;left:0}.messagers-holder.bottom-right{right:0;bottom:0}.messagers-holder.bottom-right .messager,.messagers-holder.top-right .messager{margin-left:auto}.messagers-holder.center{top:0}.messagers-holder.bottom,.messagers-holder.center,.messagers-holder.top{right:0;left:0}.messagers-holder.bottom .messager,.messagers-holder.center .messager,.messagers-holder.top .messager{margin:10px auto}.messager-primary{background-color:#0c64eb}.messager-success{background-color:#00da88}.messager-info{background-color:#2196f3}.messager-warning{background-color:#ff9800}.messager-danger{background-color:#ff5d5d}.messager-important{background-color:#bd7b46}.messager-special{background-color:#8666b8}.article{padding:20px}.article>header h1,.article>header h2,.article>header h3{margin-bottom:20px;line-height:1.5}.article>header>.abstract,.article>header>dl{padding:10px 15px;font-size:12px;color:#67738e;background-color:#f1f1f1}.article>header>.abstract>p:last-child,.article>header>dl>p:last-child{margin-bottom:0}.article>header>dl{margin:0;border-bottom:1px solid #e9e9e9}.article>header>dl.pull-right{background-color:transparent;border:none}.article>footer{border-top:1px dashed #d8d8d8}.article>footer>p{padding:10px 15px}.article-content,.article>.content{padding:20px 0;font-size:14px;line-height:1.57142857}.article-content h1,.article>.content h1{font-size:20px}.article-content h2,.article>.content h2{font-size:18px}.article-content h3,.article>.content h3{font-size:16px}.article-content h4,.article>.content h4{margin-top:15px;font-size:14px}.article-content h5,.article>.content h5{margin-top:15px;font-size:13px}.article-content h6,.article>.content h6{margin-top:15px;font-size:11px}.article-content img,.article>.content img{margin:10px 0}.article-content p>img+img,.article>.content p>img+img{margin-left:10px}.article-content p>img[align=right],.article>.content p>img[align=right]{margin-left:10px}.article-content dl,.article>.content dl{padding-right:2em;padding-left:2em}.article-content table,.article>.content table{margin-bottom:20px}.article-content table td,.article-content table th,.article>.content table td,.article>.content table th{padding:8px 10px;line-height:1.42857143;vertical-align:top;border-bottom:1px solid #cbd0db}.article-content table>thead>tr>th,.article>.content table>thead>tr>th{vertical-align:bottom;background-color:transparent;border-bottom:1px solid #cbd0db}.article-content p{margin-bottom:0}.article-content table{width:100%}.article>.content table td,.article>.content table th,.article>.content table>thead>tr>th{border:1px solid #cbd0db}body.article-content{padding:8px}.article-condensed{padding:20px 0}.article-condensed>header{padding:0 20px}.article-condensed>header>.abstract,.article-condensed>header>dl{padding:10px 15px;margin:0 -20px}.article-condensed>.article-content,.article-condensed>.content{padding:20px}.article-condensed>.article-content>img,.article-condensed>.article-content>pre,.article-condensed>.content>img,.article-condensed>.content>pre{margin-right:-20px;margin-left:-20px;border-radius:0}.article-condensed>.article-content>pre,.article-condensed>.content>pre{border-right:none;border-left:none}.article-condensed>footer{border-top:1px dashed #d8d8d8}.article-condensed>footer>p{padding:10px 15px}.article-condensed>footer>.pager-justify>.previous>a{border-left:none;border-radius:0}.article-condensed>footer>.pager-justify>.next>a{border-right:none;border-radius:0}/*! * Datetimepicker for Bootstrap * Copyright 2012 Stefan Petre * Licensed under the Apache License v2.0 @@ -13,4 +13,4 @@ * * Copyright (c) 2011-2016 Harvest http://getharvest.com * MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md -*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#e65100}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#ffa000}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#fdd835}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#e65100}.label-severity-custom[data-severity="3"]{color:#ffa000}.label-severity-custom[data-severity="4"]{color:#fdd835}.label-severity-custom[data-severity="5"]{color:#cddc39}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.table-form textarea.form-control{height:32px}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s;-o-transition:left .2s;transition:left .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-stage,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file +*/.chosen-container{position:relative;display:inline-block;font-size:13px;vertical-align:middle;zoom:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;*display:inline}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;display:none;width:100%;background:#fff;border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-top:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container .chosen-drop.chosen-drop-size-limited{border-top:1px solid rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{display:block}.chosen-container a{cursor:pointer}.chosen-container.chosen-up .chosen-drop{top:inherit;bottom:100%;margin-top:auto;margin-bottom:-1px;border-radius:2px 2px 0 0;-webkit-box-shadow:0 -3px 5px rgba(0,0,0,.175);box-shadow:0 -3px 5px rgba(0,0,0,.175)}.chosen-container-single .chosen-single{display:block;width:100%;height:32px;padding:5px 8px;overflow:hidden;line-height:1.42857143;color:#222;text-decoration:none;white-space:nowrap;vertical-align:middle;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-single .chosen-default{color:#838a9d}.chosen-container-single .chosen-single>span{display:block;margin-right:26px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:7px;right:24px;display:block;width:20px;height:20px;font-size:19.5px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-single .chosen-single abbr:before{content:'×'}.chosen-container-single .chosen-single abbr:focus,.chosen-container-single .chosen-single abbr:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;height:100%;padding:5px 8px}.chosen-container-single .chosen-single div b{display:inline-block;width:0;height:0;margin-bottom:2px;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.chosen-container-single .chosen-search{position:relative;z-index:1010;padding:3px 4px;margin:0;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{width:100%;height:27px;padding:2px 26px 2px 8px;margin:1px 0;font-size:12px;line-height:1.5;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;outline:0}.chosen-container-single .chosen-search input[type=text]:focus{border-color:#0c64eb}.chosen-container-single .chosen-search:before{position:absolute;top:10px;right:10px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-single .chosen-drop{margin-top:-1px;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:0 0 4px 4px}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{position:relative;max-height:240px;padding:0;margin:0;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;padding:5px 10px;margin:0;line-height:15px;list-style:none;-webkit-transition:background-color .2s cubic-bezier(.175,.885,.32,1);-o-transition:background-color .2s cubic-bezier(.175,.885,.32,1);transition:background-color .2s cubic-bezier(.175,.885,.32,1);-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{color:#fff;background-color:#0c64eb}.chosen-container .chosen-results li.no-results{display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;width:100%;min-height:32px;min-height:30px\9;padding:0;margin:0;overflow:hidden;cursor:text;background-color:#fff;border:1px solid #dcdcdc;border-radius:2px;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s,-webkit-box-shadow ease-in-out .15s}.chosen-container-multi .chosen-choices:after,.chosen-container-multi .chosen-choices:before{display:table;content:" "}.chosen-container-multi .chosen-choices:after{clear:both}.chosen-container-multi .chosen-choices li{display:block;float:left;padding:0 6px;margin:5px 0 0 6px;list-style:none}.chosen-container-multi .chosen-choices li.search-field{padding:0;margin-bottom:4px;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:20px;font-size:100%;color:#838a9d;background:0 0!important;border:0!important;border-radius:0;outline:0;-webkit-box-shadow:none;box-shadow:none}.chosen-container-multi .chosen-choices li.search-field .default{color:#999}.chosen-container-multi .chosen-choices li.search-field:before{position:absolute;right:8px;bottom:8px;display:block;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:#838a9d;text-transform:none;content:"\e928";opacity:0;-webkit-transition:opacity .2s cubic-bezier(.175,.885,.32,1);-o-transition:opacity .2s cubic-bezier(.175,.885,.32,1);transition:opacity .2s cubic-bezier(.175,.885,.32,1);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;line-height:12px;cursor:default;background-color:#f1f1f1;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #cbd0db;border-radius:3px;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);-webkit-transition:all .4s cubic-bezier(.175,.885,.32,1);-o-transition:all .4s cubic-bezier(.175,.885,.32,1);transition:all .4s cubic-bezier(.175,.885,.32,1)}.chosen-container-multi .chosen-choices li.search-choice:hover{background-color:#fff;border-color:#adb5c6;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.1);box-shadow:0 1px 0 rgba(0,0,0,.1)}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:0;right:0;display:block;width:20px;height:20px;font-size:15.6px;font-weight:700;line-height:14px;color:#000;text-align:center;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:before{content:'×'}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:focus,.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;color:#666;background-color:#e4e4e4;border:1px solid #ccc}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{padding:5px 0;margin:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #b6bdcc;border:1px solid rgba(0,0,0,.15);border-bottom-right-radius:0;border-bottom-left-radius:0;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active.chosen-with-drop .chosen-single div{background:0 0;border-left:none}.chosen-container-active.chosen-with-drop .chosen-single div b{content:"";border-top:0 dotted;border-bottom:4px solid}.chosen-container-active.chosen-with-drop.chosen-up .chosen-single{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.chosen-container-active .chosen-choices{border-color:#0c64eb;-webkit-box-shadow:none,0 0 8px rgba(12,100,235,.6);box-shadow:none,0 0 8px rgba(12,100,235,.6)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#111!important}.chosen-container-active .chosen-choices li.search-field:before{opacity:1}.chosen-disabled{cursor:default;opacity:.5!important}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{left:0;display:none;padding:3px 4px;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:25px;padding:2px 26px 2px 4px;font-size:inherit}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:9px}.chosen-compact.chosen-with-search.chosen-with-drop .chosen-single>.chosen-search{display:block;opacity:1}.container,.container-fixed,.container-fluid{position:relative}.container{max-width:1800px!important}body{padding-bottom:40px;background-color:#efefef}body.article-content,body.body-modal{background:0 0}body.body-modal{padding:0}a:active,a:focus,button:active,button:focus{outline:0!important}em{font-style:normal}.strong{font-weight:700}.font-normal{font-weight:400!important}.text-middle{vertical-align:middle!important}.text-bottom{vertical-align:bottom!important}.text-top{vertical-align:top!important}.inline-block{display:inline-block!important}.layer{border-radius:4px;-webkit-box-shadow:0 0 20px 0 #bdc9d8;box-shadow:0 0 20px 0 #bdc9d8}.space{margin-bottom:20px}.space-lg{margin-bottom:30px}.space-sm{margin-bottom:10px}.muted{opacity:.5}.text-muted em{color:#3c4353}.no-animate{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.template{display:none!important}.text-left{text-align:left!important}.text-yellow.icon-folder{color:#ffe066}.table-row{display:table;width:100%;table-layout:fixed}.table-col,.table-row>.col,.table-row>[class*=col-],.table-row>[class*="-col"]{display:table-cell;float:none;vertical-align:top}.side-col{width:200px;padding-right:20px}.side-col.col-4{width:33.3333333%}.col-lg{width:260px}.col-xl{width:320px}.col-sm{width:150px}.col-xs{width:100px}.main-col+.side-col{padding-right:0;padding-left:20px}.row-grid>[class*=col-],.row-grid>[class*="-col"]{padding-top:6px;padding-bottom:6px}hr.space{margin:10px 0;border:none}hr.space-sm{margin:5px 0;border:none}.text-secondary{color:#16a8f8}a.text-primary{color:#0c64eb}.nav-primary>li>a{min-width:100px;padding:5px 8px;color:#838a9d;border-color:#e7f1fc}.nav-primary>li.active>a{color:#0c64eb;background-color:#e7f1fc;border-color:#e7f1fc}.nav-primary>li.active>a:hover{color:#0c64eb;background-color:#c3dcf7;border-color:#c3dcf7}.end-marker{margin-bottom:20px;color:#cbd0db;text-align:center}@-webkit-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@-o-keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}@keyframes highlight{0%{background:#fff;outline:1px solid transparent}100%{background:#fff0d5;outline:2px solid #ffdcbc}}.highlight{-webkit-animation:highlight .5s linear 0s 2 alternate;-o-animation:highlight .5s linear 0s 2 alternate;animation:highlight .5s linear 0s 2 alternate}.progress.inline-block{width:100px;margin:0}.w-p5{width:5%!important}.w-p10{width:10%!important}.w-p15{width:15%!important}.w-p20{width:20%!important}.w-p25{width:25%!important}.w-p30{width:30%!important}.w-p35{width:35%!important}.w-p40{width:40%!important}.w-p45{width:45%!important}.w-p50{width:50%!important}.w-p55{width:55%!important}.w-p60{width:60%!important}.w-p65{width:65%!important}.w-p70{width:70%!important}.w-p75{width:75%!important}.w-p80{width:80%!important}.w-p85{width:85%!important}.w-p90{width:90%!important}.w-p94{width:94%!important}.w-p95{width:95%!important}.w-p98{width:98%!important}.w-p99{width:99%!important}.w-p100{width:100%!important}.w-auto{width:auto!important}.w-10px{width:10px!important}.w-20px{width:20px!important}.w-30px{width:30px!important}.w-35px{width:35px!important}.w-40px{width:40px!important}.w-45px{width:45px!important}.w-50px{width:50px!important}.w-60px{width:60px!important}.w-70px{width:70px!important}.w-80px{width:80px!important}.w-90px{width:90px!important}.w-100px{width:100px!important}.w-110px{width:110px!important}.w-120px{width:120px!important}.w-130px{width:130px!important}.w-140px{width:140px!important}.w-150px{width:150px!important}.w-160px{width:160px!important}.w-180px{width:180px!important}.w-200px{width:200px!important}.w-230px{width:230px!important}.w-250px{width:250px!important}.w-300px{width:300px!important}.w-400px{width:400px!important}.w-500px{width:500px!important}.w-600px{width:600px!important}.w-700px{width:700px!important}.w-800px{width:800px!important}.w-900px{width:900px!important}.mw-200px{max-width:200px!important}.mw-300px{max-width:300px!important}.mw-400px{max-width:400px!important}.mw-500px{max-width:500px!important}.mw-600px{max-width:600px!important}.mw-700px{max-width:700px!important}.mw-800px{max-width:800px!important}.mw-900px{max-width:900px!important}.mw-1400px{max-width:1400px!important}.w-id{width:70px!important}.w-pri{width:40px!important}.w-severity{width:50px!important}.w-hour{width:57px!important}.w-date{width:90px!important}.w-status{width:60px!important}.w-resolution,.w-type,.w-user{width:80px!important}.w-p15-f{width:15%!important;min-width:120px!important}.w-p25-f{width:25%!important;min-width:200px!important}.w-p35-f{width:35%!important;min-width:300px!important}.w-p45-f{width:45%!important;min-width:400px!important}.h-5px{height:5px!important}.h-10px{height:10px!important}.h-20px{height:20px!important}.h-30px{height:30px!important}.h-35px{height:35px!important}.h-40px{height:40px!important}.h-45px{height:45px!important}.h-50px{height:50px!important}.h-60px{height:60px!important}.h-70px{height:70px!important}.h-80px{height:80px!important}.h-100px{height:100px!important}.h-120px{height:120px!important}.h-130px{height:130px!important}.h-140px{height:140px!important}.h-150px{height:150px!important}.h-200px{height:200px!important}.pd-0{padding:0!important}.mg-0{margin:0!important}.mgb-20{margin-bottom:20px!important}.mgb-10{margin-bottom:10px!important}.pdb-20{padding-bottom:20px!important}.pdt-20{padding-top:20px!important}.br-0{border-radius:0!important}.bd-0,.bd-none,.borderless{border:none!important}.bg-none{background:0 0!important}.red{color:#ff5d5d!important}.icon-pro-version{font-size:14px!important}.icon-pro-version:before{position:relative;top:-1px;font-size:14px;color:#ff5d5d;content:"\e92b"}.bg-primary{color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#00b1fd}.bg-secondary{color:#fff;background:#16a8f8}.hl-tutorial{position:relative!important;z-index:1010!important;-webkit-box-shadow:0 0 0 0 #000!important;box-shadow:0 0 0 0 #000!important;-webkit-transition:-webkit-box-shadow 1s!important;-o-transition:box-shadow 1s!important;transition:-webkit-box-shadow 1s!important;transition:box-shadow 1s!important;transition:box-shadow 1s,-webkit-box-shadow 1s!important}.hl-tutorial.hl-in{-webkit-box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important;box-shadow:0 0 20px 0 #ffff8d,0 0 0 2px #ffd180,0 0 0 2000px rgba(0,0,0,.2)!important}.btn.tooltip-tutorial,.hl-tutorial.hl-in:hover{-webkit-box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important;box-shadow:0 0 30px 0 #ffff8d,0 0 0 5px #ffd180,0 0 0 2000px rgba(0,0,0,.3)!important}.tooltip-max .tooltip-inner{max-width:1000px;padding:8px 10px}.transition-all *{-webkit-transition:all .2s!important;-o-transition:all .2s!important;transition:all .2s!important}.scroll-x{overflow-x:auto!important}.scroll-y{overflow-y:auto!important}.divider+.divider{display:none}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(../fonts/ZentaoIcon.eot?v=1.1.0);src:url(../fonts/ZentaoIcon.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/ZentaoIcon.woff?v=1.1.0) format('woff'),url(../fonts/ZentaoIcon.ttf?v=1.1.0) format('truetype'),url(../fonts/ZentaoIcon.svg#regular?v=1.1.0) format('svg')}.icon,[class*=" icon-"],[class^=icon-]{font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon:before{display:inline-block;min-width:18px;text-align:center}a .icon,a [class*=" icon-"],a [class^=icon-]{display:inline}.icon-lg:before{font-size:1.33333333em;vertical-align:-10%}.icon-2x{font-size:36px}.icon-3x{font-size:54px}.icon-4x{font-size:72px}.icon-5x{font-size:90px}.icon-spin{display:inline-block;-webkit-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-spin{display:inline-block;text-decoration:none}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);-o-transform:rotate(359deg);transform:rotate(359deg)}}.icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.icon-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.icon-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.icon.icon-flip-horizontal,.icon.icon-flip-vertical,.icon.icon-rotate-180,.icon.icon-rotate-270,.icon.icon-rotate-90{display:inline-block}.icon-book:before{content:"\f02d"}.icon-treemap-alt:before{content:"\e971"}.icon-collapse-alt:before{content:"\e6f2"}.icon-expand-alt:before{content:"\e6f1"}.icon-more:before{content:"\e744"}.icon-angle-double-right:before{content:"\f101"}.icon-certificate:before{content:"\f0a3"}.icon-bell:before{content:"\e7f5"}.icon-format-bold:before{content:"\e953"}.icon-format-header-pound:before{content:"\e954"}.icon-format-italic:before{content:"\e955"}.icon-format-list-bulleted:before{content:"\e956"}.icon-format-list-numbers:before{content:"\e969"}.icon-format-quote-close:before{content:"\e96a"}.icon-fullscreen:before{content:"\e96b"}.icon-fullscreen-exit:before{content:"\e972"}.icon-image:before{content:"\e96c"}.icon-table-large:before{content:"\e96d"}.icon-columns:before{content:"\f0db"}.icon-cancel:before{content:"\e951"}.icon-ban-circle:before{content:"\e951"}.icon-persons:before{content:"\e94d"}.icon-eye:before{content:"\e94e"}.icon-unlock:before{content:"\e94f"}.icon-eye-off:before{content:"\e96e"}.icon-lock:before{content:"\e950"}.icon-move:before{content:"\e94c"}.icon-help:before{content:"\e968"}.icon-folder-account:before{content:"\e942"}.icon-folder-move:before{content:"\e960"}.icon-folder-plus:before{content:"\e961"}.icon-folder-upload:before{content:"\e962"}.icon-folder-star:before{content:"\e963"}.icon-folder-edit:before{content:"\e964"}.icon-folder-download:before{content:"\e965"}.icon-folder-outline:before{content:"\e966"}.icon-restart:before{content:"\e95e"}.icon-history:before{content:"\e95f"}.icon-home:before{content:"\e958"}.icon-pencil:before{content:"\e254"}.icon-angle-down:before{content:"\e313"}.icon-angle-left:before{content:"\e314"}.icon-angle-right:before{content:"\e315"}.icon-angle-top:before{content:"\e316"}.icon-first-page:before{content:"\e5dc"}.icon-last-page:before{content:"\e5dd"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-zentao-alt:before{content:"\e900"}.icon-zentao:before{content:"\e901"}.icon-severity:before{content:"\e973"}.icon-severity-solid:before{content:"\e902"}.icon-bar-chart:before{content:"\e903"}.icon-import:before{content:"\e904"}.icon-export:before{content:"\e905"}.icon-printer:before{content:"\e906"}.icon-hand-right:before{content:"\e907"}.icon-hand-right-alt:before{content:"\e96f"}.icon-checked:before{content:"\e908"}.icon-off:before{content:"\e909"}.icon-start:before{content:"\e90a"}.icon-play:before{content:"\e90a"}.icon-time:before{content:"\e90b"}.icon-edit:before{content:"\e90c"}.icon-trash:before{content:"\e90d"}.icon-link:before{content:"\e90e"}.icon-unlink:before{content:"\e90f"}.icon-bullhorn:before{content:"\e910"}.icon-bug:before{content:"\e911"}.icon-list-alt:before{content:"\e912"}.icon-fork:before{content:"\e913"}.icon-change:before{content:"\e970"}.icon-glasses:before{content:"\e914"}.icon-sitemap:before{content:"\e915"}.icon-plus-sign:before{content:"\e916"}.icon-pluses:before{content:"\e917"}.icon-flag-alt:before{content:"\e918"}.icon-magic:before{content:"\e919"}.icon-treemap:before{content:"\e91a"}.icon-confirm:before{content:"\e91b"}.icon-lightbulb:before{content:"\e91c"}.icon-delay:before{content:"\e91d"}.icon-calendar:before{content:"\e91d"}.icon-pause:before{content:"\e91e"}.icon-ban:before{content:"\e91f"}.icon-plus-bold:before{content:"\e920"}.icon-copy:before{content:"\e921"}.icon-refresh:before{content:"\e922"}.icon-arrow-up:before{content:"\e923"}.icon-arrow-down:before{content:"\e924"}.icon-arrow-left:before{content:"\e952"}.icon-arrow-right:before{content:"\e93e"}.icon-plus:before{content:"\e925"}.icon-minus:before{content:"\e926"}.icon-exchange:before{content:"\e927"}.icon-search:before{content:"\e928"}.icon-envelope-o:before{content:"\e92a"}.icon-check:before{content:"\e5ca"}.icon-circle:before{content:"\e836"}.icon-up-circle:before{content:"\e92b"}.icon-right-circle:before{content:"\e92c"}.icon-down-circle:before{content:"\e92d"}.icon-left-circle:before{content:"\e92e"}.icon-check-circle:before{content:"\e92f"}.icon-exclamation-sign:before{content:"\e930"}.icon-unfold-all:before{content:"\e931"}.icon-fold-all:before{content:"\e932"}.icon-plus-sm:before{content:"\e933"}.icon-chevron-left:before{content:"\e934"}.icon-chevron-right:before{content:"\e935"}.icon-close:before{content:"\e936"}.icon-flag:before{content:"\e937"}.icon-check-sign:before{content:"\e938"}.icon-minus-sign:before{content:"\e939"}.icon-bars-sign:before{content:"\e93a"}.icon-cog:before{content:"\e93b"}.icon-color:before{content:"\e93c"}.icon-paper-clip:before{content:"\e93d"}.icon-back:before{content:"\e93f"}.icon-chat-line:before{content:"\e940"}.icon-person:before{content:"\e941"}.icon-stack:before{content:"\e943"}.icon-cube:before{content:"\e967"}.icon-folder:before{content:"\e944"}.icon-folder-o:before{content:"\e945"}.icon-folder-open-o:before{content:"\e946"}.icon-folder-open:before{content:"\e947"}.icon-bars:before{content:"\e948"}.icon-cards-view:before{content:"\e949"}.icon-star-empty:before{content:"\e94a"}.icon-star:before{content:"\e94b"}.icon-ellipsis-v:before{content:"\e5d4"}.icon-spinner-indicator:before{content:"\e982"}.icon-text:before{content:"\e929"}.icon-code:before{content:"\e957"}.icon-chevron-double-up:before{content:"\e959"}.icon-chevron-double-down:before{content:"\e95a"}.icon-chart-pie:before{content:"\e95b"}.icon-chart-line:before{content:"\e95c"}.icon-chart-bar:before{content:"\e95d"}.icon-globe:before{content:"\f0ac"}.icon-file:before{content:"\f016"}.icon-file-empty:before{content:"\f016"}.icon-file-text:before{content:"\f0f6"}.icon-file-alt:before{content:"\f15b"}.icon-file-text-alt:before{content:"\f15c"}.icon-file-pdf:before{content:"\f1c1"}.icon-file-word:before{content:"\f1c2"}.icon-file-excel:before{content:"\f1c3"}.icon-file-powerpoint:before{content:"\f1c4"}.icon-file-image:before{content:"\f1c5"}.icon-file-archive:before{content:"\f1c6"}.icon-file-audio:before{content:"\f1c7"}.icon-file-video:before{content:"\f1c8"}.icon-file-code:before{content:"\f1c9"}.icon-sm:before{font-size:14px;vertical-align:10%}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:13px;font-weight:400;line-height:18px;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px;-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background,border,outline,opacity,-webkit-box-shadow;-o-transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,outline,opacity,-webkit-box-shadow;transition-property:background,border,box-shadow,outline,opacity;transition-property:background,border,box-shadow,outline,opacity,-webkit-box-shadow}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#3c4353;text-decoration:none}.btn:active{text-decoration:none;background-image:none;outline:0;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.1)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:grayscale(1);-webkit-box-shadow:none;box-shadow:none;opacity:.5;-webkit-filter:grayscale(1)}.btn{color:#3c4353;background-color:#fff;border-color:#d6dae3}.btn.active,.btn.hover,.btn:active,.btn:focus,.btn:hover,.open .dropdown-toggle.btn{color:#3c4353;background-color:rgba(255,255,255,.8);border-color:#b8bfce}.btn.active,.btn:active,.open .dropdown-toggle.btn{background-color:#f2f2f2;background-image:none;border-color:#b8bfce}.btn.disabled,.btn.disabled.active,.btn.disabled:active,.btn.disabled:focus,.btn.disabled:hover,.btn[disabled],.btn[disabled].active,.btn[disabled]:active,.btn[disabled]:focus,.btn[disabled]:hover,fieldset[disabled] .btn,fieldset[disabled] .btn.active,fieldset[disabled] .btn:active,fieldset[disabled] .btn:focus,fieldset[disabled] .btn:hover{color:rgba(60,67,83,.3);background-color:#fff;border-color:#d6dae3}.btn-gray{color:#82899f;background-color:#f1f1f1;border-color:#f1f1f1}.btn-gray.active,.btn-gray.hover,.btn-gray:active,.btn-gray:focus,.btn-gray:hover,.open .dropdown-toggle.btn-gray{color:#82899f;background-color:rgba(241,241,241,.8);border-color:#d8d8d8}.btn-gray.active,.btn-gray:active,.open .dropdown-toggle.btn-gray{background-color:#e4e4e4;background-image:none;border-color:#d8d8d8}.btn-gray.disabled,.btn-gray.disabled.active,.btn-gray.disabled:active,.btn-gray.disabled:focus,.btn-gray.disabled:hover,.btn-gray[disabled],.btn-gray[disabled].active,.btn-gray[disabled]:active,.btn-gray[disabled]:focus,.btn-gray[disabled]:hover,fieldset[disabled] .btn-gray,fieldset[disabled] .btn-gray.active,fieldset[disabled] .btn-gray:active,fieldset[disabled] .btn-gray:focus,fieldset[disabled] .btn-gray:hover{color:rgba(130,137,159,.3);background-color:#f1f1f1;border-color:#f1f1f1}.btn-primary{color:#fff;background-color:#0c64eb;border-color:transparent}.btn-primary.active,.btn-primary.hover,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:rgba(12,100,235,.8);border-color:rgba(0,0,0,0)}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-color:#0b5ad3;background-image:none;border-color:rgba(0,0,0,0)}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{color:rgba(255,255,255,.3);background-color:#0c64eb;border-color:transparent}.btn-secondary{color:#fff;background-color:#16a8f8;border-color:transparent}.btn-secondary.active,.btn-secondary.hover,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open .dropdown-toggle.btn-secondary{color:#fff;background-color:rgba(22,168,248,.8);border-color:rgba(0,0,0,0)}.btn-secondary.active,.btn-secondary:active,.open .dropdown-toggle.btn-secondary{background-color:#079ced;background-image:none;border-color:rgba(0,0,0,0)}.btn-secondary.disabled,.btn-secondary.disabled.active,.btn-secondary.disabled:active,.btn-secondary.disabled:focus,.btn-secondary.disabled:hover,.btn-secondary[disabled],.btn-secondary[disabled].active,.btn-secondary[disabled]:active,.btn-secondary[disabled]:focus,.btn-secondary[disabled]:hover,fieldset[disabled] .btn-secondary,fieldset[disabled] .btn-secondary.active,fieldset[disabled] .btn-secondary:active,fieldset[disabled] .btn-secondary:focus,fieldset[disabled] .btn-secondary:hover{color:rgba(255,255,255,.3);background-color:#16a8f8;border-color:transparent}.btn-warning{color:#fff;background-color:#ff9800;border-color:transparent}.btn-warning.active,.btn-warning.hover,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:rgba(255,152,0,.8);border-color:rgba(0,0,0,0)}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-color:#e68900;background-image:none;border-color:rgba(0,0,0,0)}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{color:rgba(255,255,255,.3);background-color:#ff9800;border-color:transparent}.btn-danger{color:#fff;background-color:#ff5d5d;border-color:transparent}.btn-danger.active,.btn-danger.hover,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:rgba(255,93,93,.8);border-color:rgba(0,0,0,0)}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-color:#ff4343;background-image:none;border-color:rgba(0,0,0,0)}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{color:rgba(255,255,255,.3);background-color:#ff5d5d;border-color:transparent}.btn-success{color:#fff;background-color:#00da88;border-color:transparent}.btn-success.active,.btn-success.hover,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:rgba(0,218,136,.8);border-color:rgba(0,0,0,0)}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-color:#00c178;background-image:none;border-color:rgba(0,0,0,0)}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{color:rgba(255,255,255,.3);background-color:#00da88;border-color:transparent}.btn-info{color:#0c64eb;background-color:#e9f2fb;border-color:transparent}.btn-info.active,.btn-info.hover,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#0c64eb;background-color:rgba(233,242,251,.8);border-color:rgba(0,0,0,0)}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-color:#d3e5f7;background-image:none;border-color:rgba(0,0,0,0)}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{color:rgba(12,100,235,.3);background-color:#e9f2fb;border-color:transparent}.btn-link{padding-right:6px;padding-left:6px;font-weight:400;color:#3c4353;text-shadow:none;cursor:pointer;background:0 0;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover,.btn-link[disabled],fieldset[disabled] .btn-link{border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:focus,.btn-link:hover{color:#222;background:#f1f1f1;background:rgba(0,0,0,.075)}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#cbd0db;text-decoration:none}.btn-lg{padding:11px 16px;font-size:14px;line-height:18px;border-radius:4px}.btn-mini,.btn-sm{padding:3px 8px;font-size:12px;line-height:18px;border-radius:4px}.btn-mini,.btn-xs{padding:0 5px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-wide{min-width:120px}.btn-limit{max-width:180px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-limit>.caret{position:absolute;top:14px;right:8px}.btn-circle{border-radius:17px}.btn>.label-icon{top:3px;padding:3px;margin:-2px;background-color:rgba(0,0,0,.2);border-radius:12px}.btn>.label-icon>.icon{font-size:16px;line-height:18px}.btn>.icon+.text{margin-left:5px}.btn.btn-sm.btn-circle{border-radius:12px}.btn.btn-sm>.label-icon{top:2px;width:20px;height:20px;padding:1px;line-height:20px}.btn.btn-sm>.label-icon>.icon{position:relative;top:-1px;display:inline-block;font-size:14px;line-height:18px}.btn-icon-left{position:relative;padding-left:35px;overflow:hidden;text-align:right}.btn-icon-left>.label-icon{position:absolute;left:5px;margin:0}.btn-icon-left>.icon{position:absolute;top:0;bottom:0;left:0;display:block;width:30px;line-height:30px;color:#16a8f8;text-align:center;background:#e9f2fb}.btn-icon-left.btn-sm{padding-left:28px}.btn-icon-left.btn-sm>.label-icon{left:2px}.btn-icon-left.btn-sm>.icon{width:24px;line-height:24px}.btn-icon-right{position:relative;padding-right:35px;text-align:left}.btn-icon-right>.label-icon{position:absolute;right:5px;margin:0}.btn-icon-right.btn-sm{padding-right:28px}.btn-icon-right.btn-sm>.label-icon{right:2px}.btn-icon{min-width:32px;padding-right:0;padding-left:0}.btn-icon.btn-sm{width:24px;min-width:24px;height:24px}.btn-group{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group>.btn-group{float:left}.btn-group>.btn{border-radius:0}.btn-group>.btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.btn-group>.btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.dropdown{float:left;margin-right:10px}.btn-toolbar>.btn-group:last-child,.btn-toolbar>.btn:last-child,.btn-toolbar>.dropdown:last-child{margin-right:0}.btn-toolbar>.divider{float:left;height:20px;margin:7px 5px 4px 10px;border-left:1px solid rgba(0,0,0,.1)}.btn-toolbar .space{float:left;min-height:1px;margin:0 10px 0 10px}.btn-toolbar .input-control{float:left;width:120px}.btn-toolbar .page-title{float:left;line-height:34px}.btn-toolbar .page-title .text{font-size:14px;font-weight:700}.btn-toolbar .page-title .label{top:-2px;margin-right:10px}.btn-toolbar .divider+.page-title{margin-left:15px}.btn-active-line{position:relative;font-weight:700;color:#0c64eb}.btn-active-line:after{position:absolute;right:5px;bottom:1px;left:5px;display:block;content:' ';border-bottom:2px solid #0c64eb}.btn-active-line:hover{color:#0c64eb}.btn-active-text .text{position:relative;top:-1px;display:inline-block;font-weight:700;color:#0c64eb}.btn-active-text .text:after{position:absolute;bottom:-5px;display:block;width:100%;content:' ';border-bottom:2px solid #0c64eb}.angle-btn{position:relative;padding:1px;background:#fff;border:1px solid #cbd0db;border-right:none}.btn-toolbar>.angle-btn{margin-right:8px}.angle-btn:after,.angle-btn:before{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn:after{right:-7px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.angle-btn .btn{padding:6px;font-weight:700;background:#fff;border:none;border-radius:4px!important}.angle-btn .btn.btn-limit{padding-right:16px}.angle-btn .btn.btn-limit>.caret{right:4px}.angle-btn+.angle-btn{border-left:none}.angle-btn+.angle-btn>.btn-group:first-child{padding-left:8px}.angle-btn+.angle-btn>.btn-group:first-child:after,.angle-btn+.angle-btn>.btn-group:first-child:before{position:absolute;top:-2px;left:0;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #cbd0db;border-style:solid;border-width:17px 0 17px 8px}.angle-btn+.angle-btn>.btn-group:first-child:after{left:-1px;border-color:transparent transparent transparent #fff;border-width:17px 0 17px 8px}.btn-toolbar>.angle-btn.active,.btn-toolbar>.angle-btn:last-child{border-color:#0c64eb}.btn-toolbar>.angle-btn.active .btn,.btn-toolbar>.angle-btn:last-child .btn{color:#0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn.active:before,.btn-toolbar>.angle-btn:last-child:after,.btn-toolbar>.angle-btn:last-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn.active:after,.btn-toolbar>.angle-btn:last-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:before,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before{border-color:transparent transparent transparent #0c64eb}.btn-toolbar>.angle-btn+.angle-btn:last-child>.btn-group:first-child:after,.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn,.btn-toolbar>.angle-btn.normal{border-color:#cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn .btn,.btn-toolbar>.angle-btn.normal .btn{color:#3c4353}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.active+.angle-btn:before,.btn-toolbar>.angle-btn.normal:after,.btn-toolbar>.angle-btn.normal:before{border-color:transparent transparent transparent #cbd0db}.btn-toolbar>.angle-btn.active+.angle-btn:after,.btn-toolbar>.angle-btn.normal:after{border-color:transparent transparent transparent #fff}.btn-toolbar>.angle-btn.active+.angle-btn>.btn-group:first-child:before,.btn-toolbar>.angle-btn.normal>.btn-group:first-child:before{border-color:transparent transparent transparent #cbd0db!important}.nav>li>.btn.btn-primary{color:#fff}.nav>li>.btn.btn-primary:focus,.nav>li>.btn.btn-primary:hover{background:rgba(12,100,235,.8)}.label{position:relative;display:inline-block;padding:3px 5px;font-size:12px;font-weight:400;vertical-align:middle;border-radius:2px}.label+.label{margin-left:4px}.label-pale{background:#bed8f3!important}.label-badge{border-radius:9px}.label-light{color:#3c4353;background-color:#ddd}.label-primary{background:#0c64eb!important}.label-gray{color:#878da0;background:#e8ebef}.label-outline.label-danger{color:#ff5d5d;background:#ffebee;border-color:rgba(255,93,93,.25)}.label-outline.label-light{color:#838a9d;background:#f2f5fb;border-color:#e1e5ee}.label-primary.label-outline{background:#e9f2fb!important;border-color:rgba(12,100,235,.25)}.label-outline.label-success{background:#e8f5e9;border-color:rgba(0,218,136,.25)}.label-dot{position:relative;top:-1px;padding:0;border-radius:50%}.label-dot+.status-text{display:inline-block;margin-left:5px}.label-icon{min-width:18px;padding:0;line-height:18px;border-radius:10px}.label-id{display:inline-block;min-width:30px;padding:0 5px;font-size:12px;line-height:16px;color:#838a9d;text-align:center;vertical-align:middle;background-color:transparent;border:1px solid #838a9d;border-radius:2px}.pri-1,.todo-pri-1{color:#ff5d5d}[class*=" status-"],[class^=status-]{color:#3c4353}.status-changed,.status-delayed,.status-doing,.status-fail,.status-investigate{color:#ff5d5d}.status-changed>.label-dot,.status-delayed>.label-dot,.status-doing>.label-dot,.status-fail>.label-dot,.status-investigate>.label-dot{background-color:#ff5d5d}.status-wait{color:#838a9d}.status-wait>.label-dot{background-color:#7ec5ff}.status-unclosed{color:#838a9d}.status-unclosed>.label-dot{background-color:#0c64eb}.status-done,.status-normal,.status-pass,.status-resolved{color:#43a047}.status-done>.label-dot,.status-normal>.label-dot,.status-pass>.label-dot,.status-resolved>.label-dot{background-color:#00da88}.status-postpone{color:#838a9d}.status-postpone>.label-dot{background-color:#ff5d5d}.status-blocked{position:relative;left:-5px;display:inline-block;padding:0 5px;line-height:20px;color:#3c4353;background:#fff3e0;border-radius:10px}.status-blocked>.label-dot{background-color:#ff9800}.status-pause,.status-suspended{color:#ff9800}.status-pause>.label-dot,.status-suspended>.label-dot{background-color:#ff9800}.status-active.status-bug,.status-draft{color:#8666b8}.status-active.status-bug>.label-dot,.status-draft>.label-dot{background-color:#8666b8}.status-closed,.status-terminate{color:#838a9d}.status-closed>.label-dot,.status-terminate>.label-dot{background-color:#838a9d}.status-cancel{color:#838a9d}.status-cancel>.label-dot{background-color:#cbd0db}.label-pri{display:inline-block;min-width:20px;max-width:67px;height:20px;padding:0 4px;overflow:hidden;line-height:17px;color:#838a9d;text-align:center;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;border:2px solid #838a9d;border-radius:10px}.label-selector>.label-pri,[class*=label-pri-]{color:#158af1;border-color:#2098ee}.label-pri-1,.label-selector>.label-pri[data-value="1"]{color:#d50000;border-color:#d50000}.label-pri-2,.label-selector>.label-pri[data-value="2"]{color:#ff9800;border-color:#ff9800}.label-pri-3,.label-selector>.label-pri[data-value="3"]{color:#2098ee;border-color:#2098ee}.label-pri-4,.label-selector>.label-pri[data-value="4"]{color:#009688;border-color:#009688}.label-pri-5,.label-selector>.label-pri[data-value="5"]{color:#838a9d;border-color:#838a9d}.label-pri-0,.label-selector>.label-pri.active[data-value="0"]{color:#d5d9df;border-color:#d5d9df}.label-severity{position:relative;display:inline-block;width:24px;height:20px;font-weight:bolder;text-align:center;vertical-align:middle}.label-severity:before{position:absolute;top:-3px;left:0;z-index:0;display:block;font-family:ZentaoIcon;font-size:18px;font-size:24px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;color:inherit;text-transform:none;content:"\e973";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.label-severity:after{position:absolute;top:7px;left:0;z-index:1;display:block;width:24px;font-size:12px;line-height:12px;text-align:center;content:attr(data-severity)}.label-severity[data-severity],.label-severity[data-value]{color:#ccc}.label-severity[data-severity="0"],.label-severity[data-value="0"]{color:#ccc}.label-severity[data-severity="0"]:after,.label-severity[data-value="0"]:after{display:none}.label-severity[data-severity="1"],.label-severity[data-value="1"]{color:#c62828}.label-severity[data-severity="2"],.label-severity[data-value="2"]{color:#ff8f00}.label-severity[data-severity="3"],.label-severity[data-value="3"]{color:#fdd835}.label-severity[data-severity="4"],.label-severity[data-value="4"]{color:#cddc39}.label-severity[data-severity="5"],.label-severity[data-value="5"]{color:#8bc34a}.label-severity-custom[data-severity]{color:#d5d9df}.label-severity-custom[data-severity="1"]{color:#c62828}.label-severity-custom[data-severity="2"]{color:#ff8f00}.label-severity-custom[data-severity="3"]{color:#fdd835}.label-severity-custom[data-severity="4"]{color:#cddc39}.label-severity-custom[data-severity="5"]{color:#8bc34a}.label-selector>.label{display:inline-block;min-width:24px;height:24px;padding:0 5px;font-size:14px;line-height:20px;text-align:center;cursor:pointer;background:0 0;border:2px solid #d5d9df;border-radius:15px}.label-selector>.label+.label{margin-left:10px}.label-selector>.label.empty{border-color:transparent}.label-selector>.label.label-severity{font-size:12px;line-height:28px;border-color:transparent}.label-selector>.label.label-severity:before{top:-2px;left:-2px}.label-selector>.label.label-severity:after{display:none}.label-selector>.label.label-severity.active{background:0 0;filter:none;-webkit-filter:none}.checkbox-primary,.radio-primary{position:relative;display:block;vertical-align:middle}.checkbox-primary.inline-block,.radio-primary.inline-block{display:inline-block}.checkbox-primary.inline-block+.inline-block,.radio-primary.inline-block+.inline-block{margin-left:15px}.checkbox-primary>input,.radio-primary>input{position:absolute;top:0;left:0;z-index:3;width:100%;height:100%;margin:0;opacity:0}.checkbox-primary>label,.radio-primary>label{display:block;height:20px;padding-left:30px;margin:0;font-weight:400;line-height:20px;cursor:pointer}.checkbox-primary>label:after,.checkbox-primary>label:before,.radio-primary>label:after,.radio-primary>label:before{position:absolute;top:1px;right:0;left:0;display:block;width:18px;height:18px;line-height:18px;text-align:center;content:' ';border-radius:3px}.checkbox-primary>label:after,.radio-primary>label:after{z-index:1;border:2px solid #eee;border-color:rgba(0,0,0,.15);-webkit-transition:.4s cubic-bezier(.175,.885,.32,1);-o-transition:.4s cubic-bezier(.175,.885,.32,1);transition:.4s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:border,background-color;-o-transition-property:border,background-color;transition-property:border,background-color}.checkbox-primary>label:before,.radio-primary>label:before{top:3px;z-index:2;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-weight:900;font-variant:normal;line-height:1;text-transform:none;content:"\e5ca";opacity:0;-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:opacity,-webkit-transform;-o-transition-property:opacity,-o-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform,-o-transform;-webkit-transform:scale(0);-ms-transform:scale(0);-o-transform:scale(0);transform:scale(0);speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.checkbox-primary.checked>label:after,.checkbox-primary>input:checked+label:after,.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:#00da88;border-color:#00da88;border-width:4px}.checkbox-primary.checked>label:before,.checkbox-primary>input:checked+label:before,.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{color:#fff;opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}.checkbox-primary.focus>label:after,.checkbox-primary>input:focus+label:after,.radio-primary.focus>label:after,.radio-primary>input:focus+label:after{border-color:#00da88;-webkit-box-shadow:0 0 0 3px rgba(0,218,136,.2);box-shadow:0 0 0 3px rgba(0,218,136,.2)}.checkbox-primary:hover>label:after,.radio-primary:hover>label:after{border-color:#00da88}.checkbox-primary.checkbox-right>label,.radio-primary.checkbox-right>label{padding:0 30px 0 0}.checkbox-primary.checkbox-right>label:after,.checkbox-primary.checkbox-right>label:before,.radio-primary.checkbox-right>label:after,.radio-primary.checkbox-right>label:before{right:0;left:auto}.checkbox-primary input:disabled+label:after,.checkbox-primary.disabled>label:after,.radio-primary input:disabled+label:after,.radio-primary.disabled>label:after{background-color:#e5e5e5!important;border-color:#bbb!important}.checkbox-primary input:disabled:checked+label:after,.checkbox-primary.checked.disabled>label:after,.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:#bbb!important}.radio-primary>label:after{border-radius:50%}.radio-primary>label:before{top:7px;left:6px;width:6px;height:6px;content:' ';border:none;border-radius:50%}.radio-primary.checked>label:after,.radio-primary>input:checked+label:after{background-color:transparent;border-color:#00da88;border-width:2px}.radio-primary.checked>label:before,.radio-primary>input:checked+label:before{background-color:#00da88}.radio-primary input:disabled:checked+label:after,.radio-primary.checked.disabled>label:after{background-color:transparent;border-color:#bbb}.radio-primary input:disabled:checked+label:before,.radio-primary.checked.disabled>label:before{background-color:#bbb}.panel{position:relative;margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.panel-body{padding:20px}.panel-body.has-table{padding:10px}.panel-body.has-table .table{margin-bottom:0;table-layout:fixed}.panel-heading{padding:12px 48px 12px 20px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading+.panel-body{padding-top:0}.panel-title{font-size:14px;font-weight:700;line-height:20px}.panel-title .label{top:-1px}.panel-actions{position:absolute;top:0;right:0;padding:7px 8px}.panel:hover .panel-actions{z-index:10}.panel-actions>li>a{display:inline-block;min-width:30px;padding:0 5px;line-height:30px;color:#a6aab8}.panel-actions>li>a:hover{color:#3c4353;text-decoration:initial;background-color:#f1f1f1}.panel-actions .btn-icon{color:#a6aab8}.panel-actions .btn.text-primary{color:#0c64eb}.panel .empty-tip{padding:30px 10px 50px;font-size:14px;color:#838a9d;text-align:center}.progress-text-left{position:relative;margin:7px 0;margin-left:35px;overflow:visible}.progress-text-left .progress-text{position:absolute;top:-7px;left:-35px;display:block;width:35px;height:20px;padding-right:5px;line-height:20px;color:#838a9d;text-align:right}.chart-color{width:20px}.chart-color-dot{display:inline-block;width:10px;height:10px;border-radius:50%}.chart-row{margin-top:10px}.chart-row+.chart-row{padding-top:10px;border-top:1px solid #eee}.chart-wrapper{padding:10px 5px;background:#eee}.chart-wrapper>h4{margin:5px 0 10px}.table-wrapper{max-height:250px;overflow:auto}.table-wrapper .table{margin:0}.progress-pie{position:relative}.progress-pie .progress-info{position:absolute;top:0;left:0;width:100%;height:100%;padding-top:25px;text-align:center}.progress-pie .progress-info>small{display:block;line-height:14px;color:#a6aab8}.progress-pie .progress-info>strong{display:block;font-size:36px;line-height:40px}.progress-pie .progress-info>strong>small{font-size:20px}.progress-pie-120 .progress-info{padding-top:30px}.progress-pie-120 .progress-info>small{line-height:18px}.progress-pie-50 .progress-info{padding-top:4px}.progress-pie-50 .progress-info>strong{font-size:20px;font-weight:400}.progress-pie-50 .progress-info>strong>small{font-size:14px}.progress-pie[data-value="100"] .progress-info>strong{-webkit-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);transform:scale(.7)}.status-bars{display:table;width:100%;height:140px;padding:5px;padding-top:50px;margin:0;overflow:hidden}.status-bars>li{position:relative;display:table-cell;text-align:center;vertical-align:bottom}.status-bars .bar{position:absolute;bottom:20px;left:50%;display:block;width:10px;margin-left:-5px;background:#0c64eb;border-radius:5px 5px 0 0}.status-bars .bar:after{position:absolute;right:-50px;bottom:0;left:-50px;display:block;height:1px;content:' ';background:#eee}.status-bars .title{font-size:12px;font-weight:400;color:#a6a8b6}.status-bars .value{position:relative;top:-20px;left:-20px;display:inline-block;width:50px;font-size:16px;font-weight:700;text-align:center}.status-bars-h{display:block;padding-right:50px;padding-left:60px;list-style:none}.status-bars-h>li{position:relative;height:40px;border-left:1px solid #eee}.status-bars-h .bar{position:relative;top:15px;display:block;height:10px;line-height:20px;background:#0c64eb;border-radius:0 5px 5px 0}.status-bars-h .title{position:absolute;top:-5px;left:-60px;width:60px;padding-right:10px;font-size:12px;color:#a6a8b6;text-align:right}.status-bars-h .value{position:absolute;top:-5px;right:-50px;display:block;width:40px;font-size:14px;font-weight:700;text-align:left;white-space:nowrap}.messager{border-radius:4px;-webkit-box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1);box-shadow:0 4px 16px rgba(0,0,0,.2),0 2px 8px rgba(0,0,0,.1)}.messager-content{padding:18px 20px;font-size:18px;line-height:30px}.messager-content>.icon{font-size:28px;line-height:30px}.messager-actions{vertical-align:middle}.messagger-zt{color:#3c4353;background-color:#fff}.messagger-zt .messager-content>.icon{color:#0c64eb}.messagger-zt .messager-actions>.action{color:#838a9d}.messagger-zt.messager-success .messager-content>.icon{color:#00da88}.messagger-zt.messager-danger .messager-content>.icon{color:#ff5d5d}.messagger-zt.messager-warning .messager-content>.icon{color:#ff9800}.messagger-zt.messager-info .messager-content>.icon{color:#2196f3}.tree{padding-left:0;overflow:hidden}.tree ul{position:relative;display:none;padding-left:0}.tree li{position:relative;padding:2px 0 2px 15px;list-style:none}.tree li.heading{padding-left:5px;color:#3c4353}.tree li>a{display:block;max-width:90%;padding:2px 6px;color:#3c4353;word-break:break-all}.tree li>a:hover{color:#3c4353}.tree li>a.tree-toggle:hover{background:0 0}.tree li.active>a{position:relative;font-weight:700;color:#0c64eb}.tree li>.list-toggle{position:absolute;top:1px;left:1px;z-index:10;width:20px;font-size:14px;line-height:22px;color:#cbd0db;text-align:center;cursor:pointer;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.tree li>.list-toggle:before{content:"\f0da"}.tree li>.list-toggle:active,.tree li>.list-toggle:hover{color:#0c64eb}.tree li.has-active-item>.list-toggle{color:#3c4353}.tree li.has-list.open>ul{display:block}.tree li.has-list.open>.list-toggle{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.tree li.has-list.open:before{position:absolute;top:16px;bottom:-5px;left:10px;display:block;content:' ';border-left:1px solid #d8d8d8}.tree-actions{display:inline-block;margin-left:5px;vertical-align:middle}.tree-actions a{display:inline-block;margin-left:5px;font-size:13px;opacity:.6}.tree-actions a:hover{opacity:1}.tree li>.module-name{color:#3c4353;vertical-align:middle}.tree li>.module-name:hover{background-color:#f0f2f5}.tree li>.module-name:hover>a{color:#3c4353}.treemap-node-fold-icon:before{position:relative;left:-4px;min-width:18px}.dropdown-menu{padding:5px 0;border-color:rgba(0,0,0,.1)}.dropdown-menu>li{padding:0 10px}.dropdown-menu>li>a{padding:2px 10px;margin:5px 0;border-radius:3px}.dropdown-menu>li>a>.icon{position:relative;left:-5px;opacity:.5}.dropdown-menu>li.active>a,.dropdown-menu>li.selected>a{position:relative;color:#fff;background-color:#16a8f8}.dropdown-menu>li.selected>a:after{position:absolute;top:2px;right:4px;display:block;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:20px;text-transform:none;content:"\e5ca";speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dropdown-menu>li.divider{margin:10px}.dropdown-submenu>a:after{margin-right:-5px}.dropdown-submenu>.dropdown-menu.pull-left{margin-left:-1px}.dropdown-submenu:focus>a,.dropdown-submenu:hover>a{color:#3c4353;background-color:#e9f2fb}.dropdown-submenu:hover>a:after{border-left-color:#0c64eb}.dropdown-submenu>a:hover:after{border-left-color:#fff}.pager .btn{padding:3px 10px}.pager .btn .caret{opacity:.7}.pager>li>.pager-label{padding:2px;line-height:20px}.pager>li>.pager-item{min-width:20px;padding:1px;margin:2px 0;font-size:16px;line-height:20px;text-align:center;background:0 0;border-color:transparent}.pager>li>.pager-item:hover{background-color:rgba(0,0,0,.1)}.pager>li>.pager-item>.icon{position:relative;top:-1px}.pager>li>.btn:hover,.pager>li>a:hover{background:rgba(0,0,0,.1)}.pager>li.disabled>a.pager-item{background:0 0;border-color:transparent;opacity:.5}.pager>li.active>a{background-color:#16a8f8}.pager>li .btn-group .btn{padding:1px;margin:2px 0;border-radius:4px}.pager .dropdown-menu{width:200px}.pager .dropdown-menu>li{float:left;width:33.333333%}.modal-dialog{width:900px;max-width:1360px;border:none;border-radius:0;-webkit-box-shadow:0 0 20px 0 rgba(0,0,0,.25);box-shadow:0 0 20px 0 rgba(0,0,0,.25)}.modal-dialog.modal-md{width:700px}.modal-dialog.modal-xs{width:400px}.modal-dialog.modal-sm{width:500px}.modal-dialog.modal-lg{width:1200px}.modal-dialog.modal-fullscreen{position:fixed;max-width:initial}.modal-header{padding:20px 0;margin:0 20px}.modal-header>.close{color:#838a9d;text-shadow:0 1px 0 rgba(255,255,255,.85);opacity:1}.modal-header>.close:hover{color:#222}.modal-footer{padding:20px 0;margin:0 20px}.modal-title{font-size:16px;font-weight:400;line-height:20px}.modal-actions{position:absolute;top:16px;right:16px}.modal-actions .divider{position:relative;top:5px;display:inline-block;width:0;height:20px;margin:0 10px;border-left:#eee 1px solid}.modal-actions>.dropdown{display:inline-block}.modal-body{padding:20px}.modal-iframe .modal-body>iframe{border-radius:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-3%);-ms-transform:translate(0,-3%);-o-transform:translate(0,-3%);transform:translate(0,-3%)}.modal.fade.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-simple .modal-footer{padding-top:0;border-top:none}.modal-iframe .modal-header{position:relative;z-index:10;min-height:0;padding:0;border:none}.modal-iframe .modal-title{display:none}.modal-iframe .modal-header .close{position:absolute;top:12px;right:10px;font-size:32px;font-weight:200}.modal-iframe .modal-dialog{overflow:hidden}.modal-inverse .modal-header>.close{color:rgba(255,255,255,.7);text-shadow:none}.modal-inverse .modal-header>.close:hover{color:#fff}.modal-scroll-inside>.modal-dialog{max-height:100%}.hide-modal-close .modal-iframe .modal-header .close{display:none}.tile{text-align:center}.tile-title{line-height:20px;color:#3c4353}.tile-amount{font-size:32px;font-weight:700;line-height:56px}.timeline>li{position:relative;list-style:none}.timeline>li:before,.timeline>li>a:after,.timeline>li>div:after{position:absolute;left:-20px;display:block;width:15px;height:15px;content:' ';border-radius:50%}.timeline>li:before{top:12px;left:-16px;z-index:3;width:7px;height:7px;background-color:#cbd0db;border:none;border:1px solid #cbd0db}.timeline>li>a:after,.timeline>li>div:after{top:11px;left:-17px;z-index:3;width:9px;height:9px;background-color:#0c64eb;border-radius:50%;opacity:0}.timeline>li+li:after{position:absolute;top:-12px;bottom:20px;left:-13px;z-index:1;display:block;content:' ';border-left:1px solid #eee}.timeline>li.active>a:after,.timeline>li.active>div:after{opacity:1}.timeline>li.active:before{top:8px;left:-20px;width:15px;height:15px;background-color:rgba(12,100,235,.2);border:none}.timeline>li>a,.timeline>li>div{display:block;padding:5px;line-height:20px}.timeline>li.active>a{color:#3c4353}.timeline-tag{position:absolute;top:5px;left:-115px;font-size:12px}.timeline-tag-left{padding-left:115px}.timeline-sm{font-size:12px}.timeline-sm>li:before,.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:10px;left:-20px;width:11px;height:11px}.timeline-sm>li.active:before,.timeline-sm>li:before{top:10px;left:-18px;width:11px;height:11px;background:0 0;border:1px solid #eee}.timeline-sm>li>a,.timeline-sm>li>div{line-height:20px}.timeline-sm>li>a:after,.timeline-sm>li>div:after{top:13px;left:-15px;width:5px;height:5px}.form-control{-webkit-box-shadow:none;box-shadow:none}.form-horizontal .form-group>label{padding-right:0}.form-actions{margin-top:20px;margin-bottom:0}.form-actions .btn{margin-right:10px}form label{font-weight:400;color:#3c4353}.form-group .btn+.btn{margin-left:5px}.table-form{margin-bottom:0;table-layout:fixed}.table-form>thead>tr>th.required:after{position:relative;top:3px;right:auto;left:4px;display:inline-block;vertical-align:middle}.table-form>tbody>tr>td,.table-form>tbody>tr>th,.table-form>tfoot>tr>td,.table-form>thead>tr>th{padding:7px;vertical-align:middle;border-bottom:none}.table-form>tfoot>tr>td{padding:20px 7px 10px}.table-form>tbody>tr>th{width:100px;font-weight:700;text-align:right}.table-form .input-group{width:100%}.chosen-container-single .chosen-single{position:relative}.chosen-container-single .chosen-single>span{height:20px;line-height:20px;white-space:normal}.chosen-container-single .chosen-single div b{position:relative;top:1px;color:#cbd0db}.chosen-container-single .chosen-search:before{top:8px;right:15px}.chosen-container-multi .chosen-choices li.search-choice{font-size:13px;background:#eee;border-color:#cbd0db;-webkit-box-shadow:none;box-shadow:none}.chosen-container-single .chosen-search input[type=text]{height:30px;padding:3px 25px 3px 5px}.chosen-container-single .chosen-search{padding:3px 10px 0}.chosen-container-single .chosen-single{overflow:visible}.chosen-container .chosen-results{padding:10px}.chosen-container .chosen-results>li{border-radius:4px}.chosen-container .chosen-results li.highlighted em{color:#fff}.table-responsive .chosen-container .chosen-results{max-height:200px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search{top:-2px;right:-1px;bottom:-1px;left:-1px;display:none;height:auto;padding:0;opacity:0}.chosen-compact.chosen-container-single .chosen-single>.chosen-search>input{height:31px;padding:5px 26px 5px 8px;font-size:inherit;line-height:20px}.chosen-compact.chosen-container-single .chosen-single>.chosen-search:before{top:7px;right:8px}.datetimepicker{padding:10px}.datetimepicker td.day.today{background-color:#f77}.datetimepicker td.day.active{background-color:#16a8f8}.datetimepicker tfoot th,.datetimepicker thead th{color:#838a9d}.input-control .colorpicker{top:0;z-index:auto;opacity:1}.input-control .colorpicker .btn{padding:5px}.input-control .input-control-icon-right.btn{top:0}.colorpicker .dropdown-menu{min-width:232px;padding:5px 10px 10px 10px}.colorpicker .dropdown-menu>li{display:block;float:left;padding:5px}.colorpicker .dropdown-menu>li.heading{width:100%;margin-bottom:5px;font-size:16px;font-weight:700;text-align:left}.colorpicker .dropdown-menu>li.heading>.icon-close{position:relative;top:4px;float:right;cursor:pointer;opacity:.6}.colorpicker .dropdown-menu>li>a{position:relative;display:block;width:100%;height:100%;padding:0;margin:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-align:center;text-transform:none;border:1px solid transparent;border-radius:50%;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.colorpicker .dropdown-menu>li>a:before{position:absolute;top:0;display:block;width:100%;height:20px;line-height:18px}.colorpicker .dropdown-menu>li>a:hover{-webkit-box-shadow:0 1px 4px rgba(0,0,0,.25);box-shadow:0 1px 4px rgba(0,0,0,.25)}.colorpicker .dropdown-menu>li>a.active:before{font-size:14px;content:"\e5ca"}.colorpicker .dropdown-menu>li>a.empty{color:#666;background:#fff}.colorpicker .dropdown-menu>li>a.empty:before{content:"\e90d"}.colorpicker .btn{position:relative}.colorpicker .btn .color-bar{position:absolute;right:5px;bottom:3px;left:5px;height:3px}.colorpicker .btn .color-bar[style*='background: ']+.ic{position:relative;top:-2px}.colorpicker .btn .ic{color:#cbd0db}.colorpicker .btn:hover .ic{color:#838a9d}.input-group .colorpicker{z-index:3}.input-group .chosen-container{display:table-cell}.input-group-addon{border-right-width:0;border-left-width:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin:0}.input-group-cell{display:table-cell;width:1%;padding:0 12px;white-space:nowrap;vertical-align:middle}.ke-container{border-color:#dcdcdc!important;border-radius:2px!important}.ke-container.focus{border-color:#0c64eb!important}.ke-toolbar{border-color:#dcdcdc!important}.required:after{top:6px;right:-10px;font-size:20px}td.required:after{top:12px;right:-5px}.input-group>.chosen-container.required:after,.input-group>.input-control.required:after{top:1px;right:1px;z-index:2}.input-group.required .required:after{display:none}.file-input{position:relative}.file-input .input-group{width:auto}.file-input .input-group>.input-group-cell:first-child{padding-right:0;padding-left:7px}.file-input input[type=file]{position:absolute;width:0;height:0;opacity:0}.file-input .file-title{display:inline-block;max-width:400px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.file-input .file-editbox{min-width:200px;max-width:100%}.file-input .file-size{display:inline-block;vertical-align:middle}.edit .file-input-empty,.file-input-edit,.file-input-normal,.normal .file-input-empty{display:none}.edit .file-input-edit,.normal .file-input-normal{display:block}.edit .file-input-edit.input-group,.normal .file-input-normal.input-group{display:table}.edit .file-input-normal{display:none!important}.file-input-normal>.input-group-btn{width:auto}.input-group .chosen-container-active .chosen-choices{border-color:#0c64eb!important}.input-group .chosen-container{min-width:100px}.input-group .input-group-btn .btn>.icon{line-height:17px}.os-mac select.form-control{-webkit-appearance:none;background-image:url(data:image/gif;base64,R0lGODlhCQAFAIAAAMvQ2////yH5BAEAAAEALAAAAAAJAAUAAAIKhH+BGYoNGWxgFgA7);background-image:url(data:image/gif;base64,R0lGODlhBwAEAIAAAMvQ2////yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==);background-repeat:no-repeat;background-position:right 5px top 12px;-moz-appearance:none}input::-webkit-contacts-auto-fill-button{position:absolute;right:0;display:none!important;pointer-events:none;visibility:hidden}.chosen-choices.has-error,.chosen-single.has-error,.form-control.has-error{border-color:#ff5d5d!important;-webkit-box-shadow:0 0 6px #ffc3c3!important;box-shadow:0 0 6px #ffc3c3!important}.popover-success.popover-form-result{font-weight:700;color:#fff;background:#00da88}.popover-success.popover-form-result.popover.right .arrow:after{border-right-color:#00da88}#mainHeader{height:50px;color:#fff;background:#1183fb -webkit-gradient(linear,right top,left top,from(#0a48d1),to(#1183fb));background:#1183fb -webkit-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb -o-linear-gradient(right,#0a48d1 0,#1183fb 100%);background:#1183fb linear-gradient(-90deg,#0a48d1 0,#1183fb 100%);background-color:#1183fb;border-top-color:#0c64eb;border-bottom-color:#e9f2fb}#mainHeader>.container{min-width:1200px;padding:0}#heading{position:absolute;top:10px;left:20px}@media (min-width:1400px){#heading{left:40px}}#heading h1{float:left;max-width:250px;margin:0;overflow:hidden;font-size:20px;font-weight:400;line-height:30px;text-overflow:ellipsis;white-space:nowrap}#heading h1 a{color:inherit;text-decoration:inherit}#heading h1.long-name{position:relative;top:-5px;display:table-cell;font-size:16px;line-height:20px;word-break:break-all;white-space:normal}#heading .btn{display:block;float:left;height:20px;padding:1px 5px;margin:0;margin:5px 0 0 10px;font-size:12px;font-weight:lighter;line-height:18px;background-color:rgba(255,255,255,.2);border:none}#heading .btn:hover{background-color:rgba(0,0,0,.1)}#navbar{margin:0 auto;font-size:15px;text-align:center}#navbar .nav{display:inline-block}#navbar .nav>li>a{padding:10px 15px;line-height:30px;color:#fff;border-radius:0;opacity:.9}@media (max-width:992px){#navbar .nav>li>a{padding:10px}}#navbar .nav>li>a:focus,#navbar .nav>li>a:hover{background:rgba(0,0,0,.15);opacity:1}#navbar .nav>li.active>a{font-weight:700;background:rgba(0,0,0,.1);opacity:1}#navbar .nav>li.divider{display:block;width:2px;height:20px;margin:15px;background:rgba(255,255,255,.4)}#navbar .nav>li.divider:last-child{display:none}#toolbar{position:absolute;top:12px;right:20px;font-size:12px;color:#fff}@media (min-width:1400px){#toolbar{right:40px}}#extraNav{text-align:right}#extraNav>li{display:inline-block;float:none;text-align:left}#extraNav>li>a{display:block;padding:0;color:#fff;opacity:.75}#extraNav>li>a:hover{text-decoration:unset;background-color:rgba(0,0,0,.1);opacity:1}#extraNav>li.open>a{background-color:rgba(0,0,0,.1)}#extraNav>li+li{margin-left:10px}#searchbox{position:relative;float:left;width:150px}#searchbox .input-group-btn .btn{position:relative;padding:1px 4px;font-size:12px;line-height:20px;color:#fff;background-color:rgba(255,255,255,.15);border-right:none;border-radius:2px}#searchbox .input-group-btn .btn:after{position:absolute;top:3px;right:0;bottom:3px;display:block;width:1px;content:' ';background-color:rgba(255,255,255,.15)}#searchbox .input-group-btn .btn:hover{background-color:rgba(255,255,255,.25)}#searchGo{position:absolute;top:0;right:-1px;z-index:9;min-width:24px;height:24px;padding:2px 3px;font-size:12px;line-height:20px;color:#fff;background-color:#6a9afd;border-radius:2px}#searchGo:hover{color:#fff!important;background-color:#0c64eb}#searchInput{height:24px;padding:2px 30px 2px 5px;color:#fff;text-align:left;background:rgba(255,255,255,.15);border-color:transparent;border-radius:0 12px 12px 0;-webkit-transition:background .2s,border .2s;-o-transition:background .2s,border .2s;transition:background .2s,border .2s}#searchInput:hover{background:rgba(255,255,255,.25)}#searchInput:focus{color:#333;background:#fff}#searchInput::-webkit-input-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::-moz-placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput::placeholder{font-size:12px;color:#fff;color:rgba(255,255,255,.5)}#searchInput:focus::-webkit-input-placeholder{color:#838a9d}#searchInput:focus::-moz-placeholder{color:#838a9d}#searchInput:focus::placeholder{color:#838a9d}#searchTypeMenu{min-width:220px}#searchTypeMenu>li{float:left;width:50%}#searchTypeMenu>li>a{margin:4px 0}#userNav{float:right;margin:0 -6px 0 10px}#userNav .avatar{display:inline-block;vertical-align:middle}#userNav>li>a{padding:2px 6px;margin-left:3px;line-height:20px;color:#fff;opacity:.9}#userNav>li>a .user-name{max-width:100px;overflow:hidden;font-size:15px;text-overflow:ellipsis;white-space:nowrap}#userNav>li>a:hover{background-color:rgba(0,0,0,.1);opacity:1}#userNav>li>a span{display:inline-block;vertical-align:middle}#userNav>li.open>a{background-color:rgba(0,0,0,.1)}#userNav>li.has-new-items>a{position:relative}#userNav>li.has-new-items>a:before{position:absolute;top:3px;right:-1px;display:block;width:4px;height:4px;content:' ';background-color:#ff5d5d;border-radius:50%}#userNav .dropdown-menu{min-width:150px}#userNav .dropdown-menu>li>a>.icon{position:absolute;top:10px;right:5px;display:block;width:20px;height:20px;line-height:20px;text-align:center}#userNav .user-profile-item>a{position:relative;padding-left:45px}#userNav .user-profile-item .avatar{position:absolute;top:6px;left:5px}#userNav .user-profile-name{font-size:16px}#userNav .user-profile-role{font-size:12px;color:#a9abb8}#userNav .no-role .user-profile-role{display:none}#userNav .no-role .user-profile-name{line-height:40px}#subHeader{min-height:50px;background:#fff}#subHeader>.container{padding:0 20px}@media (min-width:1400px){#subHeader>.container{padding:0 40px}}#pageNav{position:absolute;top:8px;left:0;left:20px}@media (min-width:1400px){#pageNav{left:40px}}#subNavbar{margin-top:5px;font-size:14px;text-align:center}#subNavbar .nav{display:inline-block}#subNavbar .nav>li>a{padding:8px 12px;line-height:24px;color:#3c4353}#subNavbar .nav>li>a:hover{color:#3c4353;background-color:rgba(0,0,0,.075)}#subNavbar .nav>li.active>a{font-weight:700;color:#0c64eb}#subNavbar .nav>li.divider{display:block;width:2px;height:20px;margin:9px 5px;background-color:rgba(0,0,0,.05)}#subNavbar .dropdown-menu{text-align:left}#pageActions{position:absolute;top:9px;right:20px}@media (min-width:1400px){#pageActions{right:40px}}.cell{padding:10px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.cell+.cell{margin-top:10px}.cell>.panel{margin:0;-webkit-box-shadow:none;box-shadow:none}.cell>.panel>.panel-heading{padding:5px 5px 10px}.cell>.panel>.panel-heading .panel-actions{padding:0}.cell>.panel>.panel-body{padding:5px}.cell>.table{margin:0}#main{padding:20px 0}#main>.container{padding:0 20px}@media (min-width:1400px){#main>.container{padding:0 40px}}#header,#header+#main{min-width:1200px}#mainMenu{margin:-10px 0 8px}.main-content{padding:20px;background-color:#fff;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}@media (min-width:1400px){.main-content>.center-block{max-width:1350px;padding:20px;border:1px solid #eee}.main-content>.center-block .main-header{background-color:#f1f1f1}}.main-content>h2{margin:0 0 20px}.main-content .cell{-webkit-box-shadow:none;box-shadow:none}.main-header{padding:5px 20px;border-bottom:1px solid #eee}.main-header:after,.main-header:before{display:table;content:" "}.main-header:after{clear:both}.main-header>h2{display:block;float:left;margin:0 10px 0 0;font-size:14px;line-height:34px}.main-header>h2 .label-id{margin-right:5px}.main-header>h2 small{font-size:14px;font-weight:400}.main-content .main-header{margin:-20px -20px 10px}.main-header .label{top:-1px}.main-row{display:table;width:100%;table-layout:fixed}.main-row>*{display:table-cell;vertical-align:top}@media (max-width:720px){.main-row{display:block}.main-row>*{display:block;width:100%}.main-row .side-col{width:100%;padding:0}.main-row .main-col+.side-col,.main-row .side-col+.main-col{margin-top:10px}}.main-row.hide-side .side-col{display:none}@media (min-width:720px){.main-content>.center-block .main-form{padding-right:20px}}#main .side-col .tabs{padding:5px}#main .side-col .nav-tabs{margin:0 5px 5px 5px;border-bottom:1px solid #ddd}#main .side-col .nav-tabs>li{margin:0}#main .side-col .nav-tabs>li+li{margin-left:10px}#main .side-col .nav-tabs>li>a{position:relative;padding:8px 5px;border:none;border-radius:2px!important}#main .side-col .nav-tabs>li.active>a{font-weight:700;color:#3c4353}#main .side-col .nav-tabs>li.active>a:before{position:absolute;right:0;bottom:-1px;left:0;display:block;height:2px;content:' ';background:#0c64eb}#main .side-col .tab-content .tab-pane table{border:none}.main-actions .btn-toolbar{display:inline-block;padding:4px 15px;color:#fff;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);border-radius:4px}.main-actions .btn-toolbar .divider{margin-right:15px;margin-left:15px;border-color:rgba(255,255,255,.1)}.main-actions .btn-toolbar .btn{padding-right:10px;padding-left:10px;margin-right:0;color:#fff;background-color:transparent;border:none}.main-actions .btn-toolbar .btn+.btn{margin-left:10px}.main-actions .btn-toolbar .btn:focus,.main-actions .btn-toolbar .btn:hover{background-color:rgba(255,255,255,.2)}.main-actions .btn-toolbar .btn.btn-icon{min-width:32px;padding-right:0;padding-left:0}.main-actions .btn-toolbar .btn+.btn-group{margin-right:0;margin-left:10px}#mainContent .main-col>.main-actions{padding:30px 0 0 0;text-align:center}#mainContent .main-col>.main-actions>.btn-toolbar{visibility:visible;opacity:1;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}#mainActions{position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;pointer-events:none}#mainActions .btn-toolbar{position:relative;top:-90px}#mainActions .dropdown-menu{text-align:left}#mainActions>.container{height:100%}.main-actions-holder{display:none}.main-actions-fixed .main-actions-holder{display:block}.main-actions-fixed #mainContent .main-col>.main-actions{position:fixed;bottom:50px}.main-actions-fixed.body-modal #mainContent .main-col>.main-actions{bottom:20px}#nextPage,#prevPage{position:absolute;top:50%;left:-10px;width:40px;height:60px;padding:10px 0;margin-top:-30px;line-height:40px;color:#fff;text-align:center;pointer-events:auto;background:#717171;background-color:rgba(90,90,90,.85);-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.05);box-shadow:0 2px 15px 2px rgba(0,0,0,.05)}#nextPage:hover,#prevPage:hover{-webkit-box-shadow:0 2px 15px 2px rgba(0,0,0,.15);box-shadow:0 2px 15px 2px rgba(0,0,0,.15)}#nextPage>.icon,#prevPage>.icon{display:block;font-size:36px;line-height:36px}#nextPage{right:-10px;left:auto}@media (max-width:1800px){#prevPage{left:-3px}#nextPage{right:-3px}}#sidebarHeader{position:relative;float:left;width:180px;height:34px;padding-right:20px;margin-right:20px;background:#fff;border-left:4px solid #0c64eb;border-radius:4px 2px 2px 4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}#sidebarHeader:after{position:absolute;top:-1px;right:-8px;display:block;width:0;height:0;content:' ';border-color:transparent transparent transparent #fff;border-style:solid;border-width:18px 0 18px 8px}#sidebarHeader .title{padding:0 5px;overflow:hidden;font-size:14px;font-weight:700;line-height:32px;color:#0c64eb;text-align:center;text-overflow:ellipsis;white-space:nowrap}#sidebarHeader .title>a{position:absolute;top:0;right:0;width:20px;opacity:.5}#sidebarHeader .title>a:hover{opacity:1}#sidebar{position:relative;-webkit-transition:width .2s,padding .2s;-o-transition:width .2s,padding .2s;transition:width .2s,padding .2s}#sidebar>.sidebar-toggle{position:absolute;top:0;right:5px;bottom:0;width:10px;cursor:pointer;background:0 0;border-radius:5px;-webkit-transition:background-color .2s;-o-transition:background-color .2s;transition:background-color .2s}#sidebar>.sidebar-toggle>.icon{position:absolute;top:50%;left:-1px;width:12px;height:30px;margin-top:-10px;line-height:30px;color:#fff;text-align:center;background:#79cdfb;border-radius:6px}#sidebar>.sidebar-toggle>.icon:before{position:relative;left:-3px}#sidebar>.sidebar-toggle:before{position:absolute;top:0;right:-5px;bottom:0;left:-5px;display:block;content:' '}#sidebar>.sidebar-toggle:hover{background:rgba(0,0,0,.075)}#sidebar>.cell{position:relative;left:0;width:180px;-webkit-transition:left .2s,opacity .2s;-o-transition:left .2s,opacity .2s;transition:left .2s,opacity .2s}#sidebar.no-animate>.cell{display:none;-webkit-transition:none;-o-transition:none;transition:none}.hide-sidebar #sidebar>.cell{position:absolute;left:-200px;opacity:0}.hide-sidebar #sidebar{position:relative;width:0;padding:0}.hide-sidebar #sidebar>.sidebar-toggle>.icon:before{content:"\e315"}@media (max-width:720px){#sidebar>.cell{width:100%}}#queryBox{max-height:0;padding:0;overflow:hidden;-webkit-transition:cubic-bezier(.175,.885,.32,1) .2s;-o-transition:cubic-bezier(.175,.885,.32,1) .2s;transition:cubic-bezier(.175,.885,.32,1) .2s;-webkit-transition-property:padding,max-height,margin;-o-transition-property:padding,max-height,margin;transition-property:padding,max-height,margin}#queryBox>form{visibility:hidden;-webkit-transition:visibility .2s .2s;-o-transition:visibility .2s .2s;transition:visibility .2s .2s}#queryBox.loading{height:50px}#queryBox.show{min-height:110px;max-height:300px;margin-bottom:10px;overflow:visible}#queryBox.show>form{visibility:visible}#queryBox.divider{border-bottom:1px solid #eee}#main .querybox-toggle.querybox-opened{position:relative;color:#0c64eb;background:0 0;border:none}#main .querybox-toggle.querybox-opened:before{position:absolute;bottom:-14px;left:50%;width:0;height:0;content:' ';border-color:transparent transparent #fff transparent;border-style:solid;border-width:0 10px 10px 10px}#contentNav{padding:5px;background:#fff;border-bottom:1px solid #eee}#contentNav .nav>li>a{position:relative;padding:6px 10px;color:#838a9d}#contentNav .nav>li.active>a{font-weight:700;color:#0c64eb}#contentNav .nav>li.active>a:before{position:absolute;right:10px;bottom:3px;left:10px;display:block;height:2px;content:' ';background:#0c64eb}.body-modal{padding-bottom:0}.body-modal #main,.body-modal .container{min-width:0!important}.body-modal #main{padding:0}.body-modal .main-header{position:fixed;top:0;right:20px;left:20px;z-index:100;padding:13px 48px 13px 0;margin:0;background:#fff}.body-modal #mainContent{padding-top:70px}.body-modal .main-header>h2{max-width:100%;overflow:hidden;font-size:14px;text-overflow:ellipsis;white-space:nowrap}.body-modal .cell,.body-modal .main-content{-webkit-box-shadow:none;box-shadow:none}.body-modal #mainMenu{position:fixed;top:0;right:0;left:0;z-index:100;padding:12px 60px 12px 10px;margin:0;background:#fff}.body-modal #mainMenu>.btn-toolbar.pull-left.divider{display:none}.body-modal #mainMenu>.btn-toolbar{max-width:100%;margin-left:20px}.body-modal #mainMenu>.btn-toolbar>.divider:first-child{display:none}.body-modal #mainMenu>.btn-toolbar .page-title{max-width:100%;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.body-modal #mainMenu+#mainContent.main-row{padding:60px 10px 0}.body-modal #mainMenu+#mainContent.main-row .cell{border:1px solid #efefef;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.body-modal #mainActions{top:auto}.body-modal #mainActions .btn-toolbar{top:auto;bottom:10px}.body-modal.m-bug-view,.body-modal.m-story-view,.body-modal.m-task-view,.body-modal.m-testcase-view,.body-modal.m-testtask-view,.body-modal.m-todo-view{padding-bottom:20px;border-radius:3px}#tabsNav{position:relative}#tabsNav .tab-pane>.actions{position:absolute;top:-8px;right:0}#tabsNav .tab-pane>.cell,#tabsNav .tab-pane>.main-table{padding:0;border:1px solid #cbd0db;border-top:none;border-radius:0 0 4px 4px}#tabsNav .tab-pane>.cell .detail-title{padding-left:5px}#helpContent{position:fixed;top:50px;right:0;bottom:40px;left:0;display:none;background-color:#fff}#helpContent .load-error{display:none;padding:20px}#helpContent .show-error .load-error{display:block}.show-help-tab{overflow:hidden}.show-help-tab #main{display:none}.show-help-tab #helpContent{display:block}#navbar .nav>li>a.open-help-tab>.icon-close{display:none;opacity:.5}#navbar .nav>li>a.open-help-tab>.icon-close:hover{background:rgba(0,0,0,.1);opacity:1}.show-help-tab #navbar .nav>li>a.open-help-tab>.icon-close{display:inline}.text-middle td,.text-middle th{vertical-align:middle}.text-center td,.text-center th{text-align:center}.c-sm{width:40px}.c-id{width:90px}.c-id-sm{width:70px}.c-id-xs{width:55px}.c-date{width:100px}.c-num,.c-pri,.c-type{width:80px;overflow:hidden}.c-begin,.c-end,.c-time{width:65px}.c-hours{width:60px}.c-actions-1{width:50px}.c-actions-2{width:75px}.c-actions-3{width:102px}.c-actions,.c-actions-4{width:128px}.c-actions-5{width:155px}.c-actions-6{width:180px}.c-product,.c-project{width:180px}.c-plan{width:130px}.c-datetime{width:120px}.c-stage,.c-status,.c-user{width:80px}.c-side{width:200px;border-right:10px solid #efefef}.c-assign,.c-assignedTo,.c-openedBy{width:130px}.c-progress{width:155px}.c-assign,.c-assignedTo,.c-openedBy,.c-product,.c-project,.c-status,.c-url,.c-user{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.c-name,td.c-title{overflow:hidden;text-align:left!important;text-overflow:ellipsis;white-space:nowrap}td.c-actions{position:relative;padding-top:0;padding-bottom:0;overflow:hidden;white-space:nowrap;vertical-align:middle}td.c-actions .btn{display:inline-block;width:26px;padding:2px;overflow:hidden;line-height:20px;color:#16a8f8;background:0 0;border-color:transparent}td.c-actions .btn .icon{font-size:18px}td.c-actions .btn:hover{color:#0c64eb;background-color:#d3e5f7}td.c-actions .btn+.btn{margin-left:-4px}td.c-actions .btn-link{color:#3c4353;background:0 0}td.c-actions .btn-link:hover{color:#0c64eb;background:#e9f2fb}td.c-actions .more{position:absolute;top:50%;right:100%;display:none;padding-right:4px;padding-left:20px;margin-top:-15px;margin-right:-6px;white-space:nowrap;background-color:#fafafa;-webkit-transition:opacity .3s,margin.3s;-o-transition:opacity .3s,margin.3s;transition:opacity .3s,margin.3s}tr:hover td.c-actions .more{display:block}td:hover+td.c-actions>.more{margin-right:-15px;pointer-events:none;opacity:.15}tr[data-url]{cursor:pointer}.table tbody>tr>td,.table thead>tr>th{vertical-align:middle}.table tbody>tr>td.has-btn,.table thead>tr>th.has-btn{padding-top:1px;padding-bottom:1px;overflow:visible}.table tbody>tr>td .progress,.table thead>tr>th .progress{height:6px}.table .em,.table em{color:#3c4353}.table .divider{border-bottom:10px solid #efefef}.table .divider-top{border-top:10px solid #efefef}.table .btn-icon-left{max-width:100%;padding-left:20px;overflow:hidden;line-height:18px;text-align:left;text-overflow:ellipsis;background:0 0;border-color:#eaf3fc}.table .btn-icon-left>.icon{width:20px;font-size:14px;background:0 0!important;opacity:0}.table .btn-icon-left.btn-sm{height:26px;font-size:13px}.table .btn-icon-left:active,.table .btn-icon-left:focus,.table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.table .btn-icon-left:active>.icon,.table .btn-icon-left:focus>.icon,.table .btn-icon-left:hover>.icon{opacity:1}.table .btn-icon-left>.text{padding-left:25px}.table thead>tr>th.c-assign,.table thead>tr>th.c-assignedTo{padding-left:29px}.table a{vertical-align:middle}.table tbody>tr:last-child{border-bottom:none}.table caption{margin-bottom:5px;background:#f1f1f1;border:none}.is-firefox .table .btn-icon-left>.icon{line-height:22px}.main-table{border-radius:4px}.main-table>.table,.main-table>.table-footer,.main-table>.table-header,.main-table>.table-responsive{-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045);box-shadow:0 1px 1px rgba(0,0,0,.05),0 2px 6px 0 rgba(0,0,0,.045)}.main-table .table{font-size:13px;table-layout:fixed;background-color:#fff;border-radius:4px 4px 0 0}.main-table .table.table-lg{font-size:14px}.main-table .table .btn-icon-left{border-color:transparent}.main-table .table .btn-icon-left>.icon{background:0 0;border-radius:4px}.main-table .table .btn-icon-left.btn-sm{height:26px}.main-table .table .btn-icon-left:hover{border-color:rgba(0,0,0,.2)}.main-table .table .btn-icon-left:hover>.icon{background:#e9f2fb;border-radius:4px 0 0 4px}.main-table tbody>tr>td,.main-table thead>tr>th{min-height:36px;padding:2px 8px;line-height:30px}.main-table tbody>tr>td:first-child,.main-table thead>tr>th:first-child{padding-left:15px}.main-table thead>tr>th{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid #ddd}.main-table tbody>tr:nth-child(odd){background-color:#f5f5f5}.main-table tbody>tr:last-child>td{border-bottom:1px solid #ddd}.main-table tbody>tr>td{position:relative;border-bottom:none;border-bottom:1px solid #eee}.main-table tbody>tr>td .label{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main-table tbody>tr>td>a{line-height:28px;color:#0c60e1}.main-table tbody>tr>td>a:not(.btn):visited{color:#082999;opacity:.9}.main-table tbody>tr>td>a:hover,.main-table tbody>tr>td>a:visited:hover{color:#0c64eb}.main-table tbody>tr>td.c-actions{padding-right:10px}.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{position:absolute;top:0;bottom:0;left:0;display:block;width:0;content:'';background:#0c64eb;opacity:0;-webkit-transition:.2s linear;-o-transition:.2s linear;transition:.2s linear;-webkit-transition-property:width,opacity,border-radius;-o-transition-property:width,opacity,border-radius;transition-property:width,opacity,border-radius}@-moz-document url-prefix(){.main-table tbody>tr>td.c-side+td:before,.main-table tbody>tr>td:first-child:before{bottom:-1px}}.main-table tbody>tr>td.c-side:before{display:none}.main-table tbody>tr{-webkit-transition:.2s cubic-bezier(.175,.885,.32,1);-o-transition:.2s cubic-bezier(.175,.885,.32,1);transition:.2s cubic-bezier(.175,.885,.32,1);-webkit-transition-property:background-color,-webkit-box-shadow;-o-transition-property:box-shadow,background-color;transition-property:background-color,-webkit-box-shadow;transition-property:box-shadow,background-color;transition-property:box-shadow,background-color,-webkit-box-shadow}.main-table tbody>tr:hover{background:#e9f2fb}.main-table .table-grouped tbody>tr:hover{background:#f2f7fd;-webkit-box-shadow:none;box-shadow:none}.main-table .table-grouped tbody>tr:hover td.c-actions .more{background:#f2f7fd}.main-table tbody>tr.checked{background:#fff3e0}.main-table tbody>tr.checked:hover{background:#ffebbc}.main-table tbody>tr.checked>td.c-side+td:before,.main-table tbody>tr.checked>td:first-child:before{width:4px;opacity:1}.main-table tbody>tr.checked.row-check-begin{border-top-left-radius:4px;border-top-right-radius:2px}.main-table tbody>tr.checked.row-check-begin>td:first-child:before{border-top-left-radius:4px}.main-table tbody>tr.checked.row-check-end{border-bottom-right-radius:2px;border-bottom-left-radius:4px}.main-table tbody>tr.checked.row-check-end>td:first-child:before{border-bottom-left-radius:4px}.main-table .checkbox-primary{display:inline-block;line-height:20px}.main-table .checkbox-primary label{margin:0}.main-table .table{margin:0}.table-header{padding:4px 0 12px}.table-header .table-statistic{color:#838a9d}.table-header .table-statistic strong{font-size:15px;color:#3c4353}.table-header .btn-toolbar{margin-top:-28px}.table-header.fixed-right{position:relative;z-index:5;padding:0}.table-header.fixed-right>.btn-toolbar{position:absolute;top:0;right:0;z-index:1;padding:1px;margin:0;background:#fff;border-radius:4px}.table-header.fixed-right>.btn-toolbar .btn{opacity:.65}.table-header.fixed-right>.btn-toolbar .btn:hover{opacity:1}.table-footer{position:relative;min-height:40px;padding:6px 15px;background:#fff;border-radius:0 0 4px 4px}.body-modal .table-footer{margin-bottom:20px}.talbe-lg+.table-footer{padding:11px 15px}.table-footer .btn-toolbar,.table-footer .checkbox-primary{float:left}.table-footer .btn-toolbar+.btn-toolbar{margin-left:8px}.table-footer .checkbox-primary{margin:5px 20px 0 0}.table-footer .checkbox-primary.checked label:after{border-color:#00da88!important}.table-footer .btn{padding:3px 10px;line-height:20px}.table-footer .pager{position:absolute;top:0;right:0;z-index:4;height:40px;padding:6px 5px 6px 10px;margin:0;background:#fff;opacity:1;-webkit-transition:opacity .4s;-o-transition:opacity .4s;transition:opacity .4s}.table-footer .pager:before{position:absolute;top:0;bottom:0;left:-50px;display:block;width:50px;content:' ';background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%)}.table-footer .pager .btn,.table-footer .pager>li>.pager-item,.table-footer .pager>li>.pager-label{color:#838a9d;background:0 0;border-color:transparent}.table-footer .pager .btn,.table-footer .pager>li>a{border-radius:3px}.table-footer .pager .btn:hover,.table-footer .pager>li>a:hover{background:rgba(0,0,0,.1)}.table-footer .pager>li.disabled>a.pager-item{opacity:1}.table-footer .form-control{height:28px;padding:3px 8px}.table-footer .table-statistic{position:relative;z-index:2;float:left;padding-right:30px;line-height:28px;color:#838a9d;background:#fff}.table-footer .table-statistic:hover{z-index:4}.table-footer .table-statistic:hover+.pager{z-index:2;opacity:.3}.table-footer .btn-toolbar+.table-statistic{margin-left:10px}.table-footer .text{line-height:28px}.table-footer.fixed-footer{position:fixed;z-index:10;margin:0;background:rgba(75,75,75,.85);border-top-color:transparent}.table-footer.fixed-footer .checkbox-primary label{color:#fff}.table-footer.fixed-footer .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.table-footer.fixed-footer .table-statistic{color:#fff;background:#666}.table-footer.fixed-footer .pager{background:#666}.table-footer.fixed-footer .pager:before{background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0)),to(#666));background:-webkit-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:-o-linear-gradient(left,rgba(0,0,0,0) 0,#666 100%);background:linear-gradient(to right,rgba(0,0,0,0) 0,#666 100%)}.table-footer.fixed-footer .pager .btn,.table-footer.fixed-footer .pager>li>.pager-item,.table-footer.fixed-footer .pager>li>.pager-label{color:#fff}.table-footer.fixed-footer .pager .btn:hover,.table-footer.fixed-footer .pager>li>a:hover{background:rgba(255,255,255,.3)}.table-footer.fixed-footer .pager>li.disabled>a.pager-item{opacity:.5}.table-actions{width:0;height:28px;visibility:hidden;opacity:0;-webkit-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;-o-transition:opacity cubic-bezier(.175,.885,.32,1) .8s;transition:opacity cubic-bezier(.175,.885,.32,1) .8s}.table-actions.show-always{width:auto;pointer-events:none;cursor:not-allowed;visibility:visible;opacity:.75}.has-row-checked .table-actions{width:auto;pointer-events:auto!important;cursor:default;visibility:visible;opacity:1}.table-lg tbody>tr>td{padding:9px 10px}.table-lg tbody>tr>td .btn+.btn{margin-left:5px}.table.has-sort-head thead>tr>th{padding-right:0}.table.has-sort-head thead>tr>th>a{position:relative;display:inline-block;padding-right:16px;color:#3c4353}.table.has-sort-head thead>tr>th>a:after,.table.has-sort-head thead>tr>th>a:before{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-size:14px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;line-height:30px;color:#3c4353;text-transform:none;content:"\f0de";opacity:.5;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.table.has-sort-head thead>tr>th>a:after{content:"\f0dd"}.table.has-sort-head thead>tr>th>a.sort-down,.table.has-sort-head thead>tr>th>a.sort-up{color:#000;text-decoration:none}.table.has-sort-head thead>tr>th>a:hover,.table.has-sort-head thead>tr>th>a:hover:after,.table.has-sort-head thead>tr>th>a:hover:before{color:#0c64eb;opacity:1}.table.has-sort-head thead>tr>th>a.sort-down:after,.table.has-sort-head thead>tr>th>a.sort-up:before{color:#000;opacity:1}.head-fixed .datatable-head-span .table,.table.fixed-header-copy{z-index:10;color:#fff;background:rgba(75,75,75,.85)}.head-fixed .datatable-head-span .table thead>tr>th,.table.fixed-header-copy thead>tr>th{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a,.table.fixed-header-copy thead>tr>th>a{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover{color:#fff}.head-fixed .datatable-head-span .table thead>tr>th>a:after,.head-fixed .datatable-head-span .table thead>tr>th>a:before,.table.fixed-header-copy thead>tr>th>a:after,.table.fixed-header-copy thead>tr>th>a:before{color:#eee}.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-down:after,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up,.head-fixed .datatable-head-span .table thead>tr>th>a.sort-up:before,.head-fixed .datatable-head-span .table thead>tr>th>a:hover,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:after,.head-fixed .datatable-head-span .table thead>tr>th>a:hover:before,.table.fixed-header-copy thead>tr>th>a.sort-down,.table.fixed-header-copy thead>tr>th>a.sort-down:after,.table.fixed-header-copy thead>tr>th>a.sort-up,.table.fixed-header-copy thead>tr>th>a.sort-up:before,.table.fixed-header-copy thead>tr>th>a:hover,.table.fixed-header-copy thead>tr>th>a:hover:after,.table.fixed-header-copy thead>tr>th>a:hover:before{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary,.table.fixed-header-copy .checkbox-primary{z-index:1}.head-fixed .datatable-head-span .table .checkbox-primary label,.table.fixed-header-copy .checkbox-primary label{color:#fff}.head-fixed .datatable-head-span .table .checkbox-primary label:after,.table.fixed-header-copy .checkbox-primary label:after{border-color:rgba(255,255,255,.8)}.head-fixed .datatable-head-span .table .checkbox-primary.checked label:after,.table.fixed-header-copy .checkbox-primary.checked label:after{border-color:#00da88!important}.table-data{margin:0;table-layout:fixed}.table-data tbody>tr>td,.table-data tbody>tr>th{padding:6px 8px;word-break:break-all;border:none}.table-data tbody>tr>th{width:70px;padding-left:0;font-weight:400;color:#838a9d;text-align:right;vertical-align:middle}.table-data tbody>tr>td{padding-right:0}.table-data tbody>tr>td>a{color:#0c60e1}.table-data tbody>tr>td>a:not(.btn):visited{color:#082999}.table-data tbody>tr>td>a:hover,.table-data tbody>tr>td>a:visited:hover{color:#0c64eb}.table-data ol,.table-data ul{margin:0}.fixed-head-table{background:rgba(0,0,0,.7);border-bottom:1px solid #ddd}.fixed-head-table thead>tr>th{color:#fff}.table-empty-tip{padding:80px 10px;text-align:center;background:#fff}.not-firefox .table-grouped>tbody>tr>td.c-side{background:#fff!important}.table-grouped .group-toggle{cursor:pointer}.table-grouped .group-toggle.group-summary{border-top:10px solid #efefef}.table-grouped tbody>tr>td:first-child,.table-grouped thead>tr>th:first-child{padding-left:8px}.group-expand-all,.table-group-collapsed .group-collapse-all{display:none}.table-group-collapsed .group-expand-all{display:inline-block}.table-auto{table-layout:auto}.datatable .table>tbody>tr.checked.hover>td,.datatable .table>tbody>tr.checked>td.col-hover{background:#ffebbc}body.has-fixed-footer{padding-bottom:60px}.table.with-footer-fixed{margin-bottom:20px}.article-content{overflow:auto}.article-content img{margin-top:0}.article-content table{margin:10px 0}.article-content table td,.article-content table th{border:1px solid #cbd0db}.article-content table th{background:#eee}.article-content,.article>.content{word-wrap:break-word}.detail{padding:10px 0;margin:0 10px}.detail+.detail{padding-top:25px;border-top:1px solid #eee}.detail-title{font-size:14px;font-weight:700;line-height:20px}.detail-title>.pull-right{position:relative;top:-8px}h2.detail-title{margin:0;font-size:15px;font-weight:700}h2.detail-title .label,h2.detail-title .label-id{position:relative;top:-1px}.detail-content{padding:0;margin-top:10px}.detail-content em{font-style:normal;color:#3c4353}.detail-content .list-unstyled>li+li{margin-top:5px}.side-col .detail-content{padding-left:0}details.detail{padding:10px 0}details.detail summary{position:relative;cursor:pointer;outline:0}details.detail summary::-webkit-details-marker{display:none}details.detail summary:after{position:absolute;top:0;right:0;font-family:ZentaoIcon;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;line-height:1;text-transform:none;content:"\e316";opacity:.4;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}details.detail[open] summary:after{content:"\e313"}.files-list{padding-left:0;list-style:none}.files-list>li>a{display:block;line-height:24px}.files-list>li>a>.icon{display:inline-block;margin-right:5px;opacity:.7}.files-list>li>a:hover{color:#0c64eb}.files-list>li>.right-icon{opacity:0;-webkit-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.files-list>li:hover>.right-icon{opacity:1}.histories-list{padding-left:15px;margin-bottom:0}.histories-list .btn-mini{position:relative;top:1px}.histories-list>li{position:relative}.histories-list>li+li{margin-top:5px}.histories-list>li strong{color:#3c4353}.histories-list .comment,.histories-list .show-form .comment-edit-form{padding:5px 5px 5px 10px;margin:5px 0 0;background-color:rgba(0,0,0,.025);border:1px solid #eee}.histories-list .btn-edit-comment{position:absolute;top:28px;right:2px}.histories-list .comment-edit-form,.histories-list .show-form .btn-edit-comment,.histories-list .show-form .comment{display:none}.histories-list .show-form .comment-edit-form{display:block;padding:10px;border:1px solid #eee}.histories .btn-mini{width:16px;min-width:16px;height:16px;overflow:hidden;line-height:16px;color:#cbd0db;vertical-align:-8%;border-radius:1px}.histories .btn-mini>.icon{position:relative;top:-2px;left:-2px}.histories .btn-mini:focus,.histories .btn-mini:hover{color:#0c64eb;border-color:#0c64eb}.histories .show-changes .btn-expand>.icon:before{content:"\e926"}.histories .btn-strip{display:none}.histories .show-changes .btn-strip{display:inline-block}.history-changes{display:none;padding:5px;margin-bottom:-5px;margin-left:5px;font-size:12px;line-height:20px}.history-changes blockquote{padding:5px 5px 5px 10px;margin:5px 0 0;font-size:12px;background-color:rgba(0,0,0,.05);border-left:3px solid #eee}.history-changes blockquote.original{display:none}.show-changes .history-changes,.show-original .history-changes blockquote.original{display:block}.show-original .history-changes blockquote.textdiff{display:none}.syntaxhighlighter{overflow:auto}.search-list{min-width:200px;max-width:300px;padding:0}.search-list .search-box{float:none;width:auto;margin:10px}.search-list .search-box .icon-search{opacity:.5}.search-list .list-group{max-height:248px;padding:5px 10px;margin:5px 0}.dropup .search-list .search-box+.list-group{height:171px;padding-top:0}.search-list .search-input{height:30px}.search-list .input-control-icon-right{height:28px;line-height:28px}.list-group{overflow-y:auto}.list-group>a{display:block;padding:2px 10px 2px 5px;overflow:hidden;line-height:20px;text-overflow:ellipsis;white-space:nowrap;border-radius:4px}.list-group>a+a{margin-top:5px}.list-group>a>.icon{display:inline-block;margin-right:3px;opacity:.5}.list-group>a.selected{color:#e9f2fb;background-color:#0c64eb}.list-group>a.active{color:#0c64eb;background-color:#e9f2fb}.list-group>a.active:hover,.list-group>a:hover{color:#fff;background-color:#0c64eb}.list-group>.heading{padding:2px 5px;line-height:20px;color:#838a9d}.list-group>a+.heading{margin-top:4px}.dropup .search-box-sink{padding-top:5px;padding-bottom:45px}.dropup .search-box-sink .search-box{position:absolute;right:10px;bottom:10px;left:10px;margin:0}.dropup .search-box-sink .search-box+.list-group{height:auto;max-height:171px}#dropMenu>.search-box{max-width:188px}#dropMenu .input-control-icon-left{top:0}#dropMenu .list-group{width:199px;max-width:199px;max-height:300px;padding-top:0}#dropMenu .table-row .list-group{margin:0 -10px}#dropMenu .col-right{display:none}#dropMenu .col-left{width:100%}#dropMenu .col-left .list-group{max-height:250px;margin-bottom:35px}#dropMenu .col-footer{position:absolute;bottom:10px;left:10px;width:180px;padding-top:10px;padding-left:5px;margin-top:5px;border-top:1px solid #eee}#dropMenu .col-footer>a{opacity:.8}#dropMenu .col-footer>a:hover{opacity:1}#dropMenu.show-right-col{width:402px;max-width:402px}#dropMenu.show-right-col>.list-group{width:400px;max-width:400px}#dropMenu.show-right-col .col-left,#dropMenu.show-right-col .col-right{display:table-cell;width:50%}#dropMenu.show-right-col .col-left>.list-group{width:200px;max-width:200px;margin-right:0}#dropMenu.show-right-col .col-right{border-left:1px solid #eee}#dropMenu.show-right-col .col-right>.list-group{width:199px;max-height:285px;margin:0}#dropMenu.show-right-col .col-right>.list-group>a{opacity:.7}#dropMenu.show-right-col .col-right>.list-group>a:hover{opacity:1}#dropMenu.show-right-col .toggle-right-col>.icon-angle-right:before{content:"\e314"}#dropMenu.has-search-text{width:200px;margin-bottom:35px}#dropMenu.has-search-text>.list-group>.table-row{display:block}#dropMenu.has-search-text>.list-group>.table-row>.table-col{display:block}#dropMenu.has-search-text .pull-right.toggle-right-col{display:none}#dropMenu.has-search-text .col-left .list-group{margin-bottom:0}#dropMenu.has-search-text .col-right{margin-left:-10px}#dropMenu.has-search-text .col-right .list-group{margin-bottom:35px}#dropMenu.has-search-text .col-right .list-group>a{opacity:.7}#dropMenu.has-search-text>a{opacity:.7}.release-path{overflow:hidden}.release-line{display:table;width:100%;padding:0;table-layout:fixed}.release-line>li{display:table-cell;list-style:none}.release-line>li>a{position:relative;display:block}.release-line>li>a:before{position:absolute;left:0;display:block;width:13px;height:13px;content:' ';background:#fff;border:2px solid #838a9d;border-radius:50%}.release-line>li>a:after{position:absolute;left:5px;display:block;width:2px;height:30px;content:' ';background:#cbe0f6}.release-line>li>a>.icon{position:absolute;left:4px;font-size:24px}.release-line>li>a .title{display:block;font-size:14px;white-space:nowrap}.release-line>li>a .date,.release-line>li>a .info{display:block;max-height:18px;overflow:hidden;font-size:12px;color:#838a9d;text-overflow:ellipsis;white-space:nowrap}.release-line>li>a:hover:before{background-color:#e9f2fb}.release-line>li>a:hover:after{background-color:#838a9d}.release-line>li>a:hover .title{color:#0c64eb}.release-line>li>a:hover .date,.release-line>li>a:hover .info{color:#838a9d}.release-line>li:nth-child(odd){padding-top:80px;vertical-align:top}.release-line>li:nth-child(odd)>a{height:85px;padding-top:36px;border-top:5px solid #cbe0f6}.release-line>li:nth-child(odd)>a:before{top:-9px}.release-line>li:nth-child(odd)>a:after{top:6px}.release-line>li:nth-child(odd)>a>.icon{top:-26px}.release-line>li:nth-child(even){padding-bottom:80px;vertical-align:bottom}.release-line>li:nth-child(even)>a{height:85px;padding-bottom:36px;border-bottom:5px solid #cbe0f6}.release-line>li:nth-child(even)>a:before{bottom:-9px}.release-line>li:nth-child(even)>a:after{bottom:6px}.release-line>li:nth-child(even)>a>.icon{bottom:-2px}.release-line>li:last-child>a{border-color:transparent}.release-line>li.active>a:before{border-color:#0c64eb}.release-line>li+li>a>.date,.release-line>li+li>a>.info,.release-line>li+li>a>.title{position:relative;left:-36%}#footer{position:fixed;right:0;bottom:0;left:0;z-index:1010;height:40px;background:#fff;border-top:1px solid #eff1f7}#footer .breadcrumb{padding:10px 0;margin:0}#footer .breadcrumb>li{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#footer .breadcrumb>.active,#footer .breadcrumb>li>a{color:#838a9e}#footer .breadcrumb>.active:hover,#footer .breadcrumb>li>a:hover{color:#16a8f8}#footer .breadcrumb>li+li:before{content:'>'}#footer>.container{padding:0 20px}@media (min-width:1400px){#footer>.container{padding:0 40px}}#poweredBy{position:absolute;top:4px;right:0;padding:5px 10px}#poweredBy .icon-zentao{color:#0097fd}#poweredBy a{color:#3c4353}#poweredBy a:hover{color:#0c64eb}#poweredBy a:hover .icon-zentao{color:#0c64eb}#poweredBy a.text-important{color:#bd7b46}#poweredBy a.text-important:hover{color:#ff5d5d}#poweredBy a.text-primary{color:#0c64eb}#poweredBy a.text-primary:hover{color:#16a8f8}#poweredBy #aiux{color:#cbd0dc}#noticeBox .alert{-webkit-box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px;box-shadow:rgba(0,0,0,.15) 0 3px 10px,rgba(0,0,0,.25) 0 3px 10px} \ No newline at end of file diff --git a/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php b/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php deleted file mode 100644 index 406bead9f3..0000000000 --- a/xuanxuan/module/admin/ext/control/ajaxsavexxstatus.php +++ /dev/null @@ -1,16 +0,0 @@ -app->user->account; - if($type == 'noticed') - { - $this->loadModel('setting')->setItem("system.common.xxserver.noticed", 1); - } - else - { - $this->loadModel('setting')->setItem("system.common.xxclient.{$account}installed", 1); - } - } -} diff --git a/xuanxuan/module/admin/ext/control/downloadxxd.php b/xuanxuan/module/admin/ext/control/downloadxxd.php index e2f82c9cb2..c3c605ce4e 100644 --- a/xuanxuan/module/admin/ext/control/downloadxxd.php +++ b/xuanxuan/module/admin/ext/control/downloadxxd.php @@ -5,9 +5,13 @@ class admin extends control { if(in_array($type, array('config', 'package'))) { - $setting = $this->config->xuanxuan; + $this->loadModel('chat'); + $server = $this->chat->getServer('zentao'); + if(strpos($server, '127.0.0.1') !== false) die(js::alert($this->lang->chat->xxdServerError)); + + $setting = $this->config->xuanxuan; $setting->os = $os; - $this->loadModel('chat')->downloadXXD($setting, $type); + $this->chat->downloadXXD('zentao', $setting, $type); } die("Params error."); } diff --git a/xuanxuan/module/admin/ext/control/xuanxuan.php b/xuanxuan/module/admin/ext/control/xuanxuan.php index 08a64fd3e2..b143f60786 100644 --- a/xuanxuan/module/admin/ext/control/xuanxuan.php +++ b/xuanxuan/module/admin/ext/control/xuanxuan.php @@ -17,16 +17,19 @@ class admin extends control if(!is_numeric($setting->chatPort) or (int)$setting->chatPort <= 0 or (int)$setting->chatPort > 65535) $errors['chatPort'] = $this->lang->chat->xxdPortError; if(!is_numeric($setting->commonPort) or (int)$setting->commonPort <= 0 or (int)$setting->commonPort > 65535) $errors['commonPort'] = $this->lang->chat->xxdPortError; - if($setting->isHttps) + if($setting->isHttps == 'on') { if(empty($setting->sslcrt)) $errors['sslcrt'] = $this->lang->chat->errorSSLCrt; if(empty($setting->sslkey)) $errors['sslkey'] = $this->lang->chat->errorSSLKey; } + if(strpos($setting->server, '127.0.0.1') !== false) $errors[] = $this->lang->chat->xxdServerError; + if(strpos($setting->server, 'https://') !== 0 and strpos($setting->server, 'http://') !== 0) $errors[] = $this->lang->chat->xxdSchemeError; + if(empty($setting->server)) $errors[] = $this->lang->chat->xxdServerEmpty; + if($errors) $this->send(array('result' => 'fail', 'message' => $errors)); - $setting->server = ($setting->isHttps ? 'https' : 'http') . '://' . $setting->domain . ':' . $setting->commonPort; - $result = $this->loadModel('setting')->setItems('system.common.xuanxuan', $setting, 'all'); + $result = $this->loadModel('setting')->setItems('system.common.xuanxuan', $setting); if(!$result) $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('xuanxuan'))); } @@ -34,19 +37,11 @@ class admin extends control $os = 'win'; if(strpos(strtolower(PHP_OS), 'win') !== 0) $os = strtolower(PHP_OS); - $domain = $this->server->http_host; - if(!empty($this->config->xuanxuan->server)) - { - preg_match('/^(https?:\/\/)?([^\:]+)/i', $this->config->xuanxuan->server, $match); - $domain = $match[2]; - } - - $this->view->title = $this->lang->chat->common; $this->view->adminList = $this->loadModel('user')->getPairs('admin'); $this->view->os = $os . '_' . php_uname('m'); $this->view->type = $type; - $this->view->domain = $domain; + $this->view->domain = $this->loadModel('chat')->getServer('zentao'); $this->view->turnon = isset($this->config->xuanxuan->turnon) ? $this->config->xuanxuan->turnon : 1; $this->view->isHttps = $this->config->xuanxuan->isHttps ? $this->config->xuanxuan->isHttps : 0; $this->display(); diff --git a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css index 69089acc43..d694ec8d6c 100644 --- a/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css +++ b/xuanxuan/module/admin/ext/css/xuanxuan/xuanxuan.css @@ -1 +1,2 @@ -.form-inline .form-control {min-width: 215px;} +.table-form textarea.form-control{height: 100px} +.sslTR td .form-control{width:600px} diff --git a/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js b/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js index cc3ced59ba..8130ee9223 100644 --- a/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js +++ b/xuanxuan/module/admin/ext/js/xuanxuan/xuanxuan.js @@ -22,7 +22,7 @@ $(function() { var value = $(this).val(); $('#isHttps').val(value); - if(value == 1) + if(value == 'on') { $('.sslTR').show(); } diff --git a/xuanxuan/module/admin/ext/lang/en/en.php b/xuanxuan/module/admin/ext/lang/en/en.php index 22f8d22268..6847b028d3 100644 --- a/xuanxuan/module/admin/ext/lang/en/en.php +++ b/xuanxuan/module/admin/ext/lang/en/en.php @@ -1,2 +1,3 @@ admin->xuanxuan = 'Xuanxuan'; +$lang->admin->xuanxuan = 'Client'; +$lang->admin->downloadXXD = 'Download XXD'; diff --git a/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php b/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php index ce20c83b69..32172290d3 100644 --- a/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php +++ b/xuanxuan/module/admin/ext/lang/zh-cn/zh-cn.php @@ -1,2 +1,3 @@ admin->xuanxuan = '喧喧集成'; +$lang->admin->xuanxuan = '客户端集成'; +$lang->admin->downloadXXD = '下载喧喧服务端'; diff --git a/xuanxuan/module/admin/ext/view/xuanxuan.html.php b/xuanxuan/module/admin/ext/view/xuanxuan.html.php index 10b97f2ca5..2505783ecc 100644 --- a/xuanxuan/module/admin/ext/view/xuanxuan.html.php +++ b/xuanxuan/module/admin/ext/view/xuanxuan.html.php @@ -21,11 +21,12 @@

      chat->settings;?>

      -
      + - + + @@ -37,7 +38,8 @@ - + + @@ -54,6 +56,21 @@ + + + + + @@ -70,12 +87,12 @@ - '> + '> - '> + '> @@ -94,14 +111,18 @@ goback, '', 'class="btn" style="min-width: 120px"');?> - chat->downloadConfig, '', "class='btn btn-primary download'");?> - chat->downloadXXD, '', "class='btn btn-primary download download-package' target='_blank'");?> + chat->downloadXXD, 'hiddenwin', "class='btn btn-primary download download-package'");?> + chat->downloadConfig, 'hiddenwin', "class='btn btn-primary download'");?> chat->changeSetting, '', "class='btn'");?> + chat->help, '_blank', "class='btn'");?>
      chat->turnon;?>chat->turnonList, $turnon) : zget($lang->chat->turnonList, $config->xuanxuan->turnon);?>chat->turnonList, $turnon) : zget($lang->chat->turnonList, $config->xuanxuan->turnon);?>
      chat->version;?>
      chat->xxdServer;?>chat->xxdServerTip;?>
      chat->xxd->ip;?>xuanxuan, 'commonPort', 11443), "placeholder='{$lang->chat->placeholder->xxd->commonPort}' class='form-control'") : zget($config->xuanxuan, 'commonPort', 11443);?>
      chat->xxd->uploadFileSize;?> + +
      + chat->xxd->max;?> + xuanxuan, 'uploadFileSize', 20), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->uploadFileSize}' ");?> + M +
      + + chat->xxd->max . zget($config->xuanxuan, 'uploadFileSize', 20) . 'M';?> + +
      chat->xxd->isHttps;?>
      chat->xxd->sslcrt;?> xuanxuan, 'sslcrt', ''), "placeholder='{$lang->chat->placeholder->xxd->sslcrt}' class='form-control'");?>
      chat->xxd->sslkey;?> xuanxuan, 'sslkey', ''), "placeholder='{$lang->chat->placeholder->xxd->sslkey}' class='form-control'");?>
      + +
      chat->info;?>
      +
      diff --git a/xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php b/xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php new file mode 100755 index 0000000000..93532a2880 --- /dev/null +++ b/xuanxuan/module/block/ext/view/dashboard.xuanxuan.html.hook.php @@ -0,0 +1,18 @@ + diff --git a/xuanxuan/module/chat/ext/control/downloadxxd.php b/xuanxuan/module/chat/ext/control/downloadxxd.php deleted file mode 100644 index e984cc0cfa..0000000000 --- a/xuanxuan/module/chat/ext/control/downloadxxd.php +++ /dev/null @@ -1,17 +0,0 @@ -get(); - $result = $this->loadModel('setting')->setItems('system.common.xxd', $setting); - $this->chat->downloadXXD($setting); - } - - if(!isset($this->config->xxd)) $this->config->xxd = new stdclass(); - $this->view->title = $this->lang->chat->downloadXXD; - $this->display(); - } -} diff --git a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php index a1b03d8240..7c5397821b 100644 --- a/xuanxuan/module/chat/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/en/xuanxuan.php @@ -1,22 +1,15 @@ chat->common = 'Xuanxuan'; -$lang->chat->turnon = 'On'; -$lang->chat->downloadXXD = 'Download XXD'; - -$lang->chat->turnonList = array(); -$lang->chat->turnonList[1] = 'On'; -$lang->chat->turnonList[0] = 'Off'; - -$lang->chat->status = 'Status'; -$lang->chat->xxdServer = 'XXD Server'; +$lang->chat->common = 'Xuanxuan'; +$lang->chat->turnon = 'On'; +$lang->chat->help = 'Help'; +$lang->chat->settings = 'Settings'; +$lang->chat->xxdServer = 'ZenTao Server'; $lang->chat->downloadXXD = 'Download XXD'; -$lang->chat->listenIP = 'Listen IP'; -$lang->chat->chatPort = 'Chat Port'; -$lang->chat->uploadFileSize = 'File Size'; -$lang->chat->downloadPackage = 'Full Package'; -$lang->chat->downloadConfig = 'Only Config'; $lang->chat->zentaoIntegrate = 'Zentao Integrated'; -$lang->chat->changeSetting = 'Change Setting'; +$lang->chat->zentaoClient = 'ZenTao Client is added!'; +$lang->chat->getChatUsers = 'Get Chat Users'; +$lang->chat->getChatGroups = 'Get Chat Groups'; +$lang->chat->notifyMSG = 'Notify'; $lang->chat->createBug = 'Create Bug'; $lang->chat->createDoc = 'Create Doc'; @@ -24,32 +17,14 @@ $lang->chat->createStory = 'Create Story'; $lang->chat->createTask = 'Create Task'; $lang->chat->createTodo = 'Create Todo'; -$lang->chat->statusList[1] = 'Enable'; -$lang->chat->statusList[0] = 'Disable'; +$lang->chat->turnonList = array(); +$lang->chat->turnonList[1] = 'Enable'; +$lang->chat->turnonList[0] = 'Disable'; -$lang->chat->httpsOptions[1] = 'Enable'; -$lang->chat->httpsOptions[0] = 'Disable'; +$lang->chat->info = "ZenTao client is powered by Xuan, a secure and open source Instant Messenger by Nature Easy Soft. It is a self-hosted and cross-platform tool with numerous plug-ins and robust features. In Xuan, you can code your own plug-ins. Click HERE for more."; +$lang->chat->xxClientConfirm = 'Click Download ZenTao Client at the right bottom to download it!'; +$lang->chat->xxServerConfirm = 'Go to Admin-Integrate-ZT Client to download the ZenTao Client Server!'; -$lang->chat->xxdServerTip = 'XXD server address contains protocol and host and port,such as https://127.0.0.1:11443'; +$lang->chat->xxdServerTip = 'XXD server address contains protocol, host and port,such as http://192.168.1.35 or http://pms.zentao.com. It should not be 127.0.0.1.'; $lang->chat->xxdServerEmpty = 'XXD server address is empty.'; -$lang->chat->xxdSchemeError = 'Server address should started with http:// or https://.'; -$lang->chat->xxdPortError = 'Server address should contain valid port and the default is 11443.'; -$lang->chat->xxClientConfirm = 'Click to download new zentao client!'; -$lang->chat->xxServerConfirm = 'Click to download new zentao client server!'; - -$lang->chat->xxd = new stdclass(); -$lang->chat->xxd->os = 'OS'; -$lang->chat->xxd->ip = 'Listen IP'; -$lang->chat->xxd->chatPort = 'Chat Port'; -$lang->chat->xxd->commonPort = 'Common Port'; -$lang->chat->xxd->isHttps = 'Ishttps'; -$lang->chat->xxd->uploadFileSize = 'File Size'; -$lang->chat->xxd->sslcrt = 'SSL Crt'; -$lang->chat->xxd->sslkey = 'SSL Key'; -$lang->chat->xxd->max = 'Max'; - -$lang->chat->osList['win_i386'] = 'Windows 32位'; -$lang->chat->osList['win_x86_64'] = 'Windows 64位'; -$lang->chat->osList['linux_i386'] = 'Linux 32位'; -$lang->chat->osList['linux_x86_64'] = 'Linux 64位'; -$lang->chat->osList['darwin_x86_64'] = 'macOS'; +$lang->chat->xxdServerError = 'XXD server address should not be 127.0.0.1.'; diff --git a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php index 31187232bb..c60224f9d0 100644 --- a/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/chat/ext/lang/zh-cn/xuanxuan.php @@ -1,22 +1,15 @@ chat->common = '喧喧'; +$lang->chat->common = '客户端'; $lang->chat->turnon = '是否打开'; +$lang->chat->help = '使用说明'; +$lang->chat->settings = '服务器设置'; +$lang->chat->xxdServer = '禅道服务器'; $lang->chat->downloadXXD = '下载喧喧服务端'; - -$lang->chat->turnonList = array(); -$lang->chat->turnonList[1] = '是'; -$lang->chat->turnonList[0] = '否'; - -$lang->chat->status = '状态'; -$lang->chat->xxdServer = 'XXD服务器'; -$lang->chat->downloadXXD = '下载喧喧服务端'; -$lang->chat->listenIP = '监听IP'; -$lang->chat->chatPort = '客户端通讯端口'; -$lang->chat->uploadFileSize = '上传文件大小'; -$lang->chat->downloadPackage = '下载完整包'; -$lang->chat->downloadConfig = '只下载配置文件'; $lang->chat->zentaoIntegrate = '禅道集成'; -$lang->chat->changeSetting = '修改配置'; +$lang->chat->zentaoClient = '新增禅道客户端!'; +$lang->chat->getChatUsers = '获取用户'; +$lang->chat->getChatGroups = '获取讨论组'; +$lang->chat->notifyMSG = '消息通知'; $lang->chat->createBug = '创建 Bug'; $lang->chat->createDoc = '创建文档'; @@ -24,44 +17,14 @@ $lang->chat->createStory = '创建需求'; $lang->chat->createTask = '创建任务'; $lang->chat->createTodo = '创建待办'; -$lang->chat->statusList[1] = '启用'; -$lang->chat->statusList[0] = '不启用'; +$lang->chat->turnonList = array(); +$lang->chat->turnonList[1] = '是'; +$lang->chat->turnonList[0] = '否'; -$lang->chat->xxdServerTip = 'XXD服务器地址为完整的协议+地址+端口,示例:https://127.0.0.1:11443。'; -$lang->chat->xxdServerEmpty = 'XXD服务器地址为空。'; -$lang->chat->xxdSchemeError = '服务器地址应该以http://或https://开头。'; -$lang->chat->xxdPortError = '服务器地址应该包含有效的端口号,默认为11443。'; -$lang->chat->xxClientConfirm = '禅道新增客户端,与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击确认下载客户端。'; -$lang->chat->xxServerConfirm = '禅道新增客户端,与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击确认前往后台配置客户端服务器。'; +$lang->chat->info = "禅道客户端由易软天创旗下另外一款免费、开源、安全的IM产品喧喧驱动,支持私有部署,跨平台操作,内置大量插件,功能丰富,在喧喧里,您甚至还可以为自己编写个性化的插件,点击查看。"; +$lang->chat->xxClientConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!点击界面右下角下载禅道客户端。'; +$lang->chat->xxServerConfirm = '与禅道深度集成,支持成员沟通,小组讨论,文件传输,任务指派,更加方便的项目管理,更加流畅的团队协作!进入后台-集成-客户端集成进行下载配置。'; -$lang->chat->xxd = new stdclass(); -$lang->chat->xxd->os = '操作系统'; -$lang->chat->xxd->ip = '监听IP'; -$lang->chat->xxd->chatPort = '客户端通讯端口'; -$lang->chat->xxd->commonPort = '通用端口'; -$lang->chat->xxd->isHttps = '启用https'; -$lang->chat->xxd->uploadFileSize = '上传文件大小'; -$lang->chat->xxd->maxOnlineUser = '最大在线人数'; -$lang->chat->xxd->sslcrt = '证书内容'; -$lang->chat->xxd->sslkey = '证书私钥'; -$lang->chat->xxd->max = '最大'; - -$lang->chat->httpsOptions[1] = '启用'; -$lang->chat->httpsOptions[0] = '不启用'; - -$lang->chat->placeholder = new stdclass(); -$lang->chat->placeholder->xxd = new stdclass(); -$lang->chat->placeholder->xxd->ip = '监听的服务器ip地址,没有特殊需要直接填写0.0.0.0'; -$lang->chat->placeholder->xxd->chatPort = '与聊天客户端通讯的端口'; -$lang->chat->placeholder->xxd->commonPort = '通用端口,该端口用于客户端登录时验证,以及文件上传下载使用'; -$lang->chat->placeholder->xxd->isHttps = '启用https'; -$lang->chat->placeholder->xxd->uploadFileSize = '上传文件的大小'; -$lang->chat->placeholder->xxd->maxOnlineUser = '最大在线人数'; -$lang->chat->placeholder->xxd->sslcrt = '请将证书内容复制到此处'; -$lang->chat->placeholder->xxd->sslkey = '请将证书密钥复制到此处'; - -$lang->chat->osList['win_i386'] = 'Windows 32位'; -$lang->chat->osList['win_x86_64'] = 'Windows 64位'; -$lang->chat->osList['linux_i386'] = 'Linux 32位'; -$lang->chat->osList['linux_x86_64'] = 'Linux 64位'; -$lang->chat->osList['darwin_x86_64'] = 'macOS'; +$lang->chat->xxdServerTip = '禅道服务器地址为完整的协议+地址+端口,示例:http://192.168.1.35 或 http://pms.zentao.com ,不能使用127.0.0.1。'; +$lang->chat->xxdServerEmpty = '禅道服务器地址为空。'; +$lang->chat->xxdServerError = '禅道服务器地址不能为 127.0.0.1。'; diff --git a/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php b/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php deleted file mode 100644 index 182a73f176..0000000000 --- a/xuanxuan/module/chat/ext/lang/zh-tw/xuanxuan.php +++ /dev/null @@ -1,2 +0,0 @@ -chat->common = '喧喧'; diff --git a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php index f9e3c24f2b..01ae96a8f6 100644 --- a/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/chat/ext/model/class/xuanxuan.class.php @@ -1,81 +1,36 @@ server = $setting->server; - $data->uploadFileSize = $setting->uploadFileSize; - $data->uploadFileSize = $setting->uploadFileSize; - $data->isHttps = $setting->isHttps; - $data->sslcrt = $setting->sslcrt; - $data->sslkey = $setting->sslkey; - $data->ip = $setting->ip; - $data->chatPort = $setting->chatPort; - $data->commonPort = $setting->commonPort; - $data->maxOnlineUser = isset($setting->maxOnlineUser) ? $setting->maxOnlineUser : 0; - $data->host = commonModel::getSysURL() . getWebRoot(); - $data->key = $this->config->xuanxuan->key; - $data->os = $setting->os; - $data->version = $this->config->xuanxuan->version; - $data->downloadType = $type; - - $url = "https://www.chanzhi.org/license-downloadxxd.html"; - $agent = $this->app->loadClass('snoopy'); - $agent->cookies['lang'] = $this->cookie->lang; - $agent->submit($url, $data); - $result = $agent->results; - - if($type == 'config') - { - $this->sendDownHeader('xxd.conf', 'conf', $result, strlen($result)); - } - else - { - header("Location: $result"); - } - - $this->loadModel('setting')->setItem('system.common.xxserver.installed', 1); - exit; - } - - public function sendDownHeader($fileName, $fileType, $content, $fileSize = 0) - { - /* Set the downloading cookie, thus the export form page can use it to judge whether to close the window or not. */ - setcookie('downloading', 1, 0, '', '', false, true); - - /* Append the extension name auto. */ - $extension = '.' . $fileType; - if(strpos($fileName, $extension) === false) $fileName .= $extension; - - /* urlencode the fileName for ie. */ - $isIE11 = (strpos($this->server->http_user_agent, 'Trident') !== false and strpos($this->server->http_user_agent, 'rv:11.0') !== false); - if(strpos($this->server->http_user_agent, 'MSIE') !== false or $isIE11) $fileName = urlencode($fileName); - - /* Judge the content type. */ - $mimes = $this->config->chat->mimes; - $contentType = isset($mimes[$fileType]) ? $mimes[$fileType] : $mimes['default']; - if(empty($fileSize) and $content) $fileSize = strlen($content); - - header("Content-type: $contentType"); - header("Content-Disposition: attachment; filename=\"$fileName\""); - header("Content-length: {$fileSize}"); - header("Pragma: no-cache"); - header("Expires: 0"); - die($content); - } - public function getExtensionList($userID) { $entries = array(); - $baseURL = commonModel::getSysURL(); + $baseURL = $this->getServer('zentao'); + + $this->loadModel('user'); + $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($userID)->fetch(); + $user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false; + $user->rights = $this->user->authorize($user->account); + $user->groups = $this->user->getGroups($user->account); + $user->view = $this->user->grantUserView($user->account, $user->rights['acls']); + + $this->session->set('user', $user); + $this->app->user = $this->session->user; + + $products = $this->loadModel('product')->getPairs(); + $projects = $this->loadModel('project')->getPairs(); + $products = empty($products) ? array() : array_keys($products); + $projects = empty($projects) ? array() : array_keys($projects); + $libIdList = array_keys($this->loadModel('doc')->getLibs('all')); + $productID = isset($products[0]) ? $products[0] : 1; + $projectID = isset($projects[0]) ? $projects[0] : 1; + $libID = isset($libIdList[0]) ? $libIdList[0] : 1; $actions = new stdclass(); - $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('bug', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('doc', 'create', 'lib=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('story', 'create', 'product=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('task', 'create', 'project=1', 'xhtml')), 'height' => "600px", 'width' => "800px"); - $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/xuanxuan.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('bug', 'create') and !empty($products)) $actions->createBug = array('title' => $this->lang->chat->createBug, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('bug', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('doc', 'create') and !empty($libIdList))$actions->createDoc = array('title' => $this->lang->chat->createDoc, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('doc', 'create', "libID=$libID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('story', 'create') and !empty($products)) $actions->createStory = array('title' => $this->lang->chat->createStory, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('story', 'create', "product=$productID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('task', 'create') and !empty($projects)) $actions->createTask = array('title' => $this->lang->chat->createTask, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('task', 'create', "project=$projectID", 'xhtml')), 'height' => "600px", 'width' => "800px"); + if(common::hasPriv('todo', 'create')) $actions->createTodo = array('title' => $this->lang->chat->createTodo, 'url' => $baseURL . str_replace('/x.php', '/index.php', helper::createLink('todo', 'create', '', 'xhtml')), 'height' => "600px", 'width' => "800px"); $urls = array(); foreach($this->config->chat->cards as $moduleName => $methods) @@ -84,11 +39,11 @@ class xuanxuanChat extends chatModel { if($this->config->requestType == 'GET') { - $url = "/index.php?m={$moduleName}&f={$methodName}"; + $url = $this->config->webRoot . "index.php?m={$moduleName}&f={$methodName}"; } else { - $url = "/{$moduleName}-{$methodName}-"; + $url = $this->config->webRoot . "{$moduleName}-{$methodName}-"; } $urls[$url] = $size; } @@ -107,6 +62,44 @@ class xuanxuanChat extends chatModel $data->data['entryUrl'] = trim($baseURL . $this->config->webRoot, '/'); $entries[] = $data; + unset($_SESSION['user']); return $entries; } + + public function editUser($user = null) + { + if(empty($user->id)) return null; + + $data = array(); + foreach($this->config->chat->user->canEditFields as $field) + { + if(!empty($user->$field)) $data[$field] = $user->$field; + } + if(!empty($user->account) && !empty($user->password)) $data['password'] = $user->password; + if(!$data) return null; + + $data['clientLang'] = $this->app->getClientLang(); + $this->dao->update(TABLE_USER)->data($data)->where('id')->eq($user->id)->exec(); + return $this->getUserByUserID($user->id); + } + + public function getServer($backend = 'xxb') + { + $server = commonModel::getSysURL(); + if(!empty($this->config->xuanxuan->server)) + { + $host = $this->server->http_host; + $position = strrpos($host, ':'); + $port = $position === false ? '' : substr($host, $position + 1); + $server = $this->config->xuanxuan->server; + if($port and strpos($server, ":$port") === false) + { + $server = rtrim($server, '/'); + $server = "{$server}:{$port}"; + } + } + $server = rtrim($server, '/'); + + return $server; + } } diff --git a/xuanxuan/module/chat/ext/model/xuanxuan.php b/xuanxuan/module/chat/ext/model/xuanxuan.php index 65e0404bf7..2c8462b089 100644 --- a/xuanxuan/module/chat/ext/model/xuanxuan.php +++ b/xuanxuan/module/chat/ext/model/xuanxuan.php @@ -1,15 +1,15 @@ loadExtension('xuanxuan')->downloadXXD($setting, $type); -} - public function getExtensionList($userID) { return $this->loadExtension('xuanxuan')->getExtensionList($userID); } -public function sendDownHeader($fileName, $fileType, $content, $fileSize = 0) +public function editUser($user = null) { - return $this->loadExtension('xuanxuan')->sendDownHeader($fileName, $fileType, $content, $fileSize); + return $this->loadExtension('xuanxuan')->editUser($user); +} + +public function getServer($backend = 'xxb') +{ + return $this->loadExtension('xuanxuan')->getServer($backend); } diff --git a/xuanxuan/module/chat/ext/view/downloadxxd.html.php b/xuanxuan/module/chat/ext/view/downloadxxd.html.php deleted file mode 100644 index 4a7d5d1b29..0000000000 --- a/xuanxuan/module/chat/ext/view/downloadxxd.html.php +++ /dev/null @@ -1,76 +0,0 @@ - - * @package chart - * @version $Id$ - * @link http://www.zentao.net - */ -?> -
      ' method='post' target='_blank'> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      chat->xxd->os;?>chat->osList, zget($this->config->xxd, 'os', 'linux64'), "class='form-control chosen'");?>
      chat->xxd->ip;?>config->xxd, 'ip', '0.0.0.0'), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->ip}'");?>
      chat->xxd->chatPort;?>config->xxd, 'chatPort', 11444), "placeholder='{$lang->chat->placeholder->xxd->chatPort}' class='form-control'");?>
      chat->xxd->commonPort;?>config->xxd, 'commonPort', 11443), "placeholder='{$lang->chat->placeholder->xxd->commonPort}' class='form-control'");?>
      chat->xxd->isHttps;?>chat->httpsOptions, zget($this->config->xxd, 'isHttps', '1'), "class='checkbox'");?>
      chat->xxd->sslcrt;?>config->xxd, 'sslcrt', ''), "placeholder='{$lang->chat->placeholder->xxd->sslcrt}' class='form-control'");?>
      chat->xxd->sslkey;?>config->xxd, 'sslkey', ''), "placeholder='{$lang->chat->placeholder->xxd->sslkey}' class='form-control'");?>
      chat->xxd->uploadFileSize;?> -
      - config->xxd, 'uploadFileSize', 20), "class='form-control' placeholder='{$lang->chat->placeholder->xxd->chatPort}' ");?> - M -
      -
      - chat->downloadConfig, '', "class='btn btn-primary btn-download' data-type='config'");?> - chat->downloadPackage, '', "class='btn btn-primary btn-download' data-type='package'");?> - - -
      -
      - diff --git a/xuanxuan/module/common/ext/lang/en/xuanxuan.php b/xuanxuan/module/common/ext/lang/en/xuanxuan.php index e94f51dba0..dc9907ee02 100644 --- a/xuanxuan/module/common/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/common/ext/lang/en/xuanxuan.php @@ -3,7 +3,7 @@ $lang->xuanxuan = new stdclass(); $lang->admin->menu->sso['link'] = 'Integrate|admin|xuanxuan'; if(!isset($lang->admin->menu->sso['alias'])) $lang->admin->menu->sso['alias'] = ''; -$lang->admin->menu->sso['alias'] .= ',sso'; +$lang->admin->menu->sso['alias'] = $lang->admin->menu->sso['alias'] . ',sso'; -$lang->admin->subMenu->sso->xuanxuan = 'Xuanxuan|admin|xuanxuan'; +$lang->admin->subMenu->sso->xuanxuan = 'ZT Client|admin|xuanxuan'; $lang->admin->subMenuOrder->sso[4] = 'xuanxuan'; diff --git a/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php index 9d70f7cf5c..6e9dbfe3df 100644 --- a/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/common/ext/lang/zh-cn/xuanxuan.php @@ -3,7 +3,7 @@ $lang->xuanxuan = new stdclass(); $lang->admin->menu->sso['link'] = '集成|admin|xuanxuan'; if(!isset($lang->admin->menu->sso['alias'])) $lang->admin->menu->sso['alias'] = ''; -$lang->admin->menu->sso['alias'] .= ',sso'; +$lang->admin->menu->sso['alias'] = $lang->admin->menu->sso['alias'] . ',sso'; -$lang->admin->subMenu->sso->xuanxuan = '喧喧集成|admin|xuanxuan'; +$lang->admin->subMenu->sso->xuanxuan = '客户端集成|admin|xuanxuan'; $lang->admin->subMenuOrder->sso[4] = 'xuanxuan'; diff --git a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php index c66961a568..26e6034724 100644 --- a/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php +++ b/xuanxuan/module/common/ext/model/hook/loadConfigFromDB.xuanxuan.php @@ -1,15 +1,15 @@ loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=key'); -$chatPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=chatPort'); -$commonPort = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=commonPort'); -$ip = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=ip'); -$isHttps = $this->loadModel('setting')->getItem('owner=system&module=common§ion=xuanxuan&key=isHttps'); -if(empty($sn)) +$this->loadModel('setting'); +$xxItems = $this->setting->getItems('owner=system&module=common§ion=xuanxuan'); +$xxConfig = array(); +foreach($xxItems as $xxItem) $xxConfig[$xxItem->key] = $xxItem->value; +if(empty($xxConfig['key'])) { $this->setting->setItem('system.common.xuanxuan.turnon', 1); $this->setting->setItem('system.common.xuanxuan.key', $this->setting->computeSN()); } -if(empty($chatPort)) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); -if(empty($commonPort)) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); -if(empty($ip)) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); -if(empty($isHttps)) $this->setting->setItem('system.common.xuanxuan.isHttps', 0); +if(!isset($xxConfig['chatPort'])) $this->setting->setItem('system.common.xuanxuan.chatPort', 11444); +if(!isset($xxConfig['commonPort'])) $this->setting->setItem('system.common.xuanxuan.commonPort', 11443); +if(!isset($xxConfig['ip'])) $this->setting->setItem('system.common.xuanxuan.ip', '0.0.0.0'); +if(!isset($xxConfig['isHttps'])) $this->setting->setItem('system.common.xuanxuan.isHttps', 'off'); +if(!isset($xxConfig['uploadFileSize'])) $this->setting->setItem('system.common.xuanxuan.uploadFileSize', 20); diff --git a/xuanxuan/module/common/ext/model/xuanxuan.php b/xuanxuan/module/common/ext/model/xuanxuan.php deleted file mode 100644 index 0807095a41..0000000000 --- a/xuanxuan/module/common/ext/model/xuanxuan.php +++ /dev/null @@ -1,6 +0,0 @@ -config->system->xuanxuan)) $this->app->mergeConfig($this->config->system->xuanxuan, 'xuanxuan'); -} diff --git a/xuanxuan/module/common/ext/view/footer.html.hook.php b/xuanxuan/module/common/ext/view/footer.html.hook.php deleted file mode 100644 index 47955e140b..0000000000 --- a/xuanxuan/module/common/ext/view/footer.html.hook.php +++ /dev/null @@ -1,21 +0,0 @@ - diff --git a/xuanxuan/module/entry/ext/control/visit.php b/xuanxuan/module/entry/ext/control/visit.php index c764303b10..b54a73a58b 100644 --- a/xuanxuan/module/entry/ext/control/visit.php +++ b/xuanxuan/module/entry/ext/control/visit.php @@ -14,7 +14,8 @@ class entry extends control if(RUN_MODE != 'xuanxuan') die(); $referer = !empty($_GET['referer']) ? $this->get->referer : $referer; - if(empty($referer)) $referer = common::getSysURL() . str_replace('/xuanxuan.php', '/index.php', $this->createLink('index', 'index', '', 'xhtml')); + $server = $this->loadModel('chat')->getServer('zentao'); + if(empty($referer)) $referer = $server . str_replace('/x.php', '/index.php', $this->createLink('my', 'index', '', 'html')); $output = new stdclass(); $output->module = $this->moduleName; @@ -44,7 +45,6 @@ class entry extends control $this->loadModel('user'); $user = $this->dao->select('*')->from(TABLE_USER)->where('id')->eq($this->session->userID)->fetch(); - unset($user->password); $this->user->cleanLocked($user->account); $user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false; @@ -57,6 +57,12 @@ class entry extends control $user->lastTime = $last; $user->ip = $this->session->clientIP->IP; + $xxInstalled = $user->account . 'installed'; + $this->loadModel('setting'); + if(!isset($this->config->xxclient->$xxInstalled)) $this->setting->setItem("system.common.xxclient.{$user->account}installed", '1'); + if(!isset($this->config->xxserver->installed)) $this->setting->setItem("system.common.xxserver.installed", '1'); + if(!isset($this->config->xxserver->noticed)) $this->setting->setItem("system.common.xxserver.noticed", '1'); + $this->session->set('user', $user); $this->app->user = $this->session->user; } diff --git a/xuanxuan/module/group/ext/lang/en/xuanxuan.php b/xuanxuan/module/group/ext/lang/en/xuanxuan.php index 90f49399bc..65538b087e 100644 --- a/xuanxuan/module/group/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/en/xuanxuan.php @@ -1,4 +1,11 @@ resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; +$lang->admin->methodOrder[30] = 'downloadxxd'; + +$lang->resource->chat = new stdclass(); +$lang->resource->chat->getChatUsers = 'getChatUsers'; +$lang->resource->chat->getChatGroups = 'getChatGroups'; +$lang->resource->chat->notifyMSG = 'notifyMSG'; diff --git a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php index 90f49399bc..65538b087e 100644 --- a/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/group/ext/lang/zh-cn/xuanxuan.php @@ -1,4 +1,11 @@ resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->xuanxuan = 'xuanxuan'; +$lang->resource->admin->downloadxxd = 'downloadXXD'; $lang->admin->methodOrder[25] = 'xuanxuan'; +$lang->admin->methodOrder[30] = 'downloadxxd'; + +$lang->resource->chat = new stdclass(); +$lang->resource->chat->getChatUsers = 'getChatUsers'; +$lang->resource->chat->getChatGroups = 'getChatGroups'; +$lang->resource->chat->notifyMSG = 'notifyMSG'; diff --git a/xuanxuan/module/message/ext/config/xuanxuan.php b/xuanxuan/module/message/ext/config/xuanxuan.php index ba81cc8e28..2c118573b6 100644 --- a/xuanxuan/module/message/ext/config/xuanxuan.php +++ b/xuanxuan/module/message/ext/config/xuanxuan.php @@ -1,3 +1,6 @@ message->available['xuanxuan'] = $config->message->objectTypes; +$config->message->available['xuanxuan']['story'] = $config->message->objectTypes['story']; +$config->message->available['xuanxuan']['task'] = $config->message->objectTypes['task']; +$config->message->available['xuanxuan']['bug'] = $config->message->objectTypes['bug']; +$config->message->available['xuanxuan']['todo'] = $config->message->objectTypes['todo']; $config->message->setting['xuanxuan']['setting'] = $config->message->available['xuanxuan']; diff --git a/xuanxuan/module/message/ext/control/notify.php b/xuanxuan/module/message/ext/control/notify.php deleted file mode 100644 index ed56d88dcc..0000000000 --- a/xuanxuan/module/message/ext/control/notify.php +++ /dev/null @@ -1,30 +0,0 @@ -post->userList) ? '' : $this->post->userList; - $title = empty($this->post->title) ? '' : $this->post->title; - $subtitle = empty($this->post->subtitle) ? '' : $this->post->subtitle; - $content = empty($this->post->content) ? '' : $this->post->content; - $contentType = empty($this->post->contentType) ? 'text' : $this->post->contentType; - $url = empty($this->post->url) ? '' : $this->post->url; - $actions = empty($this->post->actions) ? array() : $this->post->actions; - $sender = empty($this->post->sender) ? 0 : $this->post->sender; - - $result = $this->loadModel('chat')->createNotify($userList, $title, $subtitle, $content, $contentType, $url, $actions, $sender); - - if(!$result) - { - $response['result'] = false; - $response['message'] = dao::getError(); - } - - die(json_encode($response)); - } -} diff --git a/xuanxuan/module/message/ext/lang/en/xuanxuan.php b/xuanxuan/module/message/ext/lang/en/xuanxuan.php index 2cc831d314..470a08c758 100644 --- a/xuanxuan/module/message/ext/lang/en/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/en/xuanxuan.php @@ -1,4 +1,4 @@ message->typeList['xuanxuan'] = 'Xuanxuan'; +$lang->message->typeList['xuanxuan'] = 'Client'; -$lang->message->sender = 'ZentaoPMS'; +$lang->message->sender = 'ZenTao'; diff --git a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php index abff61c208..38695bb91b 100644 --- a/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php +++ b/xuanxuan/module/message/ext/lang/zh-cn/xuanxuan.php @@ -1,4 +1,4 @@ message->typeList['xuanxuan'] = '喧喧'; +$lang->message->typeList['xuanxuan'] = '客户端'; $lang->message->sender = '禅道项目管理'; diff --git a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php index 3fecafbf76..aa48726881 100644 --- a/xuanxuan/module/message/ext/model/class/xuanxuan.class.php +++ b/xuanxuan/module/message/ext/model/class/xuanxuan.class.php @@ -13,11 +13,13 @@ class xuanxuanMessage extends messageModel $this->loadModel('action'); $object = $this->dao->select('*')->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch(); $field = $this->config->action->objectNameFields[$objectType]; - $title = $this->app->user->realname . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; + $title = $this->app->user->realname . ' ' . $this->lang->action->label->$actionType . $this->lang->action->objectTypes[$objectType]; $text = $title . ' ' . "[#{$objectID}::{$object->$field}]"; + $server = $this->loadModel('chat')->getServer('zentao'); + $onlybody = isset($_GET['onlybody']) ? $_GET['onlybody'] : ''; unset($_GET['onlybody']); - $url = common::getSysURL() . helper::createLink($objectType, 'view', "id=$objectID", 'html'); + $url = $server . helper::createLink($objectType, 'view', "id=$objectID", 'html'); $target = ''; if(!empty($object->assignedTo)) $target .= $object->assignedTo; @@ -27,6 +29,7 @@ class xuanxuanMessage extends messageModel $target = array_keys($target); if($target) $this->loadModel('chat')->createNotify($target, $text, '', '', 'text', $url, array(), array('id' => 'zentao', 'realname' => $this->lang->message->sender, 'name' => $this->lang->message->sender)); + if($onlybody) $_GET['onlybody'] = $onlybody; } } } diff --git a/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php b/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php new file mode 100644 index 0000000000..da2575d528 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxgetclientpackage.php @@ -0,0 +1,82 @@ +app->getBasePath() . 'tmp/cache/client/'; + if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); + + $version = $this->config->xuanxuan->version; + $packageDir = $clientDir . "/$version/"; + if(!is_dir($packageDir)) mkdir($packageDir, 0755, true); + + $account = $this->app->user->account; + $tmpDir = $clientDir . "/$account/"; + if(!is_dir($tmpDir)) mkdir($tmpDir, 0755, true); + + $needCache = false; + $clientName = "zentaoclient." . $os . ".zip"; + $packageFile = $packageDir . $clientName; + if(!file_exists($packageFile)) + { + $url = "http://dl.cnezsoft.com/zentaoclient/$version/"; + $xxFile = $url . $clientName . "?t=" . rand(); + $needCache = true; + } + else + { + $xxFile = $packageFile; + } + + $clientFile = $tmpDir . 'zentaoclient.zip'; + if($xxHd = fopen($xxFile, "rb")) + { + if($clientHd = fopen($clientFile, "wb")) + { + while(!feof($xxHd)) + { + $result = fwrite($clientHd, fread($xxHd, 1024 * 8 ), 1024 * 8 ); + if($result == false) + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + } + } + else + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + fclose($xxHd); + fclose($clientHd); + } + else + { + $response['result'] = 'fail'; + $response['message'] = sprintf($this->lang->misc->client->errorInfo->manualOpt, $xxFile); + $this->send($response); + } + + if($needCache) file_put_contents($packageFile, file_get_contents($clientFile)); + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php b/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php new file mode 100644 index 0000000000..73ca2655f9 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxgetpackagesize.php @@ -0,0 +1,29 @@ +app->user->account; + $packageFile = $this->app->getBasePath() . 'tmp/cache/client/' . $account . '/zentaoclient.zip'; + + $size = 0; + if(file_exists($packageFile)) + { + $size = filesize($packageFile); + $size = $size ? round($size / 1048576, 2) : 0; + } + + $response = array(); + $response['result'] = 'success'; + $response['size'] = $size; + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php b/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php new file mode 100644 index 0000000000..ac956fc495 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/ajaxsetclientconfig.php @@ -0,0 +1,54 @@ +app->user->account; + $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + if(!is_dir($clientDir)) mkdir($clientDir, 0755, true); + + /* write login info into config file. */ + $loginInfo = new stdclass(); + $loginInfo->ui = new stdclass(); + $loginInfo->ui->defaultUser = new stdclass(); + $loginInfo->ui->defaultUser->server = common::getSysURL();; + $loginInfo->ui->defaultUser->account = $this->app->user->account; + $loginInfo = json_encode($loginInfo); + + $loginFile = $clientDir . 'config.json'; + file_put_contents($loginFile, $loginInfo); + + define('PCLZIP_TEMPORARY_DIR', $clientDir); + $this->app->loadClass('pclzip', true); + $clientFile = $clientDir . 'zentaoclient.zip'; + $archive = new pclzip($clientFile); + + if($os == 'mac') + { + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/xuanxuan.app/Contents/Resouces'); + } + else + { + $result = $archive->add($loginFile, PCLZIP_OPT_REMOVE_ALL_PATH, PCLZIP_OPT_ADD_PATH, 'zentaoclient/resources/build-in'); + } + + if($result == 0) + { + $response['result'] = 'fail'; + $response['message'] = $archive->errorInfo(true); + $this->send($response); + } + + $this->send($response); + } +} diff --git a/xuanxuan/module/misc/ext/control/downloadclient.php b/xuanxuan/module/misc/ext/control/downloadclient.php new file mode 100644 index 0000000000..1a3261b497 --- /dev/null +++ b/xuanxuan/module/misc/ext/control/downloadclient.php @@ -0,0 +1,100 @@ +post->os; + + die(js::locate($this->createLink('misc', 'downloadClient', "action=getPackage&os=$os"), 'parent')); + } + + if($action == 'check') + { + $error = false; + $errorInfo = ''; + + $cacheDir = $this->app->getBasePath() . 'tmp/cache/'; + if(!is_dir($cacheDir)) + { + $result = mkdir($cacheDir, 0755, true); + if($result == false) + { + $error = true; + $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotExist, $cacheDir, $cacheDir); + } + } + + if(!is_writable($cacheDir)) + { + $error = true; + $errorInfo = sprintf($this->lang->misc->client->errorInfo->dirNotWritable, $cacheDir, $cacheDir); + } + + $this->view->error = $error; + $this->view->errorInfo = $errorInfo; + + if(!$error) die(js::locate($this->createLink('misc', 'downloadClient', "action=selectPackage"))); + } + + if($action == 'selectPackage') + { + $os = 'win64'; + $agentOS = helper::getOS(); + if(strpos($agentOS, 'Windows') !== false) $os = 'win64'; + if(strpos($agentOS, 'Linux') !== false) $os = 'linux64'; + if(strpos($agentOS, 'Mac') !== false) $os = 'mac'; + + $this->view->os = $os; + } + + if($action == 'getPackage') + { + $this->view->os = $os; + $this->view->account = $this->app->user->account; + } + + if($action == 'clearTmpPackage') + { + $account = $this->app->user->account; + $tmpDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + + if(is_dir($tmpDir)) + { + $zfile = $this->app->loadClass('zfile'); + $zfile->removeDir($tmpDir); + } + + die(js::closeModal('parent.parent', 'this')); + } + + if($action == 'downloadPackage') + { + $account = $this->app->user->account; + $clientDir = $this->app->getBasePath() . 'tmp/cache/client/' . "$account/"; + + $clientFile = $clientDir . 'zentaoclient.zip'; + $zipContent = file_get_contents($clientFile); + if(is_dir($clientDir)) + { + $zfile = $this->app->loadClass('zfile'); + $zfile->removeDir($clientDir); + } + + $this->fetch('file', 'sendDownHeader', array('fileName' => "zentao_chat_client." . $os . '.zip', 'zip', $zipContent)); + } + + $this->view->action = $action; + $this->display(); + } +} diff --git a/xuanxuan/module/misc/ext/lang/en/xuanxuan.php b/xuanxuan/module/misc/ext/lang/en/xuanxuan.php new file mode 100644 index 0000000000..37d81b33f9 --- /dev/null +++ b/xuanxuan/module/misc/ext/lang/en/xuanxuan.php @@ -0,0 +1,22 @@ +misc->client = new stdclass(); +$lang->misc->client->version = 'Client Version'; +$lang->misc->client->os = 'Select OS'; +$lang->misc->client->download = 'Download'; +$lang->misc->client->downloading = 'Downloading:'; +$lang->misc->client->downloaded = 'Downloaded!'; +$lang->misc->client->setting = 'Setting'; +$lang->misc->client->setted = 'Setting is done!'; + +$lang->misc->client->osList['win64'] = 'Windows 64'; +$lang->misc->client->osList['win32'] = 'Windows 32'; +$lang->misc->client->osList['linux64'] = 'Linux 64'; +$lang->misc->client->osList['linux32'] = 'Linux 32'; +$lang->misc->client->osList['mac'] = 'Mac'; + +$lang->misc->client->errorInfo = new stdclass(); +$lang->misc->client->errorInfo->downloadError = 'Failed to download package!'; +$lang->misc->client->errorInfo->configError = 'Failed to set up!'; +$lang->misc->client->errorInfo->manualOpt = 'Please get client package from %s .'; +$lang->misc->client->errorInfo->dirNotExist = 'The dir %s does not exist. Create it.'; +$lang->misc->client->errorInfo->dirNotWritable = 'The dir %s is not writable.
      Please exec:sudo chmod 777 %s in Linux.'; diff --git a/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php b/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php new file mode 100644 index 0000000000..0486dc678e --- /dev/null +++ b/xuanxuan/module/misc/ext/lang/zh-cn/xuanxuan.php @@ -0,0 +1,23 @@ +misc->client = new stdclass(); +$lang->misc->client->version = '客户端版本'; +$lang->misc->client->os = '操作系统'; +$lang->misc->client->download = '下载'; +$lang->misc->client->downloading = '正在获取安装包:'; +$lang->misc->client->downloaded = '成功获取安装包'; +$lang->misc->client->setting = '正在设置配置信息'; +$lang->misc->client->setted = '成功设置配置信息'; + +$lang->misc->client->osList['win64'] = 'Windows 64位'; +$lang->misc->client->osList['win32'] = 'Windows 32位'; +$lang->misc->client->osList['linux64'] = 'Linux 64位'; +$lang->misc->client->osList['linux32'] = 'Linux 32位'; +$lang->misc->client->osList['mac'] = 'Mac版'; + +$lang->misc->client->errorInfo = new stdclass(); +$lang->misc->client->errorInfo->downloadError = '获取安装包失败'; +$lang->misc->client->errorInfo->configError = '配置用户信息失败'; +$lang->misc->client->errorInfo->manualOpt = '请从 %s 手动获取安装包。'; +$lang->misc->client->errorInfo->dirNotExist = '客户端下载存储路径 %s 不存在,请创建该目录。'; +$lang->misc->client->errorInfo->dirNotWritable = '客户端下载存储路径 %s 不可写
      linux下面请执行命令:sudo chmod 777 %s来修正'; + diff --git a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip index 18e5261af0..0afd5dfa60 100644 Binary files a/xuanxuan/www/data/xuanxuan/zentao-integrated.zip and b/xuanxuan/www/data/xuanxuan/zentao-integrated.zip differ diff --git a/xuanxuan/www/upgradexuanxuan.php b/xuanxuan/www/upgradexuanxuan.php deleted file mode 100644 index 007d588641..0000000000 --- a/xuanxuan/www/upgradexuanxuan.php +++ /dev/null @@ -1,27 +0,0 @@ -loadCommon(); -$common->loadModel('chat')->upgrade(); - -/* Flush the buffer. */ -echo helper::removeUTF8Bom(ob_get_clean()); diff --git a/xuanxuan/www/xuanxuan.php b/xuanxuan/www/x.php similarity index 100% rename from xuanxuan/www/xuanxuan.php rename to xuanxuan/www/x.php