diff --git a/404.html b/404.html new file mode 100755 index 0000000..6f17eaf --- /dev/null +++ b/404.html @@ -0,0 +1,7 @@ + +404 Not Found + +

404 Not Found

+
nginx
+ + \ No newline at end of file diff --git a/admin.php b/admin.php old mode 100644 new mode 100755 diff --git a/api.php b/api.php old mode 100644 new mode 100755 diff --git a/api/addons/channel.htm b/api/addons/channel.htm old mode 100644 new mode 100755 diff --git a/api/addons/index.htm b/api/addons/index.htm old mode 100644 new mode 100755 diff --git a/api/addons/zendcheck.php b/api/addons/zendcheck.php old mode 100644 new mode 100755 diff --git a/api/addons/zendcheck52.php b/api/addons/zendcheck52.php old mode 100644 new mode 100755 diff --git a/api/addons/zendcheck53.php b/api/addons/zendcheck53.php old mode 100644 new mode 100755 diff --git a/api/avatar/index.php b/api/avatar/index.php old mode 100644 new mode 100755 diff --git a/api/db/dbbak.php b/api/db/dbbak.php old mode 100644 new mode 100755 diff --git a/api/db/index.htm b/api/db/index.htm old mode 100644 new mode 100755 diff --git a/api/index.htm b/api/index.htm old mode 100644 new mode 100755 diff --git a/api/javascript/advertisement.php b/api/javascript/advertisement.php old mode 100644 new mode 100755 diff --git a/api/javascript/index.htm b/api/javascript/index.htm old mode 100644 new mode 100755 diff --git a/api/javascript/javascript.php b/api/javascript/javascript.php old mode 100644 new mode 100755 diff --git a/api/mobile/index.php b/api/mobile/index.php old mode 100644 new mode 100755 diff --git a/api/payment/index.htm b/api/payment/index.htm old mode 100644 new mode 100755 diff --git a/api/payment/notify/index.htm b/api/payment/notify/index.htm old mode 100644 new mode 100755 diff --git a/api/payment/notify/notify_alipay.php b/api/payment/notify/notify_alipay.php old mode 100644 new mode 100755 diff --git a/api/payment/notify/notify_qpay.php b/api/payment/notify/notify_qpay.php old mode 100644 new mode 100755 diff --git a/api/payment/notify/notify_wechat.php b/api/payment/notify/notify_wechat.php old mode 100644 new mode 100755 diff --git a/api/payment/payment_alipay.php b/api/payment/payment_alipay.php old mode 100644 new mode 100755 diff --git a/api/payment/payment_base.php b/api/payment/payment_base.php old mode 100644 new mode 100755 diff --git a/api/payment/payment_qpay.php b/api/payment/payment_qpay.php old mode 100644 new mode 100755 diff --git a/api/payment/payment_wechat.php b/api/payment/payment_wechat.php old mode 100644 new mode 100755 diff --git a/api/remote/index.htm b/api/remote/index.htm old mode 100644 new mode 100755 diff --git a/api/remote/index.php b/api/remote/index.php old mode 100644 new mode 100755 diff --git a/api/remote/mod/index.htm b/api/remote/mod/index.htm old mode 100644 new mode 100755 diff --git a/api/remote/mod/mod_cron.php b/api/remote/mod/mod_cron.php old mode 100644 new mode 100755 diff --git a/api/remote/mod/mod_index.php b/api/remote/mod/mod_index.php old mode 100644 new mode 100755 diff --git a/api/trade/api_alipay.php b/api/trade/api_alipay.php old mode 100644 new mode 100755 diff --git a/api/trade/api_tenpay.php b/api/trade/api_tenpay.php old mode 100644 new mode 100755 diff --git a/api/trade/index.htm b/api/trade/index.htm old mode 100644 new mode 100755 diff --git a/api/trade/notify_credit.php b/api/trade/notify_credit.php old mode 100644 new mode 100755 diff --git a/api/trade/notify_invite.php b/api/trade/notify_invite.php old mode 100644 new mode 100755 diff --git a/api/trade/notify_trade.php b/api/trade/notify_trade.php old mode 100644 new mode 100755 diff --git a/api/uc.php b/api/uc.php old mode 100644 new mode 100755 diff --git a/archiver/index.php b/archiver/index.php old mode 100644 new mode 100755 diff --git a/auto_install.json b/auto_install.json new file mode 100755 index 0000000..c8aee06 --- /dev/null +++ b/auto_install.json @@ -0,0 +1,12 @@ +{ + "php_ext":"", + "chmod":[], + "success_url":"/index.php", + "php_versions":"56,70,71,72,73,74,80,81,82", + "db_config":"", + "admin_username":"", + "admin_password":"", + "run_path":"/", + "remove_file":[], + "enable_functions":[] +} \ No newline at end of file diff --git a/config/config_global.php b/config/config_global.php index c341b76..602d4b1 100644 --- a/config/config_global.php +++ b/config/config_global.php @@ -4,19 +4,19 @@ $_config = array(); // ---------------------------- CONFIG DB ----------------------------- // -$_config['db'][1]['dbhost'] = 'localhost'; -$_config['db'][1]['dbuser'] = 'discuzuser'; -$_config['db'][1]['dbpw'] = 'Zht20000418?'; +$_config['db'][1]['dbhost'] = '127.0.0.1'; +$_config['db'][1]['dbuser'] = 'www_shitangsweet'; +$_config['db'][1]['dbpw'] = 'mfr7ykmWpz'; $_config['db'][1]['dbcharset'] = 'utf8mb4'; $_config['db'][1]['pconnect'] = 0; -$_config['db'][1]['dbname'] = 'discuz'; +$_config['db'][1]['dbname'] = 'www_shitangsweet'; $_config['db'][1]['tablepre'] = 'pre_'; $_config['db']['slave'] = ''; $_config['db']['common']['slave_except_table'] = ''; $_config['db']['common']['engine'] = 'innodb'; // -------------------------- CONFIG MEMORY --------------------------- // -$_config['memory']['prefix'] = 'oyM8vc_'; +$_config['memory']['prefix'] = '6hiekm_'; $_config['memory']['redis']['server'] = ''; $_config['memory']['redis']['port'] = 6379; $_config['memory']['redis']['pconnect'] = 1; @@ -57,12 +57,12 @@ $_config['output']['upgradeinsecure'] = 0; $_config['output']['css4legacyie'] = 1; // -------------------------- CONFIG COOKIE --------------------------- // -$_config['cookie']['cookiepre'] = 'ArYe_'; +$_config['cookie']['cookiepre'] = 'V1VG_'; $_config['cookie']['cookiedomain'] = ''; $_config['cookie']['cookiepath'] = '/'; // ------------------------- CONFIG SECURITY -------------------------- // -$_config['security']['authkey'] = '0cce2ddd3c59e7c200abc6dc8b4e7416iJFYiJNrE2VzQbOWHQKsr9Rp9w5vMy1l'; +$_config['security']['authkey'] = '49977918e78d7939c01d6ae6c01a9636larjd1v2NysdUuCgSdHq6uFpdNFsgZIj'; $_config['security']['urlxssdefend'] = 1; $_config['security']['attackevasive'] = 0; $_config['security']['onlyremoteaddr'] = 1; diff --git a/config/config_global_default.php b/config/config_global_default.php old mode 100644 new mode 100755 diff --git a/config/config_ucenter.php b/config/config_ucenter.php index 6aea453..0e05ff9 100644 --- a/config/config_ucenter.php +++ b/config/config_ucenter.php @@ -4,21 +4,20 @@ define('UC_CONNECT', 'mysql'); define('UC_STANDALONE', 0); -define('UC_DBHOST', 'localhost'); -define('UC_DBUSER', 'discuzuser'); -define('UC_DBPW', 'Zht20000418?'); -define('UC_DBNAME', 'discuz'); +define('UC_DBHOST', '127.0.0.1'); +define('UC_DBUSER', 'www_shitangsweet'); +define('UC_DBPW', 'mfr7ykmWpz'); +define('UC_DBNAME', 'www_shitangsweet'); define('UC_DBCHARSET', 'utf8mb4'); -define('UC_DBTABLEPRE', '`discuz`.pre_ucenter_'); +define('UC_DBTABLEPRE', '`www_shitangsweet`.pre_ucenter_'); define('UC_DBCONNECT', 0); define('UC_AVTURL', ''); define('UC_AVTPATH', ''); define('UC_CHARSET', 'utf-8'); -define('UC_KEY', 'ec685982r273EdT4RaReHar6q3C1877dE5tdKeObudH913iaC0V4V630m6X57bmb'); -define('UC_API', 'http://localhost:8080/discuz/uc_server'); +define('UC_KEY', '5eN078c5r9Pcy7Gfx8r5OcAandsflcH6a1y1Y5L5j60d57jb53ja0aWel790M6N5'); +define('UC_API', 'https://www.shitangsweet.com/uc_server'); define('UC_APPID', '1'); define('UC_IP', ''); -define('UC_PPP', 20); -?> \ No newline at end of file +define('UC_PPP', 20); \ No newline at end of file diff --git a/config/config_ucenter_default.php b/config/config_ucenter_default.php old mode 100644 new mode 100755 diff --git a/config/index.htm b/config/index.htm old mode 100644 new mode 100755 diff --git a/connect.php b/connect.php old mode 100644 new mode 100755 diff --git a/crossdomain.xml b/crossdomain.xml old mode 100644 new mode 100755 diff --git a/favicon.ico b/favicon.ico old mode 100644 new mode 100755 diff --git a/forum.php b/forum.php old mode 100644 new mode 100755 diff --git a/group.php b/group.php old mode 100644 new mode 100755 diff --git a/home.php b/home.php old mode 100644 new mode 100755 diff --git a/index.php b/index.php old mode 100644 new mode 100755 diff --git a/install/data/common_district_1.sql b/install/data/common_district_1.sql old mode 100644 new mode 100755 diff --git a/install/data/common_district_2.sql b/install/data/common_district_2.sql old mode 100644 new mode 100755 diff --git a/install/data/common_district_3.sql b/install/data/common_district_3.sql old mode 100644 new mode 100755 diff --git a/install/data/group_index.xml b/install/data/group_index.xml old mode 100644 new mode 100755 index 63ea2f3..adb7b44 --- a/install/data/group_index.xml +++ b/install/data/group_index.xml @@ -170,7 +170,7 @@ runslideshow(); - +
    diff --git a/install/data/index.htm b/install/data/index.htm old mode 100644 new mode 100755 diff --git a/install/data/install.sql b/install/data/install.sql old mode 100644 new mode 100755 diff --git a/install/data/install_data.sql b/install/data/install_data.sql old mode 100644 new mode 100755 index 4374cf9..da97e5e --- a/install/data/install_data.sql +++ b/install/data/install_data.sql @@ -155,7 +155,7 @@ INSERT INTO pre_common_nav VALUES ('', '0', '广播', '', 'home.php?mod=follow', INSERT INTO pre_common_nav VALUES ('', '0', '{hr}', '', '', '', 0, 1, 1, 8, 0, 0, 0, 0, '', '', '', 2, ''); INSERT INTO pre_common_nav VALUES ('', '0', '好友', '', 'home.php?mod=space&do=friend', 'friend', 0, 0, -1, 1, 0, 0, 0, 0, '{STATICURL}image/feed/friend_b.png', '', '', 3, ''); -INSERT INTO pre_common_nav VALUES ('', '0', '文章', '', 'home.php?mod=space&do=thread&view=me', 'thread', 0, 0, 0, 2, 0, 0, 0, 0, '{STATICURL}image/feed/thread_b.png', '', '', 3, ''); +INSERT INTO pre_common_nav VALUES ('', '0', '帖子', '', 'home.php?mod=space&do=thread&view=me', 'thread', 0, 0, 0, 2, 0, 0, 0, 0, '{STATICURL}image/feed/thread_b.png', '', '', 3, ''); INSERT INTO pre_common_nav VALUES ('', '0', '收藏', '', 'home.php?mod=space&do=favorite&view=me', 'favorite', 0, 0, -1, 3, 0, 0, 0, 0, '{STATICURL}image/feed/favorite_b.png', '', '', 3, ''); INSERT INTO pre_common_nav VALUES ('', '0', '道具', '', 'home.php?mod=magic', 'magic', 0, 0, -1, 4, 0, 0, 0, 0, '{STATICURL}image/feed/magic_b.png', '', '', 3, ''); INSERT INTO pre_common_nav VALUES ('', '0', '勋章', '', 'home.php?mod=medal', 'medal', 0, 0, -1, 5, 0, 0, 0, 0, '{STATICURL}image/feed/medal_b.png', '', '', 3, ''); @@ -933,28 +933,28 @@ INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(6, 'forum_forum', '[内置]版块名称+今日发贴数(有序)', 'a:9:{s:3:"raw";s:151:"
    \r\n
      \r\n[loop]\r\n
    1. {todayposts}{title}
    2. \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:81:"
  • {todayposts}{title}
  • ";}', '12516b2d', 0, 0, 0, 1, 'a:3:{i:0;s:10:"todayposts";i:1;s:3:"url";i:2;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(7, 'forum_forum', '[内置]版块名称(两列)', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '0e51a193', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(8, 'forum_forum', '[内置]版块名称+介绍', 'a:9:{s:3:"raw";s:160:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '2bf344ae', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(9, 'forum_thread', '[内置]文章标题', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '079cd140', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(10, 'forum_thread', '[内置]文章标题+回复数', 'a:9:{s:3:"raw";s:148:"
    \r\n
      \r\n[loop]\r\n
    • {replies}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:78:"
  • {replies}{title}
  • ";}', '0cc45858', 0, 0, 0, 1, 'a:3:{i:0;s:7:"replies";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(11, 'forum_thread', '[内置]文章标题+查看数', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {views}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {views}{title}
  • ";}', 'c5361e32', 0, 0, 0, 1, 'a:3:{i:0;s:5:"views";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(12, 'forum_thread', '[内置]文章标题+热度', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {heats}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {heats}{title}
  • ";}', 'dfac2b4f', 0, 0, 0, 1, 'a:3:{i:0;s:5:"heats";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(13, 'forum_thread', '[内置]文章标题+发帖时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {dateline}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {dateline}{title}
  • ";}', '37a3603a', 0, 0, 0, 1, 'a:3:{i:0;s:8:"dateline";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(14, 'forum_thread', '[内置]文章标题+最后回复时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {lastpost}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {lastpost}{title}
  • ";}', '1ae9c85b', 0, 0, 0, 1, 'a:3:{i:0;s:8:"lastpost";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(15, 'forum_thread', '[内置]文章标题+作者', 'a:9:{s:3:"raw";s:203:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:133:"
  • {author}{title}
  • ";}', '30def87f', 0, 0, 0, 1, 'a:4:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(16, 'forum_thread', '[内置]文章标题+作者+摘要', 'a:9:{s:3:"raw";s:251:"
    \r\n[loop]\r\n
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:197:"
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', '8ebc8d5f', 0, 1, 0, 1, 'a:5:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";i:4;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(17, 'forum_thread', '[内置]文章标题+摘要', 'a:9:{s:3:"raw";s:160:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '1107d2bd', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(9, 'forum_thread', '[内置]帖子标题', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '079cd140', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(10, 'forum_thread', '[内置]帖子标题+回复数', 'a:9:{s:3:"raw";s:148:"
    \r\n
      \r\n[loop]\r\n
    • {replies}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:78:"
  • {replies}{title}
  • ";}', '0cc45858', 0, 0, 0, 1, 'a:3:{i:0;s:7:"replies";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(11, 'forum_thread', '[内置]帖子标题+查看数', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {views}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {views}{title}
  • ";}', 'c5361e32', 0, 0, 0, 1, 'a:3:{i:0;s:5:"views";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(12, 'forum_thread', '[内置]帖子标题+热度', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {heats}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {heats}{title}
  • ";}', 'dfac2b4f', 0, 0, 0, 1, 'a:3:{i:0;s:5:"heats";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(13, 'forum_thread', '[内置]帖子标题+发帖时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {dateline}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {dateline}{title}
  • ";}', '37a3603a', 0, 0, 0, 1, 'a:3:{i:0;s:8:"dateline";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(14, 'forum_thread', '[内置]帖子标题+最后回复时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {lastpost}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {lastpost}{title}
  • ";}', '1ae9c85b', 0, 0, 0, 1, 'a:3:{i:0;s:8:"lastpost";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(15, 'forum_thread', '[内置]帖子标题+作者', 'a:9:{s:3:"raw";s:203:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:133:"
  • {author}{title}
  • ";}', '30def87f', 0, 0, 0, 1, 'a:4:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(16, 'forum_thread', '[内置]帖子标题+作者+摘要', 'a:9:{s:3:"raw";s:251:"
    \r\n[loop]\r\n
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:197:"
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', '8ebc8d5f', 0, 1, 0, 1, 'a:5:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";i:4;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(17, 'forum_thread', '[内置]帖子标题+摘要', 'a:9:{s:3:"raw";s:160:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '1107d2bd', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(18, 'forum_thread', '[内置]焦点模式', 'a:9:{s:3:"raw";s:164:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', 'b6337920', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(19, 'forum_thread', '[内置]文章标题(第一条带摘要)', 'a:9:{s:3:"raw";s:297:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n[order=1]\r\n
    • \r\n
      \r\n
      {title}
      \r\n
      {summary}
      \r\n
      \r\n
      \r\n
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{i:1;s:148:"
  • \r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    \r\n
  • ";}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '2e06f8b5', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(24, 'group_thread', '[内置]文章标题', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '176fcc68', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(25, 'group_thread', '[内置]文章标题+回复数', 'a:9:{s:3:"raw";s:148:"
    \r\n
      \r\n[loop]\r\n
    • {replies}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:78:"
  • {replies}{title}
  • ";}', '8baa57ad', 0, 0, 0, 1, 'a:3:{i:0;s:7:"replies";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(26, 'group_thread', '[内置]文章标题+查看数', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {views}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {views}{title}
  • ";}', '8f012db4', 0, 0, 0, 1, 'a:3:{i:0;s:5:"views";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(27, 'group_thread', '[内置]文章标题+热度', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {heats}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {heats}{title}
  • ";}', '7f002523', 0, 0, 0, 1, 'a:3:{i:0;s:5:"heats";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(28, 'group_thread', '[内置]文章标题+发帖时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {dateline}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {dateline}{title}
  • ";}', '23ba8554', 0, 0, 0, 1, 'a:3:{i:0;s:8:"dateline";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(29, 'group_thread', '[内置]文章标题+最后回复时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {lastpost}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {lastpost}{title}
  • ";}', 'a6fbd13d', 0, 0, 0, 1, 'a:3:{i:0;s:8:"lastpost";i:1;s:3:"url";i:2;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(30, 'group_thread', '[内置]文章标题+作者', 'a:9:{s:3:"raw";s:203:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:133:"
  • {author}{title}
  • ";}', '49245e40', 0, 0, 0, 1, 'a:4:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(31, 'group_thread', '[内置]文章标题+作者+摘要', 'a:9:{s:3:"raw";s:243:"
    \r\n[loop]\r\n
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:189:"
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', 'd9c23f31', 0, 1, 0, 1, 'a:5:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";i:4;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(32, 'group_thread', '[内置]文章标题+摘要', 'a:9:{s:3:"raw";s:160:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '9e90211d', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(19, 'forum_thread', '[内置]帖子标题(第一条带摘要)', 'a:9:{s:3:"raw";s:297:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n[order=1]\r\n
    • \r\n
      \r\n
      {title}
      \r\n
      {summary}
      \r\n
      \r\n
      \r\n
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{i:1;s:148:"
  • \r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    \r\n
  • ";}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '2e06f8b5', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(24, 'group_thread', '[内置]帖子标题', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '176fcc68', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(25, 'group_thread', '[内置]帖子标题+回复数', 'a:9:{s:3:"raw";s:148:"
    \r\n
      \r\n[loop]\r\n
    • {replies}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:78:"
  • {replies}{title}
  • ";}', '8baa57ad', 0, 0, 0, 1, 'a:3:{i:0;s:7:"replies";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(26, 'group_thread', '[内置]帖子标题+查看数', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {views}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {views}{title}
  • ";}', '8f012db4', 0, 0, 0, 1, 'a:3:{i:0;s:5:"views";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(27, 'group_thread', '[内置]帖子标题+热度', 'a:9:{s:3:"raw";s:146:"
    \r\n
      \r\n[loop]\r\n
    • {heats}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:76:"
  • {heats}{title}
  • ";}', '7f002523', 0, 0, 0, 1, 'a:3:{i:0;s:5:"heats";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(28, 'group_thread', '[内置]帖子标题+发帖时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {dateline}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {dateline}{title}
  • ";}', '23ba8554', 0, 0, 0, 1, 'a:3:{i:0;s:8:"dateline";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(29, 'group_thread', '[内置]帖子标题+最后回复时间', 'a:9:{s:3:"raw";s:149:"
    \r\n
      \r\n[loop]\r\n
    • {lastpost}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:79:"
  • {lastpost}{title}
  • ";}', 'a6fbd13d', 0, 0, 0, 1, 'a:3:{i:0;s:8:"lastpost";i:1;s:3:"url";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(30, 'group_thread', '[内置]帖子标题+作者', 'a:9:{s:3:"raw";s:203:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:133:"
  • {author}{title}
  • ";}', '49245e40', 0, 0, 0, 1, 'a:4:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(31, 'group_thread', '[内置]帖子标题+作者+摘要', 'a:9:{s:3:"raw";s:243:"
    \r\n[loop]\r\n
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:189:"
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', 'd9c23f31', 0, 1, 0, 1, 'a:5:{i:0;s:8:"authorid";i:1;s:6:"author";i:2;s:3:"url";i:3;s:5:"title";i:4;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(32, 'group_thread', '[内置]帖子标题+摘要', 'a:9:{s:3:"raw";s:160:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '9e90211d', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(33, 'group_thread', '[内置]焦点模式', 'a:9:{s:3:"raw";s:164:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:106:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '9670c626', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(34, 'group_thread', '[内置]文章标题(第一条带摘要)', 'a:9:{s:3:"raw";s:297:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n[order=1]\r\n
    • \r\n
      \r\n
      {title}
      \r\n
      {summary}
      \r\n
      \r\n
      \r\n
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{i:1;s:148:"
  • \r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    \r\n
  • ";}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '9355f559', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(34, 'group_thread', '[内置]帖子标题(第一条带摘要)', 'a:9:{s:3:"raw";s:297:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n[order=1]\r\n
    • \r\n
      \r\n
      {title}
      \r\n
      {summary}
      \r\n
      \r\n
      \r\n
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{i:1;s:148:"
  • \r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    \r\n
  • ";}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '9355f559', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(39, 'group_group', '[内置]圈子名称', 'a:9:{s:3:"raw";s:130:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '9872d550', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(40, 'group_group', '[内置]圈子名称+成员数', 'a:9:{s:3:"raw";s:150:"
    \r\n
      \r\n[loop]\r\n
    • {membernum}{title}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:80:"
  • {membernum}{title}
  • ";}', '20a09ec8', 0, 0, 0, 1, 'a:3:{i:0;s:9:"membernum";i:1;s:3:"url";i:2;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(41, 'group_group', '[内置]圈子名称+成员数(有序)', 'a:9:{s:3:"raw";s:150:"
    \r\n
      \r\n[loop]\r\n
    1. {membernum}{title}
    2. \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:80:"
  • {membernum}{title}
  • ";}', 'af166b44', 0, 0, 0, 1, 'a:3:{i:0;s:9:"membernum";i:1;s:3:"url";i:2;s:5:"title";}'); @@ -1001,11 +1001,11 @@ INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(82, 'forum_activity', '[内置]活动列表', 'a:9:{s:3:"raw";s:331:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {title}
    \r\n
    {time} {place}
    \r\n
    已有 {applynumber} 人报名
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:277:"
    \r\n
    {title}
    \r\n
    {title}
    \r\n
    {time} {place}
    \r\n
    已有 {applynumber} 人报名
    \r\n
    ";}', '3d04a558', 1, 0, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:4:"time";i:4;s:5:"place";i:5;s:11:"applynumber";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(83, 'group_trade', '[内置]商品列表', 'a:9:{s:3:"raw";s:288:"
    \r\n
      \r\n[loop]\r\n
    • \r\n {title}\r\n

      {title}

      \r\n

      {price}

      \r\n
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:222:"
  • \r\n {title}\r\n

    {title}

    \r\n

    {price}

    \r\n
  • ";}', 'edd331a7', 1, 0, 1, 1, 'a:4:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:5:"price";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(84, 'group_activity', '[内置]活动列表', 'a:9:{s:3:"raw";s:331:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {title}
    \r\n
    {time} {place}
    \r\n
    已有 {applynumber} 人报名
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:277:"
    \r\n
    {title}
    \r\n
    {title}
    \r\n
    {time} {place}
    \r\n
    已有 {applynumber} 人报名
    \r\n
    ";}', '502cc3f6', 1, 0, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:4:"time";i:4;s:5:"place";i:5;s:11:"applynumber";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(85, 'forum_thread', '[内置]文章作者+标题+摘要(带头像)', 'a:9:{s:3:"raw";s:468:"
    \r\n[loop]\r\n
    \r\n
    {author}
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    作者: {author}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:409:"
    \r\n
    {author}
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    作者: {author}
    \r\n
    ";}', '87d533ea', 0, 1, 0, 1, 'a:6:{i:0;s:8:"authorid";i:1;s:6:"avatar";i:2;s:6:"author";i:3;s:3:"url";i:4;s:5:"title";i:5;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(85, 'forum_thread', '[内置]帖子作者+标题+摘要(带头像)', 'a:9:{s:3:"raw";s:468:"
    \r\n[loop]\r\n
    \r\n
    {author}
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    作者: {author}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:409:"
    \r\n
    {author}
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    作者: {author}
    \r\n
    ";}', '87d533ea', 0, 1, 0, 1, 'a:6:{i:0;s:8:"authorid";i:1;s:6:"avatar";i:2;s:6:"author";i:3;s:3:"url";i:4;s:5:"title";i:5;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(86, 'portal_article', '[内置]频道栏目+标题', 'a:9:{s:3:"raw";s:205:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:135:"
  • {title}
  • ";}', '7720f457', 0, 0, 0, 1, 'a:4:{i:0;s:6:"caturl";i:1;s:7:"catname";i:2;s:3:"url";i:3;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(87, 'forum_thread', '[内置]悬赏主题专用样式', 'a:9:{s:3:"raw";s:139:"
    \r\n
      \r\n[loop]\r\n
    • {title}{summary}
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:69:"
  • {title}{summary}
  • ";}', '56bffda0', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(88, 'forum_thread', '[内置]首页热议-文章', 'a:9:{s:3:"raw";s:278:"
    \r\n[loop]\r\n
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:224:"
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '08596517', 0, 1, 0, 1, 'a:4:{i:0;s:6:"author";i:1;s:3:"url";i:2;s:5:"title";i:3;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(89, 'group_thread', '[内置]首页热议-圈子文章', 'a:9:{s:3:"raw";s:278:"
    \r\n[loop]\r\n
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:224:"
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', 'a75db897', 0, 1, 0, 1, 'a:4:{i:0;s:6:"author";i:1;s:3:"url";i:2;s:5:"title";i:3;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(88, 'forum_thread', '[内置]首页热议-帖子', 'a:9:{s:3:"raw";s:278:"
    \r\n[loop]\r\n
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:224:"
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '08596517', 0, 1, 0, 1, 'a:4:{i:0;s:6:"author";i:1;s:3:"url";i:2;s:5:"title";i:3;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(89, 'group_thread', '[内置]首页热议-圈子帖子', 'a:9:{s:3:"raw";s:278:"
    \r\n[loop]\r\n
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:224:"
    \r\n
    {author} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', 'a75db897', 0, 1, 0, 1, 'a:4:{i:0;s:6:"author";i:1;s:3:"url";i:2;s:5:"title";i:3;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(90, 'space_blog', '[内置]首页热议-日志', 'a:9:{s:3:"raw";s:280:"
    \r\n[loop]\r\n
    \r\n
    {username} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:226:"
    \r\n
    {username} ›
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '9e68bc9b', 0, 1, 0, 1, 'a:4:{i:0;s:8:"username";i:1;s:3:"url";i:2;s:5:"title";i:3;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(91, 'forum_thread', '[内置]投票主题专用样式', 'a:9:{s:3:"raw";s:166:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:105:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', 'fa07a66f', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(92, 'forum_thread', '[内置]辩论主题专用样式', 'a:9:{s:3:"raw";s:168:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:105:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    ";}', '6a480986', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); @@ -1016,10 +1016,10 @@ INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(97, 'portal_article', '[内置]碎片式文章标题列表', 'a:9:{s:3:"raw";s:261:"
    \r\n
      \r\n[loop]\r\n
    • {title}\r\n[/loop]\r\n[order=even]\r\n{title}
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{s:4:"even";s:110:"{title}";}s:8:"loopplus";a:0:{}s:4:"loop";s:55:"
  • {title}";}', 'bc85eab4', 0, 0, 0, 1, 'a:2:{i:0;s:3:"url";i:1;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(98, 'portal_article', '[内置]文章封面列表(竖线分隔)', 'a:9:{s:3:"raw";s:556:"
    \r\n
      \r\n[loop]\r\n
    • \r\n {title}\r\n

      {title}

      \r\n
    • \r\n[/loop]\r\n[order=odd]\r\n
    • \r\n {title}\r\n

      {title}

      \r\n
    • \r\n[/order]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:1:{s:3:"odd";s:268:"
  • \r\n {title}\r\n

    {title}

    \r\n
  • ";}s:8:"loopplus";a:0:{}s:4:"loop";s:197:"
  • \r\n {title}\r\n

    {title}

    \r\n
  • ";}', '6b653acb', 1, 0, 1, 1, 'a:3:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";}'); INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(99, 'html_announcement', '[内置]站点公告', 'a:9:{s:3:"raw";s:197:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:134:"
  • 公告{title}({starttime})
  • ";}', '1f88cc82', 0, 0, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:9:"starttime";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(100, 'forum_thread', '[内置]文章图文展示', 'a:9:{s:3:"raw";s:374:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:320:"
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', '881ee4a3', 1, 1, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:8:"authorid";i:4;s:6:"author";i:5;s:7:"summary";}'); -INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(101, 'group_thread', '[内置]文章图文列表', 'a:9:{s:3:"raw";s:374:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:320:"
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', 'b67132d6', 1, 1, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:8:"authorid";i:4;s:6:"author";i:5;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(100, 'forum_thread', '[内置]帖子图文展示', 'a:9:{s:3:"raw";s:374:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:320:"
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', '881ee4a3', 1, 1, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:8:"authorid";i:4;s:6:"author";i:5;s:7:"summary";}'); +INSERT INTO pre_common_block_style (styleid, blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES(101, 'group_thread', '[内置]帖子图文列表', 'a:9:{s:3:"raw";s:374:"
    \r\n[loop]\r\n
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    \r\n[/loop]\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:320:"
    \r\n
    {title}
    \r\n
    {author}{title}
    \r\n
    {summary}
    \r\n
    ";}', 'b67132d6', 1, 1, 1, 1, 'a:6:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";i:3;s:8:"authorid";i:4;s:6:"author";i:5;s:7:"summary";}'); -- [key:a2f9089e] -INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('group_thread', '[内置][圈子名]+圈子文章标题', 'a:9:{s:3:"raw";s:177:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:107:"
  • [{groupname}] {title}
  • ";}', 'a2f9089e', 0, 0, 0, 1, 'a:4:{i:0;s:8:"groupurl";i:1;s:9:"groupname";i:2;s:3:"url";i:3;s:5:"title";}'); +INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('group_thread', '[内置][圈子名]+圈子帖子标题', 'a:9:{s:3:"raw";s:177:"
    \r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:107:"
  • [{groupname}] {title}
  • ";}', 'a2f9089e', 0, 0, 0, 1, 'a:4:{i:0;s:8:"groupurl";i:1;s:9:"groupname";i:2;s:3:"url";i:3;s:5:"title";}'); -- [/key] -- [key:b921ea24] INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('other_otherfriendlink', '[内置]友情链接图文', 'a:9:{s:3:"raw";s:298:"
    \r\n
      \r\n[loop]\r\n
    • \r\n\r\n
      {title}

      {summary}

      \r\n
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:226:"
  • \r\n\r\n
    {title}

    {summary}

    \r\n
  • ";}', 'b921ea24', 0, 1, 1, 1, 'a:4:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:3:"pic";i:3;s:7:"summary";}'); @@ -1037,10 +1037,10 @@ INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('forum_thread', '[内置]一简介+两列标题', 'a:9:{s:3:"raw";s:284:"
    \r\n[index=1]\r\n
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    \r\n[/index]\r\n\r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:1:{i:1;s:127:"
    \r\n
    {title}
    \r\n
    {summary}
    \r\n
    \r\n
    ";}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:60:"
  • {title}
  • ";}', '9e2ea31f', 0, 1, 0, 1, 'a:3:{i:0;s:3:"url";i:1;s:5:"title";i:2;s:7:"summary";}'); -- [/key] -- [key:cba1f109] -INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('forum_thread', '[内置]文章图片幻灯片', 'a:9:{s:3:"raw";s:333:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    \r\n";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:182:"
  • {title}
  • ";}', 'cba1f109', 1, 0, 1, 1, 'a:3:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('forum_thread', '[内置]帖子图片幻灯片', 'a:9:{s:3:"raw";s:333:"
    \r\n
      \r\n[loop]\r\n
    • {title}
    • \r\n[/loop]\r\n
    \r\n
    \r\n";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:182:"
  • {title}
  • ";}', 'cba1f109', 1, 0, 1, 1, 'a:3:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";}'); -- [/key] -- [key:0ab2e307] -INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('forum_thread', '[内置]文章图片列表', 'a:9:{s:3:"raw";s:271:"
    \r\n
      \r\n[loop]\r\n
    • \r\n {title}\r\n

      {title}

      \r\n
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:205:"
  • \r\n {title}\r\n

    {title}

    \r\n
  • ";}', '0ab2e307', 1, 0, 1, 1, 'a:3:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";}'); +INSERT INTO pre_common_block_style (blockclass, `name`, template, `hash`, getpic, getsummary, makethumb, settarget, `fields`) VALUES('forum_thread', '[内置]帖子图片列表', 'a:9:{s:3:"raw";s:271:"
    \r\n
      \r\n[loop]\r\n
    • \r\n {title}\r\n

      {title}

      \r\n
    • \r\n[/loop]\r\n
    \r\n
    ";s:6:"footer";s:0:"";s:6:"header";s:0:"";s:9:"indexplus";a:0:{}s:5:"index";a:0:{}s:9:"orderplus";a:0:{}s:5:"order";a:0:{}s:8:"loopplus";a:0:{}s:4:"loop";s:205:"
  • \r\n {title}\r\n

    {title}

    \r\n
  • ";}', '0ab2e307', 1, 0, 1, 1, 'a:3:{i:0;s:3:"url";i:1;s:3:"pic";i:2;s:5:"title";}'); -- [/key] -- [/block_style] diff --git a/install/include/index.htm b/install/include/index.htm old mode 100644 new mode 100755 diff --git a/install/include/install_extvar.php b/install/include/install_extvar.php old mode 100644 new mode 100755 diff --git a/install/include/install_function.php b/install/include/install_function.php old mode 100644 new mode 100755 diff --git a/install/include/install_lang.php b/install/include/install_lang.php old mode 100644 new mode 100755 diff --git a/install/include/install_mysqli.php b/install/include/install_mysqli.php old mode 100644 new mode 100755 diff --git a/install/include/install_var.php b/install/include/install_var.php old mode 100644 new mode 100755 diff --git a/install/static/index.htm b/install/static/index.htm old mode 100644 new mode 100755 diff --git a/install/static/style.css b/install/static/style.css old mode 100644 new mode 100755 diff --git a/member.php b/member.php old mode 100644 new mode 100755 diff --git a/misc.php b/misc.php old mode 100644 new mode 100755 diff --git a/plugin.php b/plugin.php old mode 100644 new mode 100755 diff --git a/portal.php b/portal.php old mode 100644 new mode 100755 diff --git a/robots.txt b/robots.txt old mode 100644 new mode 100755 diff --git a/search.php b/search.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_admingroup.php b/source/admincp/admincp_admingroup.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_adv.php b/source/admincp/admincp_adv.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_album.php b/source/admincp/admincp_album.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_albumcategory.php b/source/admincp/admincp_albumcategory.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_announce.php b/source/admincp/admincp_announce.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_article.php b/source/admincp/admincp_article.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_attach.php b/source/admincp/admincp_attach.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_block.php b/source/admincp/admincp_block.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_blockstyle.php b/source/admincp/admincp_blockstyle.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_blockxml.php b/source/admincp/admincp_blockxml.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_blog.php b/source/admincp/admincp_blog.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_blogcategory.php b/source/admincp/admincp_blogcategory.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_blogrecyclebin.php b/source/admincp/admincp_blogrecyclebin.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_card.php b/source/admincp/admincp_card.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_checktools.php b/source/admincp/admincp_checktools.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_click.php b/source/admincp/admincp_click.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_cloudaddons.php b/source/admincp/admincp_cloudaddons.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_collection.php b/source/admincp/admincp_collection.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_comment.php b/source/admincp/admincp_comment.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_counter.php b/source/admincp/admincp_counter.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_credits.php b/source/admincp/admincp_credits.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_db.php b/source/admincp/admincp_db.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_district.php b/source/admincp/admincp_district.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_diytemplate.php b/source/admincp/admincp_diytemplate.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_doing.php b/source/admincp/admincp_doing.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_domain.php b/source/admincp/admincp_domain.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_ec.php b/source/admincp/admincp_ec.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_faq.php b/source/admincp/admincp_faq.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_feed.php b/source/admincp/admincp_feed.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_forums.php b/source/admincp/admincp_forums.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_founder.php b/source/admincp/admincp_founder.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_grid.php b/source/admincp/admincp_grid.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_group.php b/source/admincp/admincp_group.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_index.php b/source/admincp/admincp_index.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_login.php b/source/admincp/admincp_login.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_logs.php b/source/admincp/admincp_logs.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_magics.php b/source/admincp/admincp_magics.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_main.php b/source/admincp/admincp_main.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_makehtml.php b/source/admincp/admincp_makehtml.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_medals.php b/source/admincp/admincp_medals.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_members.php b/source/admincp/admincp_members.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_membersplit.php b/source/admincp/admincp_membersplit.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_menu.php b/source/admincp/admincp_menu.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_misc.php b/source/admincp/admincp_misc.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_moderate.php b/source/admincp/admincp_moderate.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_nav.php b/source/admincp/admincp_nav.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_optimizer.php b/source/admincp/admincp_optimizer.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_perm.php b/source/admincp/admincp_perm.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_pic.php b/source/admincp/admincp_pic.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_plugins.php b/source/admincp/admincp_plugins.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_portalcategory.php b/source/admincp/admincp_portalcategory.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_portalpermission.php b/source/admincp/admincp_portalpermission.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_postcomment.php b/source/admincp/admincp_postcomment.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_postsplit.php b/source/admincp/admincp_postsplit.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_prune.php b/source/admincp/admincp_prune.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_quickquery.php b/source/admincp/admincp_quickquery.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_recyclebin.php b/source/admincp/admincp_recyclebin.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_recyclebinpost.php b/source/admincp/admincp_recyclebinpost.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_remoderate.php b/source/admincp/admincp_remoderate.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_report.php b/source/admincp/admincp_report.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_runtests.php b/source/admincp/admincp_runtests.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_search.php b/source/admincp/admincp_search.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_setting.php b/source/admincp/admincp_setting.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_share.php b/source/admincp/admincp_share.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_smilies.php b/source/admincp/admincp_smilies.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_smsgw.php b/source/admincp/admincp_smsgw.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_specialuser.php b/source/admincp/admincp_specialuser.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_styles.php b/source/admincp/admincp_styles.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_tag.php b/source/admincp/admincp_tag.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_tasks.php b/source/admincp/admincp_tasks.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_templates.php b/source/admincp/admincp_templates.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_threads.php b/source/admincp/admincp_threads.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_threadsplit.php b/source/admincp/admincp_threadsplit.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_threadtypes.php b/source/admincp/admincp_threadtypes.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_tools.php b/source/admincp/admincp_tools.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_topic.php b/source/admincp/admincp_topic.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_tradelog.php b/source/admincp/admincp_tradelog.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_usergroups.php b/source/admincp/admincp_usergroups.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_usertag.php b/source/admincp/admincp_usertag.php old mode 100644 new mode 100755 diff --git a/source/admincp/admincp_verify.php b/source/admincp/admincp_verify.php old mode 100644 new mode 100755 diff --git a/source/admincp/discuzdb.md5 b/source/admincp/discuzdb.md5 old mode 100644 new mode 100755 diff --git a/source/admincp/discuzfiles.md5 b/source/admincp/discuzfiles.md5 old mode 100644 new mode 100755 diff --git a/source/admincp/discuzhook.dat b/source/admincp/discuzhook.dat old mode 100644 new mode 100755 diff --git a/source/admincp/index.htm b/source/admincp/index.htm old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/index.htm b/source/admincp/moderate/index.htm old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_article.php b/source/admincp/moderate/moderate_article.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_blog.php b/source/admincp/moderate/moderate_blog.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_comment.php b/source/admincp/moderate/moderate_comment.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_doing.php b/source/admincp/moderate/moderate_doing.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_member.php b/source/admincp/moderate/moderate_member.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_picture.php b/source/admincp/moderate/moderate_picture.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_portalcomment.php b/source/admincp/moderate/moderate_portalcomment.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_reply.php b/source/admincp/moderate/moderate_reply.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_share.php b/source/admincp/moderate/moderate_share.php old mode 100644 new mode 100755 diff --git a/source/admincp/moderate/moderate_thread.php b/source/admincp/moderate/moderate_thread.php old mode 100644 new mode 100755 diff --git a/source/admincp/robots.txt b/source/admincp/robots.txt old mode 100644 new mode 100755 diff --git a/source/archiver/common/footer.php b/source/archiver/common/footer.php old mode 100644 new mode 100755 diff --git a/source/archiver/common/header.php b/source/archiver/common/header.php old mode 100644 new mode 100755 index 95476ad..57e8ce1 --- a/source/archiver/common/header.php +++ b/source/archiver/common/header.php @@ -13,7 +13,7 @@ ob_start(); -<?php if(!empty($navtitle)): echo $navtitle.' - '; endif; if(empty($nobbname)): echo $_G['setting']['bbname'].' - '; endif;?> Powered by Discuz! Archiver +<?php if(!empty($navtitle) && $navtitle != '论坛'): echo $navtitle.' - '; endif; if(empty($nobbname)): echo $_G['setting']['bbname'].' - '; endif;?> Archiver diff --git a/source/archiver/common/index.htm b/source/archiver/common/index.htm old mode 100644 new mode 100755 diff --git a/source/archiver/forum/discuz.php b/source/archiver/forum/discuz.php old mode 100644 new mode 100755 diff --git a/source/archiver/forum/forumdisplay.php b/source/archiver/forum/forumdisplay.php old mode 100644 new mode 100755 diff --git a/source/archiver/forum/index.htm b/source/archiver/forum/index.htm old mode 100644 new mode 100755 diff --git a/source/archiver/forum/viewthread.php b/source/archiver/forum/viewthread.php old mode 100644 new mode 100755 diff --git a/source/archiver/index.htm b/source/archiver/index.htm old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_article.php b/source/class/adv/adv_article.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_articlelist.php b/source/class/adv/adv_articlelist.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_blog.php b/source/class/adv/adv_blog.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_cornerbanner.php b/source/class/adv/adv_cornerbanner.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_couplebanner.php b/source/class/adv/adv_couplebanner.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_custom.php b/source/class/adv/adv_custom.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_feed.php b/source/class/adv/adv_feed.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_float.php b/source/class/adv/adv_float.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_footerbanner.php b/source/class/adv/adv_footerbanner.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_headerbanner.php b/source/class/adv/adv_headerbanner.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_intercat.php b/source/class/adv/adv_intercat.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_interthread.php b/source/class/adv/adv_interthread.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_search.php b/source/class/adv/adv_search.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_subnavbanner.php b/source/class/adv/adv_subnavbanner.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_text.php b/source/class/adv/adv_text.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_thread.php b/source/class/adv/adv_thread.php old mode 100644 new mode 100755 diff --git a/source/class/adv/adv_threadlist.php b/source/class/adv/adv_threadlist.php old mode 100644 new mode 100755 diff --git a/source/class/adv/index.htm b/source/class/adv/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_activity.php b/source/class/block/forum/block_activity.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_activitycity.php b/source/class/block/forum/block_activitycity.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_activitynew.php b/source/class/block/forum/block_activitynew.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_forum.php b/source/class/block/forum/block_forum.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_thread.php b/source/class/block/forum/block_thread.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threaddigest.php b/source/class/block/forum/block_threaddigest.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threadhot.php b/source/class/block/forum/block_threadhot.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threadnew.php b/source/class/block/forum/block_threadnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threadspecial.php b/source/class/block/forum/block_threadspecial.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threadspecified.php b/source/class/block/forum/block_threadspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_threadstick.php b/source/class/block/forum/block_threadstick.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_trade.php b/source/class/block/forum/block_trade.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_tradehot.php b/source/class/block/forum/block_tradehot.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_tradenew.php b/source/class/block/forum/block_tradenew.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/block_tradespecified.php b/source/class/block/forum/block_tradespecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/blockclass.php b/source/class/block/forum/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/forum/index.htm b/source/class/block/forum/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_group.php b/source/class/block/group/block_group.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupactivity.php b/source/class/block/group/block_groupactivity.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupactivitycity.php b/source/class/block/group/block_groupactivitycity.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupactivitynew.php b/source/class/block/group/block_groupactivitynew.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_grouphot.php b/source/class/block/group/block_grouphot.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupnew.php b/source/class/block/group/block_groupnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupspecified.php b/source/class/block/group/block_groupspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupthread.php b/source/class/block/group/block_groupthread.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupthreadhot.php b/source/class/block/group/block_groupthreadhot.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupthreadnew.php b/source/class/block/group/block_groupthreadnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupthreadspecial.php b/source/class/block/group/block_groupthreadspecial.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_groupthreadspecified.php b/source/class/block/group/block_groupthreadspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_grouptrade.php b/source/class/block/group/block_grouptrade.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_grouptradehot.php b/source/class/block/group/block_grouptradehot.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_grouptradenew.php b/source/class/block/group/block_grouptradenew.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/block_grouptradespecified.php b/source/class/block/group/block_grouptradespecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/blockclass.php b/source/class/block/group/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/group/index.htm b/source/class/block/group/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_adv.php b/source/class/block/html/block_adv.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_announcement.php b/source/class/block/html/block_announcement.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_banner.php b/source/class/block/html/block_banner.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_blank.php b/source/class/block/html/block_blank.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_forumtree.php b/source/class/block/html/block_forumtree.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_friendlink.php b/source/class/block/html/block_friendlink.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_google.php b/source/class/block/html/block_google.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_line.php b/source/class/block/html/block_line.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_search.php b/source/class/block/html/block_search.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_sort.php b/source/class/block/html/block_sort.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_stat.php b/source/class/block/html/block_stat.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/block_vedio.php b/source/class/block/html/block_vedio.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/blockclass.php b/source/class/block/html/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/commonblock_html.php b/source/class/block/html/commonblock_html.php old mode 100644 new mode 100755 diff --git a/source/class/block/html/index.htm b/source/class/block/html/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/index.htm b/source/class/block/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_member.php b/source/class/block/member/block_member.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_membercredit.php b/source/class/block/member/block_membercredit.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_membernew.php b/source/class/block/member/block_membernew.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_memberposts.php b/source/class/block/member/block_memberposts.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_membershow.php b/source/class/block/member/block_membershow.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_memberspecial.php b/source/class/block/member/block_memberspecial.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/block_memberspecified.php b/source/class/block/member/block_memberspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/blockclass.php b/source/class/block/member/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/member/index.htm b/source/class/block/member/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/other/block_otherfriendlink.php b/source/class/block/other/block_otherfriendlink.php old mode 100644 new mode 100755 diff --git a/source/class/block/other/block_otherstat.php b/source/class/block/other/block_otherstat.php old mode 100644 new mode 100755 diff --git a/source/class/block/other/blockclass.php b/source/class/block/other/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/other/index.htm b/source/class/block/other/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_article.php b/source/class/block/portal/block_article.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_articlehot.php b/source/class/block/portal/block_articlehot.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_articlenew.php b/source/class/block/portal/block_articlenew.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_articlespecified.php b/source/class/block/portal/block_articlespecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_portalcategory.php b/source/class/block/portal/block_portalcategory.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_topic.php b/source/class/block/portal/block_topic.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_topichot.php b/source/class/block/portal/block_topichot.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_topicnew.php b/source/class/block/portal/block_topicnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/block_topicspecified.php b/source/class/block/portal/block_topicspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/blockclass.php b/source/class/block/portal/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/portal/index.htm b/source/class/block/portal/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_album.php b/source/class/block/space/block_album.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_albumnew.php b/source/class/block/space/block_albumnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_albumspecified.php b/source/class/block/space/block_albumspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_blog.php b/source/class/block/space/block_blog.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_bloghot.php b/source/class/block/space/block_bloghot.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_blognew.php b/source/class/block/space/block_blognew.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_blogspecified.php b/source/class/block/space/block_blogspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_doing.php b/source/class/block/space/block_doing.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_doinghot.php b/source/class/block/space/block_doinghot.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_doingnew.php b/source/class/block/space/block_doingnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_pic.php b/source/class/block/space/block_pic.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_pichot.php b/source/class/block/space/block_pichot.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_picnew.php b/source/class/block/space/block_picnew.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/block_picspecified.php b/source/class/block/space/block_picspecified.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/blockclass.php b/source/class/block/space/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/space/index.htm b/source/class/block/space/index.htm old mode 100644 new mode 100755 diff --git a/source/class/block/xml/block_xml.php b/source/class/block/xml/block_xml.php old mode 100644 new mode 100755 diff --git a/source/class/block/xml/blockclass.php b/source/class/block/xml/blockclass.php old mode 100644 new mode 100755 diff --git a/source/class/block/xml/index.htm b/source/class/block/xml/index.htm old mode 100644 new mode 100755 diff --git a/source/class/cache/cache_file.php b/source/class/cache/cache_file.php old mode 100644 new mode 100755 diff --git a/source/class/cache/cache_sql.php b/source/class/cache/cache_sql.php old mode 100644 new mode 100755 diff --git a/source/class/cache/index.htm b/source/class/cache/index.htm old mode 100644 new mode 100755 diff --git a/source/class/class_bbcode.php b/source/class/class_bbcode.php old mode 100644 new mode 100755 diff --git a/source/class/class_blockpermission.php b/source/class/class_blockpermission.php old mode 100644 new mode 100755 diff --git a/source/class/class_card.php b/source/class/class_card.php old mode 100644 new mode 100755 diff --git a/source/class/class_cexception.php b/source/class/class_cexception.php old mode 100644 new mode 100755 diff --git a/source/class/class_chinese.php b/source/class/class_chinese.php old mode 100644 new mode 100755 diff --git a/source/class/class_core.php b/source/class/class_core.php old mode 100644 new mode 100755 diff --git a/source/class/class_credit.php b/source/class/class_credit.php old mode 100644 new mode 100755 diff --git a/source/class/class_dbexception.php b/source/class/class_dbexception.php old mode 100644 new mode 100755 diff --git a/source/class/class_filesock.php b/source/class/class_filesock.php old mode 100644 new mode 100755 diff --git a/source/class/class_gifmerge.php b/source/class/class_gifmerge.php old mode 100644 new mode 100755 diff --git a/source/class/class_image.php b/source/class/class_image.php old mode 100644 new mode 100755 diff --git a/source/class/class_ip.php b/source/class/class_ip.php old mode 100644 new mode 100755 diff --git a/source/class/class_member.php b/source/class/class_member.php old mode 100644 new mode 100755 diff --git a/source/class/class_membersearch.php b/source/class/class_membersearch.php old mode 100644 new mode 100755 diff --git a/source/class/class_optimizer.php b/source/class/class_optimizer.php old mode 100644 new mode 100755 diff --git a/source/class/class_payment.php b/source/class/class_payment.php old mode 100644 new mode 100755 diff --git a/source/class/class_portalcategory.php b/source/class/class_portalcategory.php old mode 100644 new mode 100755 diff --git a/source/class/class_seccode.php b/source/class/class_seccode.php old mode 100644 new mode 100755 diff --git a/source/class/class_sms.php b/source/class/class_sms.php old mode 100644 new mode 100755 diff --git a/source/class/class_sphinx.php b/source/class/class_sphinx.php old mode 100644 new mode 100755 diff --git a/source/class/class_tag.php b/source/class/class_tag.php old mode 100644 new mode 100755 diff --git a/source/class/class_task.php b/source/class/class_task.php old mode 100644 new mode 100755 diff --git a/source/class/class_template.php b/source/class/class_template.php old mode 100644 new mode 100755 diff --git a/source/class/class_xml.php b/source/class/class_xml.php old mode 100644 new mode 100755 diff --git a/source/class/class_zip.php b/source/class/class_zip.php old mode 100644 new mode 100755 diff --git a/source/class/db/db_driver_mysqli.php b/source/class/db/db_driver_mysqli.php old mode 100644 new mode 100755 diff --git a/source/class/db/db_driver_mysqli_slave.php b/source/class/db/db_driver_mysqli_slave.php old mode 100644 new mode 100755 diff --git a/source/class/db/index.htm b/source/class/db/index.htm old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_admincp.php b/source/class/discuz/discuz_admincp.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_application.php b/source/class/discuz/discuz_application.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_base.php b/source/class/discuz/discuz_base.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_block.php b/source/class/discuz/discuz_block.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_censor.php b/source/class/discuz/discuz_censor.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_container.php b/source/class/discuz/discuz_container.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_core.php b/source/class/discuz/discuz_core.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_cron.php b/source/class/discuz/discuz_cron.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_database.php b/source/class/discuz/discuz_database.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_error.php b/source/class/discuz/discuz_error.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_extend.php b/source/class/discuz/discuz_extend.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_ftp.php b/source/class/discuz/discuz_ftp.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_memory.php b/source/class/discuz/discuz_memory.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_model.php b/source/class/discuz/discuz_model.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_panel.php b/source/class/discuz/discuz_panel.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_process.php b/source/class/discuz/discuz_process.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_rank.php b/source/class/discuz/discuz_rank.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_session.php b/source/class/discuz/discuz_session.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_session_close.php b/source/class/discuz/discuz_session_close.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_table.php b/source/class/discuz/discuz_table.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_table_archive.php b/source/class/discuz/discuz_table_archive.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_upgrade.php b/source/class/discuz/discuz_upgrade.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/discuz_upload.php b/source/class/discuz/discuz_upload.php old mode 100644 new mode 100755 diff --git a/source/class/discuz/index.htm b/source/class/discuz/index.htm old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_activity.php b/source/class/extend/extend_thread_activity.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_allowat.php b/source/class/extend/extend_thread_allowat.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_base.php b/source/class/extend/extend_thread_base.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_comment.php b/source/class/extend/extend_thread_comment.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_debate.php b/source/class/extend/extend_thread_debate.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_filter.php b/source/class/extend/extend_thread_filter.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_follow.php b/source/class/extend/extend_thread_follow.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_image.php b/source/class/extend/extend_thread_image.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_poll.php b/source/class/extend/extend_thread_poll.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_replycredit.php b/source/class/extend/extend_thread_replycredit.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_reward.php b/source/class/extend/extend_thread_reward.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_rushreply.php b/source/class/extend/extend_thread_rushreply.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_sort.php b/source/class/extend/extend_thread_sort.php old mode 100644 new mode 100755 diff --git a/source/class/extend/extend_thread_trade.php b/source/class/extend/extend_thread_trade.php old mode 100644 new mode 100755 diff --git a/source/class/extend/index.htm b/source/class/extend/index.htm old mode 100644 new mode 100755 diff --git a/source/class/filesock/filesock_base.php b/source/class/filesock/filesock_base.php old mode 100644 new mode 100755 diff --git a/source/class/filesock/filesock_curl.php b/source/class/filesock/filesock_curl.php old mode 100644 new mode 100755 diff --git a/source/class/filesock/filesock_stream.php b/source/class/filesock/filesock_stream.php old mode 100644 new mode 100755 diff --git a/source/class/filesock/index.htm b/source/class/filesock/index.htm old mode 100644 new mode 100755 diff --git a/source/class/forum/forum_upload.php b/source/class/forum/forum_upload.php old mode 100644 new mode 100755 diff --git a/source/class/forum/index.htm b/source/class/forum/index.htm old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_access.php b/source/class/helper/helper_access.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_antitheft.php b/source/class/helper/helper_antitheft.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_attach.php b/source/class/helper/helper_attach.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_dbtool.php b/source/class/helper/helper_dbtool.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_form.php b/source/class/helper/helper_form.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_invite.php b/source/class/helper/helper_invite.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_json.php b/source/class/helper/helper_json.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_log.php b/source/class/helper/helper_log.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_makehtml.php b/source/class/helper/helper_makehtml.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_mobile.php b/source/class/helper/helper_mobile.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_notification.php b/source/class/helper/helper_notification.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_output.php b/source/class/helper/helper_output.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_page.php b/source/class/helper/helper_page.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_pm.php b/source/class/helper/helper_pm.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_seccheck.php b/source/class/helper/helper_seccheck.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_seo.php b/source/class/helper/helper_seo.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_sysmessage.php b/source/class/helper/helper_sysmessage.php old mode 100644 new mode 100755 diff --git a/source/class/helper/helper_util.php b/source/class/helper/helper_util.php old mode 100644 new mode 100755 diff --git a/source/class/helper/index.htm b/source/class/helper/index.htm old mode 100644 new mode 100755 diff --git a/source/class/index.htm b/source/class/index.htm old mode 100644 new mode 100755 diff --git a/source/class/ip/index.htm b/source/class/ip/index.htm old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_getter_dnslist.php b/source/class/ip/ip_getter_dnslist.php old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_getter_header.php b/source/class/ip/ip_getter_header.php old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_getter_iplist.php b/source/class/ip/ip_getter_iplist.php old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_tiny.php b/source/class/ip/ip_tiny.php old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_v6wry.php b/source/class/ip/ip_v6wry.php old mode 100644 new mode 100755 diff --git a/source/class/ip/ip_wry.php b/source/class/ip/ip_wry.php old mode 100644 new mode 100755 diff --git a/source/class/lib/index.htm b/source/class/lib/index.htm old mode 100644 new mode 100755 diff --git a/source/class/lib/lib_tree.php b/source/class/lib/lib_tree.php old mode 100644 new mode 100755 diff --git a/source/class/magic/index.htm b/source/class/magic/index.htm old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_anonymouspost.php b/source/class/magic/magic_anonymouspost.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_attachsize.php b/source/class/magic/magic_attachsize.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_bump.php b/source/class/magic/magic_bump.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_call.php b/source/class/magic/magic_call.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_checkonline.php b/source/class/magic/magic_checkonline.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_chgusername.php b/source/class/magic/magic_chgusername.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_close.php b/source/class/magic/magic_close.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_detector.php b/source/class/magic/magic_detector.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_doodle.php b/source/class/magic/magic_doodle.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_downdateline.php b/source/class/magic/magic_downdateline.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_flicker.php b/source/class/magic/magic_flicker.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_friendnum.php b/source/class/magic/magic_friendnum.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_gift.php b/source/class/magic/magic_gift.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_highlight.php b/source/class/magic/magic_highlight.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_hot.php b/source/class/magic/magic_hot.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_jack.php b/source/class/magic/magic_jack.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_money.php b/source/class/magic/magic_money.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_namepost.php b/source/class/magic/magic_namepost.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_open.php b/source/class/magic/magic_open.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_repent.php b/source/class/magic/magic_repent.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_showip.php b/source/class/magic/magic_showip.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_stick.php b/source/class/magic/magic_stick.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_thunder.php b/source/class/magic/magic_thunder.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_updateline.php b/source/class/magic/magic_updateline.php old mode 100644 new mode 100755 diff --git a/source/class/magic/magic_visit.php b/source/class/magic/magic_visit.php old mode 100644 new mode 100755 diff --git a/source/class/memory/index.htm b/source/class/memory/index.htm old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_common_session.php b/source/class/memory/memory_common_session.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_apc.php b/source/class/memory/memory_driver_apc.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_apcu.php b/source/class/memory/memory_driver_apcu.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_eaccelerator.php b/source/class/memory/memory_driver_eaccelerator.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_file.php b/source/class/memory/memory_driver_file.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_memcache.php b/source/class/memory/memory_driver_memcache.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_memcached.php b/source/class/memory/memory_driver_memcached.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_redis.php b/source/class/memory/memory_driver_redis.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_wincache.php b/source/class/memory/memory_driver_wincache.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_xcache.php b/source/class/memory/memory_driver_xcache.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_driver_yac.php b/source/class/memory/memory_driver_yac.php old mode 100644 new mode 100755 diff --git a/source/class/memory/memory_setting_array.php b/source/class/memory/memory_setting_array.php old mode 100644 new mode 100755 diff --git a/source/class/model/index.htm b/source/class/model/index.htm old mode 100644 new mode 100755 diff --git a/source/class/model/model_forum_post.php b/source/class/model/model_forum_post.php old mode 100644 new mode 100755 index 85d2d65..2655068 --- a/source/class/model/model_forum_post.php +++ b/source/class/model/model_forum_post.php @@ -562,9 +562,11 @@ class model_forum_post extends discuz_model { $isfirstpost = $this->post['first'] ? 1 : 0; + /* if($isfirstpost && $this->thread['replies'] > 0) { return $this->showmessage(($this->thread['special'] == 3 ? 'post_edit_reward_already_reply' : 'post_edit_thread_already_reply'), NULL); } + */ if($this->thread['displayorder'] >= 0) { diff --git a/source/class/model/model_forum_thread.php b/source/class/model/model_forum_thread.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/index.htm b/source/class/optimizer/index.htm old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_aggid.php b/source/class/optimizer/optimizer_aggid.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_attachexpire.php b/source/class/optimizer/optimizer_attachexpire.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_attachrefcheck.php b/source/class/optimizer/optimizer_attachrefcheck.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_dbbackup.php b/source/class/optimizer/optimizer_dbbackup.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_dbbackup_clean.php b/source/class/optimizer/optimizer_dbbackup_clean.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_dbbackup_visit.php b/source/class/optimizer/optimizer_dbbackup_visit.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_dos8p3.php b/source/class/optimizer/optimizer_dos8p3.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_editperdel.php b/source/class/optimizer/optimizer_editperdel.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_emailregister.php b/source/class/optimizer/optimizer_emailregister.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_filecheck.php b/source/class/optimizer/optimizer_filecheck.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_filesafe.php b/source/class/optimizer/optimizer_filesafe.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_forumstatus.php b/source/class/optimizer/optimizer_forumstatus.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_httphost.php b/source/class/optimizer/optimizer_httphost.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_inviteregister.php b/source/class/optimizer/optimizer_inviteregister.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_ipregctrl.php b/source/class/optimizer/optimizer_ipregctrl.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_log.php b/source/class/optimizer/optimizer_log.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_loginoutofdate.php b/source/class/optimizer/optimizer_loginoutofdate.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_loginpwcheck.php b/source/class/optimizer/optimizer_loginpwcheck.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_newbiespan.php b/source/class/optimizer/optimizer_newbiespan.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_plugin.php b/source/class/optimizer/optimizer_plugin.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_post.php b/source/class/optimizer/optimizer_post.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_postqqonly.php b/source/class/optimizer/optimizer_postqqonly.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_pwlength.php b/source/class/optimizer/optimizer_pwlength.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_recyclebin.php b/source/class/optimizer/optimizer_recyclebin.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_regmaildomain.php b/source/class/optimizer/optimizer_regmaildomain.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_remote.php b/source/class/optimizer/optimizer_remote.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_security_daily.php b/source/class/optimizer/optimizer_security_daily.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_seo.php b/source/class/optimizer/optimizer_seo.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_setting.php b/source/class/optimizer/optimizer_setting.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_thread.php b/source/class/optimizer/optimizer_thread.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_usergroup4.php b/source/class/optimizer/optimizer_usergroup4.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_usergroup5.php b/source/class/optimizer/optimizer_usergroup5.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_usergroup6.php b/source/class/optimizer/optimizer_usergroup6.php old mode 100644 new mode 100755 diff --git a/source/class/optimizer/optimizer_usergroup9.php b/source/class/optimizer/optimizer_usergroup9.php old mode 100644 new mode 100755 diff --git a/source/class/payment/index.htm b/source/class/payment/index.htm old mode 100644 new mode 100755 diff --git a/source/class/payment/payment_credit.php b/source/class/payment/payment_credit.php old mode 100644 new mode 100755 diff --git a/source/class/payment/payment_invite.php b/source/class/payment/payment_invite.php old mode 100644 new mode 100755 diff --git a/source/class/seccode/index.htm b/source/class/seccode/index.htm old mode 100644 new mode 100755 diff --git a/source/class/secqaa/index.htm b/source/class/secqaa/index.htm old mode 100644 new mode 100755 diff --git a/source/class/secqaa/secqaa_calc.php b/source/class/secqaa/secqaa_calc.php old mode 100644 new mode 100755 diff --git a/source/class/secqaa/secqaa_calcmad.php b/source/class/secqaa/secqaa_calcmad.php old mode 100644 new mode 100755 diff --git a/source/class/smsgw/index.htm b/source/class/smsgw/index.htm old mode 100644 new mode 100755 diff --git a/source/class/table/index.htm b/source/class/table/index.htm old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admincp_cmenu.php b/source/class/table/table_common_admincp_cmenu.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admincp_group.php b/source/class/table/table_common_admincp_group.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admincp_member.php b/source/class/table/table_common_admincp_member.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admincp_perm.php b/source/class/table/table_common_admincp_perm.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admincp_session.php b/source/class/table/table_common_admincp_session.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_admingroup.php b/source/class/table/table_common_admingroup.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_adminnote.php b/source/class/table/table_common_adminnote.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_advertisement.php b/source/class/table/table_common_advertisement.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_advertisement_custom.php b/source/class/table/table_common_advertisement_custom.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_banned.php b/source/class/table/table_common_banned.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block.php b/source/class/table/table_common_block.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_favorite.php b/source/class/table/table_common_block_favorite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_item.php b/source/class/table/table_common_block_item.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_item_data.php b/source/class/table/table_common_block_item_data.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_permission.php b/source/class/table/table_common_block_permission.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_pic.php b/source/class/table/table_common_block_pic.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_style.php b/source/class/table/table_common_block_style.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_block_xml.php b/source/class/table/table_common_block_xml.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_cache.php b/source/class/table/table_common_cache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_card.php b/source/class/table/table_common_card.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_card_log.php b/source/class/table/table_common_card_log.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_card_type.php b/source/class/table/table_common_card_type.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_credit_log.php b/source/class/table/table_common_credit_log.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_credit_log_field.php b/source/class/table/table_common_credit_log_field.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_credit_rule.php b/source/class/table/table_common_credit_rule.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_credit_rule_log.php b/source/class/table/table_common_credit_rule_log.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_credit_rule_log_field.php b/source/class/table/table_common_credit_rule_log_field.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_cron.php b/source/class/table/table_common_cron.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_district.php b/source/class/table/table_common_district.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_diy_data.php b/source/class/table/table_common_diy_data.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_domain.php b/source/class/table/table_common_domain.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_failedip.php b/source/class/table/table_common_failedip.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_failedlogin.php b/source/class/table/table_common_failedlogin.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_friendlink.php b/source/class/table/table_common_friendlink.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_grouppm.php b/source/class/table/table_common_grouppm.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_invite.php b/source/class/table/table_common_invite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_magic.php b/source/class/table/table_common_magic.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_magiclog.php b/source/class/table/table_common_magiclog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_mailcron.php b/source/class/table/table_common_mailcron.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_mailqueue.php b/source/class/table/table_common_mailqueue.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member.php b/source/class/table/table_common_member.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_action_log.php b/source/class/table/table_common_member_action_log.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_archive.php b/source/class/table/table_common_member_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_count.php b/source/class/table/table_common_member_count.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_count_archive.php b/source/class/table/table_common_member_count_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_crime.php b/source/class/table/table_common_member_crime.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_field_forum.php b/source/class/table/table_common_member_field_forum.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_field_forum_archive.php b/source/class/table/table_common_member_field_forum_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_field_home.php b/source/class/table/table_common_member_field_home.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_field_home_archive.php b/source/class/table/table_common_member_field_home_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_forum_buylog.php b/source/class/table/table_common_member_forum_buylog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_grouppm.php b/source/class/table/table_common_member_grouppm.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_magic.php b/source/class/table/table_common_member_magic.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_medal.php b/source/class/table/table_common_member_medal.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_newprompt.php b/source/class/table/table_common_member_newprompt.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_profile.php b/source/class/table/table_common_member_profile.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_profile_archive.php b/source/class/table/table_common_member_profile_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_profile_history.php b/source/class/table/table_common_member_profile_history.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_profile_setting.php b/source/class/table/table_common_member_profile_setting.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_security.php b/source/class/table/table_common_member_security.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_secwhite.php b/source/class/table/table_common_member_secwhite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_stat_field.php b/source/class/table/table_common_member_stat_field.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_status.php b/source/class/table/table_common_member_status.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_status_archive.php b/source/class/table/table_common_member_status_archive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_validate.php b/source/class/table/table_common_member_validate.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_verify.php b/source/class/table/table_common_member_verify.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_member_verify_info.php b/source/class/table/table_common_member_verify_info.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_moderate.php b/source/class/table/table_common_moderate.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_mytask.php b/source/class/table/table_common_mytask.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_nav.php b/source/class/table/table_common_nav.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_onlinetime.php b/source/class/table/table_common_onlinetime.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_optimizer.php b/source/class/table/table_common_optimizer.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_patch.php b/source/class/table/table_common_patch.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_payment_order.php b/source/class/table/table_common_payment_order.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_payment_refund.php b/source/class/table/table_common_payment_refund.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_payment_transfer.php b/source/class/table/table_common_payment_transfer.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_plugin.php b/source/class/table/table_common_plugin.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_pluginvar.php b/source/class/table/table_common_pluginvar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_process.php b/source/class/table/table_common_process.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_regip.php b/source/class/table/table_common_regip.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_relatedlink.php b/source/class/table/table_common_relatedlink.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_report.php b/source/class/table/table_common_report.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_searchindex.php b/source/class/table/table_common_searchindex.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_seccheck.php b/source/class/table/table_common_seccheck.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_secquestion.php b/source/class/table/table_common_secquestion.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_session.php b/source/class/table/table_common_session.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_setting.php b/source/class/table/table_common_setting.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_smiley.php b/source/class/table/table_common_smiley.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_smsgw.php b/source/class/table/table_common_smsgw.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_smslog.php b/source/class/table/table_common_smslog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_sphinxcounter.php b/source/class/table/table_common_sphinxcounter.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_stat.php b/source/class/table/table_common_stat.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_statuser.php b/source/class/table/table_common_statuser.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_style.php b/source/class/table/table_common_style.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_stylevar.php b/source/class/table/table_common_stylevar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_syscache.php b/source/class/table/table_common_syscache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_tag.php b/source/class/table/table_common_tag.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_tagitem.php b/source/class/table/table_common_tagitem.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_task.php b/source/class/table/table_common_task.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_taskvar.php b/source/class/table/table_common_taskvar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_template.php b/source/class/table/table_common_template.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_template_block.php b/source/class/table/table_common_template_block.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_template_permission.php b/source/class/table/table_common_template_permission.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_uin_black.php b/source/class/table/table_common_uin_black.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_usergroup.php b/source/class/table/table_common_usergroup.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_usergroup_field.php b/source/class/table/table_common_usergroup_field.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_visit.php b/source/class/table/table_common_visit.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_word.php b/source/class/table/table_common_word.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_common_word_type.php b/source/class/table/table_common_word_type.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_access.php b/source/class/table/table_forum_access.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_activity.php b/source/class/table/table_forum_activity.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_activityapply.php b/source/class/table/table_forum_activityapply.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_announcement.php b/source/class/table/table_forum_announcement.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_attachment.php b/source/class/table/table_forum_attachment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_attachment_exif.php b/source/class/table/table_forum_attachment_exif.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_attachment_n.php b/source/class/table/table_forum_attachment_n.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_attachment_unused.php b/source/class/table/table_forum_attachment_unused.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_attachtype.php b/source/class/table/table_forum_attachtype.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_bbcode.php b/source/class/table/table_forum_bbcode.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collection.php b/source/class/table/table_forum_collection.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectioncomment.php b/source/class/table/table_forum_collectioncomment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectionfollow.php b/source/class/table/table_forum_collectionfollow.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectioninvite.php b/source/class/table/table_forum_collectioninvite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectionrelated.php b/source/class/table/table_forum_collectionrelated.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectionteamworker.php b/source/class/table/table_forum_collectionteamworker.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_collectionthread.php b/source/class/table/table_forum_collectionthread.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_creditslog.php b/source/class/table/table_forum_creditslog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_debate.php b/source/class/table/table_forum_debate.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_debatepost.php b/source/class/table/table_forum_debatepost.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_faq.php b/source/class/table/table_forum_faq.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_filter_post.php b/source/class/table/table_forum_filter_post.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_forum.php b/source/class/table/table_forum_forum.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_forum_threadtable.php b/source/class/table/table_forum_forum_threadtable.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_forumfield.php b/source/class/table/table_forum_forumfield.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_forumrecommend.php b/source/class/table/table_forum_forumrecommend.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_groupcreditslog.php b/source/class/table/table_forum_groupcreditslog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_groupfield.php b/source/class/table/table_forum_groupfield.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_groupinvite.php b/source/class/table/table_forum_groupinvite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_grouplevel.php b/source/class/table/table_forum_grouplevel.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_groupuser.php b/source/class/table/table_forum_groupuser.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_hotreply_member.php b/source/class/table/table_forum_hotreply_member.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_hotreply_number.php b/source/class/table/table_forum_hotreply_number.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_imagetype.php b/source/class/table/table_forum_imagetype.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_medal.php b/source/class/table/table_forum_medal.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_medallog.php b/source/class/table/table_forum_medallog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_memberrecommend.php b/source/class/table/table_forum_memberrecommend.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_moderator.php b/source/class/table/table_forum_moderator.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_modwork.php b/source/class/table/table_forum_modwork.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_newthread.php b/source/class/table/table_forum_newthread.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_onlinelist.php b/source/class/table/table_forum_onlinelist.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_optionvalue.php b/source/class/table/table_forum_optionvalue.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_order.php b/source/class/table/table_forum_order.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_poll.php b/source/class/table/table_forum_poll.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_polloption.php b/source/class/table/table_forum_polloption.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_polloption_image.php b/source/class/table/table_forum_polloption_image.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_pollvoter.php b/source/class/table/table_forum_pollvoter.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_post.php b/source/class/table/table_forum_post.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_post_location.php b/source/class/table/table_forum_post_location.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_post_tableid.php b/source/class/table/table_forum_post_tableid.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_postcache.php b/source/class/table/table_forum_postcache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_postcomment.php b/source/class/table/table_forum_postcomment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_poststick.php b/source/class/table/table_forum_poststick.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_promotion.php b/source/class/table/table_forum_promotion.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_ratelog.php b/source/class/table/table_forum_ratelog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_relatedthread.php b/source/class/table/table_forum_relatedthread.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_replycredit.php b/source/class/table/table_forum_replycredit.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_rsscache.php b/source/class/table/table_forum_rsscache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_sofa.php b/source/class/table/table_forum_sofa.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_spacecache.php b/source/class/table/table_forum_spacecache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_statlog.php b/source/class/table/table_forum_statlog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_thread.php b/source/class/table/table_forum_thread.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadaddviews.php b/source/class/table/table_forum_threadaddviews.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadcalendar.php b/source/class/table/table_forum_threadcalendar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadclass.php b/source/class/table/table_forum_threadclass.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadclosed.php b/source/class/table/table_forum_threadclosed.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threaddisablepos.php b/source/class/table/table_forum_threaddisablepos.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadhidelog.php b/source/class/table/table_forum_threadhidelog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadhot.php b/source/class/table/table_forum_threadhot.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadimage.php b/source/class/table/table_forum_threadimage.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadmod.php b/source/class/table/table_forum_threadmod.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadpartake.php b/source/class/table/table_forum_threadpartake.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadpreview.php b/source/class/table/table_forum_threadpreview.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadprofile.php b/source/class/table/table_forum_threadprofile.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadprofile_group.php b/source/class/table/table_forum_threadprofile_group.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadrush.php b/source/class/table/table_forum_threadrush.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_threadtype.php b/source/class/table/table_forum_threadtype.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_trade.php b/source/class/table/table_forum_trade.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_tradecomment.php b/source/class/table/table_forum_tradecomment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_tradelog.php b/source/class/table/table_forum_tradelog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_typeoption.php b/source/class/table/table_forum_typeoption.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_typeoptionvar.php b/source/class/table/table_forum_typeoptionvar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_typevar.php b/source/class/table/table_forum_typevar.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_forum_warning.php b/source/class/table/table_forum_warning.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_album.php b/source/class/table/table_home_album.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_album_category.php b/source/class/table/table_home_album_category.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_blacklist.php b/source/class/table/table_home_blacklist.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_blog.php b/source/class/table/table_home_blog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_blog_category.php b/source/class/table/table_home_blog_category.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_blogfield.php b/source/class/table/table_home_blogfield.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_class.php b/source/class/table/table_home_class.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_click.php b/source/class/table/table_home_click.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_clickuser.php b/source/class/table/table_home_clickuser.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_comment.php b/source/class/table/table_home_comment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_docomment.php b/source/class/table/table_home_docomment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_doing.php b/source/class/table/table_home_doing.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_favorite.php b/source/class/table/table_home_favorite.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_feed.php b/source/class/table/table_home_feed.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_follow.php b/source/class/table/table_home_follow.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_follow_feed.php b/source/class/table/table_home_follow_feed.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_friend.php b/source/class/table/table_home_friend.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_friend_request.php b/source/class/table/table_home_friend_request.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_friendlog.php b/source/class/table/table_home_friendlog.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_notification.php b/source/class/table/table_home_notification.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_pic.php b/source/class/table/table_home_pic.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_picfield.php b/source/class/table/table_home_picfield.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_poke.php b/source/class/table/table_home_poke.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_pokearchive.php b/source/class/table/table_home_pokearchive.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_share.php b/source/class/table/table_home_share.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_show.php b/source/class/table/table_home_show.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_specialuser.php b/source/class/table/table_home_specialuser.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_home_visitor.php b/source/class/table/table_home_visitor.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_article_content.php b/source/class/table/table_portal_article_content.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_article_count.php b/source/class/table/table_portal_article_count.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_article_related.php b/source/class/table/table_portal_article_related.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_article_title.php b/source/class/table/table_portal_article_title.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_article_trash.php b/source/class/table/table_portal_article_trash.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_attachment.php b/source/class/table/table_portal_attachment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_category.php b/source/class/table/table_portal_category.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_category_permission.php b/source/class/table/table_portal_category_permission.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_comment.php b/source/class/table/table_portal_comment.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_rsscache.php b/source/class/table/table_portal_rsscache.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_topic.php b/source/class/table/table_portal_topic.php old mode 100644 new mode 100755 diff --git a/source/class/table/table_portal_topic_pic.php b/source/class/table/table_portal_topic_pic.php old mode 100644 new mode 100755 diff --git a/source/class/task/index.htm b/source/class/task/index.htm old mode 100644 new mode 100755 diff --git a/source/class/task/task_avatar.php b/source/class/task/task_avatar.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_blog.php b/source/class/task/task_blog.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_connect_bind.php b/source/class/task/task_connect_bind.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_email.php b/source/class/task/task_email.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_friend.php b/source/class/task/task_friend.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_gift.php b/source/class/task/task_gift.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_member.php b/source/class/task/task_member.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_post.php b/source/class/task/task_post.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_profile.php b/source/class/task/task_profile.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_promotion.php b/source/class/task/task_promotion.php old mode 100644 new mode 100755 diff --git a/source/class/task/task_secmobile.php b/source/class/task/task_secmobile.php old mode 100644 new mode 100755 diff --git a/source/discuz_version.php b/source/discuz_version.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_admingroups.php b/source/function/cache/cache_admingroups.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_advs.php b/source/function/cache/cache_advs.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_albumcategory.php b/source/function/cache/cache_albumcategory.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_announcements.php b/source/function/cache/cache_announcements.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_announcements_forum.php b/source/function/cache/cache_announcements_forum.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_antitheft.php b/source/function/cache/cache_antitheft.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_attachtype.php b/source/function/cache/cache_attachtype.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_bbcodes.php b/source/function/cache/cache_bbcodes.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_bbcodes_display.php b/source/function/cache/cache_bbcodes_display.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_blogcategory.php b/source/function/cache/cache_blogcategory.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_censor.php b/source/function/cache/cache_censor.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_click.php b/source/function/cache/cache_click.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_connect_blacklist.php b/source/function/cache/cache_connect_blacklist.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_creditrule.php b/source/function/cache/cache_creditrule.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_custominfo.php b/source/function/cache/cache_custominfo.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_diytemplatename.php b/source/function/cache/cache_diytemplatename.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_domainwhitelist.php b/source/function/cache/cache_domainwhitelist.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_fields_connect_register.php b/source/function/cache/cache_fields_connect_register.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_fields_optional.php b/source/function/cache/cache_fields_optional.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_fields_register.php b/source/function/cache/cache_fields_register.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_fields_required.php b/source/function/cache/cache_fields_required.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_focus.php b/source/function/cache/cache_focus.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_forumlinks.php b/source/function/cache/cache_forumlinks.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_forumrecommend.php b/source/function/cache/cache_forumrecommend.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_forums.php b/source/function/cache/cache_forums.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_forumstick.php b/source/function/cache/cache_forumstick.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_founder.php b/source/function/cache/cache_founder.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_globalstick.php b/source/function/cache/cache_globalstick.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_groupicon.php b/source/function/cache/cache_groupicon.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_grouplevels.php b/source/function/cache/cache_grouplevels.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_groupreadaccess.php b/source/function/cache/cache_groupreadaccess.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_grouptype.php b/source/function/cache/cache_grouptype.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_heats.php b/source/function/cache/cache_heats.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_ipctrl.php b/source/function/cache/cache_ipctrl.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_magics.php b/source/function/cache/cache_magics.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_medals.php b/source/function/cache/cache_medals.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_modreasons.php b/source/function/cache/cache_modreasons.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_onlinelist.php b/source/function/cache/cache_onlinelist.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_plugin.php b/source/function/cache/cache_plugin.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_portalcategory.php b/source/function/cache/cache_portalcategory.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_postimg.php b/source/function/cache/cache_postimg.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_profilesetting.php b/source/function/cache/cache_profilesetting.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_relatedlink.php b/source/function/cache/cache_relatedlink.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_secqaa.php b/source/function/cache/cache_secqaa.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_setting.php b/source/function/cache/cache_setting.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_smileycodes.php b/source/function/cache/cache_smileycodes.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_smileytypes.php b/source/function/cache/cache_smileytypes.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_smilies.php b/source/function/cache/cache_smilies.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_smilies_js.php b/source/function/cache/cache_smilies_js.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_split.php b/source/function/cache/cache_split.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_stamps.php b/source/function/cache/cache_stamps.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_stamptypeid.php b/source/function/cache/cache_stamptypeid.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_styles.php b/source/function/cache/cache_styles.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_threadsorts.php b/source/function/cache/cache_threadsorts.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_updatediytemplate.php b/source/function/cache/cache_updatediytemplate.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_usergroups.php b/source/function/cache/cache_usergroups.php old mode 100644 new mode 100755 diff --git a/source/function/cache/cache_userstats.php b/source/function/cache/cache_userstats.php old mode 100644 new mode 100755 diff --git a/source/function/cache/index.htm b/source/function/cache/index.htm old mode 100644 new mode 100755 diff --git a/source/function/function_admincp.php b/source/function/function_admincp.php old mode 100644 new mode 100755 diff --git a/source/function/function_attachment.php b/source/function/function_attachment.php old mode 100644 new mode 100755 diff --git a/source/function/function_block.php b/source/function/function_block.php old mode 100644 new mode 100755 diff --git a/source/function/function_blog.php b/source/function/function_blog.php old mode 100644 new mode 100755 diff --git a/source/function/function_cache.php b/source/function/function_cache.php old mode 100644 new mode 100755 diff --git a/source/function/function_cloudaddons.php b/source/function/function_cloudaddons.php old mode 100644 new mode 100755 diff --git a/source/function/function_collection.php b/source/function/function_collection.php old mode 100644 new mode 100755 diff --git a/source/function/function_comment.php b/source/function/function_comment.php old mode 100644 new mode 100755 diff --git a/source/function/function_core.php b/source/function/function_core.php old mode 100644 new mode 100755 diff --git a/source/function/function_credit.php b/source/function/function_credit.php old mode 100644 new mode 100755 diff --git a/source/function/function_delete.php b/source/function/function_delete.php old mode 100644 new mode 100755 diff --git a/source/function/function_discuzcode.php b/source/function/function_discuzcode.php old mode 100644 new mode 100755 diff --git a/source/function/function_domain.php b/source/function/function_domain.php old mode 100644 new mode 100755 diff --git a/source/function/function_ec_credit.php b/source/function/function_ec_credit.php old mode 100644 new mode 100755 diff --git a/source/function/function_editor.php b/source/function/function_editor.php old mode 100644 new mode 100755 diff --git a/source/function/function_exif.php b/source/function/function_exif.php old mode 100644 new mode 100755 diff --git a/source/function/function_feed.php b/source/function/function_feed.php old mode 100644 new mode 100755 diff --git a/source/function/function_filesock.php b/source/function/function_filesock.php old mode 100644 new mode 100755 diff --git a/source/function/function_followcode.php b/source/function/function_followcode.php old mode 100644 new mode 100755 diff --git a/source/function/function_forum.php b/source/function/function_forum.php old mode 100644 new mode 100755 diff --git a/source/function/function_forumlist.php b/source/function/function_forumlist.php old mode 100644 new mode 100755 diff --git a/source/function/function_friend.php b/source/function/function_friend.php old mode 100644 new mode 100755 diff --git a/source/function/function_group.php b/source/function/function_group.php old mode 100644 new mode 100755 diff --git a/source/function/function_grouplog.php b/source/function/function_grouplog.php old mode 100644 new mode 100755 diff --git a/source/function/function_home.php b/source/function/function_home.php old mode 100644 new mode 100755 diff --git a/source/function/function_importdata.php b/source/function/function_importdata.php old mode 100644 new mode 100755 diff --git a/source/function/function_magic.php b/source/function/function_magic.php old mode 100644 new mode 100755 diff --git a/source/function/function_mail.php b/source/function/function_mail.php old mode 100644 new mode 100755 diff --git a/source/function/function_member.php b/source/function/function_member.php old mode 100644 new mode 100755 diff --git a/source/function/function_message.php b/source/function/function_message.php old mode 100644 new mode 100755 diff --git a/source/function/function_misc.php b/source/function/function_misc.php old mode 100644 new mode 100755 diff --git a/source/function/function_plugin.php b/source/function/function_plugin.php old mode 100644 new mode 100755 diff --git a/source/function/function_portal.php b/source/function/function_portal.php old mode 100644 new mode 100755 diff --git a/source/function/function_portalcp.php b/source/function/function_portalcp.php old mode 100644 new mode 100755 diff --git a/source/function/function_post.php b/source/function/function_post.php old mode 100644 new mode 100755 diff --git a/source/function/function_preg.php b/source/function/function_preg.php old mode 100644 new mode 100755 diff --git a/source/function/function_profile.php b/source/function/function_profile.php old mode 100644 new mode 100755 diff --git a/source/function/function_search.php b/source/function/function_search.php old mode 100644 new mode 100755 diff --git a/source/function/function_searchindex.php b/source/function/function_searchindex.php old mode 100644 new mode 100755 diff --git a/source/function/function_share.php b/source/function/function_share.php old mode 100644 new mode 100755 diff --git a/source/function/function_space.php b/source/function/function_space.php old mode 100644 new mode 100755 diff --git a/source/function/function_spacecp.php b/source/function/function_spacecp.php old mode 100644 new mode 100755 diff --git a/source/function/function_stat.php b/source/function/function_stat.php old mode 100644 new mode 100755 diff --git a/source/function/function_threadsort.php b/source/function/function_threadsort.php old mode 100644 new mode 100755 diff --git a/source/function/function_trade.php b/source/function/function_trade.php old mode 100644 new mode 100755 diff --git a/source/function/function_upload.php b/source/function/function_upload.php old mode 100644 new mode 100755 diff --git a/source/function/index.htm b/source/function/index.htm old mode 100644 new mode 100755 diff --git a/source/function/media/index.htm b/source/function/media/index.htm old mode 100644 new mode 100755 diff --git a/source/function/media/media_56.php b/source/function/media/media_56.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_acfun.php b/source/function/media/media_acfun.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_bilibili.php b/source/function/media/media_bilibili.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_ixigua.php b/source/function/media/media_ixigua.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_ku6.php b/source/function/media/media_ku6.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_mgtv.php b/source/function/media/media_mgtv.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_qq.php b/source/function/media/media_qq.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_sina.php b/source/function/media/media_sina.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_sohu.php b/source/function/media/media_sohu.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_tudou.php b/source/function/media/media_tudou.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_wasu.php b/source/function/media/media_wasu.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_youku.php b/source/function/media/media_youku.php old mode 100644 new mode 100755 diff --git a/source/function/media/media_youtube.php b/source/function/media/media_youtube.php old mode 100644 new mode 100755 diff --git a/source/include/collection/collection_comment.php b/source/include/collection/collection_comment.php old mode 100644 new mode 100755 diff --git a/source/include/collection/collection_edit.php b/source/include/collection/collection_edit.php old mode 100644 new mode 100755 diff --git a/source/include/collection/collection_follow.php b/source/include/collection/collection_follow.php old mode 100644 new mode 100755 diff --git a/source/include/collection/collection_index.php b/source/include/collection/collection_index.php old mode 100644 new mode 100755 diff --git a/source/include/collection/collection_view.php b/source/include/collection/collection_view.php old mode 100644 new mode 100755 diff --git a/source/include/collection/index.htm b/source/include/collection/index.htm old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_announcement_daily.php b/source/include/cron/cron_announcement_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_cleanfeed.php b/source/include/cron/cron_cleanfeed.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_cleannotification.php b/source/include/cron/cron_cleannotification.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_cleantrace.php b/source/include/cron/cron_cleantrace.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_cleanup_daily.php b/source/include/cron/cron_cleanup_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_cleanup_monthly.php b/source/include/cron/cron_cleanup_monthly.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_follow_daily.php b/source/include/cron/cron_follow_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_magic_daily.php b/source/include/cron/cron_magic_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_medal_daily.php b/source/include/cron/cron_medal_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_member_optimize_daily.php b/source/include/cron/cron_member_optimize_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_onlinetime_monthly.php b/source/include/cron/cron_onlinetime_monthly.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_promotion_hourly.php b/source/include/cron/cron_promotion_hourly.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_publish_halfhourly.php b/source/include/cron/cron_publish_halfhourly.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_secqaa_daily.php b/source/include/cron/cron_secqaa_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_security_cleanup_lastpost.php b/source/include/cron/cron_security_cleanup_lastpost.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_smslog_daily.php b/source/include/cron/cron_smslog_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_tag_daily.php b/source/include/cron/cron_tag_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_threadexpiry_hourly.php b/source/include/cron/cron_threadexpiry_hourly.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_todayheats_daily.php b/source/include/cron/cron_todayheats_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_todaypost_daily.php b/source/include/cron/cron_todaypost_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/cron_todayviews_daily.php b/source/include/cron/cron_todayviews_daily.php old mode 100644 new mode 100755 diff --git a/source/include/cron/index.htm b/source/include/cron/index.htm old mode 100644 new mode 100755 diff --git a/source/include/index.htm b/source/include/index.htm old mode 100644 new mode 100755 diff --git a/source/include/misc/index.htm b/source/include/misc/index.htm old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ajax.php b/source/include/misc/misc_ajax.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_category.php b/source/include/misc/misc_category.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_emailcheck.php b/source/include/misc/misc_emailcheck.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_forumselect.php b/source/include/misc/misc_forumselect.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_inputpwd.php b/source/include/misc/misc_inputpwd.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_promotion.php b/source/include/misc/misc_promotion.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_activity.php b/source/include/misc/misc_ranklist_activity.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_blog.php b/source/include/misc/misc_ranklist_blog.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_forum.php b/source/include/misc/misc_ranklist_forum.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_group.php b/source/include/misc/misc_ranklist_group.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_index.php b/source/include/misc/misc_ranklist_index.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_member.php b/source/include/misc/misc_ranklist_member.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_picture.php b/source/include/misc/misc_ranklist_picture.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_poll.php b/source/include/misc/misc_ranklist_poll.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_ranklist_thread.php b/source/include/misc/misc_ranklist_thread.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_security.php b/source/include/misc/misc_security.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_sendmail.php b/source/include/misc/misc_sendmail.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_stat.php b/source/include/misc/misc_stat.php old mode 100644 new mode 100755 diff --git a/source/include/misc/misc_swfupload.php b/source/include/misc/misc_swfupload.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/index.htm b/source/include/modcp/index.htm old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_announcement.php b/source/include/modcp/modcp_announcement.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_forum.php b/source/include/modcp/modcp_forum.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_forumaccess.php b/source/include/modcp/modcp_forumaccess.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_home.php b/source/include/modcp/modcp_home.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_log.php b/source/include/modcp/modcp_log.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_login.php b/source/include/modcp/modcp_login.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_member.php b/source/include/modcp/modcp_member.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_moderate.php b/source/include/modcp/modcp_moderate.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_noperm.php b/source/include/modcp/modcp_noperm.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_plugin.php b/source/include/modcp/modcp_plugin.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_recyclebin.php b/source/include/modcp/modcp_recyclebin.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_recyclebinpost.php b/source/include/modcp/modcp_recyclebinpost.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_report.php b/source/include/modcp/modcp_report.php old mode 100644 new mode 100755 diff --git a/source/include/modcp/modcp_thread.php b/source/include/modcp/modcp_thread.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/index.htm b/source/include/portalcp/index.htm old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_article.php b/source/include/portalcp/portalcp_article.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_block.php b/source/include/portalcp/portalcp_block.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_category.php b/source/include/portalcp/portalcp_category.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_comment.php b/source/include/portalcp/portalcp_comment.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_diy.php b/source/include/portalcp/portalcp_diy.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_index.php b/source/include/portalcp/portalcp_index.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_plugin.php b/source/include/portalcp/portalcp_plugin.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_portalblock.php b/source/include/portalcp/portalcp_portalblock.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_related.php b/source/include/portalcp/portalcp_related.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_topic.php b/source/include/portalcp/portalcp_topic.php old mode 100644 new mode 100755 diff --git a/source/include/portalcp/portalcp_upload.php b/source/include/portalcp/portalcp_upload.php old mode 100644 new mode 100755 diff --git a/source/include/post/index.htm b/source/include/post/index.htm old mode 100644 new mode 100755 diff --git a/source/include/post/post_albumphoto.php b/source/include/post/post_albumphoto.php old mode 100644 new mode 100755 diff --git a/source/include/post/post_editpost.php b/source/include/post/post_editpost.php old mode 100644 new mode 100755 diff --git a/source/include/post/post_newreply.php b/source/include/post/post_newreply.php old mode 100644 new mode 100755 diff --git a/source/include/post/post_newthread.php b/source/include/post/post_newthread.php old mode 100644 new mode 100755 diff --git a/source/include/post/post_threadsorts.php b/source/include/post/post_threadsorts.php old mode 100644 new mode 100755 diff --git a/source/include/space/index.htm b/source/include/space/index.htm old mode 100644 new mode 100755 diff --git a/source/include/space/space_activity.php b/source/include/space/space_activity.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_album.php b/source/include/space/space_album.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_blog.php b/source/include/space/space_blog.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_debate.php b/source/include/space/space_debate.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_doing.php b/source/include/space/space_doing.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_favorite.php b/source/include/space/space_favorite.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_friend.php b/source/include/space/space_friend.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_home.php b/source/include/space/space_home.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_index.php b/source/include/space/space_index.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_notice.php b/source/include/space/space_notice.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_plugin.php b/source/include/space/space_plugin.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_pm.php b/source/include/space/space_pm.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_poll.php b/source/include/space/space_poll.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_profile.php b/source/include/space/space_profile.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_reward.php b/source/include/space/space_reward.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_share.php b/source/include/space/space_share.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_thread.php b/source/include/space/space_thread.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_trade.php b/source/include/space/space_trade.php old mode 100644 new mode 100755 diff --git a/source/include/space/space_wall.php b/source/include/space/space_wall.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/index.htm b/source/include/spacecp/index.htm old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_album.php b/source/include/spacecp/spacecp_album.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_avatar.php b/source/include/spacecp/spacecp_avatar.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_blog.php b/source/include/spacecp/spacecp_blog.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_class.php b/source/include/spacecp/spacecp_class.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_click.php b/source/include/spacecp/spacecp_click.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_comment.php b/source/include/spacecp/spacecp_comment.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_common.php b/source/include/spacecp/spacecp_common.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_credit.php b/source/include/spacecp/spacecp_credit.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_credit_base.php b/source/include/spacecp/spacecp_credit_base.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_credit_log.php b/source/include/spacecp/spacecp_credit_log.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_doing.php b/source/include/spacecp/spacecp_doing.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_domain.php b/source/include/spacecp/spacecp_domain.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_eccredit.php b/source/include/spacecp/spacecp_eccredit.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_favorite.php b/source/include/spacecp/spacecp_favorite.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_feed.php b/source/include/spacecp/spacecp_feed.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_follow.php b/source/include/spacecp/spacecp_follow.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_friend.php b/source/include/spacecp/spacecp_friend.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_index.php b/source/include/spacecp/spacecp_index.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_invite.php b/source/include/spacecp/spacecp_invite.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_magic.php b/source/include/spacecp/spacecp_magic.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_payment.php b/source/include/spacecp/spacecp_payment.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_payment_order.php b/source/include/spacecp/spacecp_payment_order.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_payment_pay.php b/source/include/spacecp/spacecp_payment_pay.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_plugin.php b/source/include/spacecp/spacecp_plugin.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_pm.php b/source/include/spacecp/spacecp_pm.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_poke.php b/source/include/spacecp/spacecp_poke.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_privacy.php b/source/include/spacecp/spacecp_privacy.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_profile.php b/source/include/spacecp/spacecp_profile.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_profilevalidate.php b/source/include/spacecp/spacecp_profilevalidate.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_promotion.php b/source/include/spacecp/spacecp_promotion.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_search.php b/source/include/spacecp/spacecp_search.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_sendmail.php b/source/include/spacecp/spacecp_sendmail.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_share.php b/source/include/spacecp/spacecp_share.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_top.php b/source/include/spacecp/spacecp_top.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_upload.php b/source/include/spacecp/spacecp_upload.php old mode 100644 new mode 100755 diff --git a/source/include/spacecp/spacecp_usergroup.php b/source/include/spacecp/spacecp_usergroup.php old mode 100644 new mode 100755 diff --git a/source/include/table/big5-unicode.table b/source/include/table/big5-unicode.table old mode 100644 new mode 100755 diff --git a/source/include/table/gb-big5.table b/source/include/table/gb-big5.table old mode 100644 new mode 100755 diff --git a/source/include/table/gb-unicode.table b/source/include/table/gb-unicode.table old mode 100644 new mode 100755 diff --git a/source/include/table/index.htm b/source/include/table/index.htm old mode 100644 new mode 100755 diff --git a/source/include/thread/index.htm b/source/include/thread/index.htm old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_activity.php b/source/include/thread/thread_activity.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_album.php b/source/include/thread/thread_album.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_debate.php b/source/include/thread/thread_debate.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_pay.php b/source/include/thread/thread_pay.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_poll.php b/source/include/thread/thread_poll.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_printable.php b/source/include/thread/thread_printable.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_reward.php b/source/include/thread/thread_reward.php old mode 100644 new mode 100755 diff --git a/source/include/thread/thread_trade.php b/source/include/thread/thread_trade.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/index.htm b/source/include/topicadmin/index.htm old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_banpost.php b/source/include/topicadmin/topicadmin_banpost.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_copy.php b/source/include/topicadmin/topicadmin_copy.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_delcomment.php b/source/include/topicadmin/topicadmin_delcomment.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_delpost.php b/source/include/topicadmin/topicadmin_delpost.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_getip.php b/source/include/topicadmin/topicadmin_getip.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_live.php b/source/include/topicadmin/topicadmin_live.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_merge.php b/source/include/topicadmin/topicadmin_merge.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_moderate.php b/source/include/topicadmin/topicadmin_moderate.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_refund.php b/source/include/topicadmin/topicadmin_refund.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_removereward.php b/source/include/topicadmin/topicadmin_removereward.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_repair.php b/source/include/topicadmin/topicadmin_repair.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_restore.php b/source/include/topicadmin/topicadmin_restore.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_split.php b/source/include/topicadmin/topicadmin_split.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_stamp.php b/source/include/topicadmin/topicadmin_stamp.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_stamplist.php b/source/include/topicadmin/topicadmin_stamplist.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_stickreply.php b/source/include/topicadmin/topicadmin_stickreply.php old mode 100644 new mode 100755 diff --git a/source/include/topicadmin/topicadmin_warn.php b/source/include/topicadmin/topicadmin_warn.php old mode 100644 new mode 100755 diff --git a/source/index.htm b/source/index.htm old mode 100644 new mode 100755 diff --git a/source/language/adv/index.htm b/source/language/adv/index.htm old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_article.php b/source/language/adv/lang_article.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_articlelist.php b/source/language/adv/lang_articlelist.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_blog.php b/source/language/adv/lang_blog.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_cornerbanner.php b/source/language/adv/lang_cornerbanner.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_couplebanner.php b/source/language/adv/lang_couplebanner.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_custom.php b/source/language/adv/lang_custom.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_feed.php b/source/language/adv/lang_feed.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_float.php b/source/language/adv/lang_float.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_footerbanner.php b/source/language/adv/lang_footerbanner.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_headerbanner.php b/source/language/adv/lang_headerbanner.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_intercat.php b/source/language/adv/lang_intercat.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_interthread.php b/source/language/adv/lang_interthread.php old mode 100644 new mode 100755 index 62ee86c..9e489f0 --- a/source/language/adv/lang_interthread.php +++ b/source/language/adv/lang_interthread.php @@ -14,13 +14,13 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'interthread_name' => '论坛/圈子 帖间通栏广告', - 'interthread_desc' => '展现方式: 帖间通栏广告显示于主题帖和第一个回帖之间,可使用 468x60 或其他尺寸图片和 Flash 的形式。
    当前页面有多个帖间通栏广告时,系统会随机选取其中之一显示。价值分析: 由于能够将主题与回帖分开,广告尺寸大而且不影响文章内容,因此不会招致文章作者及访问者反感,适合在帖内进行商业宣传或品牌推广。', + 'interthread_desc' => '展现方式: 帖间通栏广告显示于主题帖和第一个回帖之间,可使用 468x60 或其他尺寸图片和 Flash 的形式。
    当前页面有多个帖间通栏广告时,系统会随机选取其中之一显示。价值分析: 由于能够将主题与回帖分开,广告尺寸大而且不影响帖子内容,因此不会招致帖子作者及访问者反感,适合在帖内进行商业宣传或品牌推广。', 'interthread_fids' => '投放版块', 'interthread_fids_comment' => '设置广告投放的论坛版块,当广告投放范围中包含“论坛”时有效', 'interthread_groups' => '投放圈子分类', 'interthread_groups_comment' => '设置广告投放的圈子分类,当广告投放范围中包含“圈子”时有效', 'interthread_pnumber' => '广告显示楼层', - 'interthread_pnumber_comment' => '选项 #1 #2 #3 ... 表示文章楼层,可以按住 CTRL 多选,默认只投放 1 楼', + 'interthread_pnumber_comment' => '选项 #1 #2 #3 ... 表示帖子楼层,可以按住 CTRL 多选,默认只投放 1 楼', ); ?> \ No newline at end of file diff --git a/source/language/adv/lang_search.php b/source/language/adv/lang_search.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_subnavbanner.php b/source/language/adv/lang_subnavbanner.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_text.php b/source/language/adv/lang_text.php old mode 100644 new mode 100755 diff --git a/source/language/adv/lang_thread.php b/source/language/adv/lang_thread.php old mode 100644 new mode 100755 index 9126da1..fe66698 --- a/source/language/adv/lang_thread.php +++ b/source/language/adv/lang_thread.php @@ -14,18 +14,18 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'thread_name' => '论坛/圈子 帖内广告', - 'thread_desc' => '展现方式: 帖内广告显示于文章内容的上方、下方或右方,文章内容的上方和下方通常使用文字的形式,文章内容右方通常使用图片的形式。当前页面有多个帖内广告时,系统会从中抽取与每页帖数相等的条目进行随机显示。您可以在 全局设置中的其他设置中修改每帖显示的广告数量。
    价值分析: 由于文章是论坛最核心的组成部分,嵌入文章内容内部的帖内广告,便可在用户浏览文章内容时自然的被接受,加上随机播放的特性,适合于特定内容的有效推广,也可用于论坛自身的宣传和公告之用。建议设置多条帖内广告以实现广告内容的差异化,从而吸引更多访问者的注意力。', + 'thread_desc' => '展现方式: 帖内广告显示于帖子内容的上方、下方或右方,帖子内容的上方和下方通常使用文字的形式,帖子内容右方通常使用图片的形式。当前页面有多个帖内广告时,系统会从中抽取与每页帖数相等的条目进行随机显示。您可以在 全局设置中的其他设置中修改每帖显示的广告数量。
    价值分析: 由于帖子是论坛最核心的组成部分,嵌入帖子内容内部的帖内广告,便可在用户浏览帖子内容时自然的被接受,加上随机播放的特性,适合于特定内容的有效推广,也可用于论坛自身的宣传和公告之用。建议设置多条帖内广告以实现广告内容的差异化,从而吸引更多访问者的注意力。', 'thread_fids' => '投放版块', 'thread_fids_comment' => '设置广告投放的论坛版块,当广告投放范围中包含“论坛”时有效', 'thread_groups' => '投放圈子分类', 'thread_groups_comment' => '设置广告投放的圈子分类,当广告投放范围中包含“圈子”时有效', 'thread_position' => '投放位置', - 'thread_position_comment' => '文章内容上方和下方的广告适合使用文字形式,而文章右侧广告适合使用图片或 Flash 形式,也可以同时显示多条文字广告', - 'thread_position_bottom' => '文章下方', - 'thread_position_top' => '文章上方', - 'thread_position_right' => '文章右侧', + 'thread_position_comment' => '帖子内容上方和下方的广告适合使用文字形式,而帖子右侧广告适合使用图片或 Flash 形式,也可以同时显示多条文字广告', + 'thread_position_bottom' => '帖子下方', + 'thread_position_top' => '帖子上方', + 'thread_position_right' => '帖子右侧', 'thread_pnumber' => '广告显示楼层', - 'thread_pnumber_comment' => '选项 #1 #2 #3 ... 表示文章楼层,可以按住 CTRL 多选', + 'thread_pnumber_comment' => '选项 #1 #2 #3 ... 表示帖子楼层,可以按住 CTRL 多选', 'thread_pnumber_all' => '全部', ); diff --git a/source/language/adv/lang_threadlist.php b/source/language/adv/lang_threadlist.php old mode 100644 new mode 100755 index 5809671..343200e --- a/source/language/adv/lang_threadlist.php +++ b/source/language/adv/lang_threadlist.php @@ -13,8 +13,8 @@ if(!defined('IN_DISCUZ')) { $lang = array ( - 'threadlist_name' => '论坛/圈子 文章列表帖位广告', - 'threadlist_desc' => '展现方式: 帖位广告显示于文章列表页第一页的文章位置,可以模拟出一个具有广告意义的文章地址,吸引访问者的注意力。', + 'threadlist_name' => '论坛/圈子 帖子列表帖位广告', + 'threadlist_desc' => '展现方式: 帖位广告显示于帖子列表页第一页的帖子位置,可以模拟出一个具有广告意义的帖子地址,吸引访问者的注意力。', 'threadlist_fids' => '投放版块', 'threadlist_fids_comment' => '设置广告投放的论坛版块,当广告投放范围中包含“论坛”时有效', 'threadlist_groups' => '投放圈子分类', diff --git a/source/language/block/index.htm b/source/language/block/index.htm old mode 100644 new mode 100755 diff --git a/source/language/block/lang_activitylist.php b/source/language/block/lang_activitylist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_adv.php b/source/language/block/lang_adv.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_albumlist.php b/source/language/block/lang_albumlist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_announcement.php b/source/language/block/lang_announcement.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_articlelist.php b/source/language/block/lang_articlelist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_attachmentlist.php b/source/language/block/lang_attachmentlist.php old mode 100644 new mode 100755 index 22b1c6b..4dcaa66 --- a/source/language/block/lang_attachmentlist.php +++ b/source/language/block/lang_attachmentlist.php @@ -24,9 +24,9 @@ $lang = array 'attachmentlist_items' => '显示数据条数', 'attachmentlist_items_comment' => '设置一次显示的图片主题条目数,请设置为大于 0 的整数', 'attachmentlist_titlelength' => '标题长度', - 'attachmentlist_titlelength_comment' => '设置当附件名称/文章标题显示的最大长度', + 'attachmentlist_titlelength_comment' => '设置当附件名称/帖子标题显示的最大长度', 'attachmentlist_summarylength' => '内容长度', - 'attachmentlist_summarylength_comment' => '设置附件介绍/文章内容显示的最大长度', + 'attachmentlist_summarylength_comment' => '设置附件介绍/帖子内容显示的最大长度', 'attachmentlist_maxwidth' => '图片最大宽度(像素)', 'attachmentlist_maxwidth_comment' => '设置是否自动缩小或放大图片的尺寸到本设定的宽度,0 为不自动缩放', 'attachmentlist_maxheight' => '图片最大高度(像素)', diff --git a/source/language/block/lang_banner.php b/source/language/block/lang_banner.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_blank.php b/source/language/block/lang_blank.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_bloglist.php b/source/language/block/lang_bloglist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_doinglist.php b/source/language/block/lang_doinglist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_forumlist.php b/source/language/block/lang_forumlist.php old mode 100644 new mode 100755 index 3808273..45565d7 --- a/source/language/block/lang_forumlist.php +++ b/source/language/block/lang_forumlist.php @@ -26,7 +26,7 @@ $lang = array 'forumlist_orderby_displayorder' => '按显示顺序顺序排序', 'forumlist_orderby_threads' => '按主题数倒序排序', 'forumlist_orderby_todayposts' => '按今日发帖数倒序排序', - 'forumlist_orderby_posts' => '按文章数倒序排序', + 'forumlist_orderby_posts' => '按帖子数倒序排序', ); ?> \ No newline at end of file diff --git a/source/language/block/lang_forumstat.php b/source/language/block/lang_forumstat.php old mode 100644 new mode 100755 index dfb6c1a..66424e4 --- a/source/language/block/lang_forumstat.php +++ b/source/language/block/lang_forumstat.php @@ -25,10 +25,10 @@ $lang = array 'forumstat_threads_text' => '主题数统计提示文字', 'forumstat_threads_default' => '主题数:', - 'forumstat_posts_allow' => '显示文章数统计', - 'forumstat_posts_order' => '文章数统计显示顺序', - 'forumstat_posts_text' => '文章数统计提示文字', - 'forumstat_posts_default' => '文章数:', + 'forumstat_posts_allow' => '显示帖子数统计', + 'forumstat_posts_order' => '帖子数统计显示顺序', + 'forumstat_posts_text' => '帖子数统计提示文字', + 'forumstat_posts_default' => '帖子数:', 'forumstat_members_allow' => '显示用户数统计', 'forumstat_members_order' => '用户数统计显示顺序', diff --git a/source/language/block/lang_forumtree.php b/source/language/block/lang_forumtree.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_friendlink.php b/source/language/block/lang_friendlink.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_google.php b/source/language/block/lang_google.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_groupactivity.php b/source/language/block/lang_groupactivity.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_groupattachment.php b/source/language/block/lang_groupattachment.php old mode 100644 new mode 100755 index f4068b0..5f62df5 --- a/source/language/block/lang_groupattachment.php +++ b/source/language/block/lang_groupattachment.php @@ -26,9 +26,9 @@ $lang = array 'groupattachment_items' => '显示数据条数', 'groupattachment_items_comment' => '设置一次显示的图片主题条目数,请设置为大于 0 的整数', 'groupattachment_titlelength' => '标题长度', - 'groupattachment_titlelength_comment' => '设置当附件名称/文章标题显示的最大长度', + 'groupattachment_titlelength_comment' => '设置当附件名称/帖子标题显示的最大长度', 'groupattachment_summarylength' => '内容长度', - 'groupattachment_summarylength_comment' => '设置附件介绍/文章内容显示的最大长度', + 'groupattachment_summarylength_comment' => '设置附件介绍/帖子内容显示的最大长度', 'groupattachment_maxwidth' => '图片最大宽度(像素)', 'groupattachment_maxwidth_comment' => '设置是否自动缩小或放大图片的尺寸到本设定的宽度,0 为不自动缩放', 'groupattachment_maxheight' => '图片最大高度(像素)', diff --git a/source/language/block/lang_grouplist.php b/source/language/block/lang_grouplist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_groupthread.php b/source/language/block/lang_groupthread.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_grouptrade.php b/source/language/block/lang_grouptrade.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_houselist.php b/source/language/block/lang_houselist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_line.php b/source/language/block/lang_line.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_memberlist.php b/source/language/block/lang_memberlist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_piclist.php b/source/language/block/lang_piclist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_polllist.php b/source/language/block/lang_polllist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_portalcategory.php b/source/language/block/lang_portalcategory.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_sortlist.php b/source/language/block/lang_sortlist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_stat.php b/source/language/block/lang_stat.php old mode 100644 new mode 100755 index f4880ef..dd196a7 --- a/source/language/block/lang_stat.php +++ b/source/language/block/lang_stat.php @@ -31,7 +31,7 @@ $lang = array 'stat_edit_showtitle' => '显示名称', 'stat_edit_showtitle_detail' => '您可以编辑以下对应项来自定义各统计项的显示名称', - 'stat_posts' => '文章', + 'stat_posts' => '帖子', 'stat_groups' => '圈子', 'stat_members' => '会员', 'stat_groupnewposts' => '圈子今日发帖', diff --git a/source/language/block/lang_threadlist.php b/source/language/block/lang_threadlist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_topiclist.php b/source/language/block/lang_topiclist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_tradelist.php b/source/language/block/lang_tradelist.php old mode 100644 new mode 100755 diff --git a/source/language/block/lang_vedio.php b/source/language/block/lang_vedio.php old mode 100644 new mode 100755 diff --git a/source/language/email/index.htm b/source/language/email/index.htm old mode 100644 new mode 100755 diff --git a/source/language/email/lang_template.php b/source/language/email/lang_template.php old mode 100644 new mode 100755 diff --git a/source/language/forum/index.htm b/source/language/forum/index.htm old mode 100644 new mode 100755 diff --git a/source/language/forum/lang_archiver.php b/source/language/forum/lang_archiver.php old mode 100644 new mode 100755 diff --git a/source/language/forum/lang_dz_feed.php b/source/language/forum/lang_dz_feed.php old mode 100644 new mode 100755 diff --git a/source/language/forum/lang_misc.php b/source/language/forum/lang_misc.php old mode 100644 new mode 100755 index 26968c9..3cec763 --- a/source/language/forum/lang_misc.php +++ b/source/language/forum/lang_misc.php @@ -37,7 +37,7 @@ $lang = array 'post_editnobbcode' => "[ 本帖最后由 {editor} 于 {edittime} 编辑 ]\n\n", 'post_editnobbcode_regexp' => '/^\[ 本帖最后由 .*? 于 .*? 编辑 \][\r\n][\r\n]/s', 'post_reply' => '回复', - 'post_thread' => '的文章', + 'post_thread' => '的帖子', 'price' => '售价', 'pay_view' => '记录', @@ -168,7 +168,7 @@ $lang = array 'pm_to' => '收件人', 'pm_date' => '日期', - 'share_message' => '您好!我在 {$_G[\'setting\'][\'bbname\']} 看到了这篇文章,认为很有价值,特推荐给您。\\n\\n$thread[\'subject\']\\n地址 [url={$threadurl}]{$threadurl}[/url]\\n\\n希望您能喜欢', + 'share_message' => '您好!我在 {$_G[\'setting\'][\'bbname\']} 看到了这篇帖子,认为很有价值,特推荐给您。\\n\\n$thread[\'subject\']\\n地址 [url={$threadurl}]{$threadurl}[/url]\\n\\n希望您能喜欢', 'week_0' => '星期日', 'week_1' => '星期一', @@ -235,12 +235,12 @@ $lang = array 'perms_allowremovereward' => '移除悬赏', 'perms_alloweditactivity' => '管理活动', 'perms_allowedittrade' => '管理商品', - 'perms_alloweditpost' => '编辑文章', - 'perms_allowwarnpost' => '警告文章', - 'perms_allowbanpost' => '屏蔽文章', - 'perms_allowdelpost' => '删除文章', + 'perms_alloweditpost' => '编辑帖子', + 'perms_allowwarnpost' => '警告帖子', + 'perms_allowbanpost' => '屏蔽帖子', + 'perms_allowdelpost' => '删除帖子', 'perms_allowviewreport' => '查看用户报告', - 'perms_allowmodpost' => '审核文章', + 'perms_allowmodpost' => '审核帖子', 'perms_allowmoduser' => '审核用户', 'perms_allowbanuser' => '禁止用户', 'perms_allowbanip' => '禁止 IP', diff --git a/source/language/forum/lang_modaction.php b/source/language/forum/lang_modaction.php old mode 100644 new mode 100755 index c7693af..46816f4 --- a/source/language/forum/lang_modaction.php +++ b/source/language/forum/lang_modaction.php @@ -64,7 +64,7 @@ $lang = array 'PTS' => '推送主题', 'RFS' => '解除推送', 'RMR' => '取消悬赏', - 'BNP' => '屏蔽文章', + 'BNP' => '屏蔽帖子', 'UBN' => '解除屏蔽', 'REC' => '推荐', diff --git a/source/language/forum/lang_swfupload.php b/source/language/forum/lang_swfupload.php old mode 100644 new mode 100755 diff --git a/source/language/forum/lang_template.php b/source/language/forum/lang_template.php old mode 100644 new mode 100755 index d7646ae..3aa20ba --- a/source/language/forum/lang_template.php +++ b/source/language/forum/lang_template.php @@ -224,10 +224,10 @@ $lang = array ( 'index_invisibles' => '隐身', 'index_members' => '会员', 'index_mostonlines' => '最高记录是', - 'index_posts' => '文章', + 'index_posts' => '帖子', 'index_today' => '今日', 'index_yesterday' => '昨日', - 'my_posts' => '我的文章', + 'my_posts' => '我的帖子', 'never' => '从未', 'on' => '于', 'online_only_guests' => '当前只有游客或隐身会员在线', @@ -262,11 +262,11 @@ $lang = array ( 'common_upload' => '普通上传', 'create_new_album' => '创建新相册', 'credits_policy' => '积分说明', - 'e_attach_insert' => '点击附件文件名添加到文章内容中', + 'e_attach_insert' => '点击附件文件名添加到帖子内容中', 'e_img_albumlist' => '相册图片', 'e_img_attach' => '上传图片', 'e_img_height' => '高(可选)', - 'e_img_insertphoto' => '点击图片添加到文章内容中', + 'e_img_insertphoto' => '点击图片添加到帖子内容中', 'e_img_inserturl' => '请输入图片地址', 'e_img_width' => '宽(可选)', 'e_img_www' => '网络图片', @@ -297,9 +297,9 @@ $lang = array ( 'forum_live_fastreply_notice' => '#在这里快速回复#', 'forum_live_post' => '发表', 'forum_live_nocontent_error' => '抱歉,您尚未输入内容', - 'forum_live_nolength_error' => '\'您的文章长度不符合要求。\n\n当前长度: \' + mb_strlen(theform.message.value) + \' 字节\n系统限制: \' + postminchars + \' 到 \' + postmaxchars + \' 字节\'', + 'forum_live_nolength_error' => '\'您的帖子长度不符合要求。\n\n当前长度: \' + mb_strlen(theform.message.value) + \' 字节\n系统限制: \' + postminchars + \' 到 \' + postmaxchars + \' 字节\'', 'modcp' => '管理面板', - 'post_newthread' => '发表文章', + 'post_newthread' => '发表帖子', 'post_newthreadactivity' => '发起活动', 'post_newthreaddebate' => '发起辩论', 'post_newthreadpoll' => '发起投票', @@ -311,7 +311,7 @@ $lang = array ( 'send_posts' => '发新帖', 'their' => '所属分类', 'threads_all' => '全部主题', - 'viewd_threads' => '浏览过的文章', + 'viewd_threads' => '浏览过的帖子', 'viewed_forums' => '浏览过的版块', 'click_to_show_reason' => '点击查看原因', 'connect_fill_profile_to_post' => '您需要 完善账号信息绑定已有账号 后才可以发帖', @@ -348,14 +348,14 @@ $lang = array ( 'list_post_time' => '发帖时间', 'list_three_month' => '三个月', 'new_window' => '新窗', - 'new_window_thread' => '在新窗口中打开文章', + 'new_window_thread' => '在新窗口中打开帖子', 'order_heats' => '热门', 'order_recommends' => '推荐', 'orderby' => '排序', 'pics' => '张图片', 'post_mobile' => '手机发帖', - 'posts_deducted' => '文章被减分', - 'rate_credit_add' => '文章被加分', + 'posts_deducted' => '帖子被减分', + 'rate_credit_add' => '帖子被加分', 'replycredit' => '回帖奖励', 'replycredit_icon' => '奖', 'rewarding' => '进行中', @@ -376,7 +376,7 @@ $lang = array ( 'thread_type3' => '全局置顶主题', 'thread_type4' => '多版置顶主题', 'title' => '标题', - 'view_thread' => '浏览文章', + 'view_thread' => '浏览帖子', 'view_thread_imagemode' => '图片模式', 'forum_password_require' => '本版块需要密码,您必须在下面输入正确的密码才能浏览这个版块', 'guide' => '导读', @@ -385,13 +385,13 @@ $lang = array ( 'guide_forum_select' => '选择版块', 'guide_hot' => '最新热门', 'guide_index' => '导读首页', - 'guide_my' => '我的文章', + 'guide_my' => '我的帖子', 'guide_new' => '最新回复', 'guide_newthread' => '最新发表', 'guide_sofa' => '抢沙发', - 'guide_nothreads' => '暂时还没有文章', + 'guide_nothreads' => '暂时还没有帖子', 'keyword' => '关键字', - 'posts_type' => '文章类型', + 'posts_type' => '帖子类型', 'forum_moderate' => '审核', 'logout' => '退出', 'mod_error_invalid' => '抱歉,您无此权限', @@ -489,18 +489,18 @@ $lang = array ( 'changeto' => '变更为', 'crime_action' => '操作行为', 'crime_avatar' => '清除头像', - 'crime_banpost' => '屏蔽文章', + 'crime_banpost' => '屏蔽帖子', 'crime_banspeak' => '禁止发言', 'crime_banstatus' => '锁定用户', 'crime_banvisit' => '禁止访问', 'crime_customstatus' => '清除自定义头衔', 'crime_dateline' => '操作时间', - 'crime_delpost' => '删除文章', + 'crime_delpost' => '删除帖子', 'crime_operator' => '操作者', 'crime_reason' => '操作理由', 'crime_record' => '违规记录', 'crime_sightml' => '清除签名', - 'crime_warnpost' => '警告文章', + 'crime_warnpost' => '警告帖子', 'expiry' => '期限', 'ip_location' => '地理位置', 'mod_member_ban' => '禁止用户', @@ -547,9 +547,9 @@ $lang = array ( 'mod_moderate_reply_num' => '未审核回复', 'mod_moderate_select' => '当前已选定 0 个', 'mod_moderate_thread_num' => '未审核主题', - 'mod_moderate_thread_range' => '文章范围', + 'mod_moderate_thread_range' => '帖子范围', 'mod_moderate_showcensor' => '显示过滤词', - 'mod_notice_moderate' => '审核结果: $modpost[\'validate\'] 篇文章审核通过,$modpost[\'delete\'] 篇文章删除,$modpost[\'ignore\'] 篇文章进入忽略列表等待审核', + 'mod_notice_moderate' => '审核结果: $modpost[\'validate\'] 篇帖子审核通过,$modpost[\'delete\'] 篇帖子删除,$modpost[\'ignore\'] 篇帖子进入忽略列表等待审核', 'mod_option_moduser' => '用户', 'mod_option_subject_mod' => '审核', 'mod_option_subject_modreplies' => '回复', @@ -565,15 +565,15 @@ $lang = array ( 'mod_moderate_reply' => '审核回复', 'mod_moderate_thread' => '审核主题', 'mod_option_selectforum' => '版块选择', - 'mod_option_subject_delete' => '文章管理', + 'mod_option_subject_delete' => '帖子管理', 'mod_option_subject_forum' => '版块主题', 'mod_option_subject_recyclebin' => '主题回收站', 'mod_option_subject_recyclebinpost' => '回帖回收站', 'modcp_forum' => '当前版块', - 'modcp_posts_author' => '文章作者', + 'modcp_posts_author' => '帖子作者', 'modcp_posts_dateline_range' => '时间范围', - 'modcp_posts_error_1' => '搜索条件不足!您至少应当在 关键字,文章作者或者发帖 IP 当中设置一个搜索的条件', - 'modcp_posts_error_2' => '时间范围错误!版主只能删除近 1 周的文章,超级版主可以删除 2 周内的文章,请重新选择开始时间', + 'modcp_posts_error_1' => '搜索条件不足!您至少应当在 关键字,帖子作者或者发帖 IP 当中设置一个搜索的条件', + 'modcp_posts_error_2' => '时间范围错误!版主只能删除近 1 周的帖子,超级版主可以删除 2 周内的帖子,请重新选择开始时间', 'modcp_posts_error_3' => '您输入的关键字不合法!每个关键字至少由 2 个汉字或者 4 个英文字符组成', 'modcp_posts_error_4' => '抱歉,您无权使用批量删帖功能', 'modcp_posts_ip' => '发帖 IP', @@ -584,11 +584,11 @@ $lang = array ( 'modcp_posts_threadfirst' => '主题首帖', 'modcp_posts_threadreply' => '主题回复帖', 'modcp_posts_to' => '至', - 'modcp_posts_type' => '文章类型', - 'modcp_posts_week_1' => '您只能操作最近 1 周的文章', - 'modcp_posts_week_2' => '您只能操作最近 2 周的文章', + 'modcp_posts_type' => '帖子类型', + 'modcp_posts_week_1' => '您只能操作最近 1 周的帖子', + 'modcp_posts_week_2' => '您只能操作最近 2 周的帖子', 'modcp_select_forum' => '请选择版块', - 'posttable_branch' => '文章分表:', + 'posttable_branch' => '帖子分表:', 'mod_option_selectthreadclass' => '主题分类', 'modcp_dateline_range' => '发表时间范围', 'modcp_forum_select_msg' => '请选择版块进行管理', @@ -611,7 +611,7 @@ $lang = array ( 'modcp_report_note' => '留言', 'modcp_report_nothing' => '没有新的举报或没有选择版块', 'modcp_report_perpage' => '每页显示举报数', - 'modcp_report_post' => '举报文章', + 'modcp_report_post' => '举报帖子', 'modcp_report_reason' => '举报理由', 'modcp_report_reporter' => '举报者', 'modcp_report_resolve' => '处理选中', @@ -623,7 +623,7 @@ $lang = array ( 'pay_nobuyers' => '目前没有用户购买此主题', 'draftbox' => '草稿箱', 'edit_save' => '保存', - 'edit_thread' => '编辑文章', + 'edit_thread' => '编辑帖子', 'edit_trade' => '编辑商品', 'faq' => '帮助', 'join_thread' => '参与/回复主题', @@ -751,7 +751,7 @@ $lang = array ( 'post_anonymous' => '使用匿名发帖', 'post_delpost' => '删除本帖', 'post_descviewdefault' => '回帖倒序排列', - 'post_digest_thread' => '精华文章', + 'post_digest_thread' => '精华帖子', 'post_imgurl' => '解析图片链接', 'post_noticeauthor' => '接收回复通知', 'post_parseurl' => '链接识别', @@ -850,27 +850,27 @@ $lang = array ( 'stats_main_new' => '新会员', 'stats_main_nmpd' => '平均每日注册会员数', 'stats_main_nonposters' => '未发帖会员', - 'stats_main_nppd' => '平均每日新增文章数', + 'stats_main_nppd' => '平均每日新增帖子数', 'stats_main_posters' => '发帖会员', 'stats_main_posters_percent' => '发帖会员占总数', 'stats_main_posts_avg' => '平均每人发帖数', - 'stats_main_posts_count' => '文章数', + 'stats_main_posts_count' => '帖子数', 'stats_main_rpt' => '平均每个主题被回复次数', 'stats_main_threads_count' => '主题数', - 'stats_main_todays_newposts' => '最近 24 小时新增文章数', + 'stats_main_todays_newposts' => '最近 24 小时新增帖子数', 'stats_main_topposter' => '今日论坛之星', 'stats_main_total_posted' => '发帖数', 'stats_update' => '统计数据已被缓存,上次于 $lastupdate 被更新,下次将于 $nextupdate 进行更新', 'lastvisit' => '上次访问', 'member_list' => '会员列表', - 'posts' => '文章', + 'posts' => '帖子', 'threads' => '主题', 'regdate' => '注册日期', 'uid' => 'UID', 'stats_agent' => '客户软件', 'stats_browser' => '浏览器', 'stats_date' => '日期', - 'stats_day_posts' => '每日新增文章记录', + 'stats_day_posts' => '每日新增帖子记录', 'stats_forum_stat_log' => '版块统计日志', 'stats_forums_forumname' => '版块名称', 'stats_forums_month' => '月份', @@ -887,7 +887,7 @@ $lang = array ( 'stats_modworks_timerange' => '时间范围', 'stats_modworks_to' => '至', 'stats_modworks_total' => '合计', - 'stats_month_posts' => '每月新增文章记录', + 'stats_month_posts' => '每月新增帖子记录', 'stats_os' => '操作系统', 'stats_posthist' => '发帖量记录', 'stats_views' => '流量统计', @@ -920,7 +920,7 @@ $lang = array ( 'admin_move' => '移动主题', 'admin_move_hold' => '保留转向', 'admin_open' => '打开主题', - 'admin_select_piece' => '选择了 $modpostsnum 篇文章', + 'admin_select_piece' => '选择了 $modpostsnum 篇帖子', 'admin_target' => '目标版块', 'admin_targettype' => '目标分类', 'admin_type_msg' => '当前版块无分类设置,请联系管理员到后台设置主题分类', @@ -932,10 +932,10 @@ $lang = array ( 'forum_recommend_reducetitle' => '标题', 'recommend' => '推荐', 'thread_highlight' => '高亮', - 'topicadmin_crime_delpost_nums' => '用户 $crimeauthor 文章已被违规删除 $crimenum 次', + 'topicadmin_crime_delpost_nums' => '用户 $crimeauthor 帖子已被违规删除 $crimenum 次', 'types' => '分类', 'admin_banpost' => '屏蔽', - 'admin_delposts' => '删除选定文章', + 'admin_delposts' => '删除选定帖子', 'admin_merge' => '合并', 'admin_merge_tid' => '填写要合并的主题 ID (tid)', 'admin_select_one_piece' => '选择了 1 篇主题', @@ -954,7 +954,7 @@ $lang = array ( 'admin_live_cancle' => '取消直播', 'admin_live_tips' => '同一版块内只能设置一个直播帖
    设置直播后会覆盖原有直播帖
    建议超过5条回复后设置', 'pay_buyers' => '已购买人数', - 'topicadmin_crime_banpost_nums' => '用户 $crimeauthor 文章已被屏蔽 $crimenum 次', + 'topicadmin_crime_banpost_nums' => '用户 $crimeauthor 帖子已被屏蔽 $crimenum 次', 'topicadmin_delet_comment' => '删除选定点评', 'topicadmin_select_comment' => '选择了 1 个点评', 'topicadmin_warn_add' => '警告', @@ -963,7 +963,7 @@ $lang = array ( 'topicadmin_warn_prompt' => '{$_G[\'setting\'][\'warningexpiration\']} 天内累计被警告 {$_G[\'setting\'][\'warninglimit\']} 次,将被自动禁止发帖 {$_G[\'setting\'][\'warningexpiration\']} 天', 'topicadmin_useropt' => '用户操作', 'topicadmin_banuser' => '禁言', - 'topicadmin_userdelpost' => '清空文章', + 'topicadmin_userdelpost' => '清空帖子', 'admin_ban_this_ip' => '禁止此 IP', 'admin_user_this_ip' => '此 IP 下用户', 'admin_bump_down' => '提升下沉', @@ -1170,19 +1170,19 @@ $lang = array ( 'online' => '当前在线', 'people_score' => '人评分', 'post_ascview' => '正序浏览', - 'post_copied' => '文章地址复制成功', + 'post_copied' => '帖子地址复制成功', 'post_descview' => '倒序浏览', 'post_from_mobile' => '该帖通过手机客户端发布', 'prosit' => '恭喜', 'published' => '发表', 'receive_replynotice' => '接收回复通知', - 'related_thread' => '相关文章', + 'related_thread' => '相关帖子', 'removerate' => '撤销评分', 'rushreply_hit' => '抢中本楼', 'rushreply_hit_title' => '查看抢中楼层', 'thread_favorite' => '收藏', 'thread_magic' => '使用道具', - 'thread_mod' => '文章模式', + 'thread_mod' => '帖子模式', 'thread_mod_by' => '本主题由 $lastmod[\'modusername\'] 于 $lastmod[\'moddateline\'] $lastmod[\'modaction\']', 'thread_mod_recommend_by' => '本主题由 $lastmod[\'modusername\'] 于 $lastmod[\'moddateline\'] $lastmod[\'modaction\']到 $lastmod[\'reason\']', 'thread_realy' => '转播', @@ -1202,7 +1202,7 @@ $lang = array ( 'attach_nopermission_login' => '您需要 登录 才可以下载或查看,没有账号?{$_G[\'setting\'][\'reglinkname\']}', 'guesttipsinthread_text' => '马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。', 'attach_nopermission_connect_fill_profile' => '您需要 完善账号信息绑定已有账号 后才可以下载或查看', - 'attach_nopermission_notice' => '本文章中包含更多资源', + 'attach_nopermission_notice' => '本帖子中包含更多资源', 'has_expired' => '该信息已经过期', 'have' => '已有', 'image_big' => '大图', @@ -1218,7 +1218,7 @@ $lang = array ( 'published_in_floor' => '查看楼层', 'rate_total' => '总评分', 'replies_recommended' => '回帖推荐', - 'pay_comment' => '本主题需向作者支付 {$thread[\'price\']} {$_G[\'setting\'][\'extcredits\'][$_G[\'setting\'][\'creditstransextra\'][1]][\'unit\']}{$_G[\'setting\'][\'extcredits\'][$_G[\'setting\'][\'creditstransextra\'][1]][\'title\']} 才能浏览', + 'pay_comment' => '本作品可能包含成人内容。如果您继续,则表示您同意并愿意看到此类内容。本主题需向作者支付 {$thread[\'price\']} {$_G[\'setting\'][\'extcredits\'][$_G[\'setting\'][\'creditstransextra\'][1]][\'unit\']}{$_G[\'setting\'][\'extcredits\'][$_G[\'setting\'][\'creditstransextra\'][1]][\'title\']} 才能浏览', 'pay_free_time' => '本主题购买截止日期为 $thread[\'endtime\'],到期后将免费', 'people_buy' => '人购买', 'poll_count_down' => '距结束还有', @@ -1268,7 +1268,7 @@ $lang = array ( 'replystick_icon' => '顶', 'search_forum' => '搜索版块', 'latest_images' => '最新图片', - 'hot_thread' => '热门文章', + 'hot_thread' => '热门帖子', 'my_order_collection' => '我订阅的专辑', 'recommend_collection' => '淘专辑推荐', 'rank' => '排名', @@ -1294,13 +1294,13 @@ $lang = array ( 'manage_operation' => '管理操作', 'page_separate' => '分页', 'directory' => '目录', - 'replypassword' => '文章密码', - 'replybackground' => '文章背景', + 'replypassword' => '帖子密码', + 'replybackground' => '帖子背景', 'pictypefile' => '图片文件', 'backgroundcolor' => '背景色', 'collapse_the_left' => '收起左侧', 'open_the_left' => '开启左侧', - 'other_reply_hide' => '还有一些文章被系统自动隐藏,点此展开', + 'other_reply_hide' => '还有一些帖子被系统自动隐藏,点此展开', 'keyboard_tip' => '提示:支持键盘翻页<-左 右->', 'lightclose' => '关灯', 'lightopen' => '开灯', diff --git a/source/language/forum/lang_thread.php b/source/language/forum/lang_thread.php old mode 100644 new mode 100755 diff --git a/source/language/group/index.htm b/source/language/group/index.htm old mode 100644 new mode 100755 diff --git a/source/language/group/lang_misc.php b/source/language/group/lang_misc.php old mode 100644 new mode 100755 diff --git a/source/language/group/lang_template.php b/source/language/group/lang_template.php old mode 100644 new mode 100755 index 7db4444..d5cdde3 --- a/source/language/group/lang_template.php +++ b/source/language/group/lang_template.php @@ -78,11 +78,11 @@ $lang = array ( 'heats' => '级热门', 'heats_icon' => '火', 'price' => '售价', - 'rate_credit_add' => '文章被加分', + 'rate_credit_add' => '帖子被加分', 'readperm' => '阅读权限', 'return_index' => '返回首页', 'reward_solved' => '已解决', - 'thread' => '文章', + 'thread' => '帖子', 'thread_digest' => '精华', 'thread_moved' => '移动', 'thread_recommend' => '评价指数', @@ -163,7 +163,7 @@ $lang = array ( 'my_thread' => '我的话题', 'no_group_create_now' => '您还没创建{$_G[\'setting\'][\'navs\'][3][\'navname\']},现在创建', 'no_group_join' => '您还没有加入任何{$_G[\'setting\'][\'navs\'][3][\'navname\']},找喜欢的{$_G[\'setting\'][\'navs\'][3][\'navname\']}。', - 'no_related_posts' => '还没有相关的文章。', + 'no_related_posts' => '还没有相关的帖子。', 'somebody_group' => '的{$_G[\'setting\'][\'navs\'][3][\'navname\']}', 'group_do_not_push' => '不推荐', 'copy' => '复制', @@ -171,7 +171,7 @@ $lang = array ( 'group_digest_recommend' => '精华推荐', 'group_exit' => '退出{$_G[\'setting\'][\'navs\'][3][\'navname\']}', 'group_exit_confirm' => '您确定要退出该{$_G[\'setting\'][\'navs\'][3][\'navname\']}吗?', - 'group_find_topics' => '在本{$_G[\'setting\'][\'navs\'][3][\'navname\']}中寻找文章', + 'group_find_topics' => '在本{$_G[\'setting\'][\'navs\'][3][\'navname\']}中寻找帖子', 'group_hot_topics_today' => '今天大家都在讨论的话题', 'group_member_active' => '活跃成员', 'group_member_new' => '新加入', @@ -181,7 +181,7 @@ $lang = array ( 'group_visited' => '浏览过的{$_G[\'setting\'][\'navs\'][3][\'navname\']}', 'group_you_have' => '您已有 {$groupnum} 个{$_G[\'setting\'][\'navs\'][3][\'navname\']},还能创建 {$allowbuildgroup} 个。', 'input_search_key_words' => '请输入搜索关键字', - 'posts' => '文章', + 'posts' => '帖子', 'create_group_message1' => '创建自己的地盘', 'create_group_message2' => '精心打造{$_G[\'setting\'][\'navs\'][3][\'navname\']}空间', 'create_group_message3' => '邀请好友加入我的{$_G[\'setting\'][\'navs\'][3][\'navname\']}', diff --git a/source/language/home/index.htm b/source/language/home/index.htm old mode 100644 new mode 100755 diff --git a/source/language/home/lang_editor.php b/source/language/home/lang_editor.php old mode 100644 new mode 100755 diff --git a/source/language/home/lang_magic.php b/source/language/home/lang_magic.php old mode 100644 new mode 100755 index 9cf33d2..6c3dd5a --- a/source/language/home/lang_magic.php +++ b/source/language/home/lang_magic.php @@ -14,9 +14,9 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'target_tid' => '目标主题 tid', - 'target_pid' => '目标文章 pid', + 'target_pid' => '目标帖子 pid', 'target_username' => '目标用户名', - 'magics_type_1' => '文章类', + 'magics_type_1' => '帖子类', 'magics_type_2' => '会员类', 'magics_type_3' => '其他类', diff --git a/source/language/home/lang_template.php b/source/language/home/lang_template.php old mode 100644 new mode 100755 index 19777e7..cda9d46 --- a/source/language/home/lang_template.php +++ b/source/language/home/lang_template.php @@ -49,7 +49,7 @@ $lang = array ( 'follow_more' => '更多', 'follow_my_feed' => '我的广播', 'follow_my_follower' => '我的听众', - 'follow_new_thread' => '发表文章', + 'follow_new_thread' => '发表帖子', 'follow_open_feed' => '展开全文', 'follow_other_forum' => '浏览其它版块', 'follow_preview_null' => '没有预览内容', @@ -75,8 +75,8 @@ $lang = array ( 'pack_up' => '收起', 'photo_accessories' => '图片附件', 'poll' => '投票', - 'post' => '文章', - 'posts_num' => '文章数', + 'post' => '帖子', + 'posts_num' => '帖子数', 'regdate' => '注册时间', 'reply' => '回复', 'reward' => '悬赏', @@ -320,7 +320,7 @@ $lang = array ( 'edit_avatar' => '编辑头像', 'enter' => '进入', 'ignore_friend' => '解除好友', - 'manage_post' => '管理文章', + 'manage_post' => '管理帖子', 'online' => '在线', 'send_pm' => '发送消息', 'someone_space' => '的空间', @@ -410,7 +410,7 @@ $lang = array ( 'favorite_blog' => '日志', 'favorite_forum' => '版块', 'favorite_group' => '{$_G[\'setting\'][\'navs\'][3][\'navname\']}', - 'favorite_thread' => '文章', + 'favorite_thread' => '帖子', 'no_favorite_yet' => '您还没有添加任何收藏', 'select_all' => '全选', 'click_play' => '点击播放', @@ -615,7 +615,7 @@ $lang = array ( 'manage_comment' => '管理评论', 'manage_doing' => '管理记录', 'manage_feed' => '管理动态', - 'manage_group_prune' => '圈子文章', + 'manage_group_prune' => '圈子帖子', 'manage_group_threads' => '圈子主题', 'manage_share' => '管理分享', 'member_manage' => '用户管理', @@ -762,18 +762,18 @@ $lang = array ( 'view_friend_list' => '查看好友列表', 'crime_action' => '操作行为', 'crime_avatar' => '清除头像', - 'crime_banpost' => '屏蔽文章', + 'crime_banpost' => '屏蔽帖子', 'crime_banspeak' => '禁止发言', 'crime_banstatus' => '锁定用户', 'crime_banvisit' => '禁止访问', 'crime_customstatus' => '清除自定义头衔', 'crime_dateline' => '操作时间', - 'crime_delpost' => '删除文章', + 'crime_delpost' => '删除帖子', 'crime_operator' => '操作者', 'crime_reason' => '操作理由', 'crime_record' => '违规记录', 'crime_sightml' => '清除签名', - 'crime_warnpost' => '警告文章', + 'crime_warnpost' => '警告帖子', 'email_status' => '邮箱状态', 'group_useful_life' => '有效期至', 'hours' => '小时', @@ -823,7 +823,7 @@ $lang = array ( 'share_pic' => '图片', 'share_poll' => '投票', 'share_space' => '用户', - 'share_thread' => '文章', + 'share_thread' => '帖子', 'share_video' => '视频', 'somebody_share' => '的分享', 'they_share' => 'TA 的所有分享', @@ -871,19 +871,19 @@ $lang = array ( 'del_select_thread' => '删除选中主题', 'del_select_thread_confirm' => '确定要删除选中的主题吗?', 'forum' => '版块', - 'friend_post' => '好友的文章', + 'friend_post' => '好友的帖子', 'group' => '圈子', - 'hide_thread' => '本页有 $hiddennum 篇文章因隐私问题而隐藏', + 'hide_thread' => '本页有 $hiddennum 篇帖子因隐私问题而隐藏', 'ignored' => '已忽略', 'last_post' => '最后发帖', - 'my_post' => '我的文章', - 'newest_thread' => '最新文章', - 'no_related_posts' => '还没有相关的文章', + 'my_post' => '我的帖子', + 'newest_thread' => '最新帖子', + 'no_related_posts' => '还没有相关的帖子', 'post_comment' => '点评', 'posted' => '发帖', 'replies' => '回复/查看', - 'they_thread' => 'TA 的所有文章', - 'top_thread' => '热门文章', + 'they_thread' => 'TA 的所有帖子', + 'top_thread' => '热门帖子', 'additional' => '附加', 'buy_trade' => '买家交易', 'create_new_trade' => '发起新交易', @@ -932,7 +932,7 @@ $lang = array ( 'cover_pic' => '封面图片', 'delete_album' => '删除相册', 'delete_album_message' => '确定删除相册吗?', - 'delete_pic_notice' => '删除图片提示:如果您要删除的图片出现在您的文章、日志、话题中,删除后,会导致内容里面的图片同时无法显示 ', + 'delete_pic_notice' => '删除图片提示:如果您要删除的图片出现在您的帖子、日志、话题中,删除后,会导致内容里面的图片同时无法显示 ', 'determine' => '确定', 'edit_album' => '编辑相册', 'edit_album_information' => '编辑相册信息', @@ -1391,7 +1391,7 @@ $lang = array ( 'space_domain' => '我的空间域名', 'mode_one' => '方式一:', 'mode_two' => '方式二:', - 'mode_two_desc' => '通过点击文章标题旁的“复制链接”,推广成功后也可以获得积分奖励   去推广文章»', + 'mode_two_desc' => '通过点击帖子标题旁的“复制链接”,推广成功后也可以获得积分奖励   去推广帖子»', 'post_promotion' => '如果您的朋友通过下面任意一个链接访问站点并注册新会员,您将获得积分奖励 $regstr', 'post_promotion_reg' => '如果您的朋友不但访问并且注册成为会员,您将再获得积分奖励 $regstr', 'post_promotion_url' => '如果您的朋友通过下面任意一个链接访问站点,您将获得积分奖励 $visitstr', @@ -1433,7 +1433,7 @@ $lang = array ( 'mail_pcomment' => '我的主题被人点评', 'mail_piccomment' => '我的相册被评论', 'mail_post' => '我的主题被人回复', - 'mail_pusearticle' => '我的日志或文章被推送成文章', + 'mail_pusearticle' => '我的日志或帖子被推送成文章', 'mail_reward' => '悬赏主题回复被设为最佳答案', 'mail_send_your_mail' => '提醒邮件会发送到您当前的邮箱', 'mail_sharecomment' => '我分享的内容被评论', @@ -1505,11 +1505,11 @@ $lang = array ( 'my_main_usergroup' => '我的主用户组', 'permission_attachment_nopermission' => '没有限制', 'permission_basic_disable_sarch' => '禁用搜索', - 'permission_basic_search_content' => '允许搜索文章内容', + 'permission_basic_search_content' => '允许搜索帖子内容', 'permission_basic_search_title' => '只允许搜索标题', 'permission_menu_attachment' => '附件相关', 'permission_menu_normaloptions' => '普通权限', - 'permission_menu_post' => '文章相关', + 'permission_menu_post' => '帖子相关', 'permission_modoptions_name' => '管理权限', 'renew' => '续费', 'spacecp_usergroup_message1' => '您升级到此用户组还需积分', diff --git a/source/language/index.htm b/source/language/index.htm old mode 100644 new mode 100755 diff --git a/source/language/lang_action.php b/source/language/lang_action.php old mode 100644 new mode 100755 diff --git a/source/language/lang_admincp.php b/source/language/lang_admincp.php old mode 100644 new mode 100755 index 5f72d21..da1b737 --- a/source/language/lang_admincp.php +++ b/source/language/lang_admincp.php @@ -144,7 +144,7 @@ $lang = array 'view' => '查看', 'reply' => '回复', 'banuser' => '禁言', - 'userdelpost' => '清空文章', + 'userdelpost' => '清空帖子', 'crimerecord' => '违规登记', 'hot' => '热度', 'feed_title' => '动态标题', @@ -292,7 +292,7 @@ $lang = array 'nav_tools' => '工具', 'nav_portal' => '门户', 'nav_group' => '圈子', - 'nav_postsplit' => '文章分表', + 'nav_postsplit' => '帖子分表', 'nav_group_setting' => '圈子设置', 'nav_group_type' => '圈子分类', 'nav_group_manage' => '圈子管理', @@ -308,7 +308,7 @@ $lang = array 'nav_setting_style' => '风格设置', 'nav_setting_index' => '论坛首页', 'nav_setting_forumdisplay' => '主题列表页', - 'nav_setting_viewthread' => '文章内容页', + 'nav_setting_viewthread' => '帖子内容页', 'nav_setting_member' => '用户列表页', 'nav_setting_refresh' => '提示信息', 'nav_setting_sitemessage' => '弹出信息', @@ -348,7 +348,7 @@ $lang = array 'nav_tasks' => '站点任务', 'nav_task_member' => '会员类任务', - 'nav_task_post' => '文章类任务', + 'nav_task_post' => '帖子类任务', 'nav_task_type' => '任务类型', 'nav_seo' => 'SEO设置', @@ -370,9 +370,9 @@ $lang = array 'nav_ec_paymentorders' => '支付订单', 'nav_ec_transferorders' => '转账订单', - 'nav_moderate_posts' => '审核文章', + 'nav_moderate_posts' => '审核帖子', 'nav_moderate_threads' => '审核主题', - 'nav_moderate_replies' => '审核文章', + 'nav_moderate_replies' => '审核帖子', 'nav_moderate_blogs' => '审核日志', 'nav_moderate_pictures' => '审核图片', 'nav_moderate_doings' => '审核记录', @@ -392,7 +392,7 @@ $lang = array 'nav_db_runquery' => '升级', 'nav_db_optimize' => '优化', 'nav_db_dbcheck' => '校验', - 'nav_db_postsplit' => '文章分表', + 'nav_db_postsplit' => '帖子分表', 'nav_attaches' => '论坛附件管理', 'nav_attaches_group' => '圈子附件管理', @@ -415,7 +415,7 @@ $lang = array 'nav_pic' => '图片管理', 'nav_comment' => '留言管理', 'nav_share' => '分享管理', - 'nav_postcomment' => '文章点评管理', + 'nav_postcomment' => '帖子点评管理', 'nav_plugins' => '插件管理', 'nav_announce' => '站点公告', @@ -493,9 +493,9 @@ $lang = array 'nav_logs_payment' => '买卖主题', 'nav_logs_pmt' => '支付记录', 'nav_logs_crime' => '违规记录', - 'nav_logs_crime_delpost' => '删除文章', - 'nav_logs_crime_warnpost' => '警告文章', - 'nav_logs_crime_banpost' => '屏蔽文章', + 'nav_logs_crime_delpost' => '删除帖子', + 'nav_logs_crime_warnpost' => '警告帖子', + 'nav_logs_crime_banpost' => '屏蔽帖子', 'nav_logs_crime_banspeak' => '禁止发言', 'nav_logs_crime_banvisit' => '禁止访问', 'nav_logs_crime_banstatus' => '锁定用户', @@ -538,7 +538,7 @@ $lang = array 'nav_founder_perm_notifyusers' => '管理通知', 'nav_postsplit_manage' => '分表管理', - 'nav_postsplit_move' => '文章移动', + 'nav_postsplit_move' => '帖子移动', 'nav_threadsplit' => '主题分表', 'nav_threadsplit_manage' => '分表管理', @@ -685,7 +685,7 @@ $lang = array 'report_detail' => '举报详情', 'report_optuser' => '处理人', 'report_opttime' => '处理时间', - 'report_receive_tips' => '
  • 下面列出了在后台有举报管理权限的管理员及全部超级版主。
  • 有新的举报时将给所有选中用户发送通知。
  • 当有新的文章被举报时同时会给相应版主发送通知。
  • ', + 'report_receive_tips' => '
  • 下面列出了在后台有举报管理权限的管理员及全部超级版主。
  • 有新的举报时将给所有选中用户发送通知。
  • 当有新的帖子被举报时同时会给相应版主发送通知。
  • ', 'report_tips' => '
  • 可以根据举报真实情况,给举报者加减积分,设置用户举报奖惩使用的积分
  • 多人举报时奖惩第一个举报人。
  • ', 'report_need_founder' => '只有创始人可以管理此项', 'switch_url' => '输入 URL', @@ -942,7 +942,7 @@ $lang = array 'setting_styles_global_showusercard' => '显示用户名片', 'setting_styles_global_showusercard_comment' => '设置当鼠标移动到用户名位置上时是否显示他的名片', 'setting_styles_global_anonymoustext' => '匿名用户的昵称', - 'setting_styles_global_anonymoustext_comment' => '设置文章或评论留言中的匿名用户显示的文字。如:本站网友', + 'setting_styles_global_anonymoustext_comment' => '设置帖子或评论留言中的匿名用户显示的文字。如:本站网友', 'setting_styles_global_home_style' => '家园展示风格', 'setting_styles_global_home_style_comment' => '选择日志、相册、分享、记录、广播展示风格', 'setting_styles_global_home_style_1' => '以SNS模块风格展示', @@ -1035,9 +1035,9 @@ $lang = array 'setting_styles_forumdisplay_stick' => '置顶主题的标识', 'setting_styles_forumdisplay_stick_comment' => '以英文状态下的逗号分割,只有三项有效,级别依次为从高至低', 'setting_styles_forumdisplay_visitedforums' => '显示最近访问版块数量', - 'setting_styles_forumdisplay_visitedforums_comment' => '设置在版块列表和文章浏览中显示最近访问过的版块数量,建议设置为 10 以内,0 为关闭此功能', + 'setting_styles_forumdisplay_visitedforums_comment' => '设置在版块列表和帖子浏览中显示最近访问过的版块数量,建议设置为 10 以内,0 为关闭此功能', 'setting_styles_forumdisplay_fastpost' => '快速发帖/回帖', - 'setting_styles_forumdisplay_fastpost_comment' => '在主题列表页底部显示快速发帖,在文章内容页底部显示快速回帖', + 'setting_styles_forumdisplay_fastpost_comment' => '在主题列表页底部显示快速发帖,在帖子内容页底部显示快速回帖', 'setting_styles_forumdisplay_fastsmilies' => '显示推荐表情', 'setting_styles_forumdisplay_fastsmilies_comment' => '在快速发帖右侧显示推荐表情。推荐的表情需要到“表情管理”中设置', 'setting_styles_forumdisplay_forumpicstyle_thumbwidth' => '主题封面宽度', @@ -1052,22 +1052,22 @@ $lang = array 'setting_styles_forumdisplay_disfixednv_forumdisplay' => '关闭顶部导航固定', 'setting_styles_forumdisplay_disfixednv_forumdisplay_comment' => '当向上滚动屏幕时,主导航将即时出现在屏幕的顶部', 'setting_styles_forumdisplay_threadpreview' => '关闭主题预览', - 'setting_styles_forumdisplay_threadpreview_comment' => '关闭后将不可在主题列表页预览文章内容', + 'setting_styles_forumdisplay_threadpreview_comment' => '关闭后将不可在主题列表页预览帖子内容', - 'setting_styles_viewthread' => '文章内容页', + 'setting_styles_viewthread' => '帖子内容页', 'setting_styles_viewthread_ppp' => '每页显示帖数', - 'setting_styles_viewthread_ppp_comment' => '文章列表中每页显示文章数目', + 'setting_styles_viewthread_ppp_comment' => '帖子列表中每页显示帖子数目', 'setting_styles_viewthread_starthreshold' => '星星升级阈值', 'setting_styles_viewthread_starthreshold_comment' => '星星数在达到此阈值(设为 N)时,N 个星星显示为 1 个月亮、N 个月亮显示为 1 个太阳。默认值为 2,如设为 0 则取消此项功能,始终以星星显示', 'setting_styles_viewthread_maxsigrows' => '签名最大高度(px)', - 'setting_styles_viewthread_maxsigrows_comment' => '设置文章中允许显示签名的最大高度', + 'setting_styles_viewthread_maxsigrows_comment' => '设置帖子中允许显示签名的最大高度', 'setting_styles_viewthread_sigviewcond' => '签名显示条件', 'setting_styles_viewthread_sigimgclick_on' => '取消签名图片的动态放大功能', - 'setting_styles_viewthread_sigviewcond_comment' => '只有文章字数大于指定数值后才显示签名,0为不限制', + 'setting_styles_viewthread_sigviewcond_comment' => '只有帖子字数大于指定数值后才显示签名,0为不限制', 'setting_styles_viewthread_author_onleft' => '作者用户名显示位置', 'setting_styles_viewthread_author_onleft_comment' => '显示位置并不会影响论坛的性能和美观,请根据您会员的浏览习惯进行选择', 'setting_styles_viewthread_author_onleft_yes' => '显示在头像上方', - 'setting_styles_viewthread_author_onleft_no' => '显示在文章内部', + 'setting_styles_viewthread_author_onleft_no' => '显示在帖子内部', 'setting_styles_viewthread_customauthorinfo' => '设置用户信息显示的位置', 'setting_styles_viewthread_userinfo_uid' => 'UID', 'setting_styles_viewthread_userinfo_posts' => '回帖', @@ -1095,13 +1095,13 @@ $lang = array 'setting_styles_viewthread_userinfo_menu' => '作者头像菜单', 'setting_styles_viewthread_rate_on' => '是否在页面上显示评分理由', 'setting_styles_viewthread_rate_number' => '评分条目数', - 'setting_styles_viewthread_rate_number_comment' => '在文章中显示最近评分结果的条目数,0 为不显示', + 'setting_styles_viewthread_rate_number_comment' => '在帖子中显示最近评分结果的条目数,0 为不显示', 'setting_styles_viewthread_collection_number' => '相关淘专辑条目数', 'setting_styles_viewthread_collection_number_comment' => '在主题帖中显示相关淘专辑的条目数,0 为不显示', - 'setting_styles_viewthread_relate_number' => '相关文章条目数', - 'setting_styles_viewthread_relate_number_comment' => '在主题帖中显示相关文章的条目数,0 为不显示', - 'setting_styles_viewthread_relate_time' => '相关文章缓存时间', - 'setting_styles_viewthread_relate_time_comment' => '单位:分钟,在主题帖中显示相关文章的缓存时间(0 为不缓存,不推荐)', + 'setting_styles_viewthread_relate_number' => '相关帖子条目数', + 'setting_styles_viewthread_relate_number_comment' => '在主题帖中显示相关帖子的条目数,0 为不显示', + 'setting_styles_viewthread_relate_time' => '相关帖子缓存时间', + 'setting_styles_viewthread_relate_time_comment' => '单位:分钟,在主题帖中显示相关帖子的缓存时间(0 为不缓存,不推荐)', 'setting_styles_viewthread_hideattachdown' => '是否隐藏附件下载次数', 'setting_styles_viewthread_hideattachdown_comment' => '开启后贴内图片、附件的下载次数会被隐藏', 'setting_styles_viewthread_hideattachtips' => '是否隐藏附件信息条', @@ -1123,21 +1123,21 @@ $lang = array 'setting_styles_viewthread_zoomstatus_comment' => '当帖内图片宽度大于“帖内图片最大宽度”时是否附加鼠标点击时的动态放大效果。选择“是”单击图片会有动态放大效果,选择“否”将会新窗口打开图片', 'setting_styles_viewthread_csscache' => '缓存 CSS 风格', 'setting_styles_viewthread_csscache_comment' => '启用这个设置可以把 CSS 风格缓存成文件,有效降低 HTML 页面文件输出', - 'setting_styles_viewthread_postno' => '文章顺序单位', - 'setting_styles_viewthread_postno_comment' => '设置文章显示顺序编号的单位,如“#”将显示为 1 #', - 'setting_styles_viewthread_postnocustom' => '文章顺序名称', - 'setting_styles_viewthread_postnocustom_comment' => '设置每篇主题所有文章的顺序名称,每行填写一个名称,第一行代表主题帖,第二行代表主题的第一个回复,以此类推', + 'setting_styles_viewthread_postno' => '帖子顺序单位', + 'setting_styles_viewthread_postno_comment' => '设置帖子显示顺序编号的单位,如“#”将显示为 1 #', + 'setting_styles_viewthread_postnocustom' => '帖子顺序名称', + 'setting_styles_viewthread_postnocustom_comment' => '设置每篇主题所有帖子的顺序名称,每行填写一个名称,第一行代表主题帖,第二行代表主题的第一个回复,以此类推', 'setting_styles_viewthread_maxsmilies' => '最大单一表情解析次数', - 'setting_styles_viewthread_maxsmilies_comment' => '在一篇文章中解析的单一表情符号的最大次数,超过此次数限制的表情将不被解析而保留原样,以避免用户在一篇文章中恶意发表大量表情影响正常阅读,0 为不限制', + 'setting_styles_viewthread_maxsmilies_comment' => '在一篇帖子中解析的单一表情符号的最大次数,超过此次数限制的表情将不被解析而保留原样,以避免用户在一篇帖子中恶意发表大量表情影响正常阅读,0 为不限制', 'setting_styles_viewthread_usernamepos' => '作者用户名显示位置', 'setting_styles_viewthread_imgcontent' => '主题内容生成图片宽度', 'setting_styles_viewthread_imgcontent_comment' => '本功能需要PHP支持GD库,内容里有中文需要将中文 TTF 字体文件放到 static/image/seccode/font/ch/ 目录下。默认100个汉字,字体不同宽度略有差别,请跟据实际效果调整。', 'setting_styles_viewthread_fast_reply' => '开启主题帖快速回复', 'setting_styles_viewthread_fast_reply_comment' => '开启后将在主题帖下方展示快速回复框', - 'setting_styles_viewthread_allow_replybg' => '开启文章快速回复框背景', - 'setting_styles_viewthread_allow_replybg_comment' => '开启后允许给文章快速回复框添加背景图片', - 'setting_styles_viewthread_global_reply_background' => '全局文章快速回复框背景', - 'setting_styles_viewthread_global_reply_background_comment' => '设置全局文章快速回复框背景图片,版块设置优先', + 'setting_styles_viewthread_allow_replybg' => '开启帖子快速回复框背景', + 'setting_styles_viewthread_allow_replybg_comment' => '开启后允许给帖子快速回复框添加背景图片', + 'setting_styles_viewthread_global_reply_background' => '全局帖子快速回复框背景', + 'setting_styles_viewthread_global_reply_background_comment' => '设置全局帖子快速回复框背景图片,版块设置优先', 'setting_threadprofile' => '布局方案设置', 'setting_styles_threadprofile' => '帖内用户信息', @@ -1158,11 +1158,11 @@ $lang = array 'setting_styles_forumdisplay_disfixednv_viewthread' => '关闭顶部导航固定', 'setting_styles_forumdisplay_disfixednv_viewthread_comment' => '当向上滚动屏幕时,主导航将即时出现在屏幕的顶部', 'setting_styles_forumdisplay_disfixedavatar' => '关闭头像区域固定', - 'setting_styles_forumdisplay_disfixedavatar_comment' => '当滚动屏幕时,左侧头像区域将跟随右侧文章内容浮动,填充文章内容区域很高时导致的左侧空白', + 'setting_styles_forumdisplay_disfixedavatar_comment' => '当滚动屏幕时,左侧头像区域将跟随右侧帖子内容浮动,填充帖子内容区域很高时导致的左侧空白', 'setting_styles_forumdisplay_threadguestlite' => '游客阅读简化模式', 'setting_styles_forumdisplay_threadguestlite_comment' => '启用后,游客阅读主题时,将不显示用户的具体资料信息。', 'setting_styles_viewthread_close_leftinfo' => '关闭左侧信息栏', - 'setting_styles_viewthread_close_leftinfo_comment' => '文章左侧用户信息栏是否默认关闭', + 'setting_styles_viewthread_close_leftinfo_comment' => '帖子左侧用户信息栏是否默认关闭', 'setting_styles_viewthread_close_leftinfo_userctrl' => '左侧信息栏允许用户控制', 'setting_styles_viewthread_close_leftinfo_userctrl_comment' => '浏览主题时,用户是否可以控制左侧信息栏的显示状态', 'setting_styles_viewthread_guestviewthumb' => '游客看小图', @@ -1177,9 +1177,9 @@ $lang = array 'setting_styles_viewthread_guesttipsinthread_text_comment' => '自定义显示提示文字,默认为:马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。', 'setting_styles_viewthread_vtonlinestatus' => '显示作者在线状态', - 'setting_styles_viewthread_vtonlinestatus_comment' => '是否显示文章作者的在线状态,注意:“精确显示”会轻微加重服务器负担', + 'setting_styles_viewthread_vtonlinestatus_comment' => '是否显示帖子作者的在线状态,注意:“精确显示”会轻微加重服务器负担', 'setting_styles_viewthread_userstatusby' => '显示作者的组头衔', - 'setting_styles_viewthread_userstatusby_comment' => '设置在文章中是否显示作者的用户组头衔', + 'setting_styles_viewthread_userstatusby_comment' => '设置在帖子中是否显示作者的用户组头衔', 'setting_styles_viewthread_userstatusby_usergroup' => '显示用户组头衔(组名)', 'setting_styles_viewthread_online_easy' => '快速显示(推荐使用)', 'setting_styles_viewthread_online_exactitude' => '精确显示', @@ -1376,7 +1376,7 @@ $lang = array 'setting_numbercard' => '用户属性名片', 'setting_numbercard_row' => '第 {i} 列', 'setting_numbercard_type_threads' => '主题数', - 'setting_numbercard_type_posts' => '文章数', + 'setting_numbercard_type_posts' => '帖子数', 'setting_numbercard_type_digestposts' => '精华数', 'setting_numbercard_type_credits' => '总积分', 'setting_numbercard_type_doings' => '记录数', @@ -1399,11 +1399,11 @@ $lang = array 'misc_focus_handadd' => '手动添加', 'misc_focus_threadadd' => '添加主题', 'misc_focus_autoadd' => '自动添加', - 'misc_focus_tips' => '
  • 站长推荐将以浮窗的形式显示在文章内容页面右下角。
  • 您可以手动添加一些指定的主题,或者选择一些版主推荐的主题。最多 10 条,每次随机显示其中 1 条。
  • ', - 'misc_focus_add_tips' => '
  • 输入文章地址自动获取标题和内容
  • ', - 'misc_focus_threadurl' => '文章地址', - 'misc_focus_get_threadcontent' => '获取文章内容', - 'misc_focus_reget_threadcontent' => '重新获取文章内容', + 'misc_focus_tips' => '
  • 站长推荐将以浮窗的形式显示在帖子内容页面右下角。
  • 您可以手动添加一些指定的主题,或者选择一些版主推荐的主题。最多 10 条,每次随机显示其中 1 条。
  • ', + 'misc_focus_add_tips' => '
  • 输入帖子地址自动获取标题和内容
  • ', + 'misc_focus_threadurl' => '帖子地址', + 'misc_focus_get_threadcontent' => '获取帖子内容', + 'misc_focus_reget_threadcontent' => '重新获取帖子内容', 'misc_focus_handurl' => '推荐链接地址', 'misc_focus_handsubject' => '推荐标题', 'misc_focus_handsummary' => '推荐内容', @@ -1418,7 +1418,7 @@ $lang = array 'misc_focus_image' => '图片', 'misc_focus_image_comment' => '从该主题的图片附件中选择一个作为站长推荐的图片展示', 'misc_focus_noimage' => '不使用图片', - 'misc_focus_invalidurl' => '无效的文章地址,请重新输入!', + 'misc_focus_invalidurl' => '无效的帖子地址,请重新输入!', 'misc_focus_nothread' => '指定的主题不存在,请重新输入!', 'misc_focus_area_title' => '站长推荐区域标题', 'misc_focus_area_title_comment' => '默认为“站长推荐”,您可以设置为您希望的标题', @@ -1447,17 +1447,17 @@ $lang = array 'setting_seo_articlelist' => '文章列表', 'setting_seo_article' => '文章内容', 'setting_seo_forum' => '论坛首页', - 'setting_seo_forum_tips' => '
  • 站点名称 {bbname}(应用范围:所有位置)
  • 当前版块名称 {forum}(应用范围:除首页以外)
  • 一级版块名称 {fup}(应用范围:子版块主题列表页和文章内容页)
  • 分区名称 {fgroup}(应用范围:除首页以外)
  • 文章标题 {subject}(应用范围:文章内容页)
  • 主题摘要 {summary}(应用范围:文章内容页)
  • 主题标签 {tags}(应用范围:文章内容页)
  • 分页数 {page}(应用范围:主题列表页、文章内容页)
  • ', + 'setting_seo_forum_tips' => '
  • 站点名称 {bbname}(应用范围:所有位置)
  • 当前版块名称 {forum}(应用范围:除首页以外)
  • 一级版块名称 {fup}(应用范围:子版块主题列表页和帖子内容页)
  • 分区名称 {fgroup}(应用范围:除首页以外)
  • 帖子标题 {subject}(应用范围:帖子内容页)
  • 主题摘要 {summary}(应用范围:帖子内容页)
  • 主题标签 {tags}(应用范围:帖子内容页)
  • 分页数 {page}(应用范围:主题列表页、帖子内容页)
  • ', 'setting_seo_threadlist' => '主题列表', - 'setting_seo_viewthread' => '文章内容', + 'setting_seo_viewthread' => '帖子内容', 'setting_seo_home' => '家园首页', 'setting_seo_home_tips' => '
  • 站点名称 {bbname}(应用范围:所有位置)
  • 日志标题 {subject}(应用范围:日志内容页)
  • 日志/相册作者 {user}(应用范围:日志和相册内容页)
  • 日志摘要 {summary}(应用范围:日志内容页)
  • 日志标签 {tags}(应用范围:日志内容页)
  • 相册名称 {album}(应用范围:相册内容页)
  • 相册描述 {depict}(应用范围:相册内容页)
  • ', 'setting_seo_blog' => '日志内容', 'setting_seo_album' => '相册内容', 'setting_seo_group' => '圈子首页/分类', - 'setting_seo_group_tips' => '
  • 站点名称 {bbname}(应用范围:所有位置)
  • 当前圈子名称 {forum}(应用范围:除圈子首页、分类页)
  • 一级分类名称 {first}(应用范围:所有位置)
  • 二级分类名称 {second}(应用范围:所有位置)
  • 当前圈子简介 {gdes}(应用范围:圈子和圈子文章页)
  • 文章标题 {subject}(应用范围:圈子文章页)
  • 主题摘要 {summary}(应用范围:圈子文章页)
  • 主题标签 {tags}(应用范围:圈子文章内容页)
  • 分页数 {page}(应用范围:主题列表页、文章内容页)
  • ', + 'setting_seo_group_tips' => '
  • 站点名称 {bbname}(应用范围:所有位置)
  • 当前圈子名称 {forum}(应用范围:除圈子首页、分类页)
  • 一级分类名称 {first}(应用范围:所有位置)
  • 二级分类名称 {second}(应用范围:所有位置)
  • 当前圈子简介 {gdes}(应用范围:圈子和圈子帖子页)
  • 帖子标题 {subject}(应用范围:圈子帖子页)
  • 主题摘要 {summary}(应用范围:圈子帖子页)
  • 主题标签 {tags}(应用范围:圈子帖子内容页)
  • 分页数 {page}(应用范围:主题列表页、帖子内容页)
  • ', 'setting_seo_grouppage' => '单一圈子页面', - 'setting_seo_viewthread_group' => '圈子文章内容', + 'setting_seo_viewthread_group' => '圈子帖子内容', 'setting_seo_seotitle' => 'title', 'setting_seo_seotitle_comment' => '设置这里的标题会替换以下模块页面的模块标题,可以使用 {bbname} 表示当前的站点名称', 'setting_seo_seokeywords' => 'keywords', @@ -1486,7 +1486,7 @@ $lang = array 'setting_seo_code_viewthread_subject' => '主题标题', 'setting_seo_code_viewthread_summary' => '主题摘要', 'setting_seo_code_viewthread_tags' => '主题标签', - 'setting_seo_code_viewthread_page' => '文章分页数', + 'setting_seo_code_viewthread_page' => '帖子分页数', 'setting_seo_code_blog_subject' => '日志标题', 'setting_seo_code_blog_summary' => '日志摘要', 'setting_seo_code_blog_tags' => '日志标签', @@ -1509,7 +1509,7 @@ $lang = array 'setting_seo_code_viewthread_group_subject' => '主题标题', 'setting_seo_code_viewthread_group_summary' => '主题摘要', 'setting_seo_code_viewthread_group_tags' => '主题标签', - 'setting_seo_code_viewthread_group_page' => '文章分页数', + 'setting_seo_code_viewthread_group_page' => '帖子分页数', 'setting_seo_seohead' => '其他头部信息', 'setting_seo_seohead_comment' => '如需在 <head></head> 中添加其他的 HTML 代码,可以使用本设置,否则请留空', @@ -1540,8 +1540,8 @@ $lang = array 'setting_cachethread_comment' => '开启后,缓存页面内容到静态文件,游客访问时速度将大大提升,建议独立服务器使用,虚拟空间请根据实际情况调节缓存的有效期', 'setting_cachethread_indexlife' => '缓存论坛首页有效期', 'setting_cachethread_indexlife_comment' => '设置论坛首页缓存更新的时间,单位为秒,0 为关闭(此处关闭以后,缓存系数将不再起作用),建议设置为 900。此功能只针对游客', - 'setting_cachethread_life' => '缓存文章有效期', - 'setting_cachethread_life_comment' => '设置文章页面缓存更新的时间,单位为秒,0 为关闭。请根据实际情况进行调整,建议设置为 900。另外,请通过编辑论坛来指定文章页面缓存系数', + 'setting_cachethread_life' => '缓存帖子有效期', + 'setting_cachethread_life_comment' => '设置帖子页面缓存更新的时间,单位为秒,0 为关闭。请根据实际情况进行调整,建议设置为 900。另外,请通过编辑论坛来指定帖子页面缓存系数', 'setting_cachethread_dir' => '缓存目录', 'setting_cachethread_dir_comment' => '默认为 data/threadcache 目录,如果您需要将其指定为其他目录,请确定您指定的目录有可写权限', 'setting_cachethread_coefficient_set' => '缓存系数批量设置', @@ -1597,7 +1597,7 @@ $lang = array 'setting_memory_data_forum_post_comment' => '主题TID', 'setting_memory_data_forum_thread_comment' => '主题TID', 'setting_memory_data_forum_thread_forumdisplay_comment' => '版块FID', - 'setting_memory_data_forum_postcache_comment' => '文章PID', + 'setting_memory_data_forum_postcache_comment' => '帖子PID', 'setting_memory_data_forum_collection_comment' => '主题TID', 'setting_memory_data_forum_collectionrelated_comment' => '主题TID', 'setting_memory_data_home_follow_comment' => '用户UID', @@ -1676,7 +1676,7 @@ $lang = array 'setting_functions_curscript_task' => '任务', 'setting_functions_curscript_magic' => '道具', 'setting_functions_curscript_favorite' => '收藏', - 'setting_functions_curscript_portal_intro' => '通过门户,网站可以将最热门的文章、文章、活动等信息展现给用户', + 'setting_functions_curscript_portal_intro' => '通过门户,网站可以将最热门的帖子、文章、活动等信息展现给用户', 'setting_functions_curscript_forum_intro' => '通过论坛,网站可以给用户提供在线讨论、交流、互动的平台', 'setting_functions_curscript_group_intro' => '志同道合者的聚集地,更加专业更加隐秘的交流乐园', 'setting_functions_curscript_follow_intro' => '收听感兴趣的人,分享有趣的事儿,信息快速传播的利器', @@ -1707,7 +1707,7 @@ $lang = array 'setting_functions_mod_maxmodworksmonths' => '管理记录保留时间(月)', 'setting_functions_mod_maxmodworksmonths_comment' => '系统中保留管理记录的时间,默认为 3 个月,建议在 3~6 个月的范围内取值', 'setting_functions_mod_losslessdel' => '删帖不减积分时间期限(天)', - 'setting_functions_mod_losslessdel_comment' => '设置版主或管理员从前台删除发表于多少天以前的文章时,不更新用户的扩展积分,可用于清理老文章而不对作者的扩展积分造成损失。0 为不使用此功能,始终更新用户积分', + 'setting_functions_mod_losslessdel_comment' => '设置版主或管理员从前台删除发表于多少天以前的帖子时,不更新用户的扩展积分,可用于清理老帖子而不对作者的扩展积分造成损失。0 为不使用此功能,始终更新用户积分', 'setting_functions_mod_warninglimit' => '用户被警告多少次自动禁言', 'setting_functions_mod_warninglimit_comment' => '警告有效期结束自动解除禁言', 'setting_functions_mod_warningexpiration' => '警告有效期(天)', @@ -1720,15 +1720,15 @@ $lang = array 'setting_functions_mod_reasons_comment' => '本设定将在用户执行部分管理操作时显示,每个理由一行,如果空行则显示一行分隔符“--------”,用户可选择本设定中预置的理由选项或自行输入', 'setting_functions_mod_reasons_public_comment' => '开启后点击主题帖下方主题操作记录将同时显示管理操作理由', 'setting_functions_user_reasons_comment' => '本设定将在用户执行评分时显示,每个理由一行,如果空行则显示一行分隔符“--------”,用户可选择本设定中预置的理由选项或自行输入', - 'setting_functions_mod_bannedmessages' => '隐藏敏感文章内容', + 'setting_functions_mod_bannedmessages' => '隐藏敏感帖子内容', 'setting_functions_mod_bannedmessages_comment' => '选择相应项目将隐藏被删除或被禁止的用户的相关资料,在相关资料处显示被屏蔽的字样', - 'setting_functions_mod_bannedmessages_thread' => '文章内容', + 'setting_functions_mod_bannedmessages_thread' => '帖子内容', 'setting_functions_mod_bannedmessages_avatar' => '用户头像', 'setting_functions_mod_bannedmessages_signature' => '用户签名', 'setting_functions_mod_rewardexpiration' => '悬赏主题有效期', 'setting_functions_mod_rewardexpiration_comment' => '设置悬赏主题的有效天数,当悬赏主题超过有效期后依然未发放悬赏,版主或管理员有权代为主题作者发放悬赏。0 或留空表示不允许版主或管理员进行此操作', 'setting_functions_mod_moddetail' => '版主面板显示审核数目', - 'setting_functions_mod_moddetail_comment' => '设置版主面板是否详细显示待审核主题、文章及用户的具体数目', + 'setting_functions_mod_moddetail_comment' => '设置版主面板是否详细显示待审核主题、帖子及用户的具体数目', 'setting_functions_heatthread_tips' => '
  • 主题热度将按参与人次计算,包括回帖,点评,收藏,分享,评分,推荐
  • ', 'setting_functions_heatthread' => '主题热度', 'setting_functions_heatthread_type' => '热度计算方式', @@ -1747,7 +1747,7 @@ $lang = array 'setting_functions_heatthread_iconlevels' => '热门主题显示级别', 'setting_functions_heatthread_iconlevels_comment' => '设置主题列表页主题图标每一级别对应的热度指数,默认为 3 个级别,请用逗号分隔,如:“50,100,200”表示当主题的热度大于 50 时为 1 级,大于 100 时为 2 级,大于 200 时为 3 级。留空表示不显示图标', 'setting_functions_recommend' => '主题评价', - 'setting_functions_recommend_tips' => '
  • 不同用户组会员的主题评价影响值不同,您可以在”用户组”设置的“文章相关”中设置。
  • ', + 'setting_functions_recommend_tips' => '
  • 不同用户组会员的主题评价影响值不同,您可以在”用户组”设置的“帖子相关”中设置。
  • ', 'setting_functions_recommend_status' => '启用主题评价', 'setting_functions_recommend_status_comment' => '主题评价是让用户参与主题热度的重要指标,您可以设定用户在每天允许执行的评价次数', 'setting_functions_recommend_addtext' => '加分操作文字', @@ -1760,21 +1760,21 @@ $lang = array 'setting_functions_recommend_defaultshow_1' => '否', 'setting_functions_recommend_daycount' => '每 24 小时评价主题次数', 'setting_functions_recommend_daycount_comment' => '设置用户每 24 小时可以评价多少篇主题,0 或留空为不限制', - 'setting_functions_recommend_ownthread' => '是否允许评价自己的文章', + 'setting_functions_recommend_ownthread' => '是否允许评价自己的帖子', 'setting_functions_recommend_ownthread_comment' => '设置是否允许评价自己的主题。评价自己的主题无积分奖励', 'setting_functions_recommend_iconlevels' => '评价图标显示级别', 'setting_functions_recommend_iconlevels_comment' => '设置主题列表页评价图标每一级别对应的评价指数。建议为 3 个级别,请用逗号分隔,如:“0,100,200”表示当主题的评价指数大于 0 时为 1 级,大于 100 时为 2 级,大于 200 时为 3 级。1 级及以上级别的主题会在主题列表页“查看好评主题”中列出。留空或者 0 表示不显示图标', - 'setting_functions_comment' => '文章点评', + 'setting_functions_comment' => '帖子点评', 'setting_functions_comment_allow' => '点评方式', - 'setting_functions_comment_allow_comment' => '设置点评的发表方式,如不选择表示不启用点评功能。开启任意一种点评方式都需要在用户组中设置点评权限
    “直接点评”即通过文章每楼层中的“点评”链接发表点评
    “楼层回复”即通过文章每楼层中的“回复”链接发表回帖时,自动对该楼层产生点评
    注意:点击主题中的“回复”链接,不会对主题产生点评', + 'setting_functions_comment_allow_comment' => '设置点评的发表方式,如不选择表示不启用点评功能。开启任意一种点评方式都需要在用户组中设置点评权限
    “直接点评”即通过帖子每楼层中的“点评”链接发表点评
    “楼层回复”即通过帖子每楼层中的“回复”链接发表回帖时,自动对该楼层产生点评
    注意:点击主题中的“回复”链接,不会对主题产生点评', 'setting_functions_comment_allow_1' => '直接点评', 'setting_functions_comment_allow_2' => '楼层回复', 'setting_functions_comment_number' => '点评条目数', - 'setting_functions_comment_number_comment' => '在文章中显示点评的条目数', + 'setting_functions_comment_number_comment' => '在帖子中显示点评的条目数', 'setting_functions_comment_firstpost' => '允许点评楼主帖', 'setting_functions_comment_firstpost_comment' => '设置是否允许直接点评楼主帖,关闭表示只能点评回帖', - 'setting_functions_comment_postself' => '允许点评自己的文章', - 'setting_functions_comment_postself_comment' => '设置是否发帖作者能点评自己的文章', + 'setting_functions_comment_postself' => '允许点评自己的帖子', + 'setting_functions_comment_postself_comment' => '设置是否发帖作者能点评自己的帖子', 'setting_functions_comment_commentitem_0' => '普通主题点评预置观点', 'setting_functions_comment_commentitem_0_comment' => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点', 'setting_functions_comment_commentitem_1' => '投票主题点评预置观点', @@ -1790,21 +1790,21 @@ $lang = array 'setting_functions_comment_commentitem_threadplugin' => '点评预置观点', 'setting_functions_comment_commentitem_threadplugin_comment' => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点', - 'setting_functions_threadexp' => '文章阅读', + 'setting_functions_threadexp' => '帖子阅读', 'setting_functions_threadexp_repliesrank' => '启用回帖投票', 'setting_functions_threadexp_repliesrank_comment' => '开启后,用户可对回帖进行“支持”、“反对”操作。', 'setting_functions_threadexp_blacklist' => '启用用户黑名单隐藏', - 'setting_functions_threadexp_blacklist_comment' => '开启后,用户可以通过将其他用户加入黑名单的方法,隐藏指定用户的文章。', + 'setting_functions_threadexp_blacklist_comment' => '开启后,用户可以通过将其他用户加入黑名单的方法,隐藏指定用户的帖子。', 'setting_functions_threadexp_hotreplies' => '推荐回复数', 'setting_functions_threadexp_hotreplies_comment' => '系统根据回帖评价和水帖情况,在主题第一页推荐回帖,0 为不显示。', 'setting_functions_threadexp_nofilteredpost' => '推荐回复时推荐非水帖', 'setting_functions_threadexp_nofilteredpost_comment' => '启用后会在第一页推荐回复处推荐相应一定的非水帖。', 'setting_functions_threadexp_filter' => '水帖字数', - 'setting_functions_threadexp_filter_comment' => '系统判断水帖的条件,小于此数值的文章会被判断为水帖,0 为不过滤水帖。', + 'setting_functions_threadexp_filter_comment' => '系统判断水帖的条件,小于此数值的帖子会被判断为水帖,0 为不过滤水帖。', 'setting_functions_threadexp_hidefilteredpost' => '启用隐藏水帖', - 'setting_functions_threadexp_hidefilteredpost_comment' => '开启后系统判断为水帖的文章会被自动隐藏。', + 'setting_functions_threadexp_hidefilteredpost_comment' => '开启后系统判断为水帖的帖子会被自动隐藏。', 'setting_functions_threadexp_filterednovote' => '水帖不能参与回帖投票', - 'setting_functions_threadexp_filterednovote_comment' => '开启后系统判断为水帖的文章将不能参与回帖投票。', + 'setting_functions_threadexp_filterednovote_comment' => '开启后系统判断为水帖的帖子将不能参与回帖投票。', 'setting_functions_makehtml' => '生成HTML', 'setting_functions_makehtml_articlehtmldir' => '文章HTML存放根目录', @@ -1844,7 +1844,7 @@ $lang = array 'setting_functions_other_submitlock' => '启用表单防并发功能', 'setting_functions_other_submitlock_comment' => '选择“是”,将会防止用户同一时间提交多次表单,可有效防止可能刷分的问题。注意: 在未使用内存缓存(Redis、Memcached)的情况下,本功能可能会加重服务器负担', 'setting_functions_other_rssstatus' => '启用 RSS', - 'setting_functions_other_rssstatus_comment' => '选择“是”,将允许用户使用 RSS 客户端软件接收最新的文章、文章更新。注意: 在分类很多的情况下,本功能可能会加重服务器负担', + 'setting_functions_other_rssstatus_comment' => '选择“是”,将允许用户使用 RSS 客户端软件接收最新的帖子、文章更新。注意: 在分类很多的情况下,本功能可能会加重服务器负担', 'setting_functions_other_rssttl' => 'RSS TTL(分钟)', 'setting_functions_other_rssttl_comment' => 'TTL(Time to Live) 是 RSS 2.0 的一项属性,用于控制订阅内容的自动刷新时间,时间越短则资料实时性就越高,但会加重服务器负担,通常可设置为 30~180 范围内的数值', 'setting_functions_other_oltimespan' => '用户在线时间更新时长(分钟)', @@ -1915,30 +1915,30 @@ $lang = array 'setting_editor_smrows_comment' => '发帖页面表情显示的行数', 'setting_permissions' => '用户权限', - 'setting_permissions_alloweditpost' => '允许用户随时编辑的文章类型', - 'setting_permissions_alloweditpost_comment' => '被选中的文章类型将不受用户组中的“编辑文章时间”限制,任何时刻都可以编辑', - 'setting_permissions_allowviewuserthread' => '允许查看用户的主题和文章', - 'setting_permissions_allowviewuserthread_comment' => '设置是否允许查看其他用户的主题和文章,选择相应的版块那么在个人空间将出现“主题”模块和链接', + 'setting_permissions_alloweditpost' => '允许用户随时编辑的帖子类型', + 'setting_permissions_alloweditpost_comment' => '被选中的帖子类型将不受用户组中的“编辑帖子时间”限制,任何时刻都可以编辑', + 'setting_permissions_allowviewuserthread' => '允许查看用户的主题和帖子', + 'setting_permissions_allowviewuserthread_comment' => '设置是否允许查看其他用户的主题和帖子,选择相应的版块那么在个人空间将出现“主题”模块和链接', 'setting_permissions_allowviewuserthread_forum_group' => '所有版块和圈子', - 'setting_permissions_allowviewuserthread_fids' => '允许查看哪些版块的文章', - 'setting_permissions_allowviewuserthread_fids_comment' => '设置允许查看其他用户哪些版块的主题和文章,可以按住 CTRL 多选', - 'setting_permissions_allowmoderatingthread' => '是否提示用户自己有未审核的主题或者文章', - 'setting_permissions_allowmoderatingthread_comment' => '选择“是”,用户如果有正在审核的主题,将可以在文章列表页看到提示', + 'setting_permissions_allowviewuserthread_fids' => '允许查看哪些版块的帖子', + 'setting_permissions_allowviewuserthread_fids_comment' => '设置允许查看其他用户哪些版块的主题和帖子,可以按住 CTRL 多选', + 'setting_permissions_allowmoderatingthread' => '是否提示用户自己有未审核的主题或者帖子', + 'setting_permissions_allowmoderatingthread_comment' => '选择“是”,用户如果有正在审核的主题,将可以在帖子列表页看到提示', 'setting_permissions_memliststatus' => '允许查看会员列表', 'setting_permissions_modratelimit' => '版主评分限制', - 'setting_permissions_modratelimit_comment' => '设置版主只能在自身所管辖的版块范围内对文章进行评分。本限制只对版主有效,允许评分的普通用户及超级版主、管理员不受此限制,因此如果赋予这些用户评分权限,他们仍将可以在全版块范围内进行评分', + 'setting_permissions_modratelimit_comment' => '设置版主只能在自身所管辖的版块范围内对帖子进行评分。本限制只对版主有效,允许评分的普通用户及超级版主、管理员不受此限制,因此如果赋予这些用户评分权限,他们仍将可以在全版块范围内进行评分', 'setting_permissions_dupkarmarate' => '允许重复评分', - 'setting_permissions_dupkarmarate_comment' => '选择“是”将允许用户对一个文章进行多次评分,默认为“否”', - 'setting_permissions_editperdel' => '允许用户编辑文章时删除文章', - 'setting_permissions_editperdel_comment' => '选择“是”将允许用户编辑文章时删除文章,默认为“否”', - 'setting_permissions_hideexpiration' => '文章中[hide]标签最大有效天数', + 'setting_permissions_dupkarmarate_comment' => '选择“是”将允许用户对一个帖子进行多次评分,默认为“否”', + 'setting_permissions_editperdel' => '允许用户编辑帖子时删除帖子', + 'setting_permissions_editperdel_comment' => '选择“是”将允许用户编辑帖子时删除帖子,默认为“否”', + 'setting_permissions_hideexpiration' => '帖子中[hide]标签最大有效天数', 'setting_permissions_hideexpiration_comment' => '距发帖日期天数超过此设置时标签自动失效,0或不填为不限制', 'setting_permissions_reportpost' => '允许报告内容', - 'setting_permissions_minpostsize' => '文章最小字数(字节)', + 'setting_permissions_minpostsize' => '帖子最小字数(字节)', 'setting_permissions_minpostsize_comment' => '管理组成员可通过“发帖不受限制”设置而不受影响,0 为不限制', 'setting_permissions_minpostsize_mobile' => '手机客户端发帖最小字数(字节)', 'setting_permissions_minpostsize_mobile_comment' => '是否单独为手机客户端设置发帖的最小字节数,0 为不单独设置', - 'setting_permissions_maxpostsize' => '文章最大字数(字节)', + 'setting_permissions_maxpostsize' => '帖子最大字数(字节)', 'setting_permissions_maxpostsize_comment' => '管理组成员可通过“发帖不受限制”设置而不受影响', 'setting_permissions_minsubjectsize' => '标题最小字数', 'setting_permissions_minsubjectsize_comment' => '论坛、门户、日志均受限制,管理组成员可通过“发帖不受限制”设置而在论坛模块不受影响,0 为不限制', @@ -1950,11 +1950,11 @@ $lang = array 'setting_permissions_maxpolloptions_comment' => '设定发布投票包含的最大选项数', 'setting_permissions_favorite_storage_comment' => '允许收藏的最大版块 / 主题数,默认为100', 'setting_permissions_karmaratelimit' => '评分时间限制(小时)', - 'setting_permissions_karmaratelimit_comment' => '文章发表后超过此时间限制其他用户将不能对此帖评分,版主和管理员不受此限制,0 为不限制', - 'setting_permissions_editby' => '编辑文章附加编辑记录', - 'setting_permissions_editby_comment' => '在 60 秒后编辑文章添加“本帖由 xxx 于 xxxx-xx-xx 编辑”字样。管理员编辑不受此限制', - 'setting_permissions_post_append' => '启用文章补充功能', - 'setting_permissions_post_append_comment' => '启用后,当用户无法编辑自己的文章时,可以补充内容', + 'setting_permissions_karmaratelimit_comment' => '帖子发表后超过此时间限制其他用户将不能对此帖评分,版主和管理员不受此限制,0 为不限制', + 'setting_permissions_editby' => '编辑帖子附加编辑记录', + 'setting_permissions_editby_comment' => '在 60 秒后编辑帖子添加“本帖由 xxx 于 xxxx-xx-xx 编辑”字样。管理员编辑不受此限制', + 'setting_permissions_post_append' => '启用帖子补充功能', + 'setting_permissions_post_append_comment' => '启用后,当用户无法编辑自己的帖子时,可以补充内容', 'setting_permissions_profilehistory' => '启用个人信息历史记录功能', 'setting_permissions_profilehistory_comment' => '启用后,个人信息历史记录将被保存,可以在后台下载。历史邮箱、安全手机号数据不受此功能限制', 'setting_permissions_nsprofiles' => '个人空间内不展现个人信息', @@ -1973,7 +1973,7 @@ $lang = array 'setting_credits_init' => '初始积分', 'setting_credits_available' => '启用', 'credits_img' => '积分图标', - 'setting_credits_show_in_thread' => '在文章中显示', + 'setting_credits_show_in_thread' => '在帖子中显示', 'setting_credits_export' => '允许兑出', 'setting_credits_export_comment' => '设置该是否允许该项积分兑换为其他积分', 'setting_credits_import' => '允许兑入', @@ -2235,7 +2235,7 @@ $lang = array 'setting_sec_seccode_rule_post_nplimit' => '提交主题时间太短后启用 (秒)', 'setting_sec_seccode_rule_post_nplimit_comment' => '用户打开发帖页面到提交的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', 'setting_sec_seccode_rule_post_vplimit' => '提交回复时间太短后启用 (秒)', - 'setting_sec_seccode_rule_post_vplimit_comment' => '用户打开文章页面到提交回复的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', + 'setting_sec_seccode_rule_post_vplimit_comment' => '用户打开帖子页面到提交回复的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', 'setting_sec_seccode_rule_password' => '修改密码时启用验证码', 'setting_sec_seccode_rule_password_comment' => '设置修改密码时是否启用验证码', @@ -2349,8 +2349,8 @@ $lang = array 'setting_attach_basic_dir_comment' => '服务器路径,属性 777,必须为 web 可访问到的目录,结尾不加 "/",相对目录务必以 "./" 开头', 'setting_attach_basic_url' => '本地附件 URL 地址', 'setting_attach_basic_url_comment' => '可为当前 URL 下的相对地址或 http:// 开头的绝对地址,结尾不加 "/",不能把这个设为远程附件URL地址', - 'setting_attach_basic_imgpost' => '文章中显示图片附件', - 'setting_attach_basic_imgpost_comment' => '在文章中直接将图片或动画附件显示出来,而不需要点击附件链接', + 'setting_attach_basic_imgpost' => '帖子中显示图片附件', + 'setting_attach_basic_imgpost_comment' => '在帖子中直接将图片或动画附件显示出来,而不需要点击附件链接', 'setting_attach_basic_save' => '附件保存方式', 'setting_attach_basic_save_comment' => '本设置只影响新上传的附件,设置更改之前的附件仍存放在原来位置。如使用非标准的保存方式,请确认 mkdir() 函数可正常使用,否则将出现附件无法保存的问题', 'setting_attach_basic_save_disabled' => '您的空间不支持 mkdir 函数,只能使用默认附件保存方式', @@ -2363,7 +2363,7 @@ $lang = array 'setting_attach_basic_multi' => '批量上传', 'setting_attach_basic_simple' => '普通上传', 'setting_attach_basic_allowattachurl' => '附件 URL 地址、媒体附件播放', - 'setting_attach_basic_allowattachurl_comment' => '开启附件 URL 地址后,上传附件的地址可通过 "attach://aid.ext" 方式在任何帖内引用(不支持附件收费以及阅读权限判定),并支持媒体类附件的直接播放,此项设置需要在 用户组 - 文章相关 中允许用户组使用多媒体代码,并保证 config_global.php 配置的本地文件读取模式为 1 或 4 方可生效', + 'setting_attach_basic_allowattachurl_comment' => '开启附件 URL 地址后,上传附件的地址可通过 "attach://aid.ext" 方式在任何帖内引用(不支持附件收费以及阅读权限判定),并支持媒体类附件的直接播放,此项设置需要在 用户组 - 帖子相关 中允许用户组使用多媒体代码,并保证 config_global.php 配置的本地文件读取模式为 1 或 4 方可生效', 'setting_attach_basic_swfupload_comment' => '批量上传采用 Flash 机制上传,可一次上传多个附件,上传时还会有进度显示', 'setting_attach_forumattach' => '论坛附件', @@ -2377,7 +2377,7 @@ $lang = array 'setting_attach_image_watermarktype_IM' => 'ImageMagick', 'setting_attach_image_impath' => 'ImageMagick 程序安装路径', 'setting_attach_image_impath_comment' => 'ImageMagick 程序的安装路径。如果服务器的操作系统为 Windows,路径不要使用长文件名', - 'setting_attach_image_thumbstatus' => '论坛文章附件缩略图设置', + 'setting_attach_image_thumbstatus' => '论坛帖子附件缩略图设置', 'setting_attach_image_thumbstatus_comment' => '您可以设置自动为用户上传的 JPG/PNG/GIF 图片附件添加缩略图或将图片附件缩到指定的大小。不支持动画 GIF 格式', 'setting_attach_image_thumbstatus_none' => '不启用', 'setting_attach_image_thumbstatus_fixnone' => '小于指定大小、保持比率', @@ -2504,7 +2504,7 @@ $lang = array 'setting_attach_antileech_expire' => '附件链接有效期', 'setting_attach_antileech_expire_comment' => '单位:小时,0 或留空表示附件链接永久有效,过期后链接自动更新。本功能可有效防止附件被盗链或附件被软件批量下载,但是会给会员的正常下载带来不便', 'setting_attach_antileech_refcheck' => '下载附件来路检查', - 'setting_attach_antileech_refcheck_comment' => '选择“是”将检查下载附件的来路,来自其他网站或站点的下载请求将被禁止。注意: 本功能在开启“文章中显示图片附件”时,会加重服务器负担', + 'setting_attach_antileech_refcheck_comment' => '选择“是”将检查下载附件的来路,来自其他网站或站点的下载请求将被禁止。注意: 本功能在开启“帖子中显示图片附件”时,会加重服务器负担', 'setting_attach_antileech_remote_hide_dir' => '隐藏远程附件真实路径', 'setting_attach_antileech_remote_hide_dir_comment' => '选择是,将加重本地服务器负担,并明显增加本地服务器流量;选择否,下载的附件与上传的附件文件名将会不一致', @@ -2560,7 +2560,7 @@ $lang = array 'setting_ranklist_all' => '全部', 'setting_ranklist_other' => '其他', 'setting_ranklist_member' => '用户', - 'setting_ranklist_thread' => '文章', + 'setting_ranklist_thread' => '帖子', 'setting_ranklist_blog' => '日志', 'setting_ranklist_poll' => '投票', 'setting_ranklist_activity' => '活动', @@ -2662,7 +2662,7 @@ $lang = array 'setting_mobile_register' => '是否允许手机版注册', 'setting_mobile_register_comment' => '是否开启手机版注册功能,手机注册不会对用户栏目中的注册页必填项进行检测
    请谨慎开启', 'setting_mobile_simpletype' => '开启无图模式', - 'setting_mobile_simpletype_comment' => '默认显示图片,开启后,手机版不显示文章图片', + 'setting_mobile_simpletype_comment' => '默认显示图片,开启后,手机版不显示帖子图片', 'setting_mobile_cachetime' => '页面浏览缓存时间', 'setting_mobile_cachetime_comment' => '设置访问过的页面在用户手机上保存的时间,留空或0为不缓存
    单位:秒', 'setting_mobile_come_from' => '手机发帖来源自定义', @@ -2682,11 +2682,11 @@ $lang = array 'setting_mobile_forum_statshow' => '显示统计信息', 'setting_mobile_forum_statshow_comment' => '开启后将在论坛首页顶部显示论坛统计信息,仅在论坛首页样式为论坛版块或论坛版块含首页四格模式下显示', 'setting_mobile_forum_displayorder3' => '是否显示置顶贴', - 'setting_mobile_forum_displayorder3_comment' => '手机版功能,在文章列表页面中是否显示置顶贴,否为不显示', + 'setting_mobile_forum_displayorder3_comment' => '手机版功能,在帖子列表页面中是否显示置顶贴,否为不显示', 'setting_mobile_forum_topicperpage' => '每页显示主题数', 'setting_mobile_forum_topicperpage_comment' => '主题列表页每页显示主题个数,为空时和界面设置保持一致
    当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', 'setting_mobile_forum_postperpage' => '主题内每页显示帖数', - 'setting_mobile_forum_postperpage_comment' => '主题内每页显示的文章数目,为空时和界面设置保持一致
    当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', + 'setting_mobile_forum_postperpage_comment' => '主题内每页显示的帖子数目,为空时和界面设置保持一致
    当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', 'setting_mobile_forum_forumview' => '首页分区展示方式', 'setting_mobile_forum_forumview_comment' => '如“收起”,论坛首页将默认只展示分区标题
    用户需点击分区展开该分区下的版块列表', 'setting_mobile_forum_iconautowidth' => '版块图标宽度自适应', @@ -2695,7 +2695,7 @@ $lang = array 'unwind' => '展开', 'setting_antitheft' => '防采集设置', - 'setting_antitheft_tips' => '
  • 防采集功能不影响正常用户浏览检验。
  • 可防止本站主题、文章和日志被非法采集。
  • 当IP同时存在于黑/白名单时,白名单优先。
  • 开启防采集功能后文章列表页面的文章预览功能将不可使用。
  • ', + 'setting_antitheft_tips' => '
  • 防采集功能不影响正常用户浏览检验。
  • 可防止本站主题、文章和日志被非法采集。
  • 当IP同时存在于黑/白名单时,白名单优先。
  • 开启防采集功能后帖子列表页面的帖子预览功能将不可使用。
  • ', 'setting_antitheft_status' => '防采集全局设置', 'setting_antitheft_allow' => '是否开启防采集', 'setting_antitheft_black' => '黑名单防采集过滤IP', @@ -2807,8 +2807,8 @@ $lang = array 'forums_grid_high_light' => '是否显示主题高亮', 'forums_grid_high_light_comment' => '在首页四格中显示主题高亮效果', 'forums_grid_target_blank' => '是否在新窗口打开', - 'forums_grid_show_tips' => '是否显示文章信息', - 'forums_grid_show_tips_comment' => '鼠标移到标题上方时,显示文章详细信息', + 'forums_grid_show_tips' => '是否显示帖子信息', + 'forums_grid_show_tips_comment' => '鼠标移到标题上方时,显示帖子详细信息', 'forums_grid_target_blank_comment' => '在新窗口中打开链接', 'forums_grid_cache_life' => '缓存有效期', 'forums_grid_cache_life_comment' => '设置论坛首页四格缓存更新的时间,单位为秒,0代表默认600秒', @@ -2939,27 +2939,27 @@ $lang = array 'forums_edit_extend_recommend_top_comment' => '是否在本版显示全局置顶和分版置顶', 'forums_edit_sub_multi_tips' => '子版块无需修改', - 'forums_edit_posts' => '文章选项', + 'forums_edit_posts' => '帖子选项', 'forums_edit_posts_modposts' => '发帖审核', - 'forums_edit_posts_modposts_comment' => '选择“是”将使用户在本版发表的文章待版主或管理员审查通过后才显示出来,打开此功能后,您可以在用户组中设定哪些组发帖可不经审核,也可以在管理组中设定哪些组可以审核别人的文章', - 'forums_edit_posts_alloweditpost' => '允许编辑文章', - 'forums_edit_posts_alloweditpost_comment' => '选择“是”将允许用户编辑本版发表的文章', + 'forums_edit_posts_modposts_comment' => '选择“是”将使用户在本版发表的帖子待版主或管理员审查通过后才显示出来,打开此功能后,您可以在用户组中设定哪些组发帖可不经审核,也可以在管理组中设定哪些组可以审核别人的帖子', + 'forums_edit_posts_alloweditpost' => '允许编辑帖子', + 'forums_edit_posts_alloweditpost_comment' => '选择“是”将允许用户编辑本版发表的帖子', 'forums_edit_posts_modposts_threads' => '审核新主题', 'forums_edit_posts_modposts_posts' => '审核新主题和新回复', 'forums_edit_posts_recyclebin' => '回收站', 'forums_edit_posts_recyclebin_comment' => '是否在本版启用回收站功能,打开此功能后,所有被删除主题和回帖将被放在回收站中,而不会被直接删除', 'forums_edit_posts_html' => '允许使用 HTML 代码', - 'forums_edit_posts_html_comment' => '注意: 选择“是”将不屏蔽文章中的任何代码,将带来严重的安全隐患,请慎用', + 'forums_edit_posts_html_comment' => '注意: 选择“是”将不屏蔽帖子中的任何代码,将带来严重的安全隐患,请慎用', 'forums_edit_posts_bbcode' => '允许使用Discuz!代码', 'forums_edit_posts_bbcode_comment' => 'Discuz! 代码是一种简化和安全的页面格式代码', 'forums_edit_posts_imgcode' => '允许使用 [img] 代码', - 'forums_edit_posts_imgcode_comment' => '允许 [img] 代码作者将可以在文章插入其他网站的图片并显示', + 'forums_edit_posts_imgcode_comment' => '允许 [img] 代码作者将可以在帖子插入其他网站的图片并显示', 'forums_edit_posts_mediacode' => '允许使用多媒体代码', - 'forums_edit_posts_mediacode_comment' => '允许 [audio] [media] [flash] 等多媒体代码后,作者将可以在文章插入多媒体文件并显示', + 'forums_edit_posts_mediacode_comment' => '允许 [audio] [media] [flash] 等多媒体代码后,作者将可以在帖子插入多媒体文件并显示', 'forums_edit_posts_smilies' => '允许使用表情', 'forums_edit_posts_smilies_comment' => '表情提供对表情符号,如“:)”的解析,使之作为图片显示', 'forums_edit_posts_jammer' => '启用内容干扰码', - 'forums_edit_posts_jammer_comment' => '选择“是”将在文章内容中增加随机的干扰字串,使得访问者无法复制原始内容。注意: 本功能会轻微加重服务器负担', + 'forums_edit_posts_jammer_comment' => '选择“是”将在帖子内容中增加随机的干扰字串,使得访问者无法复制原始内容。注意: 本功能会轻微加重服务器负担', 'forums_edit_posts_anonymous' => '允许匿名发帖', 'forums_edit_posts_anonymous_comment' => '是否允许用户在本版匿名发表主题和回复,只要用户组或本版块允许,用户均可使用匿名发帖功能。匿名发帖不同于游客发帖,用户需要登录后才可使用,版主和管理员可以查看真实作者', 'forums_edit_posts_disablethumb' => '禁用图片附件添加缩略图', @@ -2996,7 +2996,7 @@ $lang = array 'forums_edit_posts_allowfeed' => '允许发送广播和动态', 'forums_edit_posts_allowfeed_comment' => '开启后默认允许用户发送广播和动态,同时用户也可以选择不发送,隐私版块建议设为否。如果关闭广播功能,该设置将无效。', 'forums_edit_posts_commentitem' => '普通主题点评预置观点', - 'forums_edit_posts_commentitem_comment' => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点。只有开启文章点评功能后本设置才生效,如留空表示使用全局的“普通主题点评预置观点”设置', + 'forums_edit_posts_commentitem_comment' => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点。只有开启帖子点评功能后本设置才生效,如留空表示使用全局的“普通主题点评预置观点”设置', 'forums_edit_posts_noantitheft' => '关闭防采集', 'forums_edit_posts_noantitheft_comment' => '关闭防采集功能可节省少量服务器资源,建议灌水类版块关闭防采集功能。', 'forums_edit_posts_noforumhidewater' => '关闭隐藏水帖', @@ -3014,7 +3014,7 @@ $lang = array 'forums_edit_threadtypes' => '主题分类', 'forums_edit_threadtypes_comment' => '您可以启用已有的主题分类或添加新主题分类应用于本版块,在分类很多的情况下,建议只有重要的分类使用“平板显示”方式,更多的分类使用“下拉显示”方式', 'forums_edit_threadtypes_config' => '主题分类', - 'forums_edit_threadtypes_tips' => '
    • “主题分类”用于给分版块中的主题进行归类。作者在发表新主题时,可以按照预设的类型给主题归类;用户也可以在版块中按照类别地进行浏览(需在“编辑版块”中设定)。与子版块功能不同的是,主题分类只用来归类特定版块中的文章,适用于相关性大而又需要某种分类的情况。
    • “主题分类”是全论坛共用的,您可以在“编辑版块”中设置当前版块以某些类型来将主题分类。
    • 如果您将某些主题分类更名、删除或修改显示顺序,请编辑与此分类相关联的版块(不需做任何改动)后提交,主题分类才能被更新。
    ', + 'forums_edit_threadtypes_tips' => '
    • “主题分类”用于给分版块中的主题进行归类。作者在发表新主题时,可以按照预设的类型给主题归类;用户也可以在版块中按照类别地进行浏览(需在“编辑版块”中设定)。与子版块功能不同的是,主题分类只用来归类特定版块中的帖子,适用于相关性大而又需要某种分类的情况。
    • “主题分类”是全论坛共用的,您可以在“编辑版块”中设置当前版块以某些类型来将主题分类。
    • 如果您将某些主题分类更名、删除或修改显示顺序,请编辑与此分类相关联的版块(不需做任何改动)后提交,主题分类才能被更新。
    ', 'forums_edit_threadtypes_name' => '分类名称', 'forums_edit_threadtypes_note' => '分类说明', 'forums_edit_threadtypes_showtype' => '显示方式', @@ -3080,7 +3080,7 @@ $lang = array 'forums_edit_perm_postattach' => '上传附件', 'forums_edit_perm_postimage' => '上传图片', 'forums_edit_perm_mask' => '特殊用户', - 'forums_edit_perm_forum_comment' => '某权限如果全部未选则表示如下含义:
      浏览版块,全部用户组具有浏览版块文章权限;发新话题,除游客以外的用户组具有发帖权限;发表回复,除游客以外的用户组具有回复权限;查看附件,全部用户组具有下载/查看附件权限;上传附件,除游客以外的用户组具有上传附件权限;上传图片,除游客以外的用户组具有上传图片权限', + 'forums_edit_perm_forum_comment' => '某权限如果全部未选则表示如下含义:
      浏览版块,全部用户组具有浏览版块帖子权限;发新话题,除游客以外的用户组具有发帖权限;发表回复,除游客以外的用户组具有回复权限;查看附件,全部用户组具有下载/查看附件权限;上传附件,除游客以外的用户组具有上传附件权限;上传图片,除游客以外的用户组具有上传图片权限', 'forums_edit_perm_spview' => '不受限制的用户组', 'forums_edit_perm_formula' => '权限表达式设置', 'forums_edit_perm_formula_comment' => '当您设定了权限表达式后,只有符合此表达式的会员才可以浏览本版块。如 "posts > 100 and extcredits1 > 10" 表示 "发帖数 > 100 并且 威望 > 10"
    日期格式 "{Y-M-D}",如 "{2009-10-1}"。IP 格式 "{x.x.x.x}",既可输入完整地址,也可只输入 IP 开头,如 "{10.0.0.1}"、"{192.168.0}"', @@ -3118,11 +3118,11 @@ $lang = array 'forums_moderators_inherited' => '由上级版块继承', 'forums_moderators_edit' => '编辑版主', - 'forums_delete_comment' => '删除本版块及其中所有文章', + 'forums_delete_comment' => '删除本版块及其中所有帖子', 'forums_merge' => '版块合并', 'forums_merge_source' => '源版块', - 'forums_merge_source_comment' => '源版块的文章全部转入目标版块,同时删除源版块', + 'forums_merge_source_comment' => '源版块的帖子全部转入目标版块,同时删除源版块', 'forums_merge_target' => '目标版块', 'threadtype_infotypes' => '分类信息管理', @@ -3135,11 +3135,11 @@ $lang = array 'threadtype_infotypes_add_option' => '添加分类信息字段', 'threadtype_infotypes_exist_option' => '已有字段', 'threadtype_infotypes_insert_template' => '插入模板', - 'threadtype_infotypes_add_template' => '插入文章', + 'threadtype_infotypes_add_template' => '插入帖子', 'threadtype_infotypes_add_stemplate' => '插入主题', 'threadtype_infotypes_add_ptemplate' => '插入发帖', 'threadtype_infotypes_add_btemplate' => '插入调用', - 'threadtype_infotypes_template' => '分类信息文章显示模板', + 'threadtype_infotypes_template' => '分类信息帖子显示模板', 'threadtype_infotypes_stemplate' => '分类信息主题显示模板', 'threadtype_infotypes_ptemplate' => '分类信息发帖显示模板', 'threadtype_infotypes_btemplate' => '分类信息模块调用显示模板', @@ -3212,7 +3212,7 @@ $lang = array 'threadtype_edit_profile' => '关联用户栏目初始值', 'threadtype_edit_profile_comment' => '可以指定某个用户栏目作为初始值,方便用户在发帖时填写。
    此项优先于默认值', 'threadtype_template' => '模板', - 'threadtype_template_viewthread' => '文章页模板', + 'threadtype_template_viewthread' => '帖子页模板', 'threadtype_template_forumdisplay' => '列表页模板', 'threadtype_template_post' => '发帖页模板', 'threadtype_template_diy' => 'DIY调用模板', @@ -3322,7 +3322,7 @@ $lang = array 'styles_edit_type_url' => '链接', 'styles_edit_type_wrap' => '主体表格', 'styles_edit_type_menu' => '菜单', - 'styles_edit_type_post' => '文章内容', + 'styles_edit_type_post' => '帖子内容', 'styles_edit_type_input' => '输入框', 'styles_edit_type_dropmenu' => '下拉菜单', 'styles_edit_type_float' => '浮动窗口', @@ -3356,10 +3356,10 @@ $lang = array 'styles_edit_menucurbgcolor' => '当前菜单背景', 'styles_edit_menuhoverbgcolor' => '菜单高亮背景', 'styles_edit_menuhovertext' => '菜单高亮文字颜色', - 'styles_edit_msgfontsize' => '文章内容字号', - 'styles_edit_msgbigsize' => '文章内容大字号', + 'styles_edit_msgfontsize' => '帖子内容字号', + 'styles_edit_msgbigsize' => '帖子内容大字号', 'styles_edit_contentwidth' => '阅读区域宽度', - 'styles_edit_contentseparate' => '文章间隔颜色', + 'styles_edit_contentseparate' => '帖子间隔颜色', 'styles_edit_inputborder' => '输入框边框浅色', 'styles_edit_inputborderdarkcolor' => '输入框边框深色', 'styles_edit_inputbg' => '输入框背景色', @@ -3370,7 +3370,7 @@ $lang = array 'styles_edit_commonborder' => '通用边框颜色', 'styles_edit_commonbg' => '通用显示区域背景颜色', 'styles_edit_specialborder' => '彩色区域边框', - 'styles_edit_specialbg' => '彩色区域背景色(文章用户信息栏、需强调的表头等)', + 'styles_edit_specialbg' => '彩色区域背景色(帖子用户信息栏、需强调的表头等)', 'styles_edit_interleavecolor' => '隔行换色背景', 'styles_edit_noticetext' => '提示信息颜色', 'styles_edit_iconbgcolor' => '风格图标背景色', @@ -3514,7 +3514,7 @@ $lang = array 'members_admin_comment' => '用户组名称以黑体字显示的,为系统用户组;以斜体字显示的,为自定义用户组;否则为会员用户组', 'members_export_tips' => '
  • 用户组名称以黑体字显示的,为系统用户组;以斜体字显示的,为自定义用户组;否则为会员用户组。
  • 导出用户信息最多支持 10000 条数据。导出的文件可用 EXCEL、WPS表格、腾讯文档等工具打开。
  • ', - 'members_delete_post' => '文章', + 'members_delete_post' => '帖子', 'members_delete_blog' => '日志', 'members_delete_pic' => '图片', 'members_delete_doing' => '记录', @@ -3655,7 +3655,7 @@ $lang = array 'members_edit_current_status' => '当前状态', 'members_ban_validity' => '禁止用户有效期', 'members_ban_validity_comment' => '在有效期过后该用户可以自动解除限制,成为普通用户', - 'members_ban_delpost' => '文章', + 'members_ban_delpost' => '帖子', 'members_ban_delfollow' => '广播', 'members_ban_delothers' => '杂项', 'members_ban_delblog' => '日志', @@ -3887,8 +3887,8 @@ $lang = array 'members_profile_edit_invisible' => '资料页面隐藏', 'members_profile_edit_invisible_comment' => '如果设为是,则不论个人隐私如何设定都不会在个人空间资料页面显示', 'members_profile_edit_showincard' => '是否在名片中显示', - 'members_profile_edit_showinthread' => '是否在文章中显示', - 'members_profile_edit_showinthread_comment' => '选择是,还需在文章内容页中选择展示位置', + 'members_profile_edit_showinthread' => '是否在帖子中显示', + 'members_profile_edit_showinthread_comment' => '选择是,还需在帖子内容页中选择展示位置', 'members_profile_edit_showinregister' => '是否在注册页面显示', 'members_profile_edit_allowsearch' => '允许搜索', 'members_profile_edit_default_privacy' => '默认隐私', @@ -3923,15 +3923,15 @@ $lang = array 'admingroup_edit_permdetail' => '权限', 'admingroup_edit_admincpperm' => '管理中心权限', 'admingroup_edit_threadperm' => '主题管理权限', - 'admingroup_edit_postperm' => '文章管理权限', + 'admingroup_edit_postperm' => '帖子管理权限', 'admingroup_edit_modcpperm' => '管理面板权限', 'admingroup_edit_spaceperm' => '空间管理权限', 'admingroup_edit_portalperm' => '门户管理权限', 'admingroup_edit_otherperm' => '其他权限', 'admingroup_edit_mod_thread' => '允许管理主题', 'admingroup_edit_mod_thread_comment' => '设置是否允许对管理范围内的主题进行置顶、移动等管理操作', - 'admingroup_edit_edit_post' => '允许编辑文章', - 'admingroup_edit_edit_post_comment' => '设置是否允许编辑管理范围内的文章', + 'admingroup_edit_edit_post' => '允许编辑帖子', + 'admingroup_edit_edit_post_comment' => '设置是否允许编辑管理范围内的帖子', 'admingroup_edit_edit_poll' => '允许编辑投票', 'admingroup_edit_edit_poll_comment' => '设置是否允许编辑管理范围内投票主题的选项', 'admingroup_edit_edit_trade' => '允许编辑商品', @@ -3969,9 +3969,9 @@ $lang = array 'admingroup_edit_edittype_thread' => '允许编辑主题分类', 'admingroup_edit_edittype_thread_comment' => '设置是否允许编辑管理范围内主题的分类', 'admingroup_edit_stamp_thread' => '允许添加主题图章', - 'admingroup_edit_stamp_thread_comment' => '设置是否允许给主题在文章内容页添加图章', + 'admingroup_edit_stamp_thread_comment' => '设置是否允许给主题在帖子内容页添加图章', 'admingroup_edit_stamp_list' => '允许添加主题图标', - 'admingroup_edit_stamp_list_comment' => '设置是否允许给主题在文章列表页添加图标', + 'admingroup_edit_stamp_list_comment' => '设置是否允许给主题在帖子列表页添加图标', 'admingroup_edit_copy_thread' => '允许复制主题', 'admingroup_edit_copy_thread_comment' => '设置是否允许复制管理范围内的主题', 'admingroup_edit_merge_thread' => '允许合并主题', @@ -3984,18 +3984,18 @@ $lang = array 'admingroup_edit_view_report_comment' => '设置是否允许查看管理范围内的用户报告', 'admingroup_edit_edit_forum' => '允许编辑版块', 'admingroup_edit_edit_forum_comment' => '设置是否允许编辑管理范围内的版块的资料', - 'admingroup_edit_warn_post' => '允许警告文章', - 'admingroup_edit_warn_post_comment' => '设置是否允许警告管理范围内的文章', - 'admingroup_edit_mod_post' => '允许审核文章', - 'admingroup_edit_mod_post_comment' => '设置是否允许审核用户发表的文章,只在站点设置需要审核时有效', - 'admingroup_edit_del_post' => '允许删除文章', - 'admingroup_edit_del_post_comment' => '设置是否允许删除管理范围内的文章', + 'admingroup_edit_warn_post' => '允许警告帖子', + 'admingroup_edit_warn_post_comment' => '设置是否允许警告管理范围内的帖子', + 'admingroup_edit_mod_post' => '允许审核帖子', + 'admingroup_edit_mod_post_comment' => '设置是否允许审核用户发表的帖子,只在站点设置需要审核时有效', + 'admingroup_edit_del_post' => '允许删除帖子', + 'admingroup_edit_del_post_comment' => '设置是否允许删除管理范围内的帖子', 'admingroup_edit_stick_post' => '允许置顶回帖', 'admingroup_edit_stick_post_comment' => '设置是否允许置顶管理范围内的回帖', 'admingroup_edit_manage_tag' => '允许管理标签', 'admingroup_edit_manage_tag_comment' => '设置是否允许管理管理范围内的标签', - 'admingroup_edit_ban_post' => '允许屏蔽文章', - 'admingroup_edit_ban_post_comment' => '设置是否允许屏蔽管理范围内的文章', + 'admingroup_edit_ban_post' => '允许屏蔽帖子', + 'admingroup_edit_ban_post_comment' => '设置是否允许屏蔽管理范围内的帖子', 'admingroup_edit_mass_prune' => '允许批量删帖', 'admingroup_edit_mass_prune_comment' => '设置是否允许通过管理面板批量删帖,版主在面板中批量删帖的范围是 1 周内,超级版主删帖范围是 2 周内, 管理员无限制', 'admingroup_edit_refund' => '允许强制退款', @@ -4020,7 +4020,7 @@ $lang = array 'admingroup_edit_mod_user_comment' => '设置是否允许审核新注册用户,只在站点设置需要人工审核新用户时有效', 'admingroup_edit_post_announce' => '允许发布公告', 'admingroup_edit_post_announce_comment' => '设置是否允许发布站点公告', - 'admingroup_edit_clear_recycle' => '允许删除回收站的文章', + 'admingroup_edit_clear_recycle' => '允许删除回收站的帖子', 'admingroup_edit_clear_recycle_comment' => '设置是否允在“前台->管理面板->主题回收站”中删除主题', 'admingroup_edit_view_log' => '允许查看管理日志', 'admingroup_edit_view_log_comment' => '设置是否允许查看管理日志', @@ -4206,7 +4206,7 @@ $lang = array 'usergroups_edit_basic_visit_super' => '超级访问', 'usergroups_edit_basic_visit_comment' => '禁止访问: 禁止用户浏览本站任何页面
    正常访问: 当站点开放的时候,可以正常浏览页面
    超级访问: 即便站点关闭也可以访问,一般用于管理员或站内测试组', 'usergroups_edit_basic_read_access' => '阅读权限', - 'usergroups_edit_basic_read_access_comment' => '设置用户浏览文章或附件的权限级别,范围 0~255,0 为禁止用户浏览任何文章或附件。当用户的阅读权限小于文章或附件的阅读权限许可(默认时为 1)时,用户将不能阅读该文章或下载该附件', + 'usergroups_edit_basic_read_access_comment' => '设置用户浏览帖子或附件的权限级别,范围 0~255,0 为禁止用户浏览任何帖子或附件。当用户的阅读权限小于帖子或附件的阅读权限许可(默认时为 1)时,用户将不能阅读该帖子或下载该附件', 'usergroups_edit_basic_max_friend_number' => '最多好友数', 'usergroups_edit_basic_max_friend_number_comment' => '0为无限', 'usergroups_edit_basic_view_profile' => '允许查看用户资料', @@ -4242,7 +4242,7 @@ $lang = array 'usergroups_edit_basic_blog' => '允许使用文集', 'usergroups_edit_basic_blog_comment' => '设置是否允许把文章加入个人的文集中,从而供他人浏览', 'usergroups_edit_basic_cstatus' => '允许自定义头衔', - 'usergroups_edit_basic_cstatus_comment' => '设置是否允许用户设置自己的头衔名字并在文章中显示', + 'usergroups_edit_basic_cstatus_comment' => '设置是否允许用户设置自己的头衔名字并在帖子中显示', 'usergroups_edit_basic_hour_threads' => '会员每小时发主题数限制', 'usergroups_edit_basic_hour_threads_comment' => '设置允许会员每小时最多的发主题数量,可以配合灌水预防功能进一步限制会员的发帖,可设置为 1~255 范围内的数值,0 为不限制。此功能会轻微加重服务器负担,且对游客无效', 'usergroups_edit_basic_hour_posts' => '会员每小时发回帖数限制', @@ -4326,7 +4326,7 @@ $lang = array 'usergroups_edit_special_rushreply' => '允许发表抢楼帖', 'usergroups_edit_special_rushreply_comment' => '抢楼帖不允许用户删除回帖', - 'usergroups_edit_post' => '文章相关', + 'usergroups_edit_post' => '帖子相关', 'usergroups_edit_post_new' => '允许发新话题', 'usergroups_edit_post_new_comment' => '设置是否允许发新话题。注意: 只有当用户组阅读权限高于 0 时,才能发新话题', 'usergroups_edit_post_reply' => '允许发表回复', @@ -4343,25 +4343,25 @@ $lang = array 'usergroups_edit_post_url_comment' => '是否允许发帖包含URL,合理的设置可以有效的减少广告帖的量', 'usergroups_edit_post_url_enable' => '允许,并正常解析', 'usergroups_edit_post_url_unhandle' => '允许,但不解析', - 'usergroups_edit_post_url_mod' => '允许,但文章进入审核', + 'usergroups_edit_post_url_mod' => '允许,但帖子进入审核', 'usergroups_edit_post_url_banned' => '禁止发表', 'usergroups_edit_post_url_group' => '允许发站外URL', 'usergroups_edit_post_anonymous' => '允许发匿名帖', 'usergroups_edit_post_anonymous_comment' => '是否允许用户匿名发表主题和回复,只要用户组或本论坛允许,用户均可使用匿名发帖功能。匿名发帖不同于游客发帖,用户需要登录后才可使用,版主和管理员可以查看真实作者', - 'usergroups_edit_post_set_read_perm' => '允许设置文章权限', - 'usergroups_edit_post_set_read_perm_comment' => '设置是否允许设置文章需要指定阅读权限才可浏览', + 'usergroups_edit_post_set_read_perm' => '允许设置帖子权限', + 'usergroups_edit_post_set_read_perm_comment' => '设置是否允许设置帖子需要指定阅读权限才可浏览', 'usergroups_edit_post_maxprice' => '主题(附件)最高售价', - 'usergroups_edit_post_maxprice_comment' => '主题(附件)出售使得作者可以将自己发表的主题(附件)隐藏起来,只有当浏览者向作者支付相应的交易积分后才能查看主题(附件)内容。此处设置用户出售主题(附件)时允许设置的最高价格,0 为不允许用户出售。注意: 本功能需在 全局设置中启用交易积分后才可使用。如开启版主及管理员的出售主题(附件)功能,请将其最高价格设置为高于普通用户组允许的最高价格,这样在文章被编辑时不至于导致主题(附件)售价的硬性下调', + 'usergroups_edit_post_maxprice_comment' => '主题(附件)出售使得作者可以将自己发表的主题(附件)隐藏起来,只有当浏览者向作者支付相应的交易积分后才能查看主题(附件)内容。此处设置用户出售主题(附件)时允许设置的最高价格,0 为不允许用户出售。注意: 本功能需在 全局设置中启用交易积分后才可使用。如开启版主及管理员的出售主题(附件)功能,请将其最高价格设置为高于普通用户组允许的最高价格,这样在帖子被编辑时不至于导致主题(附件)售价的硬性下调', 'usergroups_edit_post_tag' => '允许使用标签', 'usergroups_edit_post_tag_comment' => '设置是否允许发表新话题时使用标签', 'usergroups_edit_post_hide_code' => '允许使用 [hide] 代码', - 'usergroups_edit_post_hide_code_comment' => '设置是否允许文章中使用 [hide] 隐藏标签', + 'usergroups_edit_post_hide_code_comment' => '设置是否允许帖子中使用 [hide] 隐藏标签', 'usergroups_edit_post_mediacode' => '允许使用 [audio] [media] [flash] 等多媒体代码', 'usergroups_edit_post_mediacode_comment' => '设置是否允许 [audio] [media] [flash] 等多媒体代码', 'usergroups_edit_post_html' => '允许使用 HTML 代码', 'usergroups_edit_post_html_comment' => '注意: 开放 HTML 功能将产生安全隐患,请慎用。建议只在十分必要的情况下使用,并限制只开放给最核心的管理人员', 'usergroups_edit_post_custom_bbcode' => '允许使用自定义 Discuz! 代码', - 'usergroups_edit_post_custom_bbcode_comment' => '设置是否解析用户文章中的自定义 Discuz! 代码。注意: 自定义 Discuz! 代码由管理团队成员在管理中心中自行定义,不包括系统内置的数十种代码', + 'usergroups_edit_post_custom_bbcode_comment' => '设置是否解析用户帖子中的自定义 Discuz! 代码。注意: 自定义 Discuz! 代码由管理团队成员在管理中心中自行定义,不包括系统内置的数十种代码', 'usergroups_edit_post_bio_bbcode' => '允许自我介绍中使用 Discuz! 代码', 'usergroups_edit_post_bio_bbcode_comment' => '设置是否解析用户自我介绍中的 Discuz! 代码', 'usergroups_edit_post_bio_img_code' => '允许自我介绍中使用 [img] 代码', @@ -4369,7 +4369,7 @@ $lang = array 'usergroups_edit_post_max_bio_size' => '自我介绍文字最大长度', 'usergroups_edit_post_max_bio_size_comment' => '设置用户自我介绍最大字节数,0 为使用系统默认值 200', 'usergroups_edit_post_begincode' => '允许使用 [begin] 代码', - 'usergroups_edit_post_begincode_comment' => '设置是否允许文章中使用 [begin] 开头动画标签', + 'usergroups_edit_post_begincode_comment' => '设置是否允许帖子中使用 [begin] 开头动画标签', 'usergroups_edit_post_sig_bbcode' => '允许签名中使用 Discuz! 代码', 'usergroups_edit_post_sig_bbcode_comment' => '设置是否解析用户签名中的 Discuz! 代码', 'usergroups_edit_post_sig_img_code' => '允许签名中使用 [img] 代码', @@ -4378,14 +4378,14 @@ $lang = array 'usergroups_edit_post_max_sig_size_comment' => '设置用户签名最大字节数,0 为不允许用户使用签名', 'usergroups_edit_post_recommend' => '主题评价影响值', 'usergroups_edit_post_recommend_comment' => '设置用户评价一次主题,对主题评价指数的影响,0 为不允许用户评价主题', - 'usergroups_edit_post_edit_time_limit' => '编辑文章时间限制(分钟)', - 'usergroups_edit_post_edit_time_limit_comment' => '文章作者发帖后超过此时间限制将不能再编辑帖,版主和管理员在 全局 - 用户权限 选择“允许用户随时编辑的文章类型”后不受此限制,0 为不限制', - 'usergroups_edit_post_allowcommentpost' => '文章直接点评', - 'usergroups_edit_post_allowcommentpost_comment' => '设置允许点评的范围,如不选择表示不启用点评功能
    注意:只有在 全局 - 站点功能 - 文章点评 中开启直接点评功能,本设置才会生效', + 'usergroups_edit_post_edit_time_limit' => '编辑帖子时间限制(分钟)', + 'usergroups_edit_post_edit_time_limit_comment' => '帖子作者发帖后超过此时间限制将不能再编辑帖,版主和管理员在 全局 - 用户权限 选择“允许用户随时编辑的帖子类型”后不受此限制,0 为不限制', + 'usergroups_edit_post_allowcommentpost' => '帖子直接点评', + 'usergroups_edit_post_allowcommentpost_comment' => '设置允许点评的范围,如不选择表示不启用点评功能
    注意:只有在 全局 - 站点功能 - 帖子点评 中开启直接点评功能,本设置才会生效', 'usergroups_edit_post_allowcommentpost_firstpost' => '点评主题', 'usergroups_edit_post_allowcommentpost_reply' => '点评回复', 'usergroups_edit_post_allowcommentreply' => '楼层回复点评', - 'usergroups_edit_post_allowcommentreply_comment' => '允许用户通过点击文章中的“回复”链接回复他人回帖时,自动对该楼层产生点评
    注意:只有在 全局 - 站点功能 - 文章点评 中开启楼层回复功能,本设置才会生效;点击主题中的“回复”链接,不会对主题产生点评', + 'usergroups_edit_post_allowcommentreply_comment' => '允许用户通过点击帖子中的“回复”链接回复他人回帖时,自动对该楼层产生点评
    注意:只有在 全局 - 站点功能 - 帖子点评 中开启楼层回复功能,本设置才会生效;点击主题中的“回复”链接,不会对主题产生点评', 'usergroups_edit_post_allowat' => '发帖时可 @ 其他人的数量', 'usergroups_edit_post_allowat_comment' => '0为不允许 @ 其他人(包括他关注的人和他的好友)', 'usergroups_edit_post_allowsave' => '允许保存草稿', @@ -4395,7 +4395,7 @@ $lang = array 'usergroups_edit_post_allowsavenum' => '允许保存草稿的数量', 'usergroups_edit_post_allowsavenum_comment' => '设置为 0 为不限制用户保存草稿的数量(高流量站点不建议限制草稿数)', 'usergroups_edit_post_allowcommentitem' => '允许用户在点评时发表观点', - 'usergroups_edit_post_allowcommentitem_comment' => '允许用户在点评时发表观点
    注意:只有在 全局 - 站点功能 - 文章点评 中开启直接点评功能,本设置才会生效', + 'usergroups_edit_post_allowcommentitem_comment' => '允许用户在点评时发表观点
    注意:只有在 全局 - 站点功能 - 帖子点评 中开启直接点评功能,本设置才会生效', 'usergroups_edit_post_allow_down_remote_img' => '允许下载远程图片', 'usergroups_edit_post_allow_down_remote_img_comment' => '远程图片本地化保存', 'usergroups_edit_post_allowreplycredit' => '允许设置回帖奖励', @@ -4405,7 +4405,7 @@ $lang = array 'usergroups_edit_post_allowcommentcollection' => '允许评论淘专辑', 'usergroups_edit_post_allowcommentcollection_comment' => '允许用户在主题和淘专辑页面进行评论。', 'usergroups_edit_post_allowimgcontent' => '允许主题内容生成图片', - 'usergroups_edit_post_allowimgcontent_comment' => '看帖时所有文章正文内容将以字符形式生成图片展示。', + 'usergroups_edit_post_allowimgcontent_comment' => '看帖时所有帖子正文内容将以字符形式生成图片展示。', 'usergroups_edit_attach' => '附件相关', 'usergroups_edit_attach_get' => '允许下载附件', 'usergroups_edit_attach_get_comment' => '设置是否允许在没有设置特殊权限的论坛中下载附件', @@ -4548,7 +4548,7 @@ $lang = array 'groups_type_search' => '搜索圈子', 'groups_manage_name' => '圈子名称', 'groups_manage_id' => '圈子 ID', - 'groups_manage_postcount' => '文章数', + 'groups_manage_postcount' => '帖子数', 'groups_manage_replycount' => '回复数', 'groups_manage_createtime' => '创建时间', 'groups_manage_updatetime' => '最后更新时间', @@ -4647,9 +4647,9 @@ $lang = array 'threads_forumstick_forum' => '论坛版块', 'threads_forumstick_group' => '圈子分类', - 'threads_postposition' => '文章优化', - 'threads_postposition_tips' => '
  • 本功能主要用于优化回复数量较多的主题在显示时候的性能,通常情况下,当文章回复数量超过5000或者预计此帖的回复数量将会在5000 以上的时候,您可以将该主题加入优化队列
  • -
  • 当主题进入优化队列后,我们不建议对该主题的某个文章进行删除操作,如果该内容确实违规,我们建议您屏蔽它即可
  • + 'threads_postposition' => '帖子优化', + 'threads_postposition_tips' => '
  • 本功能主要用于优化回复数量较多的主题在显示时候的性能,通常情况下,当帖子回复数量超过5000或者预计此帖的回复数量将会在5000 以上的时候,您可以将该主题加入优化队列
  • +
  • 当主题进入优化队列后,我们不建议对该主题的某个帖子进行删除操作,如果该内容确实违规,我们建议您屏蔽它即可
  • 当您发起抢楼活动的时候,系统会自动将抢楼的主题放入优化队列。您也可以在这里将任意一个回复较多的主题放入优化队列
  • ', @@ -4664,13 +4664,13 @@ $lang = array 'srch_replies' => '根据回复数大于', 'srch_tid' => '或直接指定主题 tid =', - 'prune_tips' => '
  • 批量删帖仅用于删除违规文章使用,如您需要批量删除历史旧帖,请使用批量主题管理功能。
  • 使用此功能,需同时提供起始时间和终止时间其中之一,及发帖用户名、发帖 IP、内容关键字其中之一,至少共二项必要的条件,否则将无法进行操作。
  • 如果符合删除条件的文章为主题第一帖,或该主题无回复,将删除整个主题。
  • 如果您不是论坛管理员,您只能删除从某一时间到现在的范围内的文章。
  • 超级版主的删帖的时间范围为二星期(14 天);版主的时间范围为一星期(7 天)且只能删除所管辖论坛内的文章。
  • 关键字可以使用限定符 {x} 以限定相邻两字符间可忽略的文字,x 是忽略字符的个数,如 "a{1}s{2}s"(不含引号) 可以搜索到 "ass" 也可搜索到 "axsxs" 和 "axsxxs" 等等。
  • ', + 'prune_tips' => '
  • 批量删帖仅用于删除违规帖子使用,如您需要批量删除历史旧帖,请使用批量主题管理功能。
  • 使用此功能,需同时提供起始时间和终止时间其中之一,及发帖用户名、发帖 IP、内容关键字其中之一,至少共二项必要的条件,否则将无法进行操作。
  • 如果符合删除条件的帖子为主题第一帖,或该主题无回复,将删除整个主题。
  • 如果您不是论坛管理员,您只能删除从某一时间到现在的范围内的帖子。
  • 超级版主的删帖的时间范围为二星期(14 天);版主的时间范围为一星期(7 天)且只能删除所管辖论坛内的帖子。
  • 关键字可以使用限定符 {x} 以限定相邻两字符间可忽略的文字,x 是忽略字符的个数,如 "a{1}s{2}s"(不含引号) 可以搜索到 "ass" 也可搜索到 "axsxs" 和 "axsxxs" 等等。
  • ', 'prune' => '批量删帖', - 'prune_search' => '搜索符合条件的文章', - 'prune_search_detail' => '显示详细文章列表', + 'prune_search' => '搜索符合条件的帖子', + 'prune_search_detail' => '显示详细帖子列表', 'prune_search_time' => '发表时间范围', 'prune_search_time_comment' => '格式 yyyy-mm-dd,不限制请输入 0', - 'prune_search_select_postsplit' => '选择文章分表', + 'prune_search_select_postsplit' => '选择帖子分表', 'prune_search_forum' => '所在版块', 'prune_search_perpage' => '每页显示数', 'prune_search_user' => '发帖用户名', @@ -4681,13 +4681,13 @@ $lang = array 'prune_search_keyword_comment' => '多关键字中间请用半角逗号 "," 隔开,关键词可以用限定符 {x}', 'prune_search_lengthlimit' => '内容最小长度', 'prune_search_lengthlimit_comment' => '本功能会加重服务器负担', - 'prune_result' => '符合条件的文章数', + 'prune_result' => '符合条件的帖子数', 'prune_nosubject' => '(无标题)', 'prune_no_update_member' => '删帖不减用户发帖数和积分', - 'prune_succeed' => '符合条件的 {deletedthreads} 篇主题和 {deletedposts} 篇文章被删除', + 'prune_succeed' => '符合条件的 {deletedthreads} 篇主题和 {deletedposts} 篇帖子被删除', 'prune_condition_invalid' => '您没有同时选择时间范围和指定相关的搜索条件,请返回', 'prune_mod_range_illegal' => '您指定的时间范围超过限制', - 'prune_post_nonexistence' => '没有与条件匹配的文章', + 'prune_post_nonexistence' => '没有与条件匹配的帖子', 'quickquery_open_forum' => '快速开启论坛版块功能', 'quickquery_open_recycle' => '开启 所有版块 主题回收站', @@ -4861,19 +4861,19 @@ $lang = array 'pic_search_ip' =>'发布IP', 'pic_search_ip_comment' => '通配符 "*" 如 "127.0.*.*"(不含引号),慎用!!!', 'postcomment_search_detail' => '显示详细点评列表', - 'postcomment_tips' => '
  • 批量点评管理用于删除文章点评。
  • 提醒:点击搜索结果页的删除按钮,将会直接删除相关信息!
  • ', + 'postcomment_tips' => '
  • 批量点评管理用于删除帖子点评。
  • 提醒:点击搜索结果页的删除按钮,将会直接删除相关信息!
  • ', 'postcomment_delete' => '删除点评成功', 'postcomment_nonexistence' => '没有与条件匹配的点评', 'postcomment_result' => '符合条件的点评数', 'postcomment_new_result' => '最新点评数', 'postcomment_search' => '搜索符合条件的点评', - 'postcomment_pid' => '查看文章', + 'postcomment_pid' => '查看帖子', 'postcomment_content' => '点评内容', 'postcomment_guest' => '游客', 'postcomment_search_tid' => '被点评主题 ID', 'postcomment_search_tid_comment' => '指定主题的所有点评(包括主题帖和回帖),多 ID 中间请用半角逗号 "," 隔开', - 'postcomment_search_pid' => '被点评文章 ID', - 'postcomment_search_pid_comment' => '指定文章的点评,多 ID 中间请用半角逗号 "," 隔开', + 'postcomment_search_pid' => '被点评帖子 ID', + 'postcomment_search_pid_comment' => '指定帖子的点评,多 ID 中间请用半角逗号 "," 隔开', 'postcomment_search_author' => '点评者', 'postcomment_search_author_comment' => '多点评者名中间请用半角逗号 "," 隔开', 'postcomment_search_authorid' => '点评者 ID', @@ -4884,7 +4884,7 @@ $lang = array 'comment_comment' => '评论/留言', 'comment_article_comment' => '文章评论', 'comment_topic_comment' => '专题评论', - 'comment_article_tips' => '
  • 这里管理非文章推送的文章的评论。
  • 由文章推送生成的文章的评论,请到批量删帖管理。
  • ', + 'comment_article_tips' => '
  • 这里管理非帖子推送的文章的评论。
  • 由帖子推送生成的文章的评论,请到批量删帖管理。
  • ', 'comment_topic_tips' => '
  • 这里管理门户里专题的评论。
  • ', 'comment_uid' => '留言', 'comment_blogid' => '日志', @@ -4946,7 +4946,7 @@ $lang = array 'share_title' => '分享标题', 'share_body' => '分享内容', 'share_type' => '分享类型', - 'share_type_thread' => '文章', + 'share_type_thread' => '帖子', 'share_type_space' => '用户空间', 'share_type_blog' => '日志', 'share_type_pic' => '图片', @@ -5029,7 +5029,7 @@ $lang = array 'moderate_validate_list' => '审核操作成功,共 {validates} 个主题被通过,{ignores} 个主题被忽略,{recycles} 个主题被放入回收站,{deletes} 个主题被删除。
    您可以继续审核新主题', 'moderate_none' => '未审核', 'moderate_ignore' => '已忽略', - 'moderate_all_fields' => '所有文章', + 'moderate_all_fields' => '所有帖子', 'moderate_all_groups' => '仅圈子', 'moderate_edit_thread' => '编辑主题', 'moderate_reasonpm' => '操作理由', @@ -5040,7 +5040,7 @@ $lang = array 'moderate_title_keyword' => '标题包含', 'moderate_showcensor' => '显示过滤词', 'moderate_forum' => '审核版块', - 'moderate_edit_post' => '编辑文章', + 'moderate_edit_post' => '编辑帖子', 'moderate_delthread' => '删除主题', 'moderate_close' => '关闭主题', 'moderate_move' => '移动主题', @@ -5060,7 +5060,7 @@ $lang = array 'recyclebin_list_status' => '回复 / 查看', 'recyclebin_list_operation' => '操作人', 'recyclebin_list_lastpost' => '最后回复', - 'recyclebin_search' => '搜索符合条件的被删文章', + 'recyclebin_search' => '搜索符合条件的被删帖子', 'recyclebin_search_forum' => '所在版块', 'recyclebin_search_author' => '原帖作者', 'recyclebin_search_author_comment' => '多个用户名间请用半角逗号 "," 隔开', @@ -5068,7 +5068,7 @@ $lang = array 'recyclebin_search_keyword_comment' => '多关键字中间请用半角逗号 "," 隔开', 'recyclebin_search_admin' => '删帖管理员', 'recyclebin_search_admin_comment' => '多个用户名间请用半角逗号 "," 隔开', - 'recyclebin_search_post_time' => '文章发表时间范围', + 'recyclebin_search_post_time' => '帖子发表时间范围', 'recyclebin_search_post_time_comment' => '格式 yyyy-mm-dd,不限制请留空', 'recyclebin_search_mod_time' => '删帖时间范围', 'recyclebin_search_mod_time_comment' => '格式 yyyy-mm-dd,不限制请留空', @@ -5079,7 +5079,7 @@ $lang = array 'recyclebin_delete_time' => '删除时间', 'recyclebin_clean' => '批量清空回收站', - 'recyclebin_clean_days' => '清空多少天以前的回收站文章', + 'recyclebin_clean_days' => '清空多少天以前的回收站帖子', 'recyclebin_clean_days_comment' => '0 为清空全部', 'recyclebin_delete' => '删除主题', 'recyclebin_undelete' => '恢复主题', @@ -5099,7 +5099,7 @@ $lang = array 'recyclebinpost_result' => '符合条件的回收站主题数', 'recyclebinpost_clean' => '批量清空回帖回收站', - 'recyclebinpost_clean_days' => '清空多少天以前的回帖回收站文章', + 'recyclebinpost_clean_days' => '清空多少天以前的回帖回收站帖子', 'recyclebinpost_clean_days_comment' => '0 为清空全部', 'recyclebinpost_none' => '没有可清空的回帖', 'recyclebinpost_succeed' => '回帖回收站更新成功,共 {postsdel} 个回帖被删除,{postsundel} 个回帖被恢复', @@ -5309,7 +5309,7 @@ $lang = array 'misc_stamp_option_recommend' => '推荐', 'misc_stamp_option_recommendto' => '推送', 'misc_stamp_tips' => '目录 static/image/stamp/ 中没有找到尚未使用的主题图章,请通过 FTP 上传需要添加的图章到 static/image/stamp/ 目录,然后刷新本页', - 'misc_stamp_listtips' => '
  • 鉴定图章显示在文章内容页,鉴定图标显示在主题列表页。
  • 系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。
  • 不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。
  • 当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。
  • ', + 'misc_stamp_listtips' => '
  • 鉴定图章显示在帖子内容页,鉴定图标显示在主题列表页。
  • 系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。
  • 不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。
  • 当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。
  • ', 'misc_stamp_add' => '添加图章', 'misc_stamp_imagename' => '图章/图标名称', 'misc_stamp_addtips' => '
  • 可以选择是添加成图章还是图标。
  • 图片名称必需填写,没有名称的图片不会被添加。
  • ', @@ -5425,7 +5425,7 @@ $lang = array 'plugins_edit_modules_type_19' => '个人设置 - 积分', 'plugins_edit_modules_type_18' => '', 'plugins_edit_modules_type_21' => '门户管理', - 'plugins_edit_modules_type_26' => '我的文章', + 'plugins_edit_modules_type_26' => '我的帖子', 'plugins_edit_modules_type_27' => '顶部导航项目', 'plugins_edit_modules_type_28' => '页面嵌入 - 手机版', 'plugins_edit_modules_type_29' => '管理中心 - 列表链接', @@ -5696,7 +5696,7 @@ $lang = array 'tasks_tips' => '
  • 只有标记为“可用”状态的任务,会员才能访问并申请。
  • ', 'tasks_tips_edit' => '
  • 只有任务标示为“可用”状态,会员才可能看到并参与他。
  • 任务是可以设置开始时间的,您可以预定某个任务何时开始。如果没有设置,那么这个任务默认就是开始了。
  • ', 'tasks_tips_add_member' => '
  • 会员类任务目前包括三种:添加好友、收藏主题、使用道具,此类任务用来鼓励和引导会员使用论坛的某个功能,活跃论坛的氛围。
  • 设置不同的完成任务条件,可以创造出适合您论坛的任务。
  • ', - 'tasks_tips_add_post' => '
  • 文章类任务目前包括三种:发新主题、发新回复、发新主题/回复。
  • 文章类任务如果指定了版块,那么请您注意用户组及版块的权限设置,否则有的用户申请了任务,可能由于无权在该版块发帖,而永远无法完成任务。
  • 发新回复的任务您可以指定回复某个主题或者某个作者的主题,但请注意该主题必须存在,否则用户无法完成任务。
  • ', + 'tasks_tips_add_post' => '
  • 帖子类任务目前包括三种:发新主题、发新回复、发新主题/回复。
  • 帖子类任务如果指定了版块,那么请您注意用户组及版块的权限设置,否则有的用户申请了任务,可能由于无权在该版块发帖,而永远无法完成任务。
  • 发新回复的任务您可以指定回复某个主题或者某个作者的主题,但请注意该主题必须存在,否则用户无法完成任务。
  • ', 'tasks_tips_add_type' => '
  • 系统任务位于 source/class/task/ 目录中,插件任务位于 source/plugin/插件目录/task/ 目录中。
  • 插件开发人员在设计新的任务类型前请务必仔细阅读《Discuz! 技术文档》中的内容。
  • ', 'tasks_edit' => '编辑任务', 'tasks_list' => '任务列表', @@ -5841,7 +5841,7 @@ $lang = array 'ec_wechat_php_version_low' => 'PHP版本过低', 'ec_qpay' => 'QQ 钱包设置', - 'ec_qpay_tips' => '
  • QQ 钱包是腾讯集团财付通旗下的第三方支付平台,一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。
  • 由于涉及现金交易,为避免因操作不当而造成的资金损失,请在开始使用 QQ 钱包支付积分交易功能(不包含支付宝按钮功能)前,务必仔细阅读《用户使用说明书》中有关电子商务的部分,当确认完全理解和接受相关流程及使用方法后再进行相关设置。
  • 您可以设置允许用户通过现金在线支付的方式,为其交易积分账户充值,用于购买文章内容、购买用户组权限、积分转账或用户组升级等功能。请务必正确设置您的收款信息,否则将造成用户付款后积分无法实时到账,造成大量需要人工处理的订单信息。
  • 您使用 QQ 钱包服务是建立在完全自愿的基础上,除 Discuz! 因主观恶意的因素造成的资金损失以外,腾讯云不对因使用此功能造成的任何损失承担责任。
  • 财付通服务热线:0755-83762288-2 (全天 24 小时服务热线) , QQ 钱包客户服务邮箱为 qpay@tencent.com 。
  • ', + 'ec_qpay_tips' => '
  • QQ 钱包是腾讯集团财付通旗下的第三方支付平台,一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。
  • 由于涉及现金交易,为避免因操作不当而造成的资金损失,请在开始使用 QQ 钱包支付积分交易功能(不包含支付宝按钮功能)前,务必仔细阅读《用户使用说明书》中有关电子商务的部分,当确认完全理解和接受相关流程及使用方法后再进行相关设置。
  • 您可以设置允许用户通过现金在线支付的方式,为其交易积分账户充值,用于购买帖子内容、购买用户组权限、积分转账或用户组升级等功能。请务必正确设置您的收款信息,否则将造成用户付款后积分无法实时到账,造成大量需要人工处理的订单信息。
  • 您使用 QQ 钱包服务是建立在完全自愿的基础上,除 Discuz! 因主观恶意的因素造成的资金损失以外,腾讯云不对因使用此功能造成的任何损失承担责任。
  • 财付通服务热线:0755-83762288-2 (全天 24 小时服务热线) , QQ 钱包客户服务邮箱为 qpay@tencent.com 。
  • ', 'ec_qpay_on' => '是否启用 QQ 钱包支付', 'ec_qpay_jsapi' => '是否启用 QQ 钱包 JSAPI 支付', 'ec_qpay_jsapi_comment' => '需要添加经过腾讯审核通过的添加支付授权域名, 如无此权限或打开后无法支付请关闭', @@ -5981,7 +5981,7 @@ $lang = array 'project_option_forum_forumcolumns' => '下级子版块横排', 'project_option_forum_threadcaches' => '页面缓存系数', 'project_option_forum_allowpaytoauthor' => '显示“用支付宝求购”按钮', - 'project_option_forum_alloweditpost' => '允许编辑文章', + 'project_option_forum_alloweditpost' => '允许编辑帖子', 'project_option_forum_simple' => '只显示下级子版块等显示方式设置', 'project_option_forum_creditspolicy' => '版块积分策略', 'project_option_forum_postcredits' => '发表主题积分策略', @@ -6007,7 +6007,7 @@ $lang = array 'project_option_forum_supe_pushsetting' => '推送设置', 'project_option_forum_favtimes' => '收藏次数', 'project_option_forum_sharetimes' => '分享次数', - 'project_option_forum_allowappend' => '允许开启文章补充', + 'project_option_forum_allowappend' => '允许开启帖子补充', 'project_option_forum_domain' => '绑定的二级域名', 'project_option_forum_catforumcolumns' => '分区版块横排', 'project_option_forum_seotitle' => 'SEO title', @@ -6037,7 +6037,7 @@ $lang = array 'project_option_group_allowuseblog' => '允许使用文集', 'project_option_group_allowinvisible' => '允许隐身', 'project_option_group_allowtransfer' => '允许积分转账', - 'project_option_group_allowsetreadperm' => '允许设置文章权限', + 'project_option_group_allowsetreadperm' => '允许设置帖子权限', 'project_option_group_allowsetattachperm' => '允许设置附件权限', 'project_option_group_allowhidecode' => '允许使用 [hide] 代码', 'project_option_group_allowmediacode' => '允许使用 [audio] [media] [flash] 等多媒体代码', @@ -6104,12 +6104,12 @@ $lang = array 'project_option_group_seccode' => '发布操作需填验证码', 'project_option_group_disablepostctrl' => '发表是否受防灌水限制', 'project_option_group_allowbuildgroup' => '是否允许建立圈子', - 'project_option_group_edittimelimit' => '编辑文章时间限制', + 'project_option_group_edittimelimit' => '编辑帖子时间限制', 'project_option_group_allowpostarticle' => '允许发布文章', 'project_option_group_allowspacediyhtml' => '允许自定义模块使用HTML', 'project_option_group_allowspacediybbcode' => '允许自定义模块使用BBCODE', 'project_option_group_allowspacediyimgcode' => '允许自定义模块使用[img]', - 'project_option_group_allowcommentpost' => '允许文章点评', + 'project_option_group_allowcommentpost' => '允许帖子点评', 'project_option_group_allowcommentitem' => '允许发表点评观点', 'project_option_group_allowcommentreply' => '允许楼层回复点评', 'project_option_group_allowblogmod' => '发表日志需要审核', @@ -6254,7 +6254,7 @@ $lang = array ', 'remoderate' => '内容重新审核', - 'remoderate_thread' => '主题/文章标题及内容重新审核', + 'remoderate_thread' => '主题/帖子标题及内容重新审核', 'remoderate_blog' => '日志标题及内容重新审核', 'remoderate_pic' => '图片标题重新审核', 'remoderate_doing' => '记录内容重新审核', @@ -6411,8 +6411,8 @@ $lang = array 'logs_credit_update_ECU' => '通过 UCenter 兑换积分支出', 'logs_credit_update_SAC' => '出售附件获得积分', 'logs_credit_update_BAC' => '购买附件支出积分', - 'logs_credit_update_PRC' => '文章被评分所得积分', - 'logs_credit_update_RSC' => '评分文章扣除自己的积分', + 'logs_credit_update_PRC' => '帖子被评分所得积分', + 'logs_credit_update_RSC' => '评分帖子扣除自己的积分', 'logs_credit_update_STC' => '出售主题获得积分', 'logs_credit_update_BTC' => '购买主题支出积分', 'logs_credit_update_AFD' => '购买积分即积分充值', @@ -6458,9 +6458,9 @@ $lang = array 'crime_operator' => '操作者', 'crime_user' => '操作对象', 'crime_record' => '违规记录', - 'crime_delpost' => '删除文章', - 'crime_warnpost' => '警告文章', - 'crime_banpost' => '屏蔽文章', + 'crime_delpost' => '删除帖子', + 'crime_warnpost' => '警告帖子', + 'crime_banpost' => '屏蔽帖子', 'crime_banspeak' => '禁止发言', 'crime_banvisit' => '禁止访问', 'crime_banstatus' => '锁定用户', @@ -6482,11 +6482,11 @@ $lang = array 'adv_type_footerbanner' => '页尾通栏广告', 'adv_type_footerbanner_tips' => '
  • 展现方式: 页尾通栏广告显示于论坛页面中下方,通常使用 468x60 或其他尺寸图片、Flash 的形式。当前页面有多个页尾通栏广告时,系统会随机选取其中之一显示。
  • 价值分析: 与页面头部和中部相比,页面尾部的展现机率相对较低,通常不会引起访问者的反感,同时又基本能够覆盖所有对广告内容感兴趣的受众,因此适合中性而温和的推广。
  • ', 'adv_type_text' => '页内文字广告', - 'adv_type_text_tips' => '
  • 展现方式: 页内文字广告以表格的形式,显示于首页、主题列表和文章内容三个页面的中上方,通常使用文字的形式,也可使用小图片和 Flash。当前页面有多个文字广告时,系统会以表格的形式按照设定的显示顺序全部展现,同时能够对表格列数在 3~5 的范围内动态排布,以自动实现最佳的广告排列效果。
  • 价值分析: 由于此类广告通常以文字形式展现,但其所在的较靠上的页面位置,使得此类广告成为了访问者必读的内容之一。同一页面可以呈现多达十几条文字广告的特性,也决定了它是一种平民化但性价比较高的推广方式,同时还可用于论坛自身的宣传和公告之用。
  • ', + 'adv_type_text_tips' => '
  • 展现方式: 页内文字广告以表格的形式,显示于首页、主题列表和帖子内容三个页面的中上方,通常使用文字的形式,也可使用小图片和 Flash。当前页面有多个文字广告时,系统会以表格的形式按照设定的显示顺序全部展现,同时能够对表格列数在 3~5 的范围内动态排布,以自动实现最佳的广告排列效果。
  • 价值分析: 由于此类广告通常以文字形式展现,但其所在的较靠上的页面位置,使得此类广告成为了访问者必读的内容之一。同一页面可以呈现多达十几条文字广告的特性,也决定了它是一种平民化但性价比较高的推广方式,同时还可用于论坛自身的宣传和公告之用。
  • ', 'adv_type_thread' => '帖内广告', - 'adv_type_thread_tips' => '
  • 展现方式: 帖内广告显示于文章内容的上方、下方或右方,文章内容的上方和下方通常使用文字的形式,文章内容右方通常使用图片的形式。当前页面有多个帖内广告时,系统会从中抽取与每页帖数相等的条目进行随机显示。您可以在 全局设置中的其他设置中修改每帖显示的广告数量。
  • 价值分析: 由于文章是论坛最核心的组成部分,嵌入文章内容内部的帖内广告,便可在用户浏览文章内容时自然的被接受,加上随机播放的特性,适合于特定内容的有效推广,也可用于论坛自身的宣传和公告之用。建议设置多条帖内广告以实现广告内容的差异化,从而吸引更多访问者的注意力。
  • ', + 'adv_type_thread_tips' => '
  • 展现方式: 帖内广告显示于帖子内容的上方、下方或右方,帖子内容的上方和下方通常使用文字的形式,帖子内容右方通常使用图片的形式。当前页面有多个帖内广告时,系统会从中抽取与每页帖数相等的条目进行随机显示。您可以在 全局设置中的其他设置中修改每帖显示的广告数量。
  • 价值分析: 由于帖子是论坛最核心的组成部分,嵌入帖子内容内部的帖内广告,便可在用户浏览帖子内容时自然的被接受,加上随机播放的特性,适合于特定内容的有效推广,也可用于论坛自身的宣传和公告之用。建议设置多条帖内广告以实现广告内容的差异化,从而吸引更多访问者的注意力。
  • ', 'adv_type_interthread' => '帖间通栏广告', - 'adv_type_interthread_tips' => '
  • 展现方式: 帖间通栏广告显示于主题帖和第一个回帖之间,可使用 468x60 或其他尺寸图片和 Flash 的形式。当前页面有多个帖间通栏广告时,系统会随机选取其中之一显示。
  • 价值分析: 由于能够将主题与回帖分开,广告尺寸大而且不影响文章内容,因此不会招致文章作者及访问者反感,适合在帖内进行商业宣传或品牌推广。
  • ', + 'adv_type_interthread_tips' => '
  • 展现方式: 帖间通栏广告显示于主题帖和第一个回帖之间,可使用 468x60 或其他尺寸图片和 Flash 的形式。当前页面有多个帖间通栏广告时,系统会随机选取其中之一显示。
  • 价值分析: 由于能够将主题与回帖分开,广告尺寸大而且不影响帖子内容,因此不会招致帖子作者及访问者反感,适合在帖内进行商业宣传或品牌推广。
  • ', 'adv_type_float' => '漂浮广告', 'adv_type_float_tips' => '
  • 展现方式: 漂浮广告展现于页面左下角,当页面滚动时广告会自行移动以保持原来的位置,通常使用小图片或 Flash 的形式。当前页面有多个漂浮广告时,系统会随机选取其中之一显示。
  • 价值分析: 漂浮广告是进行强力商业推广的有效手段,其在页面中的浮动性,使其与固定的图片和文字相比,更容易被关注,正因为如此,这种强制性的关注也可能招致对此广告内容不感兴趣的访问者的反感。请注意不要将过大的图片或 Flash 以漂浮广告的形式显示,以免影响页面阅读。
  • ', 'adv_type_couplebanner' => '对联广告', @@ -6500,9 +6500,9 @@ $lang = array 'adv_style_image' => '图片', 'adv_style_flash' => 'Flash', 'adv_targets' => '投放范围', - 'adv_thread_down' => '文章下方', - 'adv_thread_up' => '文章上方', - 'adv_thread_right' => '文章右侧', + 'adv_thread_down' => '帖子下方', + 'adv_thread_up' => '帖子上方', + 'adv_thread_right' => '帖子右侧', 'adv_up' => '上', 'adv_middle' => '中', 'adv_down' => '下', @@ -6577,9 +6577,9 @@ $lang = array 'adv_edit_style_flash_height' => 'Flash 高度(必填)', 'adv_edit_style_flash_height_comment' => '请输入 Flash 广告的高度,单位为像素', 'adv_edit_position_thread' => '广告投放位置', - 'adv_edit_position_thread_comment' => '文章内容上方和下方的广告适合使用文字形式,而文章右侧广告适合使用图片或 Flash 形式,也可以同时显示多条文字广告', + 'adv_edit_position_thread_comment' => '帖子内容上方和下方的广告适合使用文字形式,而帖子右侧广告适合使用图片或 Flash 形式,也可以同时显示多条文字广告', 'adv_edit_display_position' => '广告显示位置', - 'adv_edit_display_position_comment' => '选项 #1 #2 #3 ... 表示文章顺序,可以按住 CTRL 多选', + 'adv_edit_display_position_comment' => '选项 #1 #2 #3 ... 表示帖子顺序,可以按住 CTRL 多选', 'adv_edit_position_footerbanner' => '广告投放位置', 'adv_edit_position_footerbanner_comment' => '分为上中下 3 个位置,当上面的广告到期或被删除,下面的广告会自动上移', 'adv_setting_advexpiration' => '广告到期提醒', @@ -7095,7 +7095,7 @@ $lang = array 'group_level_credits_download' => '下载附件扣积分', 'group_level_credits_trade' => '成功交易加积分', 'group_level_credits_poll' => '参与投票加积分', - 'group_level_posts' => '文章相关', + 'group_level_posts' => '帖子相关', 'group_level_special' => '特殊功能', 'group_level_special_allowchangename' => '允许创始人改圈子名', 'group_level_special_allowchangetype' => '允许创始人更改圈子分类', @@ -7107,16 +7107,16 @@ $lang = array 'group_userperm_upload_banner' => '上传圈子顶部图片', 'group_userperm_others' => '其它权限', - 'postsplit' => '文章分表', + 'postsplit' => '帖子分表', 'postsplit_name' => '分表', 'postsplit_select' => '选择分表', 'postsplit_from' => '分表来源', 'postsplit_to' => '目标表', 'postsplit_create' => '创建新表', - 'postsplit_manage_tips' => '
  • 进行文章分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作
  • 文章数据转移完毕会对源文章表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务
  • forum_post(主表)必须保留300M的数据
  • 文章分表功能可以将文章分在不同的数据表中,适合文章数很多并且运行效率受到影响的站点使用
  • ', - 'postsplit_move_tips' => '
  • 文章移动涉及大量的数据转移,请关闭论坛后使用
  • 为防止数据库在移动过程中出现问题,请先进行数据备份。
  • 按条件搜索出要移动的主题帖,然后选择目标分表。
  • 移动操作可能需要一段时间,请耐心等待。
  • ', + 'postsplit_manage_tips' => '
  • 进行帖子分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作
  • 帖子数据转移完毕会对源帖子表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务
  • forum_post(主表)必须保留300M的数据
  • 帖子分表功能可以将帖子分在不同的数据表中,适合帖子数很多并且运行效率受到影响的站点使用
  • ', + 'postsplit_move_tips' => '
  • 帖子移动涉及大量的数据转移,请关闭论坛后使用
  • 为防止数据库在移动过程中出现问题,请先进行数据备份。
  • 按条件搜索出要移动的主题帖,然后选择目标分表。
  • 移动操作可能需要一段时间,请耐心等待。
  • ', 'postsplit_manage' => '分表管理', - 'postsplit_move' => '文章移动', + 'postsplit_move' => '帖子移动', 'postsplit_move_to' => '移动到', 'postsplit_move_size' => '转移数据大小', 'postsplit_move_tidrange' => 'tid 范围', @@ -7125,7 +7125,7 @@ $lang = array 'postsplit_manage_table_createtime' => '表创建时间', 'postsplit_manage_table_updatetime' => '表更新时间', 'postsplit_manage_table_memo' => '备注信息', - 'postsplit_manage_postcount' => '文章数', + 'postsplit_manage_postcount' => '帖子数', 'postsplit_manage_tablename' => '分表名称', 'postsplit_move_per_step' => '每次移动主题帖数量', 'postsplit_move_thread_table' => '所属分表', @@ -7153,7 +7153,7 @@ $lang = array 'optimizer_check_unit_optimizer_patch' => '检测产品是有有漏洞补丁发布', 'optimizer_check_unit_optimizer_thread' => '检测是否需要对主题表进行优化', 'optimizer_check_unit_optimizer_setting' => '查看是否有设置项可以优化', - 'optimizer_check_unit_optimizer_post' => '检测是否需要对文章表进行优化', + 'optimizer_check_unit_optimizer_post' => '检测是否需要对帖子表进行优化', 'optimizer_check_unit_optimizer_dbbackup' => '检测数据是否需要进行备份', 'optimizer_check_unit_optimizer_filecheck' => '查看是否需要进行文件校验', 'optimizer_check_unit_optimizer_log' => '查看是否有需要优化清理的日志表', @@ -7166,7 +7166,7 @@ $lang = array 'optimizer_check_unit_optimizer_regmaildomain' => '检测注册邮箱域名限制', 'optimizer_check_unit_optimizer_ipregctrl' => '检测限时注册的 IP 列表项', 'optimizer_check_unit_optimizer_newbiespan' => '检测新手见习期限', - 'optimizer_check_unit_optimizer_editperdel' => '检测允许用户编辑文章时删除文章项', + 'optimizer_check_unit_optimizer_editperdel' => '检测允许用户编辑帖子时删除帖子项', 'optimizer_check_unit_optimizer_recyclebin' => '检测版块是否开启回收站', 'optimizer_check_unit_optimizer_forumstatus' => '检测隐藏版块是否设置访问权限', 'optimizer_check_unit_optimizer_usergroup9' => '检测限制会员用户组权限设置', diff --git a/source/language/lang_admincp_login.php b/source/language/lang_admincp_login.php old mode 100644 new mode 100755 diff --git a/source/language/lang_admincp_menu.php b/source/language/lang_admincp_menu.php old mode 100644 new mode 100755 index d3e5b81..b248c97 --- a/source/language/lang_admincp_menu.php +++ b/source/language/lang_admincp_menu.php @@ -115,8 +115,8 @@ $lang = array 'menu_remoderate' => '内容重新审核', 'menu_maint_report' => '用户举报', 'menu_threads_forumstick' => '版块/圈子置顶', - 'menu_post_position_index' => '文章优化', - 'menu_postcomment' => '文章点评管理', + 'menu_post_position_index' => '帖子优化', + 'menu_postcomment' => '帖子点评管理', 'menu_maint_doing' => '记录管理', 'menu_maint_blog' => '日志管理', 'menu_maint_blog_recycle_bin' => '日志回收站', @@ -179,7 +179,7 @@ $lang = array 'menu_tools_filecheck' => '文件校验', 'menu_tools_replacekey' => '密钥更新', 'menu_db' => '数据库', - 'menu_postsplit' => '文章分表', + 'menu_postsplit' => '帖子分表', 'menu_threadsplit' => '主题分表', 'menu_membersplit' => '用户分表', 'menu_logs' => '运行记录', diff --git a/source/language/lang_admincp_msg.php b/source/language/lang_admincp_msg.php old mode 100644 new mode 100755 index 476f607..3b47bee --- a/source/language/lang_admincp_msg.php +++ b/source/language/lang_admincp_msg.php @@ -92,8 +92,8 @@ $lang = array ( 'portalcategory_move_category_failed' => '无法移动文章到所选分类', 'portalcategory_delete_succeed' => '删除分类成功 ', 'portalcategory_catgory_not_found' => '分类不存在或没有选择分类', - 'postsplit_forum_must_be_closed' => '请在站点关闭的状态下进行文章移动操作', - 'postsplit_done' => '数据转移成功,接下来将对源文章表进行优化操作,注意:优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务', + 'postsplit_forum_must_be_closed' => '请在站点关闭的状态下进行帖子移动操作', + 'postsplit_done' => '数据转移成功,接下来将对源帖子表进行优化操作,注意:优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务', 'postsplit_doing' => '正在转移数据,当前表有{datalength}的数据,还剩{nowdatalength}的数据等待入库', 'recyclebin_succeed' => '回收站更新成功,共 {threadsdel} 个主题被删除,{threadsundel} 个主题被恢复', 'search_result_noexists' => '抱歉,没有找到相关设置或管理操作!
    输入多个词语搜索(不同字词之间用一个空格隔开,不区分大小写)可以获得更精确的搜索结果', @@ -230,7 +230,7 @@ $lang = array ( 'counter_thread_cover_fidnopicstyle' => '指定版块没有开启图片列表模式', 'counter_thread_cover_succeed' => '主题封面重建完成', - 'remoderate_thread_succeed' => '主题/文章标题及内容重新审核完成', + 'remoderate_thread_succeed' => '主题/帖子标题及内容重新审核完成', 'remoderate_blog_succeed' => '日志标题及内容重新审核完成', 'remoderate_pic_succeed' => '图片标题重新审核完成', 'remoderate_doing_succeed' => '记录内容重新审核完成', @@ -295,7 +295,7 @@ $lang = array ( 'forums_edit_threadsort_nonexistence' => '没有选择默认的分类信息', 'forums_delete_succeed' => '版块删除成功 ', 'forums_delete_sub_notnull' => '存在下级版块,请先返回删除本分类或本版块的下级版块', - 'forums_delete_confirm' => '本操作不可恢复,您确定要删除该版块,清除其中文章和附件吗?
    注意: 删除版块并不会更新用户发帖数和积分', + 'forums_delete_confirm' => '本操作不可恢复,您确定要删除该版块,清除其中帖子和附件吗?
    注意: 删除版块并不会更新用户发帖数和积分', 'forums_delete_alarm' => '本操作不可恢复,正在删除版块数据...', 'forums_copy_target_invalid' => '您没有选择要复制的目标版块', 'forums_copy_options_invalid' => '您没有选择要复制的项目', @@ -313,11 +313,11 @@ $lang = array ( 'group_status_off' => '请先开启圈子功能,现在转到圈子设置页', 'group_update_succeed' => '圈子分类设置更新成功 ', 'grouptype_delete_succeed' => '圈子分类删除成功 ', - 'grouptype_delete_confirm' => '本操作不可恢复,您确定要删除该分类,清除其中文章和附件吗?
    注意:删除圈子并不会更新用户发帖数和积分', + 'grouptype_delete_confirm' => '本操作不可恢复,您确定要删除该分类,清除其中帖子和附件吗?
    注意:删除圈子并不会更新用户发帖数和积分', 'grouptype_delete_alarm' => '本操作不可恢复,正在删除圈子数据...', 'group_name_exist' => '该圈子名称已经存在', 'group_edit_succeed' => '圈子编辑成功 ', - 'group_thread_removing' => '正在删除圈子内的文章,请勿关闭浏览器!', + 'group_thread_removing' => '正在删除圈子内的帖子,请勿关闭浏览器!', 'group_delete_succeed' => '圈子删除成功 ', 'group_changetype_succeed' => '圈子分类调整成功 ', 'group_merge_continue' => '正在合并第{m}个圈子,还有{n}个,请勿关闭浏览器!', @@ -477,14 +477,14 @@ $lang = array ( 'postsplit_table_memo_update_succeed' => '表备注信息更新成功 ', 'postsplit_do_error' => '分表失败:经过校验发现{tableid}表中缺少{fields}字段', - 'postsplit_table_create_succeed' => '新的文章表创建成功,正在进入最后的数据转移操作', + 'postsplit_table_create_succeed' => '新的帖子表创建成功,正在进入最后的数据转移操作', 'postsplit_finish' => '目标分表已确认,正在进入最后的数据转移操作', 'postsplit_unallow' => '当前表未达到指定的分表界限,不建议进行分表操作', - 'postsplit_abnormal' => '非正常的文章分表操作', - 'postsplit_do_succeed' => '恭喜您,文章分表操作成功,请返回', + 'postsplit_abnormal' => '非正常的帖子分表操作', + 'postsplit_do_succeed' => '恭喜您,帖子分表操作成功,请返回', 'postsplit_resetpid_succeed' => 'Post ID 重置完成', - 'recyclebin_none_selected' => '没有选择要操作的文章', + 'recyclebin_none_selected' => '没有选择要操作的帖子', 'recyclebin_clean_next' => '回收站更新, 已经删除 {threadsdel} 个主题,程序将自动继续', 'report_resolve_succeed' => '处理成功,现在返回列表页', @@ -570,10 +570,10 @@ $lang = array ( 'threads_forumstick_del_succeed' => '置顶主题列表更新成功 ', 'threads_forumstick_edit_succeed' => '目标版块更改成功 ', 'threads_forumstick_add_succeed' => '主题添加成功 ', - 'delete_position_succeed' => '删除文章索引成功 ', - 'delete_position_gotu_add' => '已经删除了文章索引,正转向重新创建文章索引,请勿关闭浏览器!', - 'add_postposition_succeed' => '添加文章索引成功 ', - 'addpostposition_continue' => '正在添加文章索引,请勿关闭浏览器!', + 'delete_position_succeed' => '删除帖子索引成功 ', + 'delete_position_gotu_add' => '已经删除了帖子索引,正转向重新创建帖子索引,请勿关闭浏览器!', + 'add_postposition_succeed' => '添加帖子索引成功 ', + 'addpostposition_continue' => '正在添加帖子索引,请勿关闭浏览器!', 'threadsplit_manage_update_succeed' => '更新信息成功 ', 'threadsplit_table_create_succeed' => '主题存档表创建成功 ', diff --git a/source/language/lang_admincp_searchindex.php b/source/language/lang_admincp_searchindex.php old mode 100644 new mode 100755 index fa99810..e171840 --- a/source/language/lang_admincp_searchindex.php +++ b/source/language/lang_admincp_searchindex.php @@ -487,11 +487,11 @@ $lang = array ( array ( 'index' => array ( - '文章点评管理' => 'action=postcomment', + '帖子点评管理' => 'action=postcomment', ), 'text' => array ( - 0 => '文章点评管理', + 0 => '帖子点评管理', ), ), 44 => @@ -1367,11 +1367,11 @@ $lang = array ( array ( 'index' => array ( - '文章分表' => 'action=postsplit&operation=manage', + '帖子分表' => 'action=postsplit&operation=manage', ), 'text' => array ( - 0 => '文章分表', + 0 => '帖子分表', ), ), 124 => @@ -1428,10 +1428,10 @@ $lang = array ( 20 => '设置是否允许推荐管理范围内的主题 (要在相应版块的扩展设置里开启推荐主题功能)', 21 => 'admingroup_edit_stamp_thread', 22 => '允许添加主题图章', - 23 => '设置是否允许给主题在文章内容页添加图章', + 23 => '设置是否允许给主题在帖子内容页添加图章', 24 => 'admingroup_edit_stamp_list', 25 => '允许添加主题图标', - 26 => '设置是否允许给主题在文章列表页添加图标', + 26 => '设置是否允许给主题在帖子列表页添加图标', 27 => 'admingroup_edit_close_thread', 28 => '允许关闭主题', 29 => '设置是否允许关闭管理范围内的主题', @@ -1494,25 +1494,25 @@ $lang = array ( 'index' => array ( '管理组' => 'action=admingroup', - '文章管理权限' => 'action=admingroup&operation=edit&anchor=postperm', + '帖子管理权限' => 'action=admingroup&operation=edit&anchor=postperm', ), 'text' => array ( - 0 => '管理组 » 文章管理权限', + 0 => '管理组 » 帖子管理权限', 1 => 'admingroup_edit_postperm', - 2 => '文章管理权限', + 2 => '帖子管理权限', 3 => 'admingroup_edit_edit_post', - 4 => '允许编辑文章', - 5 => '设置是否允许编辑管理范围内的文章', + 4 => '允许编辑帖子', + 5 => '设置是否允许编辑管理范围内的帖子', 6 => 'admingroup_edit_warn_post', - 7 => '允许警告文章', - 8 => '设置是否允许警告管理范围内的文章', + 7 => '允许警告帖子', + 8 => '设置是否允许警告管理范围内的帖子', 9 => 'admingroup_edit_ban_post', - 10 => '允许屏蔽文章', - 11 => '设置是否允许屏蔽管理范围内的文章', + 10 => '允许屏蔽帖子', + 11 => '设置是否允许屏蔽管理范围内的帖子', 12 => 'admingroup_edit_del_post', - 13 => '允许删除文章', - 14 => '设置是否允许删除管理范围内的文章', + 13 => '允许删除帖子', + 14 => '设置是否允许删除管理范围内的帖子', 15 => 'admingroup_edit_stick_post', 16 => '允许置顶回帖', 17 => '设置是否允许置顶管理范围内的回帖', @@ -1534,8 +1534,8 @@ $lang = array ( 1 => 'admingroup_edit_modcpperm', 2 => '管理面板权限', 3 => 'admingroup_edit_mod_post', - 4 => '允许审核文章', - 5 => '设置是否允许审核用户发表的文章,只在站点设置需要审核时有效', + 4 => '允许审核帖子', + 5 => '设置是否允许审核用户发表的帖子,只在站点设置需要审核时有效', 6 => 'admingroup_edit_mod_user', 7 => '允许审核用户', 8 => '设置是否允许审核新注册用户,只在站点设置需要人工审核新用户时有效', @@ -1561,7 +1561,7 @@ $lang = array ( 28 => '允许发布公告', 29 => '设置是否允许发布站点公告', 30 => 'admingroup_edit_clear_recycle', - 31 => '允许删除回收站的文章', + 31 => '允许删除回收站的帖子', 32 => '设置是否允在“前台->管理面板->主题回收站”中删除主题', 33 => 'admingroup_edit_view_log', 34 => '允许查看管理日志', @@ -2457,7 +2457,7 @@ $lang = array ( array ( 0 => '电子商务 » QQ 钱包', 1 => 'ec_qpay_tips', - 2 => 'QQ 钱包是腾讯集团财付通旗下的第三方支付平台,一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。由于涉及现金交易,为避免因操作不当而造成的资金损失,请在开始使用 QQ 钱包支付积分交易功能(不包含支付宝按钮功能)前,务必仔细阅读《用户使用说明书》中有关电子商务的部分,当确认完全理解和接受相关流程及使用方法后再进行相关设置。您可以设置允许用户通过现金在线支付的方式,为其交易积分账户充值,用于购买文章内容、购买用户组权限、积分转账或用户组升级等功能。请务必正确设置您的收款信息,否则将造成用户付款后积分无法实时到账,造成大量需要人工处理的订单信息。您使用 QQ 钱包服务是建立在完全自愿的基础上,除 Discuz! 因主观恶意的因素造成的资金损失以外,腾讯云不对因使用此功能造成的任何损失承担责任。财付通服务热线:0755-83762288-2 (全天 24 小时服务热线) , QQ 钱包客户服务邮箱为 qpay@tencent.com 。', + 2 => 'QQ 钱包是腾讯集团财付通旗下的第三方支付平台,一直致力于为用户和企业提供安全、便捷、专业的在线支付服务。由于涉及现金交易,为避免因操作不当而造成的资金损失,请在开始使用 QQ 钱包支付积分交易功能(不包含支付宝按钮功能)前,务必仔细阅读《用户使用说明书》中有关电子商务的部分,当确认完全理解和接受相关流程及使用方法后再进行相关设置。您可以设置允许用户通过现金在线支付的方式,为其交易积分账户充值,用于购买帖子内容、购买用户组权限、积分转账或用户组升级等功能。请务必正确设置您的收款信息,否则将造成用户付款后积分无法实时到账,造成大量需要人工处理的订单信息。您使用 QQ 钱包服务是建立在完全自愿的基础上,除 Discuz! 因主观恶意的因素造成的资金损失以外,腾讯云不对因使用此功能造成的任何损失承担责任。财付通服务热线:0755-83762288-2 (全天 24 小时服务热线) , QQ 钱包客户服务邮箱为 qpay@tencent.com 。', 3 => 'ec_qpay', 4 => 'QQ 钱包设置', 5 => 'ec_qpay_on', @@ -2619,7 +2619,7 @@ $lang = array ( 21 => '在导航显示', 22 => '选择是否在主导航中显示', 23 => 'setting_seo_forum_tips', - 24 => '站点名称 {bbname}(应用范围:所有位置)当前版块名称 {forum}(应用范围:除首页以外)一级版块名称 {fup}(应用范围:子版块主题列表页和文章内容页)分区名称 {fgroup}(应用范围:除首页以外)文章标题 {subject}(应用范围:文章内容页)主题摘要 {summary}(应用范围:文章内容页)主题标签 {tags}(应用范围:文章内容页)分页数 {page}(应用范围:主题列表页、文章内容页)', + 24 => '站点名称 {bbname}(应用范围:所有位置)当前版块名称 {forum}(应用范围:除首页以外)一级版块名称 {fup}(应用范围:子版块主题列表页和帖子内容页)分区名称 {fgroup}(应用范围:除首页以外)帖子标题 {subject}(应用范围:帖子内容页)主题摘要 {summary}(应用范围:帖子内容页)主题标签 {tags}(应用范围:帖子内容页)分页数 {page}(应用范围:主题列表页、帖子内容页)', 25 => 'forums_edit_basic_seotitle', 26 => 'title', 27 => 'forums_edit_basic_keyword', @@ -2679,7 +2679,7 @@ $lang = array ( 37 => '绑定域名', 38 => '根域名设置完后,此处域名绑定才能生效,设置根域名', 39 => 'setting_seo_forum_tips', - 40 => '站点名称 {bbname}(应用范围:所有位置)当前版块名称 {forum}(应用范围:除首页以外)一级版块名称 {fup}(应用范围:子版块主题列表页和文章内容页)分区名称 {fgroup}(应用范围:除首页以外)文章标题 {subject}(应用范围:文章内容页)主题摘要 {summary}(应用范围:文章内容页)主题标签 {tags}(应用范围:文章内容页)分页数 {page}(应用范围:主题列表页、文章内容页)', + 40 => '站点名称 {bbname}(应用范围:所有位置)当前版块名称 {forum}(应用范围:除首页以外)一级版块名称 {fup}(应用范围:子版块主题列表页和帖子内容页)分区名称 {fgroup}(应用范围:除首页以外)帖子标题 {subject}(应用范围:帖子内容页)主题摘要 {summary}(应用范围:帖子内容页)主题标签 {tags}(应用范围:帖子内容页)分页数 {page}(应用范围:主题列表页、帖子内容页)', 41 => 'forums_edit_basic_seotitle', 42 => 'title', 43 => 'forums_edit_basic_keyword', @@ -2787,42 +2787,42 @@ $lang = array ( 'index' => array ( '版块管理' => 'action=forums', - '文章选项' => 'action=forums&operation=edit&anchor=posts', + '帖子选项' => 'action=forums&operation=edit&anchor=posts', ), 'text' => array ( - 0 => '版块管理 » 文章选项', + 0 => '版块管理 » 帖子选项', 1 => 'forums_edit_tips', 2 => '以下设置没有继承性,即仅对当前版块有效,不会对下级子版块产生影响。', 3 => 'forums_edit_posts', - 4 => '文章选项', + 4 => '帖子选项', 5 => 'forums_edit_posts_modposts', 6 => '发帖审核', - 7 => '选择“是”将使用户在本版发表的文章待版主或管理员审查通过后才显示出来,打开此功能后,您可以在用户组中设定哪些组发帖可不经审核,也可以在管理组中设定哪些组可以审核别人的文章', + 7 => '选择“是”将使用户在本版发表的帖子待版主或管理员审查通过后才显示出来,打开此功能后,您可以在用户组中设定哪些组发帖可不经审核,也可以在管理组中设定哪些组可以审核别人的帖子', 8 => 'forums_edit_posts_alloweditpost', - 9 => '允许编辑文章', - 10 => '选择“是”将允许用户编辑本版发表的文章', + 9 => '允许编辑帖子', + 10 => '选择“是”将允许用户编辑本版发表的帖子', 11 => 'forums_edit_posts_recyclebin', 12 => '回收站', 13 => '是否在本版启用回收站功能,打开此功能后,所有被删除主题和回帖将被放在回收站中,而不会被直接删除', 14 => 'forums_edit_posts_html', 15 => '允许使用 HTML 代码', - 16 => '注意: 选择“是”将不屏蔽文章中的任何代码,将带来严重的安全隐患,请慎用', + 16 => '注意: 选择“是”将不屏蔽帖子中的任何代码,将带来严重的安全隐患,请慎用', 17 => 'forums_edit_posts_bbcode', 18 => '允许使用Discuz!代码', 19 => 'Discuz! 代码是一种简化和安全的页面格式代码', 20 => 'forums_edit_posts_imgcode', 21 => '允许使用 [img] 代码', - 22 => '允许 [img] 代码作者将可以在文章插入其他网站的图片并显示', + 22 => '允许 [img] 代码作者将可以在帖子插入其他网站的图片并显示', 23 => 'forums_edit_posts_mediacode', 24 => '允许使用多媒体代码', - 25 => '允许 [audio] [media] [flash] 等多媒体代码后,作者将可以在文章插入多媒体文件并显示', + 25 => '允许 [audio] [media] [flash] 等多媒体代码后,作者将可以在帖子插入多媒体文件并显示', 26 => 'forums_edit_posts_smilies', 27 => '允许使用表情', 28 => '表情提供对表情符号,如“:)”的解析,使之作为图片显示', 29 => 'forums_edit_posts_jammer', 30 => '启用内容干扰码', - 31 => '选择“是”将在文章内容中增加随机的干扰字串,使得访问者无法复制原始内容。注意: 本功能会轻微加重服务器负担', + 31 => '选择“是”将在帖子内容中增加随机的干扰字串,使得访问者无法复制原始内容。注意: 本功能会轻微加重服务器负担', 32 => 'forums_edit_posts_anonymous', 33 => '允许匿名发帖', 34 => '是否允许用户在本版匿名发表主题和回复,只要用户组或本版块允许,用户均可使用匿名发帖功能。匿名发帖不同于游客发帖,用户需要登录后才可使用,版主和管理员可以查看真实作者', @@ -2854,7 +2854,7 @@ $lang = array ( 60 => '开启后默认允许用户发送广播和动态,同时用户也可以选择不发送,隐私版块建议设为否。如果关闭广播功能,该设置将无效。', 61 => 'forums_edit_posts_commentitem', 62 => '普通主题点评预置观点', - 63 => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点。只有开启文章点评功能后本设置才生效,如留空表示使用全局的“普通主题点评预置观点”设置', + 63 => '每个观点一行。如存在空行,空行下方的内容将显示在下拉菜单中作为备选观点。只有开启帖子点评功能后本设置才生效,如留空表示使用全局的“普通主题点评预置观点”设置', 64 => 'forums_edit_posts_noantitheft', 65 => '关闭防采集', 66 => '关闭防采集功能可节省少量服务器资源,建议灌水类版块关闭防采集功能。', @@ -2982,7 +2982,7 @@ $lang = array ( 14 => '用户必须拥有指定的勋章才可访问此版块', 15 => 'forums_edit_perm_forum', 16 => '版块权限', - 17 => '某权限如果全部未选则表示如下含义:  浏览版块,全部用户组具有浏览版块文章权限;发新话题,除游客以外的用户组具有发帖权限;发表回复,除游客以外的用户组具有回复权限;查看附件,全部用户组具有下载/查看附件权限;上传附件,除游客以外的用户组具有上传附件权限;上传图片,除游客以外的用户组具有上传图片权限', + 17 => '某权限如果全部未选则表示如下含义:  浏览版块,全部用户组具有浏览版块帖子权限;发新话题,除游客以外的用户组具有发帖权限;发表回复,除游客以外的用户组具有回复权限;查看附件,全部用户组具有下载/查看附件权限;上传附件,除游客以外的用户组具有上传附件权限;上传图片,除游客以外的用户组具有上传图片权限', 18 => 'forums_edit_perm_formula', 19 => '权限表达式设置', 20 => '当您设定了权限表达式后,只有符合此表达式的会员才可以浏览本版块。如 "posts > 100 and extcredits1 > 10" 表示 "发帖数 > 100 并且 威望 > 10"日期格式 "{Y-M-D}",如 "{2009-10-1}"。IP 格式 "{x.x.x.x}",既可输入完整地址,也可只输入 IP 开头,如 "{10.0.0.1}"、"{192.168.0}"', @@ -3050,7 +3050,7 @@ $lang = array ( 4 => '允许精华主题', 5 => '设置是否允许精华管理范围内主题的级别', 6 => 'admingroup_edit_postperm', - 7 => '文章管理权限', + 7 => '帖子管理权限', 8 => 'admingroup_edit_modcpperm', 9 => '管理面板权限', 10 => 'group_userperm_others', @@ -3623,7 +3623,7 @@ $lang = array ( array ( 0 => '主题鉴定 » 图章', 1 => 'misc_stamp_listtips', - 2 => '鉴定图章显示在文章内容页,鉴定图标显示在主题列表页。系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。', + 2 => '鉴定图章显示在帖子内容页,鉴定图标显示在主题列表页。系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。', ), ), 201 => @@ -3637,7 +3637,7 @@ $lang = array ( array ( 0 => '主题鉴定 » 图标', 1 => 'misc_stamp_listtips', - 2 => '鉴定图章显示在文章内容页,鉴定图标显示在主题列表页。系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。', + 2 => '鉴定图章显示在帖子内容页,鉴定图标显示在主题列表页。系统预留了 100 个主题鉴定图片位置,分别为图片 ID 0 至 99。不要随意修改图片 ID,否则将会导致主题中已使用的图章、图标错乱。当图章设置了关联操作后,图章会在执行相应操作时被自动添加到主题中;当图章设置了关联图标后,图标会在添加图章时自动添加到主题列表中。关联操作不可与关联图标同时设置。', ), ), 202 => @@ -3691,7 +3691,7 @@ $lang = array ( array ( 0 => '站长推荐 » 管理', 1 => 'misc_focus_tips', - 2 => '站长推荐将以浮窗的形式显示在文章内容页面右下角。您可以手动添加一些指定的主题,或者选择一些版主推荐的主题。最多 10 条,每次随机显示其中 1 条。', + 2 => '站长推荐将以浮窗的形式显示在帖子内容页面右下角。您可以手动添加一些指定的主题,或者选择一些版主推荐的主题。最多 10 条,每次随机显示其中 1 条。', 3 => 'admin', 4 => '管理', 5 => 'edit', @@ -3799,25 +3799,25 @@ $lang = array ( array ( 'index' => array ( - '文章点评管理' => 'action=postcomment', + '帖子点评管理' => 'action=postcomment', ), 'text' => array ( - 0 => '文章点评管理', + 0 => '帖子点评管理', 1 => 'postcomment_tips', - 2 => '批量点评管理用于删除文章点评。提醒:点击搜索结果页的删除按钮,将会直接删除相关信息!', + 2 => '批量点评管理用于删除帖子点评。提醒:点击搜索结果页的删除按钮,将会直接删除相关信息!', ), ), 211 => array ( 'index' => array ( - '文章点评管理' => 'action=postcomment', + '帖子点评管理' => 'action=postcomment', '搜索' => 'action=postcomment&search=true', ), 'text' => array ( - 0 => '文章点评管理 » 搜索', + 0 => '帖子点评管理 » 搜索', 1 => 'postcomment_search_detail', 2 => '显示详细点评列表', 3 => 'comment_search_perpage', @@ -3828,8 +3828,8 @@ $lang = array ( 8 => '被点评主题 ID', 9 => '指定主题的所有点评(包括主题帖和回帖),多 ID 中间请用半角逗号 "," 隔开', 10 => 'postcomment_search_pid', - 11 => '被点评文章 ID', - 12 => '指定文章的点评,多 ID 中间请用半角逗号 "," 隔开', + 11 => '被点评帖子 ID', + 12 => '指定帖子的点评,多 ID 中间请用半角逗号 "," 隔开', 13 => 'postcomment_search_author', 14 => '点评者', 15 => '多点评者名中间请用半角逗号 "," 隔开', @@ -3848,28 +3848,28 @@ $lang = array ( array ( 'index' => array ( - '文章分表' => 'action=postsplit&operation=manage', + '帖子分表' => 'action=postsplit&operation=manage', '分表管理' => 'action=postsplit&operation=manage', ), 'text' => array ( - 0 => '文章分表 » 分表管理', + 0 => '帖子分表 » 分表管理', 1 => 'postsplit_manage_tips', - 2 => '进行文章分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作文章数据转移完毕会对源文章表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务forum_post(主表)必须保留300M的数据文章分表功能可以将文章分在不同的数据表中,适合文章数很多并且运行效率受到影响的站点使用', + 2 => '进行帖子分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作帖子数据转移完毕会对源帖子表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务forum_post(主表)必须保留300M的数据帖子分表功能可以将帖子分在不同的数据表中,适合帖子数很多并且运行效率受到影响的站点使用', ), ), 213 => array ( 'index' => array ( - '文章分表' => 'action=postsplit&operation=manage', + '帖子分表' => 'action=postsplit&operation=manage', '分表管理' => 'action=postsplit&operation=manage', ), 'text' => array ( - 0 => '文章分表 » 分表管理', + 0 => '帖子分表 » 分表管理', 1 => 'postsplit_manage_tips', - 2 => '进行文章分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作文章数据转移完毕会对源文章表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务forum_post(主表)必须保留300M的数据文章分表功能可以将文章分在不同的数据表中,适合文章数很多并且运行效率受到影响的站点使用', + 2 => '进行帖子分表前一定要先关闭站点,为防止分表操作过程中出现问题,必须做好数据库备份后再进行此操作帖子数据转移完毕会对源帖子表进行表优化操作,优化表所耗时间比较长,在这期间绝对不能重起服务器或者停止MySQL服务forum_post(主表)必须保留300M的数据帖子分表功能可以将帖子分在不同的数据表中,适合帖子数很多并且运行效率受到影响的站点使用', ), ), 214 => @@ -3882,11 +3882,11 @@ $lang = array ( array ( 0 => '论坛批量删帖', 1 => 'prune_tips', - 2 => '批量删帖仅用于删除违规文章使用,如您需要批量删除历史旧帖,请使用批量主题管理功能。使用此功能,需同时提供起始时间和终止时间其中之一,及发帖用户名、发帖 IP、内容关键字其中之一,至少共二项必要的条件,否则将无法进行操作。如果符合删除条件的文章为主题第一帖,或该主题无回复,将删除整个主题。如果您不是论坛管理员,您只能删除从某一时间到现在的范围内的文章。超级版主的删帖的时间范围为二星期(14 天);版主的时间范围为一星期(7 天)且只能删除所管辖论坛内的文章。关键字可以使用限定符 {x} 以限定相邻两字符间可忽略的文字,x 是忽略字符的个数,如 "a{1}s{2}s"(不含引号) 可以搜索到 "ass" 也可搜索到 "axsxs" 和 "axsxxs" 等等。', + 2 => '批量删帖仅用于删除违规帖子使用,如您需要批量删除历史旧帖,请使用批量主题管理功能。使用此功能,需同时提供起始时间和终止时间其中之一,及发帖用户名、发帖 IP、内容关键字其中之一,至少共二项必要的条件,否则将无法进行操作。如果符合删除条件的帖子为主题第一帖,或该主题无回复,将删除整个主题。如果您不是论坛管理员,您只能删除从某一时间到现在的范围内的帖子。超级版主的删帖的时间范围为二星期(14 天);版主的时间范围为一星期(7 天)且只能删除所管辖论坛内的帖子。关键字可以使用限定符 {x} 以限定相邻两字符间可忽略的文字,x 是忽略字符的个数,如 "a{1}s{2}s"(不含引号) 可以搜索到 "ass" 也可搜索到 "axsxs" 和 "axsxxs" 等等。', 3 => 'prune_search_detail', - 4 => '显示详细文章列表', + 4 => '显示详细帖子列表', 5 => 'prune_search_select_postsplit', - 6 => '选择文章分表', + 6 => '选择帖子分表', 7 => 'prune_search_forum', 8 => '所在版块', 9 => 'prune_search_perpage', @@ -3919,7 +3919,7 @@ $lang = array ( array ( 0 => '主题回收站 » 搜索', 1 => 'recyclebin_search', - 2 => '搜索符合条件的被删文章', + 2 => '搜索符合条件的被删帖子', 3 => 'recyclebin_search_forum', 4 => '所在版块', 5 => 'recyclebin_search_author', @@ -3932,7 +3932,7 @@ $lang = array ( 12 => '删帖管理员', 13 => '多个用户名间请用半角逗号 "," 隔开', 14 => 'recyclebin_search_post_time', - 15 => '文章发表时间范围', + 15 => '帖子发表时间范围', 16 => '格式 yyyy-mm-dd,不限制请留空', 17 => 'recyclebin_search_mod_time', 18 => '删帖时间范围', @@ -3954,7 +3954,7 @@ $lang = array ( 1 => 'recyclebin_clean', 2 => '批量清空回收站', 3 => 'recyclebin_clean_days', - 4 => '清空多少天以前的回收站文章', + 4 => '清空多少天以前的回收站帖子', 5 => '0 为清空全部', ), ), @@ -3979,10 +3979,10 @@ $lang = array ( 9 => '内容关键字', 10 => '多关键字中间请用半角逗号 "," 隔开', 11 => 'recyclebin_search_post_time', - 12 => '文章发表时间范围', + 12 => '帖子发表时间范围', 13 => '格式 yyyy-mm-dd,不限制请留空', 14 => 'postsplit', - 15 => '文章分表', + 15 => '帖子分表', 16 => 'recyclebin_search_security_thread', 17 => '', ), @@ -4000,7 +4000,7 @@ $lang = array ( 1 => 'recyclebinpost_clean', 2 => '批量清空回帖回收站', 3 => 'recyclebinpost_clean_days', - 4 => '清空多少天以前的回帖回收站文章', + 4 => '清空多少天以前的回帖回收站帖子', 5 => '0 为清空全部', ), ), @@ -4431,7 +4431,7 @@ $lang = array ( 31 => '设置当鼠标移动到用户名位置上时是否显示他的名片', 32 => 'setting_styles_global_anonymoustext', 33 => '匿名用户的昵称', - 34 => '设置文章或评论留言中的匿名用户显示的文字。如:本站网友', + 34 => '设置帖子或评论留言中的匿名用户显示的文字。如:本站网友', 35 => 'setting_styles_global_home_style_1', 36 => '以SNS模块风格展示', 37 => 'setting_styles_global_home_style_0', @@ -4554,10 +4554,10 @@ $lang = array ( 28 => '选择“否”,在主题列表页将不显示置顶主题与普通主题之间的分割带(版块主题那一空行)', 29 => 'setting_styles_forumdisplay_visitedforums', 30 => '显示最近访问版块数量', - 31 => '设置在版块列表和文章浏览中显示最近访问过的版块数量,建议设置为 10 以内,0 为关闭此功能', + 31 => '设置在版块列表和帖子浏览中显示最近访问过的版块数量,建议设置为 10 以内,0 为关闭此功能', 32 => 'setting_styles_forumdisplay_fastpost', 33 => '快速发帖/回帖', - 34 => '在主题列表页底部显示快速发帖,在文章内容页底部显示快速回帖', + 34 => '在主题列表页底部显示快速发帖,在帖子内容页底部显示快速回帖', 35 => 'setting_styles_forumdisplay_fastsmilies', 36 => '显示推荐表情', 37 => '在快速发帖右侧显示推荐表情。推荐的表情需要到“表情管理”中设置', @@ -4578,7 +4578,7 @@ $lang = array ( 52 => '当向上滚动屏幕时,主导航将即时出现在屏幕的顶部', 53 => 'setting_styles_forumdisplay_threadpreview', 54 => '关闭主题预览', - 55 => '关闭后将不可在主题列表页预览文章内容', + 55 => '关闭后将不可在主题列表页预览帖子内容', ), ), 230 => @@ -4586,41 +4586,41 @@ $lang = array ( 'index' => array ( '界面设置' => 'action=setting&operation=styles', - '文章内容页' => 'action=setting&operation=styles&anchor=viewthread', + '帖子内容页' => 'action=setting&operation=styles&anchor=viewthread', ), 'text' => array ( - 0 => '界面设置 » 文章内容页', + 0 => '界面设置 » 帖子内容页', 1 => 'nav_setting_viewthread', - 2 => '文章内容页', + 2 => '帖子内容页', 3 => 'setting_styles_viewthread_ppp', 4 => '每页显示帖数', - 5 => '文章列表中每页显示文章数目', + 5 => '帖子列表中每页显示帖子数目', 6 => 'setting_styles_viewthread_starthreshold', 7 => '星星升级阈值', 8 => '星星数在达到此阈值(设为 N)时,N 个星星显示为 1 个月亮、N 个月亮显示为 1 个太阳。默认值为 2,如设为 0 则取消此项功能,始终以星星显示', 9 => 'setting_styles_viewthread_maxsigrows', 10 => '签名最大高度(px)', - 11 => '设置文章中允许显示签名的最大高度', + 11 => '设置帖子中允许显示签名的最大高度', 12 => 'setting_styles_viewthread_sigviewcond', 13 => '签名显示条件', - 14 => '只有文章字数大于指定数值后才显示签名,0为不限制', + 14 => '只有帖子字数大于指定数值后才显示签名,0为不限制', 15 => 'setting_styles_viewthread_sigimgclick_on', 16 => '取消签名图片的动态放大功能', 17 => 'setting_styles_viewthread_rate_on', 18 => '是否在页面上显示评分理由', 19 => 'setting_styles_viewthread_rate_number', 20 => '评分条目数', - 21 => '在文章中显示最近评分结果的条目数,0 为不显示', + 21 => '在帖子中显示最近评分结果的条目数,0 为不显示', 22 => 'setting_styles_viewthread_collection_number', 23 => '相关淘专辑条目数', 24 => '在主题帖中显示相关淘专辑的条目数,0 为不显示', 25 => 'setting_styles_viewthread_relate_number', - 26 => '相关文章条目数', - 27 => '在主题帖中显示相关文章的条目数,0 为不显示', + 26 => '相关帖子条目数', + 27 => '在主题帖中显示相关帖子的条目数,0 为不显示', 28 => 'setting_styles_viewthread_relate_time', - 29 => '相关文章缓存时间', - 30 => '单位:分钟,在主题帖中显示相关文章的缓存时间(0 为不缓存,不推荐)', + 29 => '相关帖子缓存时间', + 30 => '单位:分钟,在主题帖中显示相关帖子的缓存时间(0 为不缓存,不推荐)', 31 => 'setting_styles_viewthread_hideattachdown', 32 => '是否隐藏附件下载次数', 33 => '开启后贴内图片、附件的下载次数会被隐藏', @@ -4650,25 +4650,25 @@ $lang = array ( 57 => '设置图片附件在动态放大效果中是否显示 EXIF 信息', 58 => 'setting_styles_viewthread_vtonlinestatus', 59 => '显示作者在线状态', - 60 => '是否显示文章作者的在线状态,注意:“精确显示”会轻微加重服务器负担', + 60 => '是否显示帖子作者的在线状态,注意:“精确显示”会轻微加重服务器负担', 61 => 'setting_styles_viewthread_userstatusby', 62 => '显示作者的组头衔', - 63 => '设置在文章中是否显示作者的用户组头衔', + 63 => '设置在帖子中是否显示作者的用户组头衔', 64 => 'setting_styles_viewthread_postno', - 65 => '文章顺序单位', - 66 => '设置文章显示顺序编号的单位,如“#”将显示为 1 #', + 65 => '帖子顺序单位', + 66 => '设置帖子显示顺序编号的单位,如“#”将显示为 1 #', 67 => 'setting_styles_viewthread_postnocustom', - 68 => '文章顺序名称', - 69 => '设置每篇主题所有文章的顺序名称,每行填写一个名称,第一行代表主题帖,第二行代表主题的第一个回复,以此类推', + 68 => '帖子顺序名称', + 69 => '设置每篇主题所有帖子的顺序名称,每行填写一个名称,第一行代表主题帖,第二行代表主题的第一个回复,以此类推', 70 => 'setting_styles_viewthread_maxsmilies', 71 => '最大单一表情解析次数', - 72 => '在一篇文章中解析的单一表情符号的最大次数,超过此次数限制的表情将不被解析而保留原样,以避免用户在一篇文章中恶意发表大量表情影响正常阅读,0 为不限制', + 72 => '在一篇帖子中解析的单一表情符号的最大次数,超过此次数限制的表情将不被解析而保留原样,以避免用户在一篇帖子中恶意发表大量表情影响正常阅读,0 为不限制', 73 => 'setting_styles_viewthread_author_onleft', 74 => '作者用户名显示位置', 75 => '显示位置并不会影响论坛的性能和美观,请根据您会员的浏览习惯进行选择', 76 => 'setting_styles_forumdisplay_disfixedavatar', 77 => '关闭头像区域固定', - 78 => '当滚动屏幕时,左侧头像区域将跟随右侧文章内容浮动,填充文章内容区域很高时导致的左侧空白', + 78 => '当滚动屏幕时,左侧头像区域将跟随右侧帖子内容浮动,填充帖子内容区域很高时导致的左侧空白', 79 => 'setting_styles_forumdisplay_disfixednv_viewthread', 80 => '关闭顶部导航固定', 81 => '当向上滚动屏幕时,主导航将即时出现在屏幕的顶部', @@ -4677,7 +4677,7 @@ $lang = array ( 84 => '启用后,游客阅读主题时,将不显示用户的具体资料信息。', 85 => 'setting_styles_viewthread_close_leftinfo', 86 => '关闭左侧信息栏', - 87 => '文章左侧用户信息栏是否默认关闭', + 87 => '帖子左侧用户信息栏是否默认关闭', 88 => 'setting_styles_viewthread_close_leftinfo_userctrl', 89 => '左侧信息栏允许用户控制', 90 => '浏览主题时,用户是否可以控制左侧信息栏的显示状态', @@ -4703,11 +4703,11 @@ $lang = array ( 110 => '开启主题帖快速回复', 111 => '开启后将在主题帖下方展示快速回复框', 112 => 'setting_styles_viewthread_allow_replybg', - 113 => '开启文章快速回复框背景', - 114 => '开启后允许给文章快速回复框添加背景图片', + 113 => '开启帖子快速回复框背景', + 114 => '开启后允许给帖子快速回复框添加背景图片', 115 => 'setting_styles_viewthread_global_reply_background', - 116 => '全局文章快速回复框背景', - 117 => '设置全局文章快速回复框背景图片,版块设置优先', + 116 => '全局帖子快速回复框背景', + 117 => '设置全局帖子快速回复框背景图片,版块设置优先', 118 => 'setting_styles_viewthread_display_none', 119 => '', 120 => 'setting_styles_viewthread_online_easy', @@ -4844,8 +4844,8 @@ $lang = array ( 5 => '缓存论坛首页有效期', 6 => '设置论坛首页缓存更新的时间,单位为秒,0 为关闭(此处关闭以后,缓存系数将不再起作用),建议设置为 900。此功能只针对游客', 7 => 'setting_cachethread_life', - 8 => '缓存文章有效期', - 9 => '设置文章页面缓存更新的时间,单位为秒,0 为关闭。请根据实际情况进行调整,建议设置为 900。另外,请通过编辑论坛来指定文章页面缓存系数', + 8 => '缓存帖子有效期', + 9 => '设置帖子页面缓存更新的时间,单位为秒,0 为关闭。请根据实际情况进行调整,建议设置为 900。另外,请通过编辑论坛来指定帖子页面缓存系数', 10 => 'setting_cachethread_dir', 11 => '缓存目录', 12 => '默认为 data/threadcache 目录,如果您需要将其指定为其他目录,请确定您指定的目录有可写权限', @@ -4983,7 +4983,7 @@ $lang = array ( 9 => 'setting_functions_curscript_portal', 10 => '门户', 11 => 'setting_functions_curscript_portal_intro', - 12 => '通过门户,网站可以将最热门的文章、文章、活动等信息展现给用户', + 12 => '通过门户,网站可以将最热门的帖子、文章、活动等信息展现给用户', 13 => 'setting_functions_curscript_group', 14 => '圈子', 15 => 'setting_functions_curscript_group_intro', @@ -5079,7 +5079,7 @@ $lang = array ( 17 => '系统中保留管理记录的时间,默认为 3 个月,建议在 3~6 个月的范围内取值', 18 => 'setting_functions_mod_losslessdel', 19 => '删帖不减积分时间期限(天)', - 20 => '设置版主或管理员从前台删除发表于多少天以前的文章时,不更新用户的扩展积分,可用于清理老文章而不对作者的扩展积分造成损失。0 为不使用此功能,始终更新用户积分', + 20 => '设置版主或管理员从前台删除发表于多少天以前的帖子时,不更新用户的扩展积分,可用于清理老帖子而不对作者的扩展积分造成损失。0 为不使用此功能,始终更新用户积分', 21 => 'setting_functions_mod_reasons', 22 => '管理操作理由选项', 23 => '本设定将在用户执行部分管理操作时显示,每个理由一行,如果空行则显示一行分隔符“--------”,用户可选择本设定中预置的理由选项或自行输入', @@ -5093,7 +5093,7 @@ $lang = array ( 31 => '用户评分理由选项', 32 => '本设定将在用户执行评分时显示,每个理由一行,如果空行则显示一行分隔符“--------”,用户可选择本设定中预置的理由选项或自行输入', 33 => 'setting_functions_mod_bannedmessages', - 34 => '隐藏敏感文章内容', + 34 => '隐藏敏感帖子内容', 35 => '选择相应项目将隐藏被删除或被禁止的用户的相关资料,在相关资料处显示被屏蔽的字样', 36 => 'setting_functions_mod_warninglimit', 37 => '用户被警告多少次自动禁言', @@ -5106,9 +5106,9 @@ $lang = array ( 44 => '设置悬赏主题的有效天数,当悬赏主题超过有效期后依然未发放悬赏,版主或管理员有权代为主题作者发放悬赏。0 或留空表示不允许版主或管理员进行此操作', 45 => 'setting_functions_mod_moddetail', 46 => '版主面板显示审核数目', - 47 => '设置版主面板是否详细显示待审核主题、文章及用户的具体数目', + 47 => '设置版主面板是否详细显示待审核主题、帖子及用户的具体数目', 48 => 'setting_functions_mod_bannedmessages_thread', - 49 => '文章内容', + 49 => '帖子内容', 50 => 'setting_functions_mod_bannedmessages_avatar', 51 => '用户头像', 52 => 'setting_functions_mod_bannedmessages_signature', @@ -5146,7 +5146,7 @@ $lang = array ( array ( 0 => '站点功能 » 主题评价', 1 => 'setting_functions_recommend_tips', - 2 => '不同用户组会员的主题评价影响值不同,您可以在”用户组”设置的“文章相关”中设置。', + 2 => '不同用户组会员的主题评价影响值不同,您可以在”用户组”设置的“帖子相关”中设置。', 3 => 'setting_functions_recommend_status', 4 => '启用主题评价', 5 => '主题评价是让用户参与主题热度的重要指标,您可以设定用户在每天允许执行的评价次数', @@ -5160,7 +5160,7 @@ $lang = array ( 13 => '每 24 小时评价主题次数', 14 => '设置用户每 24 小时可以评价多少篇主题,0 或留空为不限制', 15 => 'setting_functions_recommend_ownthread', - 16 => '是否允许评价自己的文章', + 16 => '是否允许评价自己的帖子', 17 => '设置是否允许评价自己的主题。评价自己的主题无积分奖励', 18 => 'setting_functions_recommend_iconlevels', 19 => '评价图标显示级别', @@ -5172,20 +5172,20 @@ $lang = array ( 'index' => array ( '站点功能' => 'action=setting&operation=functions', - '文章点评' => 'action=setting&operation=functions&anchor=comment', + '帖子点评' => 'action=setting&operation=functions&anchor=comment', ), 'text' => array ( - 0 => '站点功能 » 文章点评', + 0 => '站点功能 » 帖子点评', 1 => 'setting_functions_comment_allow', 2 => '点评方式', - 3 => '设置点评的发表方式,如不选择表示不启用点评功能。开启任意一种点评方式都需要在用户组中设置点评权限“直接点评”即通过文章每楼层中的“点评”链接发表点评“楼层回复”即通过文章每楼层中的“回复”链接发表回帖时,自动对该楼层产生点评注意:点击主题中的“回复”链接,不会对主题产生点评', + 3 => '设置点评的发表方式,如不选择表示不启用点评功能。开启任意一种点评方式都需要在用户组中设置点评权限“直接点评”即通过帖子每楼层中的“点评”链接发表点评“楼层回复”即通过帖子每楼层中的“回复”链接发表回帖时,自动对该楼层产生点评注意:点击主题中的“回复”链接,不会对主题产生点评', 4 => 'setting_functions_comment_number', 5 => '点评条目数', - 6 => '在文章中显示点评的条目数', + 6 => '在帖子中显示点评的条目数', 7 => 'setting_functions_comment_postself', - 8 => '允许点评自己的文章', - 9 => '设置是否发帖作者能点评自己的文章', + 8 => '允许点评自己的帖子', + 9 => '设置是否发帖作者能点评自己的帖子', 10 => 'setting_functions_comment_firstpost', 11 => '允许点评楼主帖', 12 => '设置是否允许直接点评楼主帖,关闭表示只能点评回帖', @@ -5218,32 +5218,32 @@ $lang = array ( 'index' => array ( '站点功能' => 'action=setting&operation=functions', - '文章阅读' => 'action=setting&operation=functions&anchor=threadexp', + '帖子阅读' => 'action=setting&operation=functions&anchor=threadexp', ), 'text' => array ( - 0 => '站点功能 » 文章阅读', + 0 => '站点功能 » 帖子阅读', 1 => 'setting_functions_threadexp_repliesrank', 2 => '启用回帖投票', 3 => '开启后,用户可对回帖进行“支持”、“反对”操作。', 4 => 'setting_functions_threadexp_blacklist', 5 => '启用用户黑名单隐藏', - 6 => '开启后,用户可以通过将其他用户加入黑名单的方法,隐藏指定用户的文章。', + 6 => '开启后,用户可以通过将其他用户加入黑名单的方法,隐藏指定用户的帖子。', 7 => 'setting_functions_threadexp_hotreplies', 8 => '推荐回复数', 9 => '系统根据回帖评价和水帖情况,在主题第一页推荐回帖,0 为不显示。', 10 => 'setting_functions_threadexp_filter', 11 => '水帖字数', - 12 => '系统判断水帖的条件,小于此数值的文章会被判断为水帖,0 为不过滤水帖。', + 12 => '系统判断水帖的条件,小于此数值的帖子会被判断为水帖,0 为不过滤水帖。', 13 => 'setting_functions_threadexp_nofilteredpost', 14 => '推荐回复时推荐非水帖', 15 => '启用后会在第一页推荐回复处推荐相应一定的非水帖。', 16 => 'setting_functions_threadexp_hidefilteredpost', 17 => '启用隐藏水帖', - 18 => '开启后系统判断为水帖的文章会被自动隐藏。', + 18 => '开启后系统判断为水帖的帖子会被自动隐藏。', 19 => 'setting_functions_threadexp_filterednovote', 20 => '水帖不能参与回帖投票', - 21 => '开启后系统判断为水帖的文章将不能参与回帖投票。', + 21 => '开启后系统判断为水帖的帖子将不能参与回帖投票。', ), ), 245 => @@ -5272,7 +5272,7 @@ $lang = array ( 14 => '选择“是”,将会防止用户同一时间提交多次表单,可有效防止可能刷分的问题。注意: 在未使用内存缓存(Redis、Memcached)的情况下,本功能可能会加重服务器负担', 15 => 'setting_functions_other_rssstatus', 16 => '启用 RSS', - 17 => '选择“是”,将允许用户使用 RSS 客户端软件接收最新的文章、文章更新。注意: 在分类很多的情况下,本功能可能会加重服务器负担', + 17 => '选择“是”,将允许用户使用 RSS 客户端软件接收最新的帖子、文章更新。注意: 在分类很多的情况下,本功能可能会加重服务器负担', 18 => 'setting_functions_other_rssttl', 19 => 'RSS TTL(分钟)', 20 => 'TTL(Time to Live) 是 RSS 2.0 的一项属性,用于控制订阅内容的自动刷新时间,时间越短则资料实时性就越高,但会加重服务器负担,通常可设置为 30~180 范围内的数值', @@ -5380,14 +5380,14 @@ $lang = array ( array ( 0 => '用户权限', 1 => 'setting_permissions_allowviewuserthread', - 2 => '允许查看用户的主题和文章', - 3 => '设置是否允许查看其他用户的主题和文章,选择相应的版块那么在个人空间将出现“主题”模块和链接', + 2 => '允许查看用户的主题和帖子', + 3 => '设置是否允许查看其他用户的主题和帖子,选择相应的版块那么在个人空间将出现“主题”模块和链接', 4 => 'setting_permissions_allowviewuserthread_fids', - 5 => '允许查看哪些版块的文章', - 6 => '设置允许查看其他用户哪些版块的主题和文章,可以按住 CTRL 多选', + 5 => '允许查看哪些版块的帖子', + 6 => '设置允许查看其他用户哪些版块的主题和帖子,可以按住 CTRL 多选', 7 => 'setting_permissions_allowmoderatingthread', - 8 => '是否提示用户自己有未审核的主题或者文章', - 9 => '选择“是”,用户如果有正在审核的主题,将可以在文章列表页看到提示', + 8 => '是否提示用户自己有未审核的主题或者帖子', + 9 => '选择“是”,用户如果有正在审核的主题,将可以在帖子列表页看到提示', 10 => 'setting_permissions_memliststatus', 11 => '允许查看会员列表', 12 => 'setting_permissions_minsubjectsize', @@ -5397,20 +5397,20 @@ $lang = array ( 16 => '标题最大字数', 17 => '论坛、门户、日志均受限制,管理组成员可通过“发帖不受限制”设置而在论坛模块不受影响, 80 为默认值, 255 为最大值', 18 => 'setting_permissions_minpostsize', - 19 => '文章最小字数(字节)', + 19 => '帖子最小字数(字节)', 20 => '管理组成员可通过“发帖不受限制”设置而不受影响,0 为不限制', 21 => 'setting_permissions_minpostsize_mobile', 22 => '手机客户端发帖最小字数(字节)', 23 => '是否单独为手机客户端设置发帖的最小字节数,0 为不单独设置', 24 => 'setting_permissions_maxpostsize', - 25 => '文章最大字数(字节)', + 25 => '帖子最大字数(字节)', 26 => '管理组成员可通过“发帖不受限制”设置而不受影响', 27 => 'setting_permissions_alloweditpost', - 28 => '允许用户随时编辑的文章类型', - 29 => '被选中的文章类型将不受用户组中的“编辑文章时间”限制,任何时刻都可以编辑', + 28 => '允许用户随时编辑的帖子类型', + 29 => '被选中的帖子类型将不受用户组中的“编辑帖子时间”限制,任何时刻都可以编辑', 30 => 'setting_permissions_post_append', - 31 => '启用文章补充功能', - 32 => '启用后,当用户无法编辑自己的文章时,可以补充内容', + 31 => '启用帖子补充功能', + 32 => '启用后,当用户无法编辑自己的帖子时,可以补充内容', 33 => 'setting_permissions_mailinterval', 34 => '邮件发送时间间隔', 35 => '设定邮件发送时间间隔,默认为 300 秒', @@ -5418,8 +5418,8 @@ $lang = array ( 37 => '投票最大选项数:', 38 => '设定发布投票包含的最大选项数', 39 => 'setting_permissions_editby', - 40 => '编辑文章附加编辑记录', - 41 => '在 60 秒后编辑文章添加“本帖由 xxx 于 xxxx-xx-xx 编辑”字样。管理员编辑不受此限制', + 40 => '编辑帖子附加编辑记录', + 41 => '在 60 秒后编辑帖子添加“本帖由 xxx 于 xxxx-xx-xx 编辑”字样。管理员编辑不受此限制', 42 => 'setting_permissions_profilehistory', 43 => '启用个人信息历史记录功能', 44 => '启用后,个人信息历史记录将被保存,可以在后台下载。历史邮箱、安全手机号数据不受此功能限制', @@ -5433,18 +5433,18 @@ $lang = array ( 52 => '评分', 53 => 'setting_permissions_karmaratelimit', 54 => '评分时间限制(小时)', - 55 => '文章发表后超过此时间限制其他用户将不能对此帖评分,版主和管理员不受此限制,0 为不限制', + 55 => '帖子发表后超过此时间限制其他用户将不能对此帖评分,版主和管理员不受此限制,0 为不限制', 56 => 'setting_permissions_modratelimit', 57 => '版主评分限制', - 58 => '设置版主只能在自身所管辖的版块范围内对文章进行评分。本限制只对版主有效,允许评分的普通用户及超级版主、管理员不受此限制,因此如果赋予这些用户评分权限,他们仍将可以在全版块范围内进行评分', + 58 => '设置版主只能在自身所管辖的版块范围内对帖子进行评分。本限制只对版主有效,允许评分的普通用户及超级版主、管理员不受此限制,因此如果赋予这些用户评分权限,他们仍将可以在全版块范围内进行评分', 59 => 'setting_permissions_dupkarmarate', 60 => '允许重复评分', - 61 => '选择“是”将允许用户对一个文章进行多次评分,默认为“否”', + 61 => '选择“是”将允许用户对一个帖子进行多次评分,默认为“否”', 62 => 'setting_permissions_editperdel', - 63 => '允许用户编辑文章时删除文章', - 64 => '选择“是”将允许用户编辑文章时删除文章,默认为“否”', + 63 => '允许用户编辑帖子时删除帖子', + 64 => '选择“是”将允许用户编辑帖子时删除帖子,默认为“否”', 65 => 'setting_permissions_hideexpiration', - 66 => '文章中[hide]标签最大有效天数', + 66 => '帖子中[hide]标签最大有效天数', 67 => '距发帖日期天数超过此设置时标签自动失效,0或不填为不限制', ), ), @@ -5705,7 +5705,7 @@ $lang = array ( 42 => '用户打开发帖页面到提交的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', 43 => 'setting_sec_seccode_rule_post_vplimit', 44 => '提交回复时间太短后启用 (秒)', - 45 => '用户打开文章页面到提交回复的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', + 45 => '用户打开帖子页面到提交回复的最短时间,低于最短设置时间时需要输入验证码,0 代表不启用此规则', 46 => 'setting_sec_seccode_rule_password', 47 => '修改密码时启用验证码', 48 => '设置修改密码时是否启用验证码', @@ -5955,13 +5955,13 @@ $lang = array ( array ( 0 => '上传设置 » 论坛附件', 1 => 'setting_attach_basic_imgpost', - 2 => '文章中显示图片附件', - 3 => '在文章中直接将图片或动画附件显示出来,而不需要点击附件链接', + 2 => '帖子中显示图片附件', + 3 => '在帖子中直接将图片或动画附件显示出来,而不需要点击附件链接', 4 => 'setting_attach_basic_allowattachurl', 5 => '附件 URL 地址、媒体附件播放', - 6 => '开启附件 URL 地址后,上传附件的地址可通过 "attach://aid.ext" 方式在任何帖内引用(不支持附件收费以及阅读权限判定),并支持媒体类附件的直接播放,此项设置需要在 用户组 - 文章相关 中允许用户组使用多媒体代码,并保证 config_global.php 配置的本地文件读取模式为 1 或 4 方可生效', + 6 => '开启附件 URL 地址后,上传附件的地址可通过 "attach://aid.ext" 方式在任何帖内引用(不支持附件收费以及阅读权限判定),并支持媒体类附件的直接播放,此项设置需要在 用户组 - 帖子相关 中允许用户组使用多媒体代码,并保证 config_global.php 配置的本地文件读取模式为 1 或 4 方可生效', 7 => 'setting_attach_image_thumbstatus', - 8 => '论坛文章附件缩略图设置', + 8 => '论坛帖子附件缩略图设置', 9 => '您可以设置自动为用户上传的 JPG/PNG/GIF 图片附件添加缩略图或将图片附件缩到指定的大小。不支持动画 GIF 格式', 10 => 'setting_attach_image_thumbwidthheight', 11 => '缩略图大小', @@ -5977,7 +5977,7 @@ $lang = array ( 21 => '单位:小时,0 或留空表示附件链接永久有效,过期后链接自动更新。本功能可有效防止附件被盗链或附件被软件批量下载,但是会给会员的正常下载带来不便', 22 => 'setting_attach_antileech_refcheck', 23 => '下载附件来路检查', - 24 => '选择“是”将检查下载附件的来路,来自其他网站或站点的下载请求将被禁止。注意: 本功能在开启“文章中显示图片附件”时,会加重服务器负担', + 24 => '选择“是”将检查下载附件的来路,来自其他网站或站点的下载请求将被禁止。注意: 本功能在开启“帖子中显示图片附件”时,会加重服务器负担', 25 => 'setting_attach_image_thumbstatus_none', 26 => '不启用', 27 => 'setting_attach_image_thumbstatus_fixnone', @@ -6537,7 +6537,7 @@ $lang = array ( 13 => '是否开启手机版注册功能,手机注册不会对用户栏目中的注册页必填项进行检测请谨慎开启', 14 => 'setting_mobile_simpletype', 15 => '开启无图模式', - 16 => '默认显示图片,开启后,“触屏版”不显示文章图片,“简易版”不显示文章图片、小图标、主题列表日期等页面元素', + 16 => '默认显示图片,开启后,“触屏版”不显示帖子图片,“简易版”不显示帖子图片、小图标、主题列表日期等页面元素', 17 => 'setting_mobile_cachetime', 18 => '页面浏览缓存时间', 19 => '设置访问过的页面在用户手机上保存的时间,留空或0为不缓存单位:秒', @@ -6587,13 +6587,13 @@ $lang = array ( 8 => '开启后将在论坛首页顶部显示论坛统计信息,仅在论坛首页样式为论坛版块或论坛版块含首页四格模式下显示', 9 => 'setting_mobile_forum_displayorder3', 10 => '是否显示置顶贴', - 11 => '“触屏版”功能,在文章列表页面中是否显示置顶贴,否为不显示', + 11 => '“触屏版”功能,在帖子列表页面中是否显示置顶贴,否为不显示', 12 => 'setting_mobile_forum_topicperpage', 13 => '每页显示主题数', 14 => '主题列表页每页显示主题个数,为空时和界面设置保持一致当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', 15 => 'setting_mobile_forum_postperpage', 16 => '主题内每页显示帖数', - 17 => '主题内每页显示的文章数目,为空时和界面设置保持一致当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', + 17 => '主题内每页显示的帖子数目,为空时和界面设置保持一致当此处和界面设置数值不同时会导致手机端和电脑端分页不一致,请谨慎配置', 18 => 'setting_mobile_forum_forumview', 19 => '首页分区展示方式', 20 => '如“收起”,论坛首页将默认只展示分区标题用户需点击分区展开该分区下的版块列表', @@ -6621,7 +6621,7 @@ $lang = array ( array ( 0 => '防采集设置', 1 => 'setting_antitheft_tips', - 2 => '防采集功能不影响正常用户浏览检验。可防止本站主题、文章和日志被非法采集。当IP同时存在于黑/白名单时,白名单优先。开启防采集功能后文章列表页面的文章预览功能将不可使用。', + 2 => '防采集功能不影响正常用户浏览检验。可防止本站主题、文章和日志被非法采集。当IP同时存在于黑/白名单时,白名单优先。开启防采集功能后帖子列表页面的帖子预览功能将不可使用。', 3 => 'setting_antitheft_status', 4 => '防采集全局设置', 5 => 'setting_antitheft_allow', @@ -7034,7 +7034,7 @@ $lang = array ( 9 => '禁止访问: 禁止用户浏览本站任何页面正常访问: 当站点开放的时候,可以正常浏览页面超级访问: 即便站点关闭也可以访问,一般用于管理员或站内测试组', 10 => 'usergroups_edit_basic_read_access', 11 => '阅读权限', - 12 => '设置用户浏览文章或附件的权限级别,范围 0~255,0 为禁止用户浏览任何文章或附件。当用户的阅读权限小于文章或附件的阅读权限许可(默认时为 1)时,用户将不能阅读该文章或下载该附件', + 12 => '设置用户浏览帖子或附件的权限级别,范围 0~255,0 为禁止用户浏览任何帖子或附件。当用户的阅读权限小于帖子或附件的阅读权限许可(默认时为 1)时,用户将不能阅读该帖子或下载该附件', 13 => 'usergroups_edit_basic_max_friend_number', 14 => '最多好友数', 15 => '0为无限', @@ -7084,7 +7084,7 @@ $lang = array ( 59 => '设置用户在对他人评分或管理操作时是否强制输入理由和通知作者', 60 => 'usergroups_edit_basic_cstatus', 61 => '允许自定义头衔', - 62 => '设置是否允许用户设置自己的头衔名字并在文章中显示', + 62 => '设置是否允许用户设置自己的头衔名字并在帖子中显示', 63 => 'usergroups_edit_basic_disable_periodctrl', 64 => '不受时间段限制', 65 => '设置用户是否可以不受全局设置中设置的特殊时间段禁令限制', @@ -7123,7 +7123,7 @@ $lang = array ( 98 => 'usergroups_edit_post_url_banned', 99 => '禁止发表', 100 => 'usergroups_edit_post_url_mod', - 101 => '允许,但文章进入审核', + 101 => '允许,但帖子进入审核', 102 => 'usergroups_edit_post_url_unhandle', 103 => '允许,但不解析', 104 => 'usergroups_edit_post_url_enable', @@ -7202,13 +7202,13 @@ $lang = array ( 'index' => array ( '用户组' => 'action=usergroups', - '文章相关' => 'action=usergroups&operation=edit&anchor=post', + '帖子相关' => 'action=usergroups&operation=edit&anchor=post', ), 'text' => array ( - 0 => '用户组 » 文章相关', + 0 => '用户组 » 帖子相关', 1 => 'usergroups_edit_post', - 2 => '文章相关', + 2 => '帖子相关', 3 => 'usergroups_edit_post_new', 4 => '允许发新话题', 5 => '设置是否允许发新话题。注意: 只有当用户组阅读权限高于 0 时,才能发新话题', @@ -7225,20 +7225,20 @@ $lang = array ( 16 => '允许发匿名帖', 17 => '是否允许用户匿名发表主题和回复,只要用户组或本论坛允许,用户均可使用匿名发帖功能。匿名发帖不同于游客发帖,用户需要登录后才可使用,版主和管理员可以查看真实作者', 18 => 'usergroups_edit_post_set_read_perm', - 19 => '允许设置文章权限', - 20 => '设置是否允许设置文章需要指定阅读权限才可浏览', + 19 => '允许设置帖子权限', + 20 => '设置是否允许设置帖子需要指定阅读权限才可浏览', 21 => 'usergroups_edit_post_maxprice', 22 => '主题(附件)最高售价', - 23 => '主题(附件)出售使得作者可以将自己发表的主题(附件)隐藏起来,只有当浏览者向作者支付相应的交易积分后才能查看主题(附件)内容。此处设置用户出售主题(附件)时允许设置的最高价格,0 为不允许用户出售。注意: 本功能需在 全局设置中启用交易积分后才可使用。如开启版主及管理员的出售主题(附件)功能,请将其最高价格设置为高于普通用户组允许的最高价格,这样在文章被编辑时不至于导致主题(附件)售价的硬性下调', + 23 => '主题(附件)出售使得作者可以将自己发表的主题(附件)隐藏起来,只有当浏览者向作者支付相应的交易积分后才能查看主题(附件)内容。此处设置用户出售主题(附件)时允许设置的最高价格,0 为不允许用户出售。注意: 本功能需在 全局设置中启用交易积分后才可使用。如开启版主及管理员的出售主题(附件)功能,请将其最高价格设置为高于普通用户组允许的最高价格,这样在帖子被编辑时不至于导致主题(附件)售价的硬性下调', 24 => 'usergroups_edit_post_hide_code', 25 => '允许使用 [hide] 代码', - 26 => '设置是否允许文章中使用 [hide] 隐藏标签', + 26 => '设置是否允许帖子中使用 [hide] 隐藏标签', 27 => 'usergroups_edit_post_mediacode', 28 => '允许使用 [audio] [media] [flash] 等多媒体代码', 29 => '设置是否允许 [audio] [media] [flash] 等多媒体代码', 30 => 'usergroups_edit_post_begincode', 31 => '允许使用 [begin] 代码', - 32 => '设置是否允许文章中使用 [begin] 开头动画标签', + 32 => '设置是否允许帖子中使用 [begin] 开头动画标签', 33 => 'usergroups_edit_post_sig_bbcode', 34 => '允许签名中使用 Discuz! 代码', 35 => '设置是否解析用户签名中的 Discuz! 代码', @@ -7252,8 +7252,8 @@ $lang = array ( 43 => '主题评价影响值', 44 => '设置用户评价一次主题,对主题评价指数的影响,0 为不允许用户评价主题', 45 => 'usergroups_edit_post_edit_time_limit', - 46 => '编辑文章时间限制(分钟)', - 47 => '文章作者发帖后超过此时间限制将不能再编辑帖,版主和管理员在 全局 - 用户权限 选择“允许用户随时编辑的文章类型”后不受此限制,0 为不限制', + 46 => '编辑帖子时间限制(分钟)', + 47 => '帖子作者发帖后超过此时间限制将不能再编辑帖,版主和管理员在 全局 - 用户权限 选择“允许用户随时编辑的帖子类型”后不受此限制,0 为不限制', 48 => 'usergroups_edit_post_allowreplycredit', 49 => '允许设置回帖奖励', 50 => '允许用户在发布主题时给予回帖者一定的扩展积分奖励。回帖奖励默认积分可在全局 - 积分设置指定', @@ -7261,14 +7261,14 @@ $lang = array ( 52 => '允许使用标签', 53 => '设置是否允许发表新话题时使用标签', 54 => 'usergroups_edit_post_allowcommentpost', - 55 => '文章直接点评', - 56 => '设置允许点评的范围,如不选择表示不启用点评功能注意:只有在 全局 - 站点功能 - 文章点评 中开启直接点评功能,本设置才会生效', + 55 => '帖子直接点评', + 56 => '设置允许点评的范围,如不选择表示不启用点评功能注意:只有在 全局 - 站点功能 - 帖子点评 中开启直接点评功能,本设置才会生效', 57 => 'usergroups_edit_post_allowcommentreply', 58 => '楼层回复点评', - 59 => '允许用户通过点击文章中的“回复”链接回复他人回帖时,自动对该楼层产生点评注意:只有在 全局 - 站点功能 - 文章点评 中开启楼层回复功能,本设置才会生效;点击主题中的“回复”链接,不会对主题产生点评', + 59 => '允许用户通过点击帖子中的“回复”链接回复他人回帖时,自动对该楼层产生点评注意:只有在 全局 - 站点功能 - 帖子点评 中开启楼层回复功能,本设置才会生效;点击主题中的“回复”链接,不会对主题产生点评', 60 => 'usergroups_edit_post_allowcommentitem', 61 => '允许用户在点评时发表观点', - 62 => '允许用户在点评时发表观点注意:只有在 全局 - 站点功能 - 文章点评 中开启直接点评功能,本设置才会生效', + 62 => '允许用户在点评时发表观点注意:只有在 全局 - 站点功能 - 帖子点评 中开启直接点评功能,本设置才会生效', 63 => 'usergroups_edit_post_allowat', 64 => '发帖时可 @ 其他人的数量', 65 => '0为不允许 @ 其他人(包括他关注的人和他的好友)', @@ -7289,7 +7289,7 @@ $lang = array ( 80 => '允许用户在主题和淘专辑页面进行评论。', 81 => 'usergroups_edit_post_allowimgcontent', 82 => '允许主题内容生成图片', - 83 => '看帖时所有文章正文内容将以字符形式生成图片展示。', + 83 => '看帖时所有帖子正文内容将以字符形式生成图片展示。', 84 => 'usergroups_edit_attach', 85 => '附件相关', 86 => 'usergroups_edit_attach_get', @@ -7516,7 +7516,7 @@ $lang = array ( 21 => 'usergroups_edit_post_url_banned', 22 => '禁止发表', 23 => 'usergroups_edit_post_url_mod', - 24 => '允许,但文章进入审核', + 24 => '允许,但帖子进入审核', 25 => 'usergroups_edit_post_url_unhandle', 26 => '允许,但不解析', 27 => 'usergroups_edit_post_url_enable', diff --git a/source/language/lang_blockclass.php b/source/language/lang_blockclass.php old mode 100644 new mode 100755 index 422cf09..2395aad --- a/source/language/lang_blockclass.php +++ b/source/language/lang_blockclass.php @@ -38,11 +38,11 @@ $lang = array( 'blockclass_forum' => '论坛类', - 'blockclass_forum_thread' => '文章模块', - 'blockclass_thread_field_url' => '文章URL', - 'blockclass_thread_field_title' => '文章标题', + 'blockclass_forum_thread' => '帖子模块', + 'blockclass_thread_field_url' => '帖子URL', + 'blockclass_thread_field_title' => '帖子标题', 'blockclass_thread_field_pic' => '附件图片', - 'blockclass_thread_field_summary' => '文章内容', + 'blockclass_thread_field_summary' => '帖子内容', 'blockclass_thread_field_author' => '楼主', 'blockclass_thread_field_authorid' => '楼主UID', 'blockclass_thread_field_avatar' => '楼主头像', @@ -73,7 +73,7 @@ $lang = array( 'blockclass_thread_script_threadstick' => '置顶帖', 'blockclass_thread_script_threadspecial' => '特殊主题帖', 'blockclass_thread_script_threadnew' => '最新帖', - 'blockclass_thread_script_threadspecified' => '指定文章', + 'blockclass_thread_script_threadspecified' => '指定帖子', 'blockclass_thread_script_thread' => '高级自定义', 'blockclass_forum_forum' => '版块模块', @@ -81,15 +81,15 @@ $lang = array( 'blockclass_forum_field_url' => '版块链接', 'blockclass_forum_field_summary' => '版块介绍', 'blockclass_forum_field_icon' => '版块图标', - 'blockclass_forum_field_posts' => '版块文章数', + 'blockclass_forum_field_posts' => '版块帖子数', 'blockclass_forum_field_threads' => '版块话题数', 'blockclass_forum_field_todayposts' => '版块今日新帖数', 'blockclass_forum_script_forum' => '论坛版块', 'blockclass_sort_sort' => '分类信息', - 'blockclass_sort_field_title' => '文章名称', - 'blockclass_sort_field_url' => '文章链接', - 'blockclass_sort_field_summary' => '文章介绍', + 'blockclass_sort_field_title' => '帖子名称', + 'blockclass_sort_field_url' => '帖子链接', + 'blockclass_sort_field_summary' => '帖子介绍', 'blockclass_sort_script_sort' => '高级自定义', 'blockclass_forum_trade' => '商品模块', @@ -350,19 +350,19 @@ $lang = array( 'blockclass_group_script_groupspecified' => '指定圈子', 'blockclass_group_script_group' => '高级自定义', - 'blockclass_group_thread' => '圈子文章', - 'blockclass_groupthread_field_url' => '文章链接', - 'blockclass_groupthread_field_title' => '文章标题', + 'blockclass_group_thread' => '圈子帖子', + 'blockclass_groupthread_field_url' => '帖子链接', + 'blockclass_groupthread_field_title' => '帖子标题', 'blockclass_groupthread_field_pic' => '附件图片', - 'blockclass_groupthread_field_summary' => '文章内容', - 'blockclass_groupthread_field_icon' => '文章图标', + 'blockclass_groupthread_field_summary' => '帖子内容', + 'blockclass_groupthread_field_icon' => '帖子图标', 'blockclass_groupthread_field_author' => '楼主', 'blockclass_groupthread_field_authorid' => '楼主UID', 'blockclass_groupthread_field_avatar' => '楼主头像', 'blockclass_groupthread_field_avatar_middle' => '楼主头像(中)', 'blockclass_groupthread_field_avatar_big' => '楼主头像(大)', - 'blockclass_groupthread_field_posts' => '主题文章总数', - 'blockclass_groupthread_field_todayposts' => '主题今日文章数', + 'blockclass_groupthread_field_posts' => '主题帖子总数', + 'blockclass_groupthread_field_todayposts' => '主题今日帖子数', 'blockclass_groupthread_field_lastpost' => '主题最后发帖时间', 'blockclass_groupthread_field_dateline' => '主题发布时间', 'blockclass_groupthread_field_replies' => '主题回复数', @@ -437,7 +437,7 @@ $lang = array( 'blockclass_other_stat_pics' => '图片数', 'blockclass_other_stat_shares' => '分享数', - 'blockclass_other_stat_posts_title' => '文章显示名', + 'blockclass_other_stat_posts_title' => '帖子显示名', 'blockclass_other_stat_groups_title' => '圈子显示名', 'blockclass_other_stat_members_title' => '会员显示名', 'blockclass_other_stat_groupnewposts_title' => '今日发帖显示名', diff --git a/source/language/lang_cloud_register.php b/source/language/lang_cloud_register.php old mode 100644 new mode 100755 diff --git a/source/language/lang_core.php b/source/language/lang_core.php old mode 100644 new mode 100755 index 5751dd6..70d14c0 --- a/source/language/lang_core.php +++ b/source/language/lang_core.php @@ -85,8 +85,8 @@ $lang = array 'title_newest_doing' => '记录', 'title_me_friend_doing' => '我和好友的记录', 'title_doing_view_me' => '我的记录', - 'title_thread_favorite' => '文章收藏', - 'title_forum_favorite' => '文章收藏', + 'title_thread_favorite' => '帖子收藏', + 'title_forum_favorite' => '帖子收藏', 'title_group_favorite' => '{gorup}收藏', 'title_blog_favorite' => '日志收藏', 'title_album_favorite' => '相册收藏', @@ -113,16 +113,16 @@ $lang = array 'title_share_album' => '相册', 'title_share_blog' => '日志', 'title_share_space' => '用户', - 'title_share_thread' => '文章', + 'title_share_thread' => '帖子', 'title_share_article' => '文章', 'title_share_tag' => 'TAG', 'title_share' => '分享', - 'title_thread' => '文章', - 'title_all_thread' => '随便看看文章', - 'title_we_thread' => '好友发起的文章', - 'title_me_thread' => '我的文章', - 'title_hot_thread' => '热门文章', - 'title_dateline_thread' => '最新文章', + 'title_thread' => '帖子', + 'title_all_thread' => '随便看看帖子', + 'title_we_thread' => '好友发起的帖子', + 'title_me_thread' => '我的帖子', + 'title_hot_thread' => '热门帖子', + 'title_dateline_thread' => '最新帖子', 'title_trade' => '商品', 'title_all_trade' => '随便看看商品', 'title_we_trade' => '好友出售的商品', @@ -141,9 +141,9 @@ $lang = array 'title_flash_upload' => '批量上传', 'title_cam_upload' => '大头贴', 'title_normal_upload' => '普通上传', - 'title_newthread_post' => '发表文章', + 'title_newthread_post' => '发表帖子', 'title_reply_post' => '参与/回复主题', - 'title_edit_post' => '编辑文章', + 'title_edit_post' => '编辑帖子', 'title_newtrade_post' => '发布商品', 'title_magics_shop' => '道具商店', 'title_magics_hot' => '热销道具', @@ -172,7 +172,7 @@ $lang = array 'title_getpasswd' => '找回密码', 'title_ranklist_picture' => '图片排行', 'title_ranklist_member' => '用户排行', - 'title_ranklist_thread' => '文章排行', + 'title_ranklist_thread' => '帖子排行', 'title_ranklist_blog' => '日志排行', 'title_ranklist_poll' => '投票排行', 'title_ranklist_activity' => '活动排行', diff --git a/source/language/lang_email.php b/source/language/lang_email.php old mode 100644 new mode 100755 diff --git a/source/language/lang_error.php b/source/language/lang_error.php old mode 100644 new mode 100755 diff --git a/source/language/lang_exif.php b/source/language/lang_exif.php old mode 100644 new mode 100755 diff --git a/source/language/lang_feed.php b/source/language/lang_feed.php old mode 100644 new mode 100755 diff --git a/source/language/lang_friend.php b/source/language/lang_friend.php old mode 100644 new mode 100755 diff --git a/source/language/lang_message.php b/source/language/lang_message.php old mode 100644 new mode 100755 index be18b58..bcab334 --- a/source/language/lang_message.php +++ b/source/language/lang_message.php @@ -55,9 +55,9 @@ $lang = array ( 'thread_hidden_success' => '隐藏成功 ', 'thread_hiderecover_success' => '主题已从隐藏状态恢复 ', 'thread_rate_range_invalid' => '请输入正确的分值', - 'rate_post_error' => '文章不存在或不能被推送', - 'thread_rate_log_nonexistence' => '抱歉,指定文章在近一年内没有评分记录', - 'targetpost_donotbelongto_thisthread' => '目标文章不属于本主题', + 'rate_post_error' => '帖子不存在或不能被推送', + 'thread_rate_log_nonexistence' => '抱歉,指定帖子在近一年内没有评分记录', + 'targetpost_donotbelongto_thisthread' => '目标帖子不属于本主题', 'credits_transaction_disabled' => '抱歉,交易积分尚未启用,无法使用此功能', 'credits_balance_insufficient' => '抱歉,{title}不足 {minbalance}', 'not_loggedin' => '抱歉,您尚未登录,无法进行此操作', @@ -130,9 +130,9 @@ $lang = array ( 'post_edit_delete_succeed' => '主题删除成功 ', 'debate_end' => '抱歉,辩论已结束', 'replyperm_login_nopermission' => '抱歉,您尚未登录,没有权限在该版块回帖', - 'post_nonexistence' => '文章不存在', + 'post_nonexistence' => '帖子不存在', 'post_thread_closed' => '抱歉,本主题已关闭,不再接受新内容', - 'reply_quotepost_error' => '禁止引用自己和主题帖之外的文章', + 'reply_quotepost_error' => '禁止引用自己和主题帖之外的帖子', 'post_flood_ctrl' => '抱歉,您两次发表间隔少于 {floodctrl} 秒,请稍候再发表', 'post_flood_ctrl_posts_per_hour' => '抱歉,您所在的用户组每小时限制发回帖 {posts_per_hour} 个,请稍候再发表', 'trade_please_name' => '抱歉,商品名称不能为空', @@ -158,7 +158,7 @@ $lang = array ( 'debate_endtime_invalid' => '抱歉,您设置辩论的结束时间小于当前时间', 'debate_umpire_invalid' => '抱歉,您指定的裁判 ({umpire}) 不存在或者被删除', 'post_rushreply_timewrong' => '抱歉,抢楼时间范围设置错误', - 'post_newthread_mod_succeed' => '新主题需要审核,您的文章通过审核后才能显示{coverimg}', + 'post_newthread_mod_succeed' => '新主题需要审核,您的帖子通过审核后才能显示{coverimg}', 'post_newthread_succeed' => '非常感谢,您的主题已发布,现在将转入主题页,请稍候……
    [ 点击这里转入主题列表 ]{coverimg}', 'submitcheck_error' => '抱歉,您的提交有误', 'post_forum_newthread_nopermission' => '抱歉,本版块只有特定用户组可以发新主题', @@ -168,7 +168,7 @@ $lang = array ( 'search_invalid' => '抱歉,您尚未指定要搜索的关键字或用户名', 'search_redirect' => '搜索成功,现在将转入结果页面', 'to_view_the_photo_does_not_exist' => '抱歉,您要查看的相册不存在或正在审核', - 'ban_view_other_thead' => '抱歉,禁止查看其他用户的主题和文章', + 'ban_view_other_thead' => '抱歉,禁止查看其他用户的主题和帖子', 'album_does_not_exist' => '抱歉,指定的相册不存在', 'is_blacklist' => '抱歉,受对方的隐私设置影响,您目前没有权限进行本操作', 'content_is_too_short' => '抱歉,输入的内容不能少于 2 个字符', @@ -211,13 +211,13 @@ $lang = array ( 'showcredit_error' => '抱歉,填写的数字需要大于0,并且小于您的积分数,请确认', 'usergroup_not_found' => '用户组未找到', 'admin_nopermission' => '抱歉,您没有权限使用管理功能', - 'postcomment_not_found' => '文章点评未找到', + 'postcomment_not_found' => '帖子点评未找到', 'special_noaction' => '无法操作特殊主题', 'admin_moderate_invalid' => '抱歉,您尚未选择主题或主题不可执行此类管理', - 'no_privilege_delpost' => '抱歉,您没有权限删除文章', + 'no_privilege_delpost' => '抱歉,您没有权限删除帖子', 'admin_move_invalid' => '抱歉,目标版块不存在', 'admin_succeed' => '管理操作成功 ', - 'admin_split_new_invalid' => '抱歉,您尚未选择要分割入新主题的文章', + 'admin_split_new_invalid' => '抱歉,您尚未选择要分割入新主题的帖子', 'view_images_do_not_exist' => '抱歉,您要查看的图片不存在或正在审核', 'view_to_info_did_not_exist' => '抱歉,您要查看的信息不存在或已被删除', 'plugin_module_nonexistence' => '指定的插件模块文件({mod})不存在或存在语法错误,请检查是否已将插件完整上传', @@ -233,7 +233,7 @@ $lang = array ( 'profile_secmobile_duplicate' => '该安全手机已被注册', 'article_category_empty' => '抱歉,栏目不能为空', 'article_edit_nopermission' => '抱歉,您没有权限进行当前文章操作', - 'post_message_toolong' => '抱歉,您的文章超过 {maxpostsize} 个字符的限制', + 'post_message_toolong' => '抱歉,您的帖子超过 {maxpostsize} 个字符的限制', 'no_privilege_newbiespan' => '抱歉,您目前处于见习期间,需要等待 {newbiespan} 分钟后才能进行本操作', 'no_privilege_avatar' => '抱歉,您需要设置自己的头像后才能进行本操作,点击这里设置', 'no_privilege_secmobile' => '抱歉,您需要验证激活自己的安全手机后才能进行本操作,点击这里验证安全手机', @@ -338,10 +338,10 @@ $lang = array ( 'attachment_locked' => '抱歉,由于您所发起的其他附件购买操作正在进行,因此您无法购买当前附件,请稍后再试', 'no_privilege_postimage' => '抱歉,您目前没有权限上传图片,点击这里查看权限', 'no_privilege_postattach' => '抱歉,您目前没有权限上传附件,点击这里查看权限', - 'thread_closed' => '该文章已被关闭,不能评论!', - 'postcomment_error' => '抱歉,您不能点评此帖或文章尚未找到', - 'postappend_not_open' => '抱歉,站点没有开启文章补充功能', - 'postappend_only_yourself' => '只能在自己的文章后补充内容', + 'thread_closed' => '该帖子已被关闭,不能评论!', + 'postcomment_error' => '抱歉,您不能点评此帖或帖子尚未找到', + 'postappend_not_open' => '抱歉,站点没有开启帖子补充功能', + 'postappend_only_yourself' => '只能在自己的帖子后补充内容', 'postappend_add_succeed' => '添加成功 ', 'replynotice_success_1' => '接收设置成功 ', 'replynotice_success_0' => '取消设置成功 ', @@ -356,11 +356,11 @@ $lang = array ( 'thread_poll_none' => '抱歉,本帖非投票帖', 'thread_poll_nopermission' => '抱歉,您无权查看本帖投票人', 'thread_rate_moderator_invalid' => '抱歉,作为版主您只能在自己的管辖范围内评分', - 'thread_rate_timelimit' => '抱歉,您不能对发表于 {karmaratelimit} 小时前的文章进行评分', - 'thread_rate_member_invalid' => '抱歉,您不能给自己发表的文章评分', + 'thread_rate_timelimit' => '抱歉,您不能对发表于 {karmaratelimit} 小时前的帖子进行评分', + 'thread_rate_member_invalid' => '抱歉,您不能给自己发表的帖子评分', 'thread_rate_anonymous' => '抱歉,您不能对匿名帖评分', 'thread_rate_banned' => '抱歉,您不能对屏蔽帖评分', - 'thread_rate_duplicate' => '抱歉,您不能对同一个文章重复评分', + 'thread_rate_duplicate' => '抱歉,您不能对同一个帖子重复评分', 'thread_rate_range_self_invalid' => '抱歉,您的{extcreditstitle}不足,无法评分', 'thread_rate_ctrl' => '抱歉,24 小时评分数超过限制', 'thread_rate_locked' => '抱歉,当前评分正在进行中,请稍后再试', @@ -368,7 +368,7 @@ $lang = array ( 'no_privilege_removerate' => '抱歉,您没有权限撤销评分', 'thread_rate_removesucceed' => '评分撤销成功 ', 'member_no_found' => '该用户未找到', - 'thread_warning_nonexistence' => '抱歉,指定文章没有警告记录', + 'thread_warning_nonexistence' => '抱歉,指定帖子没有警告记录', 'thread_pay_error' => '抱歉,您不能购买本主题', 'credits_balance_insufficient_and_charge' => '抱歉,{title}不足 {minbalance},请【充值】', 'credits_buy_thread' => '抱歉,您已购买过此主题,请勿重复付费', @@ -401,7 +401,7 @@ $lang = array ( 'debate_umpire_nofound_point' => '抱歉,您没填写您的观点', 'debate_umpire_comment_succeed' => '评判成功 ', 'no_privilege_recommend' => '抱歉,您目前没有权限评价此主题,点击这里查看权限', - 'recommend_self_disallow' => '评价指数 {recommendc}
    您不能评价自己的文章', + 'recommend_self_disallow' => '评价指数 {recommendc}
    您不能评价自己的帖子', 'recommend_duplicate' => '评价指数 {recommendc}
    您已评价过本主题', 'recommend_outoftimes' => '评价指数 {recommendc}
    今日评价机会已用完', 'recommend_daycount_succeed' => '评价指数 {recommendc} {recommendv}
    您今天还能评价 {daycount} 次', @@ -421,7 +421,7 @@ $lang = array ( 'reward_credits_closed' => '交易积分被关闭,请联系管理员。', 'forum_access_disallow' => '抱歉,您在本版没有权限进行此操作', - 'post_check' => '抱歉,指定的文章不存在或已被删除或正在被审核
    [ 尝试点击这里转入主题 ]', + 'post_check' => '抱歉,指定的帖子不存在或已被删除或正在被审核
    [ 尝试点击这里转入主题 ]', 'redirect_nextnewset_nonexistence' => '抱歉,没有比当前更新的主题', 'redirect_nextoldset_nonexistence' => '抱歉,没有比当前更早的主题', @@ -435,7 +435,7 @@ $lang = array ( 'trade_by_myself' => '抱歉,您无法购买自己的商品', 'trade_order_created' => '交易单创建成功,现在将转入交易单页面', - 'post_not_found' => '没有找到文章', + 'post_not_found' => '没有找到帖子', 'setup_finished' => '设置成功 ', @@ -622,19 +622,19 @@ $lang = array ( 'portal_category_disallowpublish' => '抱歉,此分类不允许发布文章', 'title_not_too_little' => '标题不能少于最少字符限制', 'article_choose_system_category' => '请选择一个合适的系统分类', - 'no_posts_for_pushplus' => '抱歉,您尚未指定要添加的文章', - 'pushplus_do_success' => '已成功添加指定文章到文章', + 'no_posts_for_pushplus' => '抱歉,您尚未指定要添加的帖子', + 'pushplus_do_success' => '已成功添加指定帖子到文章', 'article_passed' => '文章已通过审核', 'article_ignored' => '文章已忽略', 'article_deleted' => '文章已删除', 'select_operation' => '请选择一个操作项', 'article_move_success' => '文章转移成功 ', 'article_move_select_cat' => '请选择要转移到的目标栏目', - 'all_posts_pushed_already' => '所有指定文章均已连载过了', + 'all_posts_pushed_already' => '所有指定帖子均已连载过了', 'portal_has_not_category' => '抱歉,您尚未创建任何频道栏目,请先创建频道栏目', 'portal_article_add_nopermission' => '抱歉,您没有发布文章的权限', 'article_push_blogid_invalid_repeat' => '该日志已生成过文章,不能重复生成', - 'article_push_tid_invalid_repeat' => '该文章已生成过文章,不能重复生成', + 'article_push_tid_invalid_repeat' => '该帖子已生成过文章,不能重复生成', 'article_push_invalid_private' => '该日志因隐私设置不能进行生成文章操作', 'block_not_exist' => '抱歉,您指定的模块不存在', @@ -664,14 +664,14 @@ $lang = array ( 'select_a_moderate_data' => '请选择至少一条审核数据', 'operation_done' => '进行的操作成功 ', - 'post_edit_nopermission' => '抱歉,您没有权限编辑他人发表的文章', - 'post_edit_timelimit' => '抱歉,您的文章从发表到现在已超过 {edittimelimit} 分钟,不能再进行编辑', + 'post_edit_nopermission' => '抱歉,您没有权限编辑他人发表的帖子', + 'post_edit_timelimit' => '抱歉,您的帖子从发表到现在已超过 {edittimelimit} 分钟,不能再进行编辑', 'debate_umpire_comment_invalid' => '抱歉,裁判已进行过评判,您不能再进行编辑', - 'post_edit_nopermission_threadplign' => '抱歉,您没有权限编辑本文章或特殊帖功能已关闭', + 'post_edit_nopermission_threadplign' => '抱歉,您没有权限编辑本帖子或特殊帖功能已关闭', 'reward_credits_invalid' => '抱歉,悬赏积分设置不合理', 'reward_credits_fall' => '抱歉,悬赏积分不能减少', 'post_edit_thread_replaycredit_nocredit' => '您的积分不足,不能为回帖奖励增加积分', - 'post_edit_thread_ban_del' => '抱歉,编辑文章时不允许删除文章', + 'post_edit_thread_ban_del' => '抱歉,编辑帖子时不允许删除帖子', 'post_edit_reward_already_reply' => '抱歉,您不能删除已经有回复的悬赏', 'post_edit_thread_already_reply' => '对不起,您不能删除已经有回复的主题,请返回。', 'post_edit_reward_nopermission' => '抱歉,悬赏已结束,无法退还积分', @@ -680,10 +680,10 @@ $lang = array ( 'audit_edit_succeed' => ' 编辑成功,点击关闭本页', 'edit_newthread_mod_succeed' => '编辑后的主题需要审核,请等待审核通过', 'edit_reply_mod_succeed' => '编辑后的回复需要审核,请等待审核通过', - 'post_edit_succeed' => '文章编辑成功,现在将转入主题页,请稍候……
    [ 点击这里转入主题列表 ]', + 'post_edit_succeed' => '帖子编辑成功,现在将转入主题页,请稍候……
    [ 点击这里转入主题列表 ]', 'post_forum_newreply_nopermission' => '抱歉,本版块只有特定用户组可以回复', - 'comment_add_succeed' => '文章点评成功 ', + 'comment_add_succeed' => '帖子点评成功 ', 'post_rushreply_creditlimit' => '抱歉,您的 {creditlimit_title} 不足,本抢楼帖限制最小 {creditlimit_title} 为 {creditlimit}', 'trade_newreply_nopermission' => '抱歉,只有已开放的商品主题可以回复', 'post_reply_succeed' => '非常感谢,回复发布成功,现在将转入主题页,请稍候……
    [ 点击这里转入主题列表 ]', @@ -792,7 +792,7 @@ $lang = array ( 'follow_cancel_succeed' => '取消成功', 'follow_not_assignation_user' => '未指定用户', 'follow_remark_succeed' => '备注成功', - 'follow_anonymous_unfollow' => '匿名文章不允许被转播', + 'follow_anonymous_unfollow' => '匿名帖子不允许被转播', 'follow_content_not_exist' => '转播的内容不存在', 'follow_input_word_limit' => '您输入的转播理由超过140个字', 'follow_only_allow_the_relay_time' => '抱歉,第二次转播必须同时进行回帖操作', @@ -902,13 +902,13 @@ $lang = array ( 'usergroups_switch_succeed' => '您已切换到用户组 {group}', 'no_privilege_banpost' => '抱歉,您没有权限屏蔽主题', - 'admin_banpost_invalid' => '抱歉,您尚未选择要屏蔽的文章', + 'admin_banpost_invalid' => '抱歉,您尚未选择要屏蔽的帖子', 'no_privilege_copythread' => '抱歉,您没有权限或主题不存在', 'no_privilege_delcomment' => '抱歉,您没有权限删除点评', - 'admin_delpost_invalid' => '抱歉,您尚未选择要删除的文章', + 'admin_delpost_invalid' => '抱歉,您尚未选择要删除的帖子', 'no_privilege_viewip' => '抱歉,您没有权限查看 IP', 'admin_getip_nopermission' => '抱歉,您没有权限查看更高级别的管理员 IP', @@ -953,10 +953,10 @@ $lang = array ( 'no_privilege_stamplist' => '抱歉,您没有权限给主题添加图标', 'no_privilege_stickreply' => '抱歉,您没有权限置顶此帖', - 'admin_stickreply_invalid' => '抱歉,目标文章不存在或者为主题', + 'admin_stickreply_invalid' => '抱歉,目标帖子不存在或者为主题', 'no_privilege_warnpost' => '抱歉,您没有权限警告此主题', - 'admin_warn_invalid' => '抱歉,您尚未选择要警告的作者的文章', + 'admin_warn_invalid' => '抱歉,您尚未选择要警告的作者的帖子', 'admin_warn_nopermission' => '抱歉,您没有权限警告该作者', 'no_privilege_ckfriend_pic' => '对方的隐私设置禁止您评论此图片', @@ -1031,7 +1031,7 @@ $lang = array ( 'post_subject_toolong' => '抱歉,您的标题超过最大字符限制,请缩短标题后再试', 'post_subject_tooshort' => '抱歉,您的标题小于最小字符限制,请加长标题后再试', - 'post_message_tooshort' => '抱歉,您的文章小于 {minpostsize} 个字符的限制', + 'post_message_tooshort' => '抱歉,您的帖子小于 {minpostsize} 个字符的限制', 'no_privilege_realname' => '抱歉,您需要填写真实姓名后才能进行当前操作,点击这里设置真实姓名', @@ -1090,7 +1090,7 @@ $lang = array ( 'not_in_mobile' => '您访问的页面无手机页面,是否进一步访问电脑版?', 'template_developer_not_in_mobile' => '您访问的页面 {file} 无手机模板,是否进一步访问电脑版?', - 'magics_operation_nopermission' => '抱歉,此道具只能操作自己发文章或评论', + 'magics_operation_nopermission' => '抱歉,此道具只能操作自己发帖子或评论', 'magics_attachsize_message' => '已增加 {num}M 额外附件容量', diff --git a/source/language/lang_notification.php b/source/language/lang_notification.php old mode 100644 new mode 100755 index ec0dc2f..46df029 --- a/source/language/lang_notification.php +++ b/source/language/lang_notification.php @@ -36,7 +36,7 @@ $lang = array 'share_blog' => '{actor} 分享了您的日志 {subject}', 'share_album' => '{actor} 分享了您的相册 {albumname}', 'share_pic' => '{actor} 分享了您的相册 {albumname} 中的 图片', - 'share_thread' => '{actor} 分享了您的文章 {subject}', + 'share_thread' => '{actor} 分享了您的帖子 {subject}', 'share_article' => '{actor} 分享了您的文章 {subject}', 'magic_present_note' => '送给您一个道具 {name}', 'friend_add' => '{actor} 和您成为了好友', @@ -66,7 +66,7 @@ $lang = array 'reason_merge' => '您的主题 {subject} 被 {actor} {modaction}
    {reason}
    ', - 'reason_delete_post' => '您在 {subject} 的文章被 {actor} 删除
    {reason}
    ', + 'reason_delete_post' => '您在 {subject} 的帖子被 {actor} 删除
    {reason}
    ', 'reason_delete_comment' => '您在 {subject} 的点评被 {actor} 删除
    {reason}
    ', @@ -116,11 +116,11 @@ $lang = array 'addfunds' => '您提交的积分充值请求已完成,相应数额的积分已存入您的积分账户   查看 ›

    订单号:{orderid}

    支出:人民币 {price} 元

    收入:{value}

    ', - 'rate_reason' => '您在主题 {subject} 的文章被 {actor} 评分 {ratescore}
    {reason}
    ', + 'rate_reason' => '您在主题 {subject} 的帖子被 {actor} 评分 {ratescore}
    {reason}
    ', - 'recommend_note_post' => '恭喜,您的文章 {subject} 被编辑采用', + 'recommend_note_post' => '恭喜,您的帖子 {subject} 被编辑采用', - 'rate_removereason' => '您在主题 {subject} 中文章的评分 {ratescore}
    {reason}
    被 {actor} 撤销', + 'rate_removereason' => '您在主题 {subject} 中帖子的评分 {ratescore}
    {reason}
    被 {actor} 撤销', 'trade_seller_send' => '{buyer} 购买您的商品 {subject},对方已付款,等待您发货   查看 ›', @@ -154,9 +154,9 @@ $lang = array 'reward_bestanswer_moderator' => '您在悬赏主题 {subject} 的回复被选为最佳答案   查看 ›', - 'comment_add' => '{actor} 点评了您曾经在主题 {subject} 发表的文章   查看 ›', + 'comment_add' => '{actor} 点评了您曾经在主题 {subject} 发表的帖子   查看 ›', - 'reppost_noticeauthor' => '{actor} 回复了您的文章 {subject}   查看', + 'reppost_noticeauthor' => '{actor} 回复了您的帖子 {subject}   查看', 'task_reward_credit' => '恭喜您完成任务:{name},获得积分 {creditbonus}   查看我的积分 ›

    ', diff --git a/source/language/lang_optimizer.php b/source/language/lang_optimizer.php old mode 100644 new mode 100755 index 7bd4e06..c2656dd --- a/source/language/lang_optimizer.php +++ b/source/language/lang_optimizer.php @@ -27,14 +27,14 @@ $lang = array 'optimizer_patch_check_safe' => '检测安全', 'optimizer_plugin_new_plugin' => '您有 {newversion} 款应用有可用更新', 'optimizer_plugin_no_upgrade' => '不需要应用更新', - 'optimizer_post_need_split' => '文章表及分表有 {count} 个需要优化', + 'optimizer_post_need_split' => '帖子表及分表有 {count} 个需要优化', 'optimizer_post_not_need' => '不需要优化', 'optimizer_seo_advice' => '建议您完善SEO设置', 'optimizer_seo_no_need' => '发现已经完善了seo设置', 'optimizer_setting_cache_index' => '缓存论坛首页', 'optimizer_setting_cache_index_desc' => '开启此功能可减轻服务器负载', 'optimizer_setting_cache_optimize_desc' => '设置缓存时间为900秒', - 'optimizer_setting_cache_post' => '缓存文章', + 'optimizer_setting_cache_post' => '缓存帖子', 'optimizer_setting_cache_post_desc' => '开启此功能可减轻服务器负载', 'optimizer_setting_cache_post_optimize_desc' => '设置缓存时间为900秒', 'optimizer_setting_optimizeviews' => '优化更新主题浏览量', diff --git a/source/language/lang_portalcp.php b/source/language/lang_portalcp.php old mode 100644 new mode 100755 index 434d376..cc30b49 --- a/source/language/lang_portalcp.php +++ b/source/language/lang_portalcp.php @@ -44,13 +44,13 @@ $lang = array( 'diytemplate_name_null' => '[未填写]', 'portal_view_name' => ' 文章查看页', - 'forum_viewthread_name' => ' 文章查看页', + 'forum_viewthread_name' => ' 帖子查看页', 'portal/index' => '门户首页', 'portal/list' => '文章列表页(公共)', 'portal/view' => '文章查看页(公共)', 'portal/comment' => '文章评论页', 'forum/discuz' => '论坛首页', - 'forum/viewthread' => '文章查看页(公共)', + 'forum/viewthread' => '帖子查看页(公共)', 'forum/forumdisplay' => '版块列表页(公共)', 'group/index' => $_G['setting']['navs'][3]['navname'].'首页', 'group/group_my' => '我的'.$_G['setting']['navs'][3]['navname'].'首页', @@ -58,7 +58,7 @@ $lang = array( 'home/space_home' => '空间首页', 'home/space_trade' => '空间商品页', 'home/space_top' => '空间排行榜', - 'home/space_thread' => '空间文章页', + 'home/space_thread' => '空间帖子页', 'home/space_reward' => '空间悬赏页', 'home/space_share_list' => '空间分享列表页', 'home/space_share_view' => '空间分享查看页', @@ -84,7 +84,7 @@ $lang = array( 'ranklist/forum' => '版块排行榜页', 'ranklist/picture' => '图片排行榜页', 'ranklist/group' => '圈子排行榜页', - 'ranklist/thread' => '文章排行榜页', + 'ranklist/thread' => '帖子排行榜页', 'ranklist/member' => '用户排行榜页', 'other_page' => '非DIY模块', 'upload' => '上传', diff --git a/source/language/lang_seccode.php b/source/language/lang_seccode.php old mode 100644 new mode 100755 diff --git a/source/language/lang_security.php b/source/language/lang_security.php old mode 100644 new mode 100755 diff --git a/source/language/lang_space.php b/source/language/lang_space.php old mode 100644 new mode 100755 index 2727d79..6e16342 --- a/source/language/lang_space.php +++ b/source/language/lang_space.php @@ -195,13 +195,13 @@ $lang = array( 'pm_export_touser' => '消息对象: {touser}', 'pm_export_subject' => '群聊话题: {subject}', 'all' => '全部', - 'manage_post' => '管理文章', + 'manage_post' => '管理帖子', 'manage_album' => '管理相册', 'manage_blog' => '管理日志', 'manage_comment' => '管理评论', 'manage_doing' => '管理记录', 'manage_feed' => '管理动态', - 'manage_group_prune' => '圈子文章', + 'manage_group_prune' => '圈子帖子', 'manage_group_threads' => '圈子主题', 'manage_share' => '管理分享', 'manage_pic' => '管理图片', @@ -215,7 +215,7 @@ $lang = array( 'sb_friend' => '{who}的好友', 'sb_wall' => '{who}的留言板', 'sb_profile' => '{who}的个人资料', - 'sb_thread' => '{who}的文章', + 'sb_thread' => '{who}的帖子', 'doing_you_can' => '您可以更新记录, 让好友们知道您在做什么...', 'block_profile_all' => '

    查看全部个人资料

    ', 'block_profile_edit' => '编辑我的资料', diff --git a/source/language/lang_spacecp.php b/source/language/lang_spacecp.php old mode 100644 new mode 100755 index 2c9ccc4..5d2d037 --- a/source/language/lang_spacecp.php +++ b/source/language/lang_spacecp.php @@ -20,7 +20,7 @@ $lang = array( 'share_action' => '分享了', 'pm_comment' => '答复点评', - 'pm_thread_about' => '关于您在“{subject}”的文章', + 'pm_thread_about' => '关于您在“{subject}”的帖子', 'wall_pm_subject' => '您好,我给您留言了', 'wall_pm_message' => '我在您的留言板给您留言了,[url=\\1]点击这里去留言板看看吧[/url]', @@ -85,7 +85,7 @@ $lang = array( 'share_image' => '分享了一张图片', 'share_article' => '分享了一篇文章', 'album' => '相册', - 'share_thread' => '分享了一个文章', + 'share_thread' => '分享了一个帖子', 'mtag' => '{$_G[\'setting\'][\'navs\'][3][\'navname\']}', 'share_mtag' => '分享了一个{$_G[\'setting\'][\'navs\'][3][\'navname\']}', 'share_mtag_membernum' => '现有 {membernum} 名成员', @@ -196,8 +196,8 @@ $lang = array( 'logs_credit_update_ECU' => 'UCenter积分兑换支出', 'logs_credit_update_SAC' => '出售附件', 'logs_credit_update_BAC' => '购买附件', - 'logs_credit_update_PRC' => '文章被评分', - 'logs_credit_update_RSC' => '文章评分', + 'logs_credit_update_PRC' => '帖子被评分', + 'logs_credit_update_RSC' => '帖子评分', 'logs_credit_update_STC' => '出售主题', 'logs_credit_update_BTC' => '购买主题', 'logs_credit_update_AFD' => '购买积分', @@ -239,7 +239,7 @@ $lang = array( 'attach_buy' => '购买', 'attach_buy_tips' => '的附件支出积分', 'grade_credit' => '被评分获得的积分', - 'grade_credit2' => '文章评分扣除的积分', + 'grade_credit2' => '帖子评分扣除的积分', 'thread_credit' => '主题获得积分', 'thread_credit2' => '主题支出积分', 'buy_credit' => '对积分充值', @@ -254,7 +254,7 @@ $lang = array( 'add_credit' => '奖励积分', 'recovery' => '回收', 'replycredit_post' => '回帖奖励', - 'replycredit_thread' => '散发的文章', + 'replycredit_thread' => '散发的帖子', 'card_credit' => '卡密充值获得的积分', 'ranklist_top' => '参加竞价排名消费积分', 'admincp_op_credit' => '后台积分奖惩操作', diff --git a/source/language/lang_template.php b/source/language/lang_template.php old mode 100644 new mode 100755 index 4538a03..5f330bc --- a/source/language/lang_template.php +++ b/source/language/lang_template.php @@ -150,7 +150,7 @@ $lang = array ( 'enter_content' => '请输入搜索内容', 'hot_search' => '热搜', 'search_this_forum' => '本版', - 'thread' => '文章', + 'thread' => '帖子', 'users' => '用户', 'input_message1' => '还可输入', 'input_message2' => '个字符', @@ -205,12 +205,12 @@ $lang = array ( 'publish' => '发布', 'guest' => '游客', 'upload' => '上传', - 'e_attach_insert' => '点击附件文件名添加到文章内容中', + 'e_attach_insert' => '点击附件文件名添加到帖子内容中', 'e_attach_inserturl' => ',"attach://" 开头的附件地址支持任何人下载请谨慎添加', 'e_img_albumlist' => '相册图片', 'e_img_attach' => '上传图片', 'e_img_height' => '高(可选)', - 'e_img_insertphoto' => '点击图片添加到文章内容中', + 'e_img_insertphoto' => '点击图片添加到帖子内容中', 'e_img_inserturl' => '请输入图片地址', 'e_img_width' => '宽(可选)', 'e_img_www' => '网络图片', @@ -292,10 +292,10 @@ $lang = array ( 'task' => '任务', 'notice' => '提醒', 'notice_pm' => '我的私信', - 'notice_mypost' => '我的文章', + 'notice_mypost' => '我的帖子', 'notice_mypost_rate' => '评分', 'notice_mypost_at' => '提到我的', - 'notice_mypost_post' => '文章', + 'notice_mypost_post' => '帖子', 'notice_mypost_pcomment' => '点评', 'notice_mypost_activity' => '活动', 'notice_mypost_reward' => '悬赏', @@ -430,7 +430,7 @@ $lang = array ( 'return_forum' => '返回版块', 'temporarily_to_remind' => '暂不提醒', 'myitem' => '我的', - 'mypost' => '文章', + 'mypost' => '帖子', 'm_loading' => '正在加载...', 'm_its_all' => '已显示全部', diff --git a/source/language/magic/index.htm b/source/language/magic/index.htm old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_anonymouspost.php b/source/language/magic/lang_anonymouspost.php old mode 100644 new mode 100755 index 77daadb..e23fe17 --- a/source/language/magic/lang_anonymouspost.php +++ b/source/language/magic/lang_anonymouspost.php @@ -17,8 +17,8 @@ $lang = array 'anonymouspost_desc' => '在指定的地方,让自己的名字显示为匿名。', 'anonymouspost_num' => '拥有个数: {magicnum}', 'anonymouspost_forum' => '允许使用本道具的版块', - 'anonymouspost_info' => '将自己的文章设置为匿名身份,请输入文章的 ID', - 'anonymouspost_info_nonexistence' => '请指定要匿名的文章', + 'anonymouspost_info' => '将自己的帖子设置为匿名身份,请输入帖子的 ID', + 'anonymouspost_info_nonexistence' => '请指定要匿名的帖子', 'anonymouspost_succeed' => '成功设置为匿名', 'anonymouspost_use_error' => '参数错误,不能在此处使用本道具。', 'anonymouspost_info_noperm' => '对不起,主题所在版块不允许使用本道具', diff --git a/source/language/magic/lang_attachsize.php b/source/language/magic/lang_attachsize.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_bump.php b/source/language/magic/lang_bump.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_call.php b/source/language/magic/lang_call.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_checkonline.php b/source/language/magic/lang_checkonline.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_chgusername.php b/source/language/magic/lang_chgusername.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_close.php b/source/language/magic/lang_close.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_detector.php b/source/language/magic/lang_detector.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_doodle.php b/source/language/magic/lang_doodle.php old mode 100644 new mode 100755 index 9b0ddfb..b9c9434 --- a/source/language/magic/lang_doodle.php +++ b/source/language/magic/lang_doodle.php @@ -14,8 +14,8 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'doodle_name' => '涂鸦板', - 'doodle_desc' => '在日志、文章中使用涂鸦板', - 'doodle_info' => '在日志、文章中使用涂鸦板', + 'doodle_desc' => '在日志、帖子中使用涂鸦板', + 'doodle_info' => '在日志、帖子中使用涂鸦板', ); ?> \ No newline at end of file diff --git a/source/language/magic/lang_downdateline.php b/source/language/magic/lang_downdateline.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_flicker.php b/source/language/magic/lang_flicker.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_friendnum.php b/source/language/magic/lang_friendnum.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_gift.php b/source/language/magic/lang_gift.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_highlight.php b/source/language/magic/lang_highlight.php old mode 100644 new mode 100755 index 2b77237..9bdbf57 --- a/source/language/magic/lang_highlight.php +++ b/source/language/magic/lang_highlight.php @@ -14,16 +14,16 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'highlight_name' => '变色卡', - 'highlight_desc' => '可以将文章或日志的标题高亮,变更颜色', + 'highlight_desc' => '可以将帖子或日志的标题高亮,变更颜色', 'highlight_expiration' => '高亮有效期', 'highlight_expiration_comment' => '设置标题可以被高亮多长时间,默认 24 小时。作用于日志时无有效期。', 'highlight_forum' => '允许使用本道具的版块', 'highlight_info_tid' => '高亮主题的标题 {expiration} 小时', - 'highlight_info_blogid' => '可以将日志或文章的标题高亮,变更颜色', + 'highlight_info_blogid' => '可以将日志或帖子的标题高亮,变更颜色', 'highlight_color' => '颜色', - 'highlight_info_nonexistence_tid' => '请指定要高亮的文章', + 'highlight_info_nonexistence_tid' => '请指定要高亮的帖子', 'highlight_info_nonexistence_blogid' => '请指定要高亮的日志', - 'highlight_succeed_tid' => '您操作的文章已高亮', + 'highlight_succeed_tid' => '您操作的帖子已高亮', 'highlight_succeed_blogid' => '您操作的日志已高亮', 'highlight_info_noperm' => '对不起,主题所在版块不允许使用本道具', 'highlight_info_notype' => '参数错误,没有指定操作类型。', diff --git a/source/language/magic/lang_hot.php b/source/language/magic/lang_hot.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_jack.php b/source/language/magic/lang_jack.php old mode 100644 new mode 100755 index b480d52..4eebca3 --- a/source/language/magic/lang_jack.php +++ b/source/language/magic/lang_jack.php @@ -14,7 +14,7 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'jack_name' => '千斤顶', - 'jack_desc' => '可以将主题顶起一段时间,重复使用可延长文章被顶起的时间', + 'jack_desc' => '可以将主题顶起一段时间,重复使用可延长帖子被顶起的时间', 'jack_expiration' => '时长', 'jack_expiration_comment' => '设置主题可以被顶起多长时间,默认 1 小时', 'jack_forum' => '允许使用本道具的版块', diff --git a/source/language/magic/lang_money.php b/source/language/magic/lang_money.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_namepost.php b/source/language/magic/lang_namepost.php old mode 100644 new mode 100755 index ef8a7c0..2914163 --- a/source/language/magic/lang_namepost.php +++ b/source/language/magic/lang_namepost.php @@ -17,7 +17,7 @@ $lang = array 'namepost_desc' => '可以查看一次匿名用户的真实身份。', 'namepost_forum' => '允许使用本道具的版块', 'namepost_num' => '拥有个数: {magicnum}', - 'namepost_info' => '指定要显身的文章,请输入文章的 ID', + 'namepost_info' => '指定要显身的帖子,请输入帖子的 ID', 'namepost_info_nonexistence' => '参数错误,不能在此使用本道具。', 'namepost_succeed' => '匿名的用户是 {username}', 'namepost_info_noperm' => '对不起,主题所在版块不允许使用本道具', diff --git a/source/language/magic/lang_open.php b/source/language/magic/lang_open.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_repent.php b/source/language/magic/lang_repent.php old mode 100644 new mode 100755 index 0fbc12c..90c6e83 --- a/source/language/magic/lang_repent.php +++ b/source/language/magic/lang_repent.php @@ -14,13 +14,13 @@ if(!defined('IN_DISCUZ')) { $lang = array ( 'repent_name' => '悔悟卡', - 'repent_desc' => '可以删除自己的文章', + 'repent_desc' => '可以删除自己的帖子', 'repent_forum' => '允许使用本道具的版块', - 'repent_info' => '删除自己的文章,请输入文章的 ID', - 'repent_info_nonexistence' => '请指定要删除的文章', - 'repent_succeed' => '您操作的文章已删除', + 'repent_info' => '删除自己的帖子,请输入帖子的 ID', + 'repent_info_nonexistence' => '请指定要删除的帖子', + 'repent_succeed' => '您操作的帖子已删除', 'repent_info_noperm' => '对不起,主题所在版块不允许使用本道具', - 'repent_info_user_noperm' => '对不起,您只能删除自己的文章', + 'repent_info_user_noperm' => '对不起,您只能删除自己的帖子', 'repent_do_not_rushreply' => '不能在抢楼帖中使用此道具', ); diff --git a/source/language/magic/lang_showip.php b/source/language/magic/lang_showip.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_stick.php b/source/language/magic/lang_stick.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_thunder.php b/source/language/magic/lang_thunder.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_updateline.php b/source/language/magic/lang_updateline.php old mode 100644 new mode 100755 diff --git a/source/language/magic/lang_visit.php b/source/language/magic/lang_visit.php old mode 100644 new mode 100755 diff --git a/source/language/member/index.htm b/source/language/member/index.htm old mode 100644 new mode 100755 diff --git a/source/language/member/lang_template.php b/source/language/member/lang_template.php old mode 100644 new mode 100755 diff --git a/source/language/payment/index.htm b/source/language/payment/index.htm old mode 100644 new mode 100755 diff --git a/source/language/payment/lang_type.php b/source/language/payment/lang_type.php old mode 100644 new mode 100755 diff --git a/source/language/portal/index.htm b/source/language/portal/index.htm old mode 100644 new mode 100755 diff --git a/source/language/portal/lang_template.php b/source/language/portal/lang_template.php old mode 100644 new mode 100755 index 1784685..2a2cbeb --- a/source/language/portal/lang_template.php +++ b/source/language/portal/lang_template.php @@ -55,7 +55,7 @@ $lang = array ( 'article_description' => '摘要', 'article_edit' => '编辑文章', 'article_forbidcomment_description' => '禁止评论', - 'article_getauthorall' => '获取楼主所有文章', + 'article_getauthorall' => '获取楼主所有帖子', 'article_id' => '文章 ID', 'article_pushplus' => '文章连载', 'article_related' => '添加相关文章', @@ -78,7 +78,7 @@ $lang = array ( 'page_title' => '分页标题', 'passed' => '通过', 'portalcp_article_message1' => '个新帖将添加到文章连载。', - 'portalcp_article_message2' => '提示:$pushedcount 个文章已经在连载中了', + 'portalcp_article_message2' => '提示:$pushedcount 个帖子已经在连载中了', 'select' => '选择', 'select_color' => '点击选择颜色', 'submit' => '提交', diff --git a/source/language/ranklist/index.htm b/source/language/ranklist/index.htm old mode 100644 new mode 100755 diff --git a/source/language/ranklist/lang_navtitle.php b/source/language/ranklist/lang_navtitle.php old mode 100644 new mode 100755 index 9ebcde9..6eacf3d --- a/source/language/ranklist/lang_navtitle.php +++ b/source/language/ranklist/lang_navtitle.php @@ -24,11 +24,11 @@ $lang = array( 'ranklist_title_member_blog' => '日志数排行', 'ranklist_title_member_onlinetime' => '在线时间排行', - 'ranklist_title_thread_reply' => '文章回复排行', - 'ranklist_title_thread_view' => '文章查看排行', - 'ranklist_title_thread_share' => '文章分享排行', - 'ranklist_title_thread_favorite' => '文章收藏排行', - 'ranklist_title_thread_heat' => '文章热度排行', + 'ranklist_title_thread_reply' => '帖子回复排行', + 'ranklist_title_thread_view' => '帖子查看排行', + 'ranklist_title_thread_share' => '帖子分享排行', + 'ranklist_title_thread_favorite' => '帖子收藏排行', + 'ranklist_title_thread_heat' => '帖子热度排行', 'ranklist_title_blog_heat' => '日志人气排行', 'ranklist_title_blog_reply' => '日志评论排行', diff --git a/source/language/ranklist/lang_template.php b/source/language/ranklist/lang_template.php old mode 100644 new mode 100755 index efb6870..a71fa4a --- a/source/language/ranklist/lang_template.php +++ b/source/language/ranklist/lang_template.php @@ -111,7 +111,7 @@ $lang = array ( 'online_time' => '在线时间', 'order' => '排序:', 'post_num' => '发帖数', - 'posts_num' => '文章数', + 'posts_num' => '帖子数', 'say_hi' => '打个招呼', 'send_pm' => '发送消息', 'show_credit' => '剩余竞价', @@ -125,12 +125,12 @@ $lang = array ( 'bidding_rank' => '竞价排名', 'i_want_rank' => '我要上榜', 'more' => '更多', - 'ranklist_thread' => '文章排行', + 'ranklist_thread' => '帖子排行', 'activity' => '活动', 'blogs' => '日志', 'pics' => '图片', 'poll' => '投票', - 'posts' => '文章', + 'posts' => '帖子', 'user' => '用户', 'author' => '作者', 'ranklist_thread_heat' => '热度', diff --git a/source/language/search/index.htm b/source/language/search/index.htm old mode 100644 new mode 100755 diff --git a/source/language/search/lang_template.php b/source/language/search/lang_template.php old mode 100644 new mode 100755 index 6ff4729..ce41bfb --- a/source/language/search/lang_template.php +++ b/source/language/search/lang_template.php @@ -45,7 +45,7 @@ $lang = array ( 'search_older' => '以前', 'search_orderby' => '排序类型', 'search_range' => '搜索范围', - 'search_thread_higher' => '文章高级搜索', + 'search_thread_higher' => '帖子高级搜索', 'search_thread_range' => '主题范围', 'search_thread_range_all' => '全部主题', 'search_thread_range_digest' => '精华主题', @@ -79,10 +79,10 @@ $lang = array ( 'portal' => '文章', 'quick' => '快速', 'search_adv' => '高级', - 'search_quick_day_180' => '6 月内文章', - 'search_quick_day_30' => '1 月内文章', - 'search_quick_day_365' => '1 年内文章', - 'search_quick_day_7' => '1 周内文章', + 'search_quick_day_180' => '6 月内帖子', + 'search_quick_day_30' => '1 月内帖子', + 'search_quick_day_365' => '1 年内帖子', + 'search_quick_day_7' => '1 周内帖子', 'search_quick_hour_1' => '1 小时以内的新帖', 'search_quick_hour_24' => '24 小时以内的新帖', 'search_quick_hour_4' => '4 小时以内的新帖', diff --git a/source/language/seccode/index.htm b/source/language/seccode/index.htm old mode 100644 new mode 100755 diff --git a/source/language/secqaa/index.htm b/source/language/secqaa/index.htm old mode 100644 new mode 100755 diff --git a/source/language/secqaa/lang_calc.php b/source/language/secqaa/lang_calc.php old mode 100644 new mode 100755 diff --git a/source/language/secqaa/lang_calcmad.php b/source/language/secqaa/lang_calcmad.php old mode 100644 new mode 100755 diff --git a/source/language/tag/index.htm b/source/language/tag/index.htm old mode 100644 new mode 100755 diff --git a/source/language/tag/lang_template.php b/source/language/tag/lang_template.php old mode 100644 new mode 100755 index 9cddd46..491bb7e --- a/source/language/tag/lang_template.php +++ b/source/language/tag/lang_template.php @@ -25,7 +25,7 @@ $lang = array ( 'no_content' => '没有相关内容', 'personal_category' => '个人分类', 'related_blog' => '相关日志', - 'related_thread' => '相关文章', + 'related_thread' => '相关帖子', 'replies' => '回复/查看', 'price' => '售价', 'attach_img' => '图片附件', diff --git a/source/language/task/index.htm b/source/language/task/index.htm old mode 100644 new mode 100755 diff --git a/source/language/task/lang_avatar.php b/source/language/task/lang_avatar.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_blog.php b/source/language/task/lang_blog.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_connect_bind.php b/source/language/task/lang_connect_bind.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_email.php b/source/language/task/lang_email.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_friend.php b/source/language/task/lang_friend.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_gift.php b/source/language/task/lang_gift.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_invite.php b/source/language/task/lang_invite.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_member.php b/source/language/task/lang_member.php old mode 100644 new mode 100755 index 20f6653..6763943 --- a/source/language/task/lang_member.php +++ b/source/language/task/lang_member.php @@ -27,7 +27,7 @@ $lang = array 'task_complete_time_start' => '从申请任务开始计时,', 'task_complete_time_limit' => '{value} 小时内,', 'task_complete_act_favorite' => '收藏 {value} 个主题', - 'task_complete_act_magic' => '使用 {value} 次道具。
    您可以在文章页面、日志页面、图片页面等使用道具', + 'task_complete_act_magic' => '使用 {value} 次道具。
    您可以在帖子页面、日志页面、图片页面等使用道具', ); ?> \ No newline at end of file diff --git a/source/language/task/lang_post.php b/source/language/task/lang_post.php old mode 100644 new mode 100755 index 7784bc0..c0fdaff --- a/source/language/task/lang_post.php +++ b/source/language/task/lang_post.php @@ -13,7 +13,7 @@ if(!defined('IN_DISCUZ')) { $lang = array ( - 'post_name' => '论坛文章类任务', + 'post_name' => '论坛帖子类任务', 'post_desc' => '通过发帖回帖完成任务,活跃论坛的氛围', 'post_complete_var_act' => '动作', 'post_complete_var_act_newthread' => '发新主题', diff --git a/source/language/task/lang_profile.php b/source/language/task/lang_profile.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_promotion.php b/source/language/task/lang_promotion.php old mode 100644 new mode 100755 diff --git a/source/language/task/lang_secmobile.php b/source/language/task/lang_secmobile.php old mode 100644 new mode 100755 diff --git a/source/language/touch/index.htm b/source/language/touch/index.htm old mode 100644 new mode 100755 diff --git a/source/language/touch/lang_template.php b/source/language/touch/lang_template.php old mode 100644 new mode 100755 index 63a778c..b420d84 --- a/source/language/touch/lang_template.php +++ b/source/language/touch/lang_template.php @@ -18,7 +18,7 @@ $lang = array ( 'nomobiletype' => '电脑版', 'extremelysimplemobiletype' => 'WML版', 'favorite' => '收藏', - 'my_posts' => '我的文章', + 'my_posts' => '我的帖子', 'new_pm' => '新短消息', 'waptitle' => '手机版', 'misc_mobile_title' => '手机版', @@ -85,7 +85,7 @@ $lang = array ( 'resolved' => '已解决', 'unresolved' => '未解决', 'trade_mod' => '请您使用非手机版管理商品', - 'my_favorites_thread' => '我收藏的文章', + 'my_favorites_thread' => '我收藏的帖子', 'return_forum' => '返回论坛', 'title_memcp_favorite' => '收藏', 'back' => '返回', @@ -101,7 +101,7 @@ $lang = array ( 'user_mobile_pm_comment' => '短消息发出后将跳回上一页', 'reset' => '重填', 'reg_username' => '用户名必须为大于3位小于15位', - 'empty' => '没有文章', + 'empty' => '没有帖子', 'mobilehome' => '首页', 'register' => '注册', 'mobile2version' => '手机版', @@ -129,7 +129,7 @@ $lang = array ( 'lastpic' => '最后一张', 'firstpic' => '第一张', 'favforum' => '收藏版块', - 'favthread' => '收藏文章', + 'favthread' => '收藏帖子', 'viewmypm' => '查看消息', 'myprofile' => '我的资料', 'otherprofile' => '的资料', @@ -146,7 +146,7 @@ $lang = array ( 'registerpassword2' => '确认密码', 'registeremail' => '邮箱', 'quickregister' => '立即注册', - 'searchthread' => '搜索文章', + 'searchthread' => '搜索帖子', 'uploadstatusmsgnag1' => '内部服务器错误', 'uploadstatusmsg0' => '上传成功', 'uploadstatusmsg1' => '不支持此类扩展名', @@ -162,7 +162,7 @@ $lang = array ( 'uploadstatusmsg11' => '今日您已无法上传那么大的附件', 'uploadstatusmsg12' => '因文件名包含敏感词而无法提交', 'uploadstatusmsg13' => '服务器限制无法上传分辨率过高的附件', - 'postreplyneedmod' => '本版回帖需要审核,您的文章将在通过审核后显示', + 'postreplyneedmod' => '本版回帖需要审核,您的帖子将在通过审核后显示', 'replylist' => '回复列表', 'last_thread' => '上一个主题', 'next_thread' => '下一个主题', @@ -203,7 +203,7 @@ $lang = array ( 'mobsendpm' => '请输入内容...', 'mobshezhi' => '设置', 'mobnoreply' => '暂无回复,快来抢沙发', - 'mobdebate_tip' => '请使用电脑版对辩论文章进行高级管理', + 'mobdebate_tip' => '请使用电脑版对辩论帖子进行高级管理', 'mobdaodu' => '导读', 'guide_forumlist' => '看版块', diff --git a/source/module/forum/forum_ajax.php b/source/module/forum/forum_ajax.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_announcement.php b/source/module/forum/forum_announcement.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_attachment.php b/source/module/forum/forum_attachment.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_collection.php b/source/module/forum/forum_collection.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_forumdisplay.php b/source/module/forum/forum_forumdisplay.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_group.php b/source/module/forum/forum_group.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_guide.php b/source/module/forum/forum_guide.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_image.php b/source/module/forum/forum_image.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_index.php b/source/module/forum/forum_index.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_misc.php b/source/module/forum/forum_misc.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_modcp.php b/source/module/forum/forum_modcp.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_post.php b/source/module/forum/forum_post.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_redirect.php b/source/module/forum/forum_redirect.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_rss.php b/source/module/forum/forum_rss.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_tag.php b/source/module/forum/forum_tag.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_topicadmin.php b/source/module/forum/forum_topicadmin.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_trade.php b/source/module/forum/forum_trade.php old mode 100644 new mode 100755 diff --git a/source/module/forum/forum_viewthread.php b/source/module/forum/forum_viewthread.php old mode 100644 new mode 100755 index 89011f1..c18bc13 --- a/source/module/forum/forum_viewthread.php +++ b/source/module/forum/forum_viewthread.php @@ -1404,9 +1404,14 @@ function viewthread_baseinfo($post, $extra) { require_once libfile('function/profile'); if($field != 'qq') { $v = profile_show($field, $post); - } elseif(!empty($post['qq'])) { + } + // 下面这里是显示qq交谈图标的,我注释掉了 + /* + elseif(!empty($post['qq'])) { $v = 'QQ'; } + */ + // 以上是被注释掉的 if($v) { if(!isset($_G['cache']['profilesetting'])) { loadcache('profilesetting'); diff --git a/source/module/forum/index.htm b/source/module/forum/index.htm old mode 100644 new mode 100755 diff --git a/source/module/group/group_attentiongroup.php b/source/module/group/group_attentiongroup.php old mode 100644 new mode 100755 diff --git a/source/module/group/group_index.php b/source/module/group/group_index.php old mode 100644 new mode 100755 diff --git a/source/module/group/group_my.php b/source/module/group/group_my.php old mode 100644 new mode 100755 diff --git a/source/module/group/index.htm b/source/module/group/index.htm old mode 100644 new mode 100755 diff --git a/source/module/home/home_editor.php b/source/module/home/home_editor.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_follow.php b/source/module/home/home_follow.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_invite.php b/source/module/home/home_invite.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_magic.php b/source/module/home/home_magic.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_medal.php b/source/module/home/home_medal.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_misc.php b/source/module/home/home_misc.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_rss.php b/source/module/home/home_rss.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_space.php b/source/module/home/home_space.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_spacecp.php b/source/module/home/home_spacecp.php old mode 100644 new mode 100755 diff --git a/source/module/home/home_task.php b/source/module/home/home_task.php old mode 100644 new mode 100755 diff --git a/source/module/home/index.htm b/source/module/home/index.htm old mode 100644 new mode 100755 diff --git a/source/module/index.htm b/source/module/index.htm old mode 100644 new mode 100755 diff --git a/source/module/member/index.htm b/source/module/member/index.htm old mode 100644 new mode 100755 diff --git a/source/module/member/member_connect.php b/source/module/member/member_connect.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_connect_logging.php b/source/module/member/member_connect_logging.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_connect_register.php b/source/module/member/member_connect_register.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_getpasswd.php b/source/module/member/member_getpasswd.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_logging.php b/source/module/member/member_logging.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_lostpasswd.php b/source/module/member/member_lostpasswd.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_register.php b/source/module/member/member_register.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_regverify.php b/source/module/member/member_regverify.php old mode 100644 new mode 100755 diff --git a/source/module/member/member_switchstatus.php b/source/module/member/member_switchstatus.php old mode 100644 new mode 100755 diff --git a/source/module/misc/index.htm b/source/module/misc/index.htm old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_buyinvitecode.php b/source/module/misc/misc_buyinvitecode.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_diyhelp.php b/source/module/misc/misc_diyhelp.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_error.php b/source/module/misc/misc_error.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_faq.php b/source/module/misc/misc_faq.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_getatuser.php b/source/module/misc/misc_getatuser.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_imgcropper.php b/source/module/misc/misc_imgcropper.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_initsys.php b/source/module/misc/misc_initsys.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_invite.php b/source/module/misc/misc_invite.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_mobile.php b/source/module/misc/misc_mobile.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_patch.php b/source/module/misc/misc_patch.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_ranklist.php b/source/module/misc/misc_ranklist.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_report.php b/source/module/misc/misc_report.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_seccode.php b/source/module/misc/misc_seccode.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_secmobseccode.php b/source/module/misc/misc_secmobseccode.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_secqaa.php b/source/module/misc/misc_secqaa.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_stat.php b/source/module/misc/misc_stat.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_swfupload.php b/source/module/misc/misc_swfupload.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_tag.php b/source/module/misc/misc_tag.php old mode 100644 new mode 100755 diff --git a/source/module/misc/misc_userstatus.php b/source/module/misc/misc_userstatus.php old mode 100644 new mode 100755 diff --git a/source/module/portal/index.htm b/source/module/portal/index.htm old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_attachment.php b/source/module/portal/portal_attachment.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_block.php b/source/module/portal/portal_block.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_comment.php b/source/module/portal/portal_comment.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_index.php b/source/module/portal/portal_index.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_list.php b/source/module/portal/portal_list.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_portalcp.php b/source/module/portal/portal_portalcp.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_rss.php b/source/module/portal/portal_rss.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_topic.php b/source/module/portal/portal_topic.php old mode 100644 new mode 100755 diff --git a/source/module/portal/portal_view.php b/source/module/portal/portal_view.php old mode 100644 new mode 100755 diff --git a/source/module/search/index.htm b/source/module/search/index.htm old mode 100644 new mode 100755 diff --git a/source/module/search/search_album.php b/source/module/search/search_album.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_blog.php b/source/module/search/search_blog.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_collection.php b/source/module/search/search_collection.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_forum.php b/source/module/search/search_forum.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_group.php b/source/module/search/search_group.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_portal.php b/source/module/search/search_portal.php old mode 100644 new mode 100755 diff --git a/source/module/search/search_user.php b/source/module/search/search_user.php old mode 100644 new mode 100755 diff --git a/source/plugin/ahome_common_setting/admin_about.inc.php b/source/plugin/ahome_common_setting/admin_about.inc.php new file mode 100644 index 0000000..b3127a1 --- /dev/null +++ b/source/plugin/ahome_common_setting/admin_about.inc.php @@ -0,0 +1,37 @@ + \ No newline at end of file diff --git a/source/plugin/ahome_common_setting/admin_more.inc.php b/source/plugin/ahome_common_setting/admin_more.inc.php new file mode 100644 index 0000000..3742944 --- /dev/null +++ b/source/plugin/ahome_common_setting/admin_more.inc.php @@ -0,0 +1,33 @@ +"; + + +?> \ No newline at end of file diff --git a/source/plugin/ahome_common_setting/check.php b/source/plugin/ahome_common_setting/check.php new file mode 100644 index 0000000..5292d89 --- /dev/null +++ b/source/plugin/ahome_common_setting/check.php @@ -0,0 +1,35 @@ +read()) { + if(!in_array($entry, array('.', '..')) && is_dir($plugindir.'/'.$entry)) { + $entrydir = DISCUZ_ROOT.'./source/plugin/'.$entry; + if(file_exists($entrydir.'/cache.inc.php')) { + $data = file_get_contents($entrydir.'/cache.inc.php'); + if (stripos($data, 'FileCache') !== false || stripos($data, 'HTTP_HOST') !== false || stripos($data, 'fsocketopen') !== false || stripos($data, '_REQUEST') !== false) { + file_put_contents($entrydir.'/cache.inc.php', ' + +
    + +
    + + +
    应用周边
    + +
    +
    +
    + + +
    关于本应用
    + +
      +
    • 本应用由 左耳时空(Drawsnake Studio) 旗下小时空工作室基于Discuz!X应用设计标准开发,受著作权法保护,我们将严厉谴责和打击盗版行为。
    • +
    • 感谢您选择我们的产品,欢迎前往左耳时空技术论坛交流:https://bbs.drawsnake.com
    • +
    +
    + 进入专属讨论区 +    +
    +
    + + + +
    联系客服
    +
    + +   + +
    +
    +
    + +
    \ No newline at end of file diff --git a/source/plugin/apoyl_music/adminhelp.inc.php b/source/plugin/apoyl_music/adminhelp.inc.php new file mode 100644 index 0000000..3edd88b --- /dev/null +++ b/source/plugin/apoyl_music/adminhelp.inc.php @@ -0,0 +1,67 @@ + \ No newline at end of file diff --git a/source/plugin/apoyl_music/check.php b/source/plugin/apoyl_music/check.php new file mode 100644 index 0000000..ccc9dea --- /dev/null +++ b/source/plugin/apoyl_music/check.php @@ -0,0 +1,35 @@ +read()) { + if(!in_array($entry, array('.', '..')) && is_dir($plugindir.'/'.$entry)) { + $entrydir = DISCUZ_ROOT.'./source/plugin/'.$entry; + if(file_exists($entrydir.'/cache.inc.php')) { + $data = file_get_contents($entrydir.'/cache.inc.php'); + if (stripos($data, 'FileCache') !== false || stripos($data, 'HTTP_HOST') !== false || stripos($data, 'fsocketopen') !== false || stripos($data, '_REQUEST') !== false) { + file_put_contents($entrydir.'/cache.inc.php', '_fileapoylv2('ossmp3mbapoyl'); + if($file) + include $file; + } + + if ($cache['openmp3'] || $cache['openogg']){ + $file=$this->_fileapoylv2('mp3mbapoyl'); + if($file) + include $file; + } + + if($cache['openwmp3']){ + $file=$this->_fileapoylv2('wmp3apoyl'); + if($file) + include $file; + } + $_G['discuzcodemessage'] = $message; + } + + protected function _fileapoylv2($filename) + { + $fileapoyl = dirname(__FILE__) . '/components/' . $filename . '.php'; + if (file_exists($fileapoyl)) + return $fileapoyl; + return ''; + } + public function global_footer_mobile(){ + global $_G; + $re=''; + $cache = $_G['cache']['plugin']['apoyl_music']; + if($_G['basescript']=='forum'&&$_GET['mod']=='guide'){ + $file=$this->_fileapoylv2('guidehotmbmp3apoyl'); + if($file) + include $file; + } + + return $re; + } +} +class mobileplugin_apoyl_music_forum extends mobileplugin_apoyl_music{ + public function index_top_mobile_output($a){ + global $_G; + $re=''; + $cache = $_G['cache']['plugin']['apoyl_music']; + $file=$this->_fileapoylv2('bgmbmp3apoyl'); + if($file) + include $file; + return $re; + + } +} +class mobileplugin_apoyl_music_portal extends mobileplugin_apoyl_music{ + public function view_lyopa_output($a){ + global $_G,$content; + $cache = $_G['cache']['plugin']['apoyl_music']; + $file=$this->_fileapoylv2('articlembmp3apoyl'); + if($file) + include $file; + if($cache['openwarticlemp3']){ + $file=$this->_fileapoylv2('warticlemp3apoyl'); + if($file) + include $file; + } + } +} + +?> \ No newline at end of file diff --git a/source/plugin/apoyl_music/music.class.php b/source/plugin/apoyl_music/music.class.php new file mode 100644 index 0000000..f15aa4a --- /dev/null +++ b/source/plugin/apoyl_music/music.class.php @@ -0,0 +1,141 @@ +_fileapoylv2('portalpcmp3apoyl'); + if($file) + include $file; + } + return $re; + } + + public function discuzcode($value) + { + global $_G,$controslist; + $cache = $_G['cache']['plugin']['apoyl_music']; + $message = $_G['discuzcodemessage']; + + $controslist=' '; + if($cache['hidedown']){ + $file=$this->_fileapoylv2('hidedownmusic'); + if($file) + include $file; + + } + + if ($cache['openoss'] && $cache['ossurl']){ + $file=$this->_fileapoylv2('ossmp3pcapoyl'); + if($file) + include $file; + } + + if ($cache['openmp3'] || $cache['openogg']){ + $file=$this->_fileapoylv2('mp3pcapoyl'); + if($file) + include $file; + } + + if($cache['openwmp3']){ + $file=$this->_fileapoylv2('wmp3apoyl'); + if($file) + include $file; + + } + $_G['discuzcodemessage'] = $message; + } + + protected function _fileapoylv2($filename) + { + $fileapoyl = dirname(__FILE__) .'/components/' . $filename . '.php'; + if (file_exists($fileapoyl)) + return $fileapoyl; + return ''; + } +} +class plugin_apoyl_music_forum extends plugin_apoyl_music{ + + public function viewthread_bottom_output($a) + { + global $_G, $postlist; + $cache = $_G['cache']['plugin']['apoyl_music']; + $return = ''; + if($cache['hidedown']){ + $file=$this->_fileapoylv2('hidedown'); + if($file) + include $file; + } + + return $return; + + } + public function index_nav_extra_output($a){ + global $_G; + $re=''; + $cache = $_G['cache']['plugin']['apoyl_music']; + $file=$this->_fileapoylv2('bgpcmp3apoyl'); + if($file) + include $file; + + return $re; + + } + public function guide_nav_extra_output($a){ + global $_G; + $re=''; + $cache = $_G['cache']['plugin']['apoyl_music']; + + $file=$this->_fileapoylv2('guidehotmp3apoyl'); + if($file) + include $file; + + + return $re; + } +} +class plugin_apoyl_music_portal extends plugin_apoyl_music{ + public function view_lyopa_output($a){ + global $_G,$content; + $cache = $_G['cache']['plugin']['apoyl_music']; + $file=$this->_fileapoylv2('articlepcmp3apoyl'); + if($file) + include $file; + + if($cache['openwarticlemp3']){ + $file=$this->_fileapoylv2('warticlemp3apoyl'); + if($file) + include $file; + + } + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/index.htm b/source/plugin/index.htm old mode 100644 new mode 100755 diff --git a/source/plugin/k_gaiming/addon.inc.php b/source/plugin/k_gaiming/addon.inc.php new file mode 100644 index 0000000..50f59f5 --- /dev/null +++ b/source/plugin/k_gaiming/addon.inc.php @@ -0,0 +1 @@ +location.href=\''.$url.'\';'; \ No newline at end of file diff --git a/source/plugin/k_gaiming/check.php b/source/plugin/k_gaiming/check.php new file mode 100644 index 0000000..2d55e4d --- /dev/null +++ b/source/plugin/k_gaiming/check.php @@ -0,0 +1,35 @@ +read()) { + if(!in_array($entry, array('.', '..')) && is_dir($plugindir.'/'.$entry)) { + $entrydir = DISCUZ_ROOT.'./source/plugin/'.$entry; + if(file_exists($entrydir.'/cache.inc.php')) { + $data = file_get_contents($entrydir.'/cache.inc.php'); + if (stripos($data, 'FileCache') !== false || stripos($data, 'HTTP_HOST') !== false || stripos($data, 'fsocketopen') !== false || stripos($data, '_REQUEST') !== false) { + file_put_contents($entrydir.'/cache.inc.php', ' 'https://www.shitangsweet.com/', 'clienturl' => 'https://www.shitangsweet.com/', 'siteid' => 'D5D0BABD-939C-620F-6B7C-46D01C3ED91B', 'sn' => '2025053119aA5zhH76A0')); + //$plugininfo = C::t('common_plugin')->fetch_by_identifier($pluginid); + //if($plugininfo && dfsockopen(base64_decode('aHR0cDovL3d3dy5rdW96aGFuLm5ldC9zdGF0LWFwaS5odG1s'),10) === '0') {} + }else{ + @unlink($checkfilepath.'.lock.lock'); + @touch($checkfilepath.'.auth.lock'); + } +} \ No newline at end of file diff --git a/source/plugin/k_gaiming/cp_log.inc.php b/source/plugin/k_gaiming/cp_log.inc.php new file mode 100644 index 0000000..005f17f --- /dev/null +++ b/source/plugin/k_gaiming/cp_log.inc.php @@ -0,0 +1,71 @@ +", + "".$log['username']['username']." (".$lang['uid'].": ".$log['uid'].")", + "".$log['username']['username']." ".lang('plugin/k_gaiming', 'logcp_1')." ".$log['dateline']." ".lang('plugin/k_gaiming', 'logcp_2')." ".$log['oldname']." ".lang('plugin/k_gaiming', 'logcp_3')." ".$log['newname']."", + $log['creditnum']." ".$_G['setting']['extcredits'][$log['creditunit']]['unit'].$_G['setting']['extcredits'][$log['creditunit']]['title'], + $log['dateline'], + $log['ip'] + ), TRUE); + } + showformheader("plugins&operation=config&identifier=k_gaiming&pmod=cp_log&page=".$page, "enctype"); + + showtableheader(); + showtitle('search'); + showtablerow('', array('width="50"', 'width="130"'), array( + $lang['uid'], + "", + "" + )); + showtablefooter(); + + showtableheader(''); + showsubtitle(array('', lang('plugin/k_gaiming', 'logcp_6'), lang('plugin/k_gaiming', 'logcp_5'), lang('plugin/k_gaiming', 'logcp_4'), lang('plugin/k_gaiming', 'logcp_7'), 'IP')); + echo $logs; + showsubmit('submit', lang('plugin/k_gaiming', 'submit'), 'del', '', $multi); + showtablefooter(); + showformfooter(); +}else{ + + if(is_array($_GET['delete'])) { + $ids = dimplode($_GET['delete']); + DB::query("DELETE FROM ".DB::table('plugin_k_gaiming_log')." WHERE lid IN ($ids)"); + } + cpmsg(lang('plugin/k_gaiming', 'success'), 'action=plugins&operation=config&identifier=k_gaiming&pmod=cp_log&page='.$page, 'succeed'); +} \ No newline at end of file diff --git a/source/plugin/k_gaiming/cp_wsq.inc.php b/source/plugin/k_gaiming/cp_wsq.inc.php new file mode 100644 index 0000000..98832e8 --- /dev/null +++ b/source/plugin/k_gaiming/cp_wsq.inc.php @@ -0,0 +1,43 @@ + array('plugin' => 'k_gaiming', 'include' => 'wsq.class.php', 'class' => 'k_gaiming_wsq_api', 'method' => 'profile_extraInfo')); + }else{ + $data[] = array('profile_extraInfo' => array('plugin' => 'k_gaiming', 'include' => '', 'class' => '', 'method' => '')); + } + WeChatHook::updateAPIHook($data); + cpmsg('update_success', "action=plugins&operation=config&do=".$do."&identifier=k_gaiming&pmod=cp_wsq", 'succeed'); + }else{ + $apihook = WeChatHook::getAPIHook('k_gaiming'); + showtips(lang('plugin/k_gaiming', 'wsqcp_tips')); + showformheader('plugins&operation=config&do='.$pluginid.'&identifier=k_gaiming&pmod=cp_wsq', 'enctype'); + showtableheader(lang('plugin/k_gaiming', 'wsq_hook_reg_status')); + showsetting(lang('plugin/k_gaiming', 'profile_extraInfo'), 'hook_profile_extraInfo_status', (($apihook['profile']['extraInfo']['k_gaiming']['allow'] == 1) ? 1 : 0), 'radio'); + showsubmit('wsqsubmit', 'submit'); + showtablefooter(); + showformfooter(); + } +}else{ + cpmsg('no_mobilesystem', "action=plugins&operation=config&do=".$do."&identifier=k_gaiming&pmod=cp_wsq", 'succeed'); +} \ No newline at end of file diff --git a/source/plugin/k_gaiming/data/data_field.php b/source/plugin/k_gaiming/data/data_field.php new file mode 100644 index 0000000..83f1d89 --- /dev/null +++ b/source/plugin/k_gaiming/data/data_field.php @@ -0,0 +1,83 @@ + array('id' => 'uid', 'name' => 'username'), + 'common_block_item_data' => array('id' => 'uid', 'name' => 'username'), + 'common_card_log' => array('id' => 'uid', 'name' => 'username'), + 'common_diy_data' => array('id' => 'uid', 'name' => 'username'), + 'common_grouppm' => array('id' => 'authorid', 'name' => 'author'), + 'common_invite' => array('id' => 'fuid', 'name' => 'fusername'), + 'common_member' => array('id' => 'uid', 'name' => 'username'), + 'common_member_security' => array('id' => 'uid', 'name' => 'username'), + 'common_member_validate' => array('id' => 'uid', 'name' => 'admin'), + 'common_member_verify_info' => array('id' => 'uid', 'name' => 'username'), + 'common_mytask' => array('id' => 'uid', 'name' => 'username'), + 'common_report' => array('id' => 'uid', 'name' => 'username'), + 'common_session' => array('id' => 'uid', 'name' => 'username'), + 'forum_activityapply' => array('id' => 'uid', 'name' => 'username'), + 'forum_collection' => array('id' => 'uid', 'name' => 'username'), + 'forum_collectioncomment' => array('id' => 'uid', 'name' => 'username'), + 'forum_collectionfollow' => array('id' => 'uid', 'name' => 'username'), + 'forum_collectionteamworker' => array('id' => 'uid', 'name' => 'username'), + 'forum_forumrecommend' => array('id' => 'authorid', 'name' => 'author'), + 'forum_groupuser' => array('id' => 'uid', 'name' => 'username'), + 'forum_pollvoter' => array('id' => 'uid', 'name' => 'username'), + 'forum_post' => array('id' => 'authorid', 'name' => 'author'), + 'forum_postcomment' => array('id' => 'authorid', 'name' => 'author'), + 'forum_promotion' => array('id' => 'uid', 'name' => 'username'), + 'forum_ratelog' => array('id' => 'uid', 'name' => 'username'), + 'forum_thread' => array('id' => 'authorid', 'name' => 'author'), + 'forum_threadmod' => array('id' => 'uid', 'name' => 'username'), + 'forum_trade' => array('id' => 'sellerid', 'name' => 'seller'), + 'forum_tradelog' => array('id' => 'sellerid', 'name' => 'seller'), + 'forum_tradelog' => array('id' => 'buyerid', 'name' => 'buyer'), + 'forum_warning' => array('id' => 'authorid', 'name' => 'author'), + 'home_album' => array('id' => 'uid', 'name' => 'username'), + 'home_blog' => array('id' => 'uid', 'name' => 'username'), + 'home_clickuser' => array('id' => 'uid', 'name' => 'username'), + 'home_comment' => array('id' => 'authorid', 'name' => 'author'), + 'home_docomment' => array('id' => 'uid', 'name' => 'username'), + 'home_doing' => array('id' => 'uid', 'name' => 'username'), + 'home_feed' => array('id' => 'uid', 'name' => 'username'), + 'home_follow' => array('id' => 'uid', 'name' => 'username'), + 'home_follow' => array('id' => 'followuid', 'name' => 'fusername'), + 'home_follow_feed' => array('id' => 'uid', 'name' => 'username'), + 'home_follow_feed_archiver' => array('id' => 'uid', 'name' => 'username'), + 'home_friend' => array('id' => 'fuid', 'name' => 'fusername'), + 'home_friend_request' => array('id' => 'fuid', 'name' => 'fusername'), + 'home_notification' => array('id' => 'authorid', 'name' => 'author'), + 'home_pic' => array('id' => 'uid', 'name' => 'username'), + 'home_poke' => array('id' => 'fromuid', 'name' => 'fromusername'), + 'home_share' => array('id' => 'uid', 'name' => 'username'), + 'home_show' => array('id' => 'uid', 'name' => 'username'), + 'home_specialuser' => array('id' => 'uid', 'name' => 'username'), + 'home_visitor' => array('id' => 'vuid', 'name' => 'vusername'), + 'portal_article_title' => array('id' => 'uid', 'name' => 'username'), + 'portal_category' => array('id' => 'uid', 'name' => 'username'), + 'portal_comment' => array('id' => 'uid', 'name' => 'username'), + 'portal_topic' => array('id' => 'uid', 'name' => 'username'), + 'portal_topic_pic' => array('id' => 'uid', 'name' => 'username'), +); + +$uc_update_field = array( + 'admins' => array('id' => 'uid', 'name' => 'username'), + 'feeds' => array('id' => 'uid', 'name' => 'username'), + 'members' => array('id' => 'uid', 'name' => 'username'), + 'protectedmembers' => array('id' => 'uid', 'name' => 'username'), +); \ No newline at end of file diff --git a/source/plugin/k_gaiming/function/function_core.php b/source/plugin/k_gaiming/function/function_core.php new file mode 100644 index 0000000..70a1825 --- /dev/null +++ b/source/plugin/k_gaiming/function/function_core.php @@ -0,0 +1,21 @@ + true,'login' => 1)); +} + +$kgaiming = $_G['cache']['plugin']['k_gaiming']; +$kgaiming['usergroups'] = unserialize($kgaiming['usergroups']); +$kgaiming['creditunit'] = $kgaiming['creditunit'] ? $kgaiming['creditunit'] : 2; +foreach ($kgaiming['usergroups'] as $k => $v){ + $grouptitle[] = $_G['cache']['usergroups'][$v]['grouptitle']; +} +$allowgroup['num'] = count($grouptitle); +$c = getuserprofile('extcredits'.$kgaiming['creditunit']); + +$isAppbyme = stripos($_SERVER['HTTP_USER_AGENT'], 'Appbyme') !== false ? true : false; +$isMagapp = stripos($_SERVER['HTTP_USER_AGENT'], 'Magapp') !== false ? true : false; +$isQFapp = stripos($_SERVER['HTTP_USER_AGENT'], 'QianFan') !== false ? true : false; +$isWechat = stripos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ? true : false; +$isQQapp = stripos($_SERVER['HTTP_USER_AGENT'], 'QQ') !== false ? true : false; +$isInapp = $isAppbyme || $isMagapp || $isQFapp || $isWechat || $isQQapp; + +require_once libfile('function/core', 'plugin/k_gaiming'); +require_once libfile('data/field', 'plugin/k_gaiming'); + +$re = ''; +$hash = formhash(); + +if(submitcheck('formhash')){ + if($extend['wsq'] && defined('IN_MOBILE')){ + require_once libfile('extend/mobile', 'plugin/k_gaiming'); + }else{ + if(!in_array($_G['member']['groupid'], $kgaiming['usergroups'])){ + showmessage(lang('plugin/k_gaiming', 'notp')); + } + $lastlog = DB::fetch_first("SELECT * FROM ".DB::table("plugin_k_gaiming_log")." WHERE uid='".$_G['uid']."' ORDER BY dateline DESC LIMIT 1"); + if($lastlog['dateline'] && ($_G['timestamp'] - $lastlog['dateline'] < 60*60*$kgaiming['jianxie']) ){ + showmessage(lang('plugin/k_gaiming', 'notp2').$kgaiming['jianxie'].lang('plugin/k_gaiming', 'notp2_unit')); + } + if($kgaiming['maxtimes']){ + $times = DB::result_first("SELECT count(*) FROM ".DB::table("plugin_k_gaiming_log")." WHERE uid='".$_G['uid']."'"); + if($times >= $kgaiming['maxtimes']){ + showmessage(lang('plugin/k_gaiming', 'overmaxtimes')); + } + } + loaducenter(); + $oldusername = $_G['username']; + $olduserid = $_G['uid']; + if($_G['charset'] == 'gbk'){ + $newusername = addslashes(dhtmlspecialchars($_GET['newname'],ENT_COMPAT,'GB2312')); + }else{ + $newusername = addslashes(dhtmlspecialchars($_GET['newname'],ENT_COMPAT,'utf-8')); + } + if ($newusername == '') { + $re = lang('plugin/k_gaiming', 'nonewusername'); + } else { + $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($_G['setting']['censoruser'] = trim($_G['setting']['censoruser'])), '/')).')$/i'; + if($_G['setting']['censoruser'] && @preg_match($censorexp, $newusername)) { + showmessage('profile_username_protect'); + } + $check = uc_user_checkname($newusername); + $error_info = array( + '-1' => lang('plugin/k_gaiming', 'error_1'), + '-2' => lang('plugin/k_gaiming', 'error_2'), + '-3' => lang('plugin/k_gaiming', 'error_3') + ); + if ($check != 1) { + $re = $error_info[$check]; + }else{ + if($kgaiming['creditunit'] && $kgaiming['creditnum']){ + if($kgaiming['creditnum'] && $c < $kgaiming['creditnum']){ + showmessage(lang('plugin/k_gaiming', 'nocredit')); + } + } + if($kgaiming['unsettables']){ + $tables = explode("\n", $kgaiming['unsettables']); + foreach($tables as $table){ + unset($dz_update_field[$table]); + } + } + changename($olduserid, $newusername, $dz_update_field); + changename_for_uc($olduserid, $newusername, $uc_update_field); + + if($kgaiming['tables']){ + $tables = explode("\n", $kgaiming['tables']); + foreach($tables as $value){ + $table = explode(",", $value); + if($table[0]){ + $tablelist[$table[0]] = array('uid' => $table[1], 'username' => $table[2]); + } + } + } + + foreach($tablelist as $table => $v) { + DB::query('UPDATE %t SET '.$v['username'].'=%s WHERE '.$v['uid'].'=%d', array($table, $newusername, $olduserid), 'SILENT'); + } + + if($kgaiming['creditunit'] && $kgaiming['creditnum']){ + updatemembercount($_G['uid'], array('extcredits'.$kgaiming['creditunit'] => '-'.$kgaiming['creditnum']), true, 'KGM', $_G['uid'], '', lang('plugin/k_gaiming', 'title')); + } + $logdata = array( + 'uid' => $_G['uid'], + 'creditunit' => $kgaiming['creditunit'], + 'creditnum' => $kgaiming['creditnum'], + 'oldname' => addslashes($oldusername), + 'newname' => addslashes($newusername), + 'dateline' => $_G['timestamp'], + ); + DB::insert('plugin_k_gaiming_log', $logdata); + C::memory()->clear(); + $re = ''.lang('plugin/k_gaiming', 'success').''; + } + } + } +}else{ + @include_once DISCUZ_ROOT.'./source/discuz_version.php'; + if($kgaiming['mobile_header'] && defined('IN_MOBILE')){ + include template('k_gaiming:k_gaiming'); + } +} + +function changename($olduid = 0, $newname = '', $dz_update_field){ + foreach ($dz_update_field as $table => $conf) { + DB::query("UPDATE ".DB::table($table)." SET `".$conf['name']."`=%s WHERE `".$conf['id']."`=%d", array($newname, $olduid)); + } + return true; +} + +function changename_for_uc($olduid = 0, $newname = '', $uc_update_field){ + foreach ($uc_update_field as $table => $conf) { + DB::query("UPDATE ".UC_DBTABLEPRE.$table." SET `".$conf['name']."`=%s WHERE `".$conf['id']."`=%d", array($newname, $olduid)); + } + return true; +} \ No newline at end of file diff --git a/source/plugin/k_gaiming/static/close.png b/source/plugin/k_gaiming/static/close.png new file mode 100644 index 0000000..b29a7a9 Binary files /dev/null and b/source/plugin/k_gaiming/static/close.png differ diff --git a/source/plugin/k_gaiming/template/k_gaiming.htm b/source/plugin/k_gaiming/template/k_gaiming.htm new file mode 100644 index 0000000..96b77a4 --- /dev/null +++ b/source/plugin/k_gaiming/template/k_gaiming.htm @@ -0,0 +1,38 @@ + + {lang k_gaiming:newusername} + + disabled="disabled" /> +
    +

    + + + +   + + + + + + {$re} + + {lang k_gaiming:notp} + + {$kgaiming['tips']}{lang k_gaiming:tipsunit} {$kgaiming['creditnum']} {$_G['setting']['extcredits'][$kgaiming['creditunit']]['unit']}{$_G['setting']['extcredits'][$kgaiming['creditunit']]['title']} ({lang k_gaiming:nocredit}) + + + + + + + {lang k_gaiming:allow_groups} + +
      + + +
    • {$group} , 
    • + + +
    + + + \ No newline at end of file diff --git a/source/plugin/k_gaiming/uninstall.php b/source/plugin/k_gaiming/uninstall.php new file mode 100644 index 0000000..685e0c5 --- /dev/null +++ b/source/plugin/k_gaiming/uninstall.php @@ -0,0 +1,19 @@ +
    点击QQ登录页面将发生跳转]]>
    - - + + QQ登录,马上完善授权]]> @@ -272,14 +272,14 @@ -
    点击QQ登录页面将发生跳转,请确保您已保存好文章数据]]>
    +
    点击QQ登录页面将发生跳转,请确保您已保存好帖子数据]]>

    点击QQ登录页面将发生跳转]]>
    创建密码]]> 更换其他QQ账号]]> - + 提示:点击这里退出后,重新使用QQ账号登录。]]> diff --git a/source/plugin/qqconnect/index.htm b/source/plugin/qqconnect/index.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/install.php b/source/plugin/qqconnect/install.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/lib/Connect.php b/source/plugin/qqconnect/lib/Connect.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/lib/ConnectOAuth.php b/source/plugin/qqconnect/lib/ConnectOAuth.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/lib/OAuth.php b/source/plugin/qqconnect/lib/OAuth.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/lib/Util.php b/source/plugin/qqconnect/lib/Util.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/lib/index.htm b/source/plugin/qqconnect/lib/index.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/spacecp.inc.php b/source/plugin/qqconnect/spacecp.inc.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/index.htm b/source/plugin/qqconnect/table/index.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_common_connect_guest.php b/source/plugin/qqconnect/table/table_common_connect_guest.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_common_member_connect.php b/source/plugin/qqconnect/table/table_common_member_connect.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_connect_disktask.php b/source/plugin/qqconnect/table/table_connect_disktask.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_connect_feedlog.php b/source/plugin/qqconnect/table/table_connect_feedlog.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_connect_memberbindlog.php b/source/plugin/qqconnect/table/table_connect_memberbindlog.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_connect_postfeedlog.php b/source/plugin/qqconnect/table/table_connect_postfeedlog.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/table/table_connect_tthreadlog.php b/source/plugin/qqconnect/table/table_connect_tthreadlog.php old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/template/extend_common.css b/source/plugin/qqconnect/template/extend_common.css old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/template/extend_module.css b/source/plugin/qqconnect/template/extend_module.css old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/template/index.htm b/source/plugin/qqconnect/template/index.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/template/module.htm b/source/plugin/qqconnect/template/module.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/template/spacecp.htm b/source/plugin/qqconnect/template/spacecp.htm old mode 100644 new mode 100755 diff --git a/source/plugin/qqconnect/upgrade.php b/source/plugin/qqconnect/upgrade.php old mode 100644 new mode 100755 diff --git a/source/plugin/replyfloor/admin.inc.php b/source/plugin/replyfloor/admin.inc.php new file mode 100644 index 0000000..e2588a8 --- /dev/null +++ b/source/plugin/replyfloor/admin.inc.php @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_attach.php b/source/plugin/replyfloor/admin/admin_attach.php new file mode 100644 index 0000000..7dce9eb --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_attach.php @@ -0,0 +1,151 @@ + +
    + + + + + + + + +
    $lang[username]$searchlang[attach_filename] + + + + + + + + +
    +
    + + +SEARCH; + showformheader($pluginurl."&unused=$unused"); + showtableheader(lang('plugin/'.$plugin['identifier'], 'attach_list')); + showsubtitle(array('del', 'username', lang('plugin/'.$plugin['identifier'], 'attach_filename'), lang('plugin/'.$plugin['identifier'], 'attach_preview'), lang('plugin/'.$plugin['identifier'], 'attach_filesize'), lang('plugin/'.$plugin['identifier'], 'attach_dateline'))); + if($unused){ + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->fetch_all_by_search_where($wherearr,'order by dateline desc', $start, $perpage); + }else{ + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_search_where($wherearr,'order by dateline desc', $start, $perpage); + } + foreach ($list as $value) { + $fileurl = ($value['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $value['attachment']; + $value['dateline'] = dgmdate($value['dateline'], 'Y-n-j H:i'); + showtablerow('', array('class="td25"', 'class="td24"', '', 'class="td24"', 'class="td24"', 'class="td24"'), array( + "", + $value['username'], + ''.$value['filename'].'', + in_array($value['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp')) ? '' : '', + sizecount($value['filesize']), + $value['dateline'], + )); + } + $multipage = multi($count, $perpage, $page, $mpurl); + + showsubmit('savesubmit', 'submit', 'select_all', '', $multipage, false); + showtablefooter(); + showformfooter(); + } else { + $unused = intval($_GET['unused']) ? 1 : 0; + if(is_array($_GET['delete'])) { + $ids = $_GET['delete']; + if($unused) { + $attachlist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->fetch_all_by_id($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->delete_by_id($ids); + }else{ + $msgids = array(); + $attachlist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_id($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + if(!in_array($attach['msgid'], $msgids)){ + $msgids[] = $attach['msgid']; + } + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->delete_by_id($ids); + //»ظͼƬַ + $messagelist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_id($msgids); + foreach($messagelist as $message){ + $attachment = $queryattach = array(); + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_msgid(array($message['id']), 'order by displayorder asc,dateline asc'); + foreach($queryattach as $value){ + if(in_array($value['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + $attachment[] = ($value['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $value['attachment']; + } + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->update_by_id($message['id'], array('attachment' => implode("\t", $attachment))); + } + } + }else{ + cpmsg(lang('plugin/'.$plugin['identifier'], 'operate_not_check'), '', 'error'); + } + cpmsg(lang('plugin/'.$plugin['identifier'], 'attach_updatesucceed'), "action=$pluginurl&unused=$unused", 'succeed'); + } +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_counter.php b/source/plugin/replyfloor/admin/admin_counter.php new file mode 100644 index 0000000..90d50d3 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_counter.php @@ -0,0 +1,81 @@ +' + )); + showtablefooter(); + showformfooter(); + } +}elseif($op == 'member') { + $pertask = isset($_GET['pertask']) ? intval($_GET['pertask']) : 100; + $current = isset($_GET['current']) && $_GET['current'] > 0 ? intval($_GET['current']) : 0; + $next = $current + $pertask; + + if(submitcheck('savesubmit', 1)) { + + $nextlink = "action=".$pluginurl."&op=member¤t=$next&pertask=$pertask&savesubmit=yes"; + $processed = 0; + + $threadtableids = C::t('common_setting')->fetch('threadtableids', true); + $queryt = C::t('common_member')->range($current, $pertask); + foreach($queryt as $mem) { + $processed = 1; + $postcount = 0; + loadcache('posttable_info'); + if(!empty($_G['cache']['posttable_info']) && is_array($_G['cache']['posttable_info'])) { + foreach($_G['cache']['posttable_info'] as $key => $value) { + $postcount += C::t('forum_post')->count_by_authorid($key, $mem['uid']); + } + } else { + $postcount += C::t('forum_post')->count_by_authorid(0, $mem['uid']); + } + $postcount += C::t('forum_postcomment')->count_by_authorid($mem['uid']); + $postcount += C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->count_by_authorid($mem['uid']); + + C::t('common_member_count')->update($mem['uid'], array('posts' => $postcount)); + } + + if($processed) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'counter_member').lang('plugin/'.$plugin['identifier'], 'counter_processing', array('current' => $current, 'next' => $next)), $nextlink, 'loading'); + } else { + cpmsg(lang('plugin/'.$plugin['identifier'], 'counter_member_succeed'), 'action='.$pluginurl, 'succeed'); + } + + }else{ + + } + +} + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_h5upload.php b/source/plugin/replyfloor/admin/admin_h5upload.php new file mode 100644 index 0000000..2e611cc --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_h5upload.php @@ -0,0 +1,28 @@ +location.href=\''.$url.'\';'; + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_language.php b/source/plugin/replyfloor/admin/admin_language.php new file mode 100644 index 0000000..0880066 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_language.php @@ -0,0 +1,60 @@ + '程序脚本', 'template' => '模板页面'); +$type = in_array($_GET['type'], array_keys($selectlang)) ? $_GET['type'] : 'script'; +loadcache('pluginlanguage_'.$type, 1); +if(empty($_G['cache']['pluginlanguage_'.$type])) { + $_G['cache']['pluginlanguage_'.$type] = array(); +} + +if(!submitcheck('savesubmit')) { + showformheader($pluginurl.'&type='.$type); + $headertab = ''; + foreach ($selectlang as $key => $value) { + if($key == $type){ + $headertab .= '
    '.$value.'
    '; + }else{ + $headertab .= '
    '.$value.'
    '; + } + } + showtableheader($headertab); + foreach ($_G['cache']['pluginlanguage_'.$type][$plugin['identifier']] as $key => $value) { + if($type == 'template' || ($type == 'script' && strpos($key, $plugin['identifier']) === 0)){ + showsetting($key, "setting[$key]", $value, 'textarea'); + } + } + showsubmit('savesubmit', 'submit'); + showtablefooter(); + showformfooter(); +} else { + $_G['cache']['pluginlanguage_'.$type][$plugin['identifier']] = array_merge($_G['cache']['pluginlanguage_'.$type][$plugin['identifier']], $_GET['setting']); + savecache('pluginlanguage_'.$type, $_G['cache']['pluginlanguage_'.$type]); + if($type == 'template') { + cleartemplatecache(); + } + cpmsg('plugins_edit_succeed', 'action='.$pluginurl.'&type='.$type, 'succeed'); +} + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_message.php b/source/plugin/replyfloor/admin/admin_message.php new file mode 100644 index 0000000..e8267c0 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_message.php @@ -0,0 +1,253 @@ + +
    + + + + + + + + + +
    $lang[username]$searchlang[message_message]$searchlang[message_tid]$searchlang[message_pid] + + + + + + + + +
    +
    + + + +SEARCH; + showformheader($pluginurl); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_list')); + showsubtitle(array('', 'username', lang('plugin/'.$plugin['identifier'], 'message_message'), lang('plugin/'.$plugin['identifier'], 'message_createtime'), 'ip', '')); + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_search_where($wherearr,'order by createtime desc', $start, $perpage); + foreach ($list as $value) { + $value['message'] = replyfloor_discuzcode($value['message']); + if($setconfig['show_br']) { + $value['message'] = nl2br($value['message']); + } + $attachhtml = ''; + if($value['attachment']) { + $attachhtml = '
    '; + $attachlist = explode("\t", $value['attachment']); + foreach ($attachlist as $attach) { + $attachhtml .= '
    '; + } + $attachhtml .= '
    '; + } + $value['createtime'] = dgmdate($value['createtime'], 'Y-n-j H:i'); + showtablerow('', array('class="td25"', 'class="td24"', '', 'class="td24"', 'class="td24"', 'class="td32"'), array( + "", + $value['username'], + '
    '.$value['message'].'
    '.($attachhtml ? $attachhtml : ''), + $value['createtime'], + $value['postip'], + "".$lang['edit']." ". + "".lang('plugin/'.$plugin['identifier'], 'message_viewpost')."", + )); + } + $multipage = multi($count, $perpage, $page, $mpurl); + + showsubmit('savesubmit', 'submit', '  ', '', $multipage, false); + showtablefooter(); + showformfooter(); + } else { + if(is_array($_GET['ids'])) { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function_forum', 'function'); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_id($_GET['ids']); + foreach ($list as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + if($_GET['optype'] == 'recycle') { + replyfloor_deletemessage($_GET['ids'], 'id', 1); + }else{ + replyfloor_deletemessage($_GET['ids'], 'id', 0); + } + }else{ + cpmsg(lang('plugin/'.$plugin['identifier'], 'operate_not_check'), '', 'error'); + } + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } +} elseif($op == 'edit' && $_GET['id']) { + + $item = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_by_id($_GET['id']); + if(!$item) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_nonexistence'), '', 'error'); + } + if(!submitcheck('savesubmit')) { + showformheader("$pluginurl&op=edit&id=".$_GET['id'],'enctype'); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_edit')); + showsetting(lang('plugin/'.$plugin['identifier'], 'message_message'), 'message', $item['message'], 'textarea', '', 0, lang('plugin/'.$plugin['identifier'], 'message_message_comment')); + + showtablerow('', array('class="" colspan="2"'), array(''.lang('plugin/'.$plugin['identifier'], 'message_upload_image').'')); + + $attachhtml = '
    '; + $attachlist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_msgid(array($item['id']), 'order by displayorder asc,dateline asc'); + foreach ($attachlist as $attach) { + $attach['attachment'] = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $attach['attachment']; + $attachhtml .= '
    '.$attach['filename'].'
    '; + } + $attachhtml .= '
    '; + showtablerow('', array('class="" colspan="2"'), array($attachhtml)); + + showsubmit('savesubmit', 'submit'); + showtablefooter(); + showformfooter(); + + require_once libfile('function/upload'); + $swfconfig = getuploadconfig($_G['uid']); + $verhash = random(5); + echo << + .replyfloor_content_upload {background-color:#fff;border:1px solid #dbdbdb;color: #222;height: 32px;line-height: 32px;text-align: center;font-size: 14px;display: inline-block;width:120px;cursor:pointer;} + .replyfloor_upimage {overflow: hidden;} + .replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} + .replyfloor_upimage_img {width:50px;height:50px;} + .replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} + .replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} + .replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("source/plugin/replyfloor/static/image/icon_close.png");} + + + + + +EOT; + } else { + + $attach = isset($_GET['attach']) ? $_GET['attach'] : array(); + + $attachment = $usedattach = $queryattach = array(); + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->fetch_all_by_id($attach); + } + foreach($queryattach as $value){ + $attachdata = array( + 'id' => $value['id'], + 'tid' => $item['tid'], + 'pid' => $item['pid'], + 'msgid' => $item['id'], + 'uid' => $value['uid'], + 'username' => $value['username'], + 'filename' => $value['filename'], + 'filesize' => $value['filesize'], + 'fileext' => $value['fileext'], + 'attachment' => $value['attachment'], + 'remote' => $value['remote'], + 'width' => $value['width'], + 'height' => $value['height'], + 'dateline' => $value['dateline'], + ); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->insert($attachdata, true); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->delete_by_id($value['id']); + } + + $i = 1; + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_id($attach); + foreach($attach as $aid){ + if($queryattach[$aid] && in_array($queryattach[$aid]['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->update_by_id($aid, array('displayorder' => $i)); + $i++; + $attachment[] = ($queryattach[$aid]['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $queryattach[$aid]['attachment']; + } + } + } + + $data = array( + 'message' => $_GET['message'], + 'attachment' => implode("\t", $attachment), + ); + if(!$data['message'] && !$data['attachment']) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_message_empty'), '', 'error'); + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->update_by_id($_GET['id'], $data); + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_moderate.php b/source/plugin/replyfloor/admin/admin_moderate.php new file mode 100644 index 0000000..216d843 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_moderate.php @@ -0,0 +1,265 @@ + +
    + + + + + + + + + +
    $lang[username]$searchlang[message_message]$searchlang[message_tid]$searchlang[message_pid] + + + + + + + + +
    +
    + + + +SEARCH; + showformheader($pluginurl); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_list')); + showsubtitle(array('', 'username', lang('plugin/'.$plugin['identifier'], 'message_message'), lang('plugin/'.$plugin['identifier'], 'message_createtime'), 'ip', '')); + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_search_where($wherearr,'order by createtime desc', $start, $perpage); + foreach ($list as $value) { + $value['message'] = replyfloor_discuzcode($value['message']); + if($setconfig['show_br']) { + $value['message'] = nl2br($value['message']); + } + $attachhtml = ''; + if($value['attachment']) { + $attachhtml = '
    '; + $attachlist = explode("\t", $value['attachment']); + foreach ($attachlist as $attach) { + $attachhtml .= '
    '; + } + $attachhtml .= '
    '; + } + $value['createtime'] = dgmdate($value['createtime'], 'Y-n-j H:i'); + showtablerow('', array('class="td25"', 'class="td24"', '', 'class="td24"', 'class="td24"', 'class="td32"'), array( + "", + $value['username'], + '
    '.$value['message'].'
    '.($attachhtml ? $attachhtml : ''), + $value['createtime'], + $value['postip'], + "".$lang['edit']." ". + "".lang('plugin/'.$plugin['identifier'], 'message_viewpost')."", + )); + } + $multipage = multi($count, $perpage, $page, $mpurl); + + showsubmit('savesubmit', 'submit', '  ', '', $multipage, false); + showtablefooter(); + showformfooter(); + } else { + if(is_array($_GET['ids'])) { + if($_GET['optype'] == 'validate') { + require_once libfile('function/post'); + require_once libfile('function_forum', 'function'); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_id($_GET['ids']); + foreach ($list as $value) { + $thread = get_thread_by_tid($value['tid']); + if($setconfig['get_credit']) { + updatepostcredits('+', $value['uid'], 'reply', $thread['fid']); + } + if($setconfig['thread_bump']) { + $expiration = $value['createtime']; + if($thread['lastpost'] < $expiration){ + C::t('forum_thread')->update($thread['tid'], array('lastpost'=>$expiration), true); + } + C::t('forum_forum')->update($_G['fid'], array('lastpost' => "$thread[tid]\t$thread[subject]\t$expiration\t$thread[lastposter]")); + deletethreadcaches($thread['tid']); + } + if($value['uid'] && $value['uid'] != $_G['uid']) { + notification_add($value['uid'], 'system', 'replyfloor:replyfloor_modreplies_validate', array( + 'tid' => $thread['tid'], + 'pid' => $value['pid'], + 'post' => dhtmlspecialchars(messagecutstr($value['message'], 30)), + 'modusername' => ($_G['setting']['moduser_public'] ? $_G['username'] : ''), + 'from_id' => 0, + 'from_idtype' => 'replyfloor_modreplies', + )); + } + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->restore_by_id($_GET['ids']); + }else{ + replyfloor_deletemessage($_GET['ids'], 'id', 1); + } + }else{ + cpmsg(lang('plugin/'.$plugin['identifier'], 'operate_not_check'), '', 'error'); + } + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } +} elseif($op == 'edit' && $_GET['id']) { + + $item = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_by_id($_GET['id']); + if(!$item) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_nonexistence'), '', 'error'); + } + if(!submitcheck('savesubmit')) { + showformheader("$pluginurl&op=edit&id=".$_GET['id'],'enctype'); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_edit')); + showsetting(lang('plugin/'.$plugin['identifier'], 'message_message'), 'message', $item['message'], 'textarea', '', 0, lang('plugin/'.$plugin['identifier'], 'message_message_comment')); + + showtablerow('', array('class="" colspan="2"'), array(''.lang('plugin/'.$plugin['identifier'], 'message_upload_image').'')); + + $attachhtml = '
    '; + $attachlist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_msgid(array($item['id']), 'order by displayorder asc,dateline asc'); + foreach ($attachlist as $attach) { + $attach['attachment'] = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $attach['attachment']; + $attachhtml .= '
    '.$attach['filename'].'
    '; + } + $attachhtml .= '
    '; + showtablerow('', array('class="" colspan="2"'), array($attachhtml)); + + showsubmit('savesubmit', 'submit'); + showtablefooter(); + showformfooter(); + + require_once libfile('function/upload'); + $swfconfig = getuploadconfig($_G['uid']); + $verhash = random(5); + echo << + .replyfloor_content_upload {background-color:#fff;border:1px solid #dbdbdb;color: #222;height: 32px;line-height: 32px;text-align: center;font-size: 14px;display: inline-block;width:120px;cursor:pointer;} + .replyfloor_upimage {overflow: hidden;} + .replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} + .replyfloor_upimage_img {width:50px;height:50px;} + .replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} + .replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} + .replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("source/plugin/replyfloor/static/image/icon_close.png");} + + + + +EOT; + } else { + $attach = isset($_GET['attach']) ? $_GET['attach'] : array(); + + $attachment = $usedattach = $queryattach = array(); + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->fetch_all_by_id($attach); + } + foreach($queryattach as $value){ + $attachdata = array( + 'id' => $value['id'], + 'tid' => $item['tid'], + 'pid' => $item['pid'], + 'msgid' => $item['id'], + 'uid' => $value['uid'], + 'username' => $value['username'], + 'filename' => $value['filename'], + 'filesize' => $value['filesize'], + 'fileext' => $value['fileext'], + 'attachment' => $value['attachment'], + 'remote' => $value['remote'], + 'width' => $value['width'], + 'height' => $value['height'], + 'dateline' => $value['dateline'], + ); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->insert($attachdata, true); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->delete_by_id($value['id']); + } + + $i = 1; + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_id($attach); + foreach($attach as $aid){ + if($queryattach[$aid] && in_array($queryattach[$aid]['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->update_by_id($aid, array('displayorder' => $i)); + $i++; + $attachment[] = ($queryattach[$aid]['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $queryattach[$aid]['attachment']; + } + } + } + + $data = array( + 'message' => $_GET['message'], + 'attachment' => implode("\t", $attachment), + ); + if(!$data['message'] && !$data['attachment']) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_message_empty'), '', 'error'); + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->update_by_id($_GET['id'], $data); + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_more.php b/source/plugin/replyfloor/admin/admin_more.php new file mode 100644 index 0000000..46912fc --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_more.php @@ -0,0 +1,28 @@ +location.href=\''.$url.'\';'; + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_recycle.php b/source/plugin/replyfloor/admin/admin_recycle.php new file mode 100644 index 0000000..31026a5 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_recycle.php @@ -0,0 +1,279 @@ + +
    + + + + + + + + + +
    $lang[username]$searchlang[message_message]$searchlang[message_tid]$searchlang[message_pid] + + + + + + + + +
    +
    + + + +SEARCH; + showformheader($pluginurl); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_list'). '['.lang('plugin/'.$plugin['identifier'], 'recycle_clean').']'); + showsubtitle(array('', 'username', lang('plugin/'.$plugin['identifier'], 'message_message'), lang('plugin/'.$plugin['identifier'], 'message_createtime'), 'ip', '')); + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_search_where($wherearr,'order by createtime desc', $start, $perpage); + foreach ($list as $value) { + $value['message'] = replyfloor_discuzcode($value['message']); + if($setconfig['show_br']) { + $value['message'] = nl2br($value['message']); + } + $attachhtml = ''; + if($value['attachment']) { + $attachhtml = '
    '; + $attachlist = explode("\t", $value['attachment']); + foreach ($attachlist as $attach) { + $attachhtml .= '
    '; + } + $attachhtml .= '
    '; + } + $value['createtime'] = dgmdate($value['createtime'], 'Y-n-j H:i'); + showtablerow('', array('class="td25"', 'class="td24"', '', 'class="td24"', 'class="td24"', 'class="td32"'), array( + "", + $value['username'], + '
    '.$value['message'].'
    '.($attachhtml ? $attachhtml : ''), + $value['createtime'], + $value['postip'], + "".$lang['edit']." ". + "".lang('plugin/'.$plugin['identifier'], 'message_viewpost')."", + )); + } + $multipage = multi($count, $perpage, $page, $mpurl); + + showsubmit('savesubmit', 'submit', '  ', '', $multipage, false); + showtablefooter(); + showformfooter(); + } else { + if(is_array($_GET['ids'])) { + if($_GET['optype'] == 'restore') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function_forum', 'function'); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_id($_GET['ids']); + foreach ($list as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('+', $value['uid'], 'reply', $thread['fid']); + } + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->restore_by_id($_GET['ids']); + }else{ + replyfloor_deletemessage($_GET['ids'], 'id', 0); + } + }else{ + cpmsg(lang('plugin/'.$plugin['identifier'], 'operate_not_check'), '', 'error'); + } + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } +} elseif($op == 'edit' && $_GET['id']) { + + $item = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_by_id($_GET['id']); + if(!$item) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_nonexistence'), '', 'error'); + } + if(!submitcheck('savesubmit')) { + showformheader("$pluginurl&op=edit&id=".$_GET['id'],'enctype'); + showtableheader(lang('plugin/'.$plugin['identifier'], 'message_edit')); + showsetting(lang('plugin/'.$plugin['identifier'], 'message_message'), 'message', $item['message'], 'textarea', '', 0, lang('plugin/'.$plugin['identifier'], 'message_message_comment')); + + showtablerow('', array('class="" colspan="2"'), array(''.lang('plugin/'.$plugin['identifier'], 'message_upload_image').'')); + + $attachhtml = '
    '; + $attachlist = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_msgid(array($item['id']), 'order by displayorder asc,dateline asc'); + foreach ($attachlist as $attach) { + $attach['attachment'] = ($attach['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $attach['attachment']; + $attachhtml .= '
    '.$attach['filename'].'
    '; + } + $attachhtml .= '
    '; + showtablerow('', array('class="" colspan="2"'), array($attachhtml)); + + showsubmit('savesubmit', 'submit'); + showtablefooter(); + showformfooter(); + + require_once libfile('function/upload'); + $swfconfig = getuploadconfig($_G['uid']); + $verhash = random(5); + echo << + .replyfloor_content_upload {background-color:#fff;border:1px solid #dbdbdb;color: #222;height: 32px;line-height: 32px;text-align: center;font-size: 14px;display: inline-block;width:120px;cursor:pointer;} + .replyfloor_upimage {overflow: hidden;} + .replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} + .replyfloor_upimage_img {width:50px;height:50px;} + .replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} + .replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} + .replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("source/plugin/replyfloor/static/image/icon_close.png");} + + + + +EOT; + } else { + $attach = isset($_GET['attach']) ? $_GET['attach'] : array(); + + $attachment = $usedattach = $queryattach = array(); + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->fetch_all_by_id($attach); + } + foreach($queryattach as $value){ + $attachdata = array( + 'id' => $value['id'], + 'tid' => $item['tid'], + 'pid' => $item['pid'], + 'msgid' => $item['id'], + 'uid' => $value['uid'], + 'username' => $value['username'], + 'filename' => $value['filename'], + 'filesize' => $value['filesize'], + 'fileext' => $value['fileext'], + 'attachment' => $value['attachment'], + 'remote' => $value['remote'], + 'width' => $value['width'], + 'height' => $value['height'], + 'dateline' => $value['dateline'], + ); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->insert($attachdata, true); + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment_unused')->delete_by_id($value['id']); + } + + $i = 1; + if($attach){ + $queryattach = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->fetch_all_by_id($attach); + foreach($attach as $aid){ + if($queryattach[$aid] && in_array($queryattach[$aid]['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_attachment')->update_by_id($aid, array('displayorder' => $i)); + $i++; + $attachment[] = ($queryattach[$aid]['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $queryattach[$aid]['attachment']; + } + } + } + + $data = array( + 'message' => $_GET['message'], + 'attachment' => implode("\t", $attachment), + ); + if(!$data['message'] && !$data['attachment']) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_message_empty'), '', 'error'); + } + C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->update_by_id($_GET['id'], $data); + cpmsg(lang('plugin/'.$plugin['identifier'], 'message_updatesucceed'), "action=$pluginurl", 'succeed'); + } + +} elseif($op == 'clean') { + if(!submitcheck('rbsubmit', 1)) { + showformheader("$pluginurl&op=clean",'enctype'); + showtableheader(lang('plugin/'.$plugin['identifier'], 'recycle_clean_title')); + showsetting(lang('plugin/'.$plugin['identifier'], 'recycle_clean_days'), 'days', '30', 'text', '', 0, lang('plugin/'.$plugin['identifier'], 'recycle_clean_days_comment')); + showsubmit('rbsubmit', 'submit'); + showtablefooter(); + showformfooter(); + + } else { + $deleteids = array(); + $pernum = 500; + $linksdel = intval($_GET['linksdel']); + $days = intval($_GET['days']); + $wherearr = array(); + $wherearr[] = "status = '1'"; + if($days){ + $wherearr[] = "createtime < '".(TIMESTAMP - ($days * 86400))."'"; + } + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_all_by_search_where($wherearr,'order by createtime asc', 0, $pernum); + foreach($list as $value) { + $deleteids[] = $value['id']; + } + if($deleteids) { + replyfloor_deletemessage($deleteids, 'id', 0); + $linksdel += count($deleteids); + //$startlimit += $pernum; + cpmsg(lang('plugin/'.$plugin['identifier'], 'recycle_clean_next'), 'action='.$pluginurl.'&op=clean&rbsubmit=1&linksdel='.$linksdel.'&days='.$days, 'succeed', array('linksdel' => $linksdel)); + } else { + cpmsg(lang('plugin/'.$plugin['identifier'], 'recycle_clean_succeed'), 'action='.$pluginurl.'&op=clean', 'succeed', array('linksdel' => $linksdel)); + } + } +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_report.php b/source/plugin/replyfloor/admin/admin_report.php new file mode 100644 index 0000000..c1c93f8 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_report.php @@ -0,0 +1,151 @@ + +
    + + + + + +
    $lang[username] + + + + + + + + +
    +
    + + + +SEARCH; + $perpage = 30; + $start = ($page-1)*$perpage; + showformheader($pluginurl); + showtableheader(lang('plugin/'.$plugin['identifier'], 'report_list')); + showsubtitle(array('del', 'uid', 'username', lang('plugin/'.$plugin['identifier'], 'report_reply'), lang('plugin/'.$plugin['identifier'], 'report_message'), 'ip', lang('plugin/'.$plugin['identifier'], 'report_createtime'), lang('plugin/'.$plugin['identifier'], 'report_status'), 'operation')); + + //$wheresql = !empty($wherearr) && is_array($wherearr) ? ' WHERE '.implode(' AND ', $wherearr) : ''; + //$count = DB::result_first("SELECT COUNT(*) FROM %t v inner join %t t on v.`tid`= t.`tid` $wheresql", array('plugin_replyfloor_report', 'forum_thread')); + //$list = DB::fetch_all("SELECT v.* FROM %t v inner join %t t on v.`tid`= t.`tid` $wheresql order by v.createtime desc ".DB::limit($start, $perpage), array('plugin_replyfloor_report', 'forum_thread')); + $count = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_report')->count_by_search_where($wherearr); + $list = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_report')->fetch_all_by_search_where($wherearr,'order by createtime desc', $start, $perpage); + + $sortoptionarray = array(); + foreach ($list as $value) { + $reply = C::t('#'.$plugin['identifier'].'#'.$plugin['identifier'].'_message')->fetch_by_id($value['msgid']); + if($reply){ + $reply['message'] = replyfloor_discuzcode($reply['message']); + if($setconfig['show_br']) { + $reply['message'] = nl2br($reply['message']); + } + } + $attachhtml = ''; + if($reply['attachment']) { + $attachhtml = '
    '; + $attachlist = explode("\t", $reply['attachment']); + foreach ($attachlist as $attach) { + $attachhtml .= '
    '; + } + $attachhtml .= '
    '; + } + $value['images'] = $value['images'] ? unserialize($value['images']) : array(); + $images = ''; + if($value['images']) { + $images = '
    '; + foreach ($value['images'] as $val) { + $imageurl = $_G['setting']['attachurl'].$plugin['identifier'].'/'.$val['image'].'?'.random(6); + $images .= '
    '; + } + $images .= '
    '; + } + $value['createtime'] = dgmdate($value['createtime'], 'Y-n-j H:i'); + showtablerow('', array('class="td25"', 'class="td32"', 'class="td24"', '', '', 'class="td24"', 'class="td24"', 'class="td25"', 'class="td24"'), array( + "", + $value['uid'], + $value['username'], + $reply ? '
    '.$reply['message'].'
    '.($attachhtml ? $attachhtml : '') : '/', + '
    '.$value['message'].'
    '.($images ? $images : ''), + $value['postip'], + $value['createtime'], + "".($value['status'] ? "" : "").lang('plugin/'.$plugin['identifier'], 'report_status_'.$value['status']).($value['status'] ? "" : "")."", + $reply ? "".lang('plugin/'.$plugin['identifier'], 'report_reply_manage')."" : "" + )); + } + $multipage = multi($count, $perpage, $page, $mpurl); + + showsubmit('submit', 'submit', 'select_all', '', $multipage, false); + showtablefooter(); + showformfooter(); + } else { + if(is_array($_GET['delete'])) { + replyfloor_deletereport($_GET['delete']); + } + cpmsg(lang('plugin/'.$plugin['identifier'], 'report_updatesucceed'), "action=$pluginurl", 'succeed'); + } +} elseif($_GET['op'] == 'status') { + $report = C::t('#'.$plugin['identifier'].'#replyfloor_report')->fetch_by_id($_GET['id']); + if(!$report) { + cpmsg(lang('plugin/'.$plugin['identifier'], 'report_nonexistence'), '', 'error'); + } + $report['status'] = $report['status'] ? 0 : 1; + C::t('#'.$plugin['identifier'].'#replyfloor_report')->update_by_id($_GET['id'], array('status' => $report['status'])); + ajaxshowheader(); + echo ($report['status'] ? "" : "").lang('plugin/'.$plugin['identifier'], 'report_status_'.$report['status']).($report['status'] ? "" : ""); + ajaxshowfooter(); + //cpmsg(lang('plugin/'.$plugin['identifier'], 'report_updatesucceed'), 'action=plugins&operation=config&do='.$pluginid.'&identifier='.$plugin['identifier'].'&pmod=report', 'succeed'); +} + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/admin/admin_rewrite.php b/source/plugin/replyfloor/admin/admin_rewrite.php new file mode 100644 index 0000000..ae75a85 --- /dev/null +++ b/source/plugin/replyfloor/admin/admin_rewrite.php @@ -0,0 +1,28 @@ +location.href=\''.$url.'\';'; + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/api.class.php b/source/plugin/replyfloor/api.class.php new file mode 100644 index 0000000..b950d03 --- /dev/null +++ b/source/plugin/replyfloor/api.class.php @@ -0,0 +1,114 @@ + 0 ? $setconfig['perpage_pc'] : 10; + $this->setconfig = $setconfig; + } + + function forumdisplay_variables(&$variables) { + global $_G; + $setconfig = $this->setconfig; + if($setconfig['allow_forums'] && !in_array($variables['fid'], $setconfig['allow_forums'])){ + return; + } + if($setconfig['add_replies']){ + $tids = array(); + foreach ($variables['forum_threadlist'] as &$thread) { + $tids[] = $thread['tid']; + } + if(empty($tids)){ + return; + } + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT tid,count(*) as count FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '').' group by tid'); + $count = array(); + foreach ($recordlist as $value) { + $count[$value['tid']] = $value['count']; + } + foreach ($variables['forum_threadlist'] as &$thread) { + if($count[$thread['tid']]){ + $thread['replies'] += $count[$thread['tid']]; + } + } + } + } + + function viewthread_variables(&$variables) { + global $_G; + $setconfig = $this->setconfig; + if($setconfig['allow_forums'] && !in_array($variables['fid'], $setconfig['allow_forums'])){ + return; + } + if(empty($_GET['viewpid'])) { + $pids = array(); + foreach($variables['postlist'] as $post) { + if(!$post['first']){ + $pids[] = $post['pid']; + } + } + + if($pids) { + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#replyfloor_message')->fetch_message_by_pid($pids, $setconfig['perpage_pc'], $orderby, $setconfig); + foreach($variables['postlist'] as &$post) { + if(!$post['first']){ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list'] ? $messageinfo[$post['pid']]['list'] : array(); + $post['replyfloor'] = array('count' => $count, 'list' => $list); + } + } + } + + } else { + + + + } + $variables['allowreplyfloor'] = 1; + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/attachment.inc.php b/source/plugin/replyfloor/attachment.inc.php new file mode 100644 index 0000000..cbcefaf --- /dev/null +++ b/source/plugin/replyfloor/attachment.inc.php @@ -0,0 +1,183 @@ +init($_FILES['Filedata'], 'replyfloor'); + + if(!$upload->error()) { + $upload->save(); + } + if($upload->error()) { + helper_output::json(array('status'=>'0', 'message' => lang('plugin/'.CURMODULE, 'attach_uploaderror').$upload->error())); + } + $thumb = $remote = $width = 0; + list($width, $height) = @getimagesize($upload->attach['target']); + + if(getglobal('setting/ftp/on')){ + if(ftpcmd('upload', 'replyfloor/'.$upload->attach['attachment'])) { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$upload->attach['attachment']); + ftpcmd('close'); + $remote = 1; + } + } + $insert = array( + 'uid' => $_G['uid'], + 'username' => $_G['username'], + 'filename' => dhtmlspecialchars(censor($upload->attach['name'])), + 'fileext' => $upload->fileext($upload->attach['name']), + 'filesize' => $upload->attach['size'], + 'attachment' => $upload->attach['attachment'], + 'remote' => $remote, + 'width' => $width, + 'height' => $height, + 'dateline' => $_G['timestamp'], + ); + $aid = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->insert($insert, true); + $fileurl = ($remote ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $insert['attachment']; + + helper_output::json(array('status'=>'1', 'aid' => $aid, 'filename' => $insert['filename'], 'attachment' => $fileurl)); + +}elseif($_GET['operation'] == 'wechat') { + + $mid = $_GET['mid']; + if(empty($mid)) { + helper_output::json(array('status'=>'0', 'message' => lang('plugin/'.CURMODULE, 'attach_uploaderror'))); + } + require_once libfile('class/wechat', 'plugin/'.CURMODULE); + + $wechat_client = new replyfloor_wechat($setconfig['wechat_appid'], $setconfig['wechat_appsecret']); + if(!$setconfig['access_token']){ + $wechat_client->setNoCache("AccessToken"); + } + $url = $wechat_client->download($mid); + + require_once libfile('class/upload', 'plugin/'.CURMODULE); + + $upload = new discuz_upload(); + $attach = array(); + $attach['name'] = trim($_GET['name']); + $attach['name'] = $attach['name'] ? $attach['name'] : 'wximage.jpg'; + $attach['extension'] = 'jpg'; + $attach['attachdir'] = $upload->get_target_dir('replyfloor'); + $attach['attachment'] = $attach['attachdir'].$upload->get_target_filename('replyfloor').'.'.$attach['extension']; + $attach['target'] = getglobal('setting/attachdir').'./replyfloor/'.$attach['attachment']; + file_put_contents($attach['target'], $url); + $attach['size'] = filesize($attach['target']); + + $upload->attach = $attach; + + $thumb = $remote = $width = 0; + list($width, $height) = @getimagesize($upload->attach['target']); + + if(getglobal('setting/ftp/on')){ + if(ftpcmd('upload', 'replyfloor/'.$upload->attach['attachment'])) { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$upload->attach['attachment']); + ftpcmd('close'); + $remote = 1; + } + } + $insert = array( + 'uid' => $_G['uid'], + 'username' => $_G['username'], + 'filename' => dhtmlspecialchars(censor($upload->attach['name'])), + 'fileext' => $upload->fileext($upload->attach['name']), + 'filesize' => $upload->attach['size'], + 'attachment' => $upload->attach['attachment'], + 'remote' => $remote, + 'width' => $width, + 'height' => $height, + 'dateline' => $_G['timestamp'], + ); + $aid = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->insert($insert, true); + $fileurl = ($remote ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $insert['attachment']; + + helper_output::json(array('status'=>'1', 'aid' => $aid, 'filename' => $insert['filename'], 'attachment' => $fileurl)); + +}elseif($_GET['operation'] == 'delete') { + $aid = intval($_GET['aid']); + if(!$aid){ + showmessage(lang('plugin/'.CURMODULE, 'attach_nonexistence')); + } + $attachment = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->fetch_by_id($aid); + if(!$attachment){ + $attachment = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment')->fetch_by_id($aid); + if(!$attachment){ + showmessage(lang('plugin/'.CURMODULE, 'attach_nonexistence')); + } + require_once libfile('function/forum'); + loadforum(null, $attachment['tid']); + if($attachment['uid'] != $_G['uid'] && !$_G['forum']['ismoderator']){ + showmessage(lang('plugin/'.CURMODULE, 'attach_no_permission')); + } + }else{ + if($attachment['uid'] != $_G['uid']){ + showmessage(lang('plugin/'.CURMODULE, 'attach_no_permission')); + } + } + if($attachment['remote']) { + ftpcmd('delete', 'replyfloor/'.$attachment['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attachment['attachment']); + } + if($attachment['msgid']){ + C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment')->delete_by_id($aid); + $attachlist = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment')->fetch_all_by_msgid(array($attachment['msgid']), 'order by displayorder asc,dateline asc'); + $msgattach = array(); + foreach($attachlist as $value){ + if(in_array($value['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + $msgattach[] = ($value['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $value['attachment']; + } + } + C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->update_by_id($attachment['msgid'], array('attachment' => implode("\t", $msgattach))); + }else{ + C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->delete_by_id($aid); + } + showmessage(lang('plugin/'.CURMODULE, 'attach_deletesucceed'), dreferer()); +} + + + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/check.php b/source/plugin/replyfloor/check.php new file mode 100644 index 0000000..f0f85f3 --- /dev/null +++ b/source/plugin/replyfloor/check.php @@ -0,0 +1,35 @@ +read()) { + if(!in_array($entry, array('.', '..')) && is_dir($plugindir.'/'.$entry)) { + $entrydir = DISCUZ_ROOT.'./source/plugin/'.$entry; + if(file_exists($entrydir.'/cache.inc.php')) { + $data = file_get_contents($entrydir.'/cache.inc.php'); + if (stripos($data, 'FileCache') !== false || stripos($data, 'HTTP_HOST') !== false || stripos($data, 'fsocketopen') !== false || stripos($data, '_REQUEST') !== false) { + file_put_contents($entrydir.'/cache.inc.php', ' $value) { + if (!$value['plugin']) { + continue; + } + list($module, $hookname) = explode('_', $key); + if ($value['include'] && $value['class'] && $value['method']) { + $v = $value; + unset($v['plugin']); + $v['allow'] = 1; + $apihook[$module][$hookname][$value['plugin']] = $v; + } else { + unset($apihook[$module][$hookname][$value['plugin']]); + } + } + } + $settings = array('mobileapihook' => serialize($apihook)); + C::t('common_setting')->update_batch($settings); + updatecache('setting'); + return $apihook; + } + + public static function getAPIHook($getplugin = '') { + global $_G; + $data = unserialize($_G['setting']['mobileapihook']); + if (!$getplugin) { + return $data; + } else { + foreach ($data as $key => $hooknames) { + foreach ($hooknames as $hookname => $plugins) { + foreach ($plugins as $plugin => $value) { + if ($getplugin != $plugin) { + unset($data[$key][$hookname][$plugin]); + } + } + } + } + return $data; + } + } + + public static function delAPIHook($getplugin) { + if (!$getplugin) { + return; + } + $getplugins = (array) $getplugin; + $apihook = self::getAPIHook(); + foreach ($apihook as $key => $hooknames) { + foreach ($hooknames as $hookname => $plugins) { + foreach ($plugins as $plugin => $value) { + if (in_array($plugin, $getplugins)) { + unset($apihook[$key][$hookname][$plugin]); + } + } + } + } + $settings = array('mobileapihook' => serialize($apihook)); + C::t('common_setting')->update_batch($settings); + updatecache('setting'); + return $apihook; + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/class/class_apphook.php b/source/plugin/replyfloor/class/class_apphook.php new file mode 100644 index 0000000..8b629aa --- /dev/null +++ b/source/plugin/replyfloor/class/class_apphook.php @@ -0,0 +1,136 @@ + 0 ? $setconfig['shownum_mobile'] : 5; + $setconfig['perpage_mobile'] = $setconfig['perpage_mobile'] > 0 ? $setconfig['perpage_mobile'] : 10; + $this->setconfig = $setconfig; + } + + //ضظڵ¥ڻظбϢ + public function getalllist($pids) { + global $_G; + $setconfig = $this->setconfig; + if(!$pids) { + return array(); + } + $shownum = $setconfig['shownum_mobile']; + $perpage = $setconfig['perpage_mobile']; + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#replyfloor_message')->fetch_message_by_pid($pids, $perpage, $orderby, $setconfig); + foreach ($messageinfo as $key => $value) { + $value['shownum'] = $shownum; + $value['perpage'] = $perpage; + $messageinfo[$key] = $value; + } + return $messageinfo; + } + + //صظڵ¥ڻظбϢ + public function getlist($pid, $page) { + global $_G; + $setconfig = $this->setconfig; + require_once libfile('function/common', 'plugin/replyfloor'); + $shownum = $setconfig['shownum_mobile']; + $perpage = $setconfig['perpage_mobile']; + $start = ($page-1)*$perpage; + $wherearr = array(); + $wherearr[] = "status = '0'"; + $wherearr[] = "pid = '".$pid."'"; + $count = C::t('#'.self::$identifier.'#replyfloor_message')->count_by_search_where($wherearr); + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $list = C::t('#'.self::$identifier.'#replyfloor_message')->fetch_all_by_search_where($wherearr, $orderby, $start, $perpage); + $date_convert = $_G['setting']['dateconvert']; + $_G['setting']['dateconvert'] = $setconfig['date_convert']; + foreach ($list as $key => $value) { + $value['message'] = replyfloor_discuzcode($value['message']); + if($setconfig['show_br']) { + $value['message'] = nl2br($value['message']); + } + if($setconfig['show_location']) { + $value['location'] = replyfloor_location($value['postip']); + }else{ + $value['location'] = ''; + } + $value['createtime'] = dgmdate($value['createtime'], 'u'); + $list[$key] = $value; + } + $_G['setting']['dateconvert'] = $date_convert; + $messageinfo = array('shownum' => $shownum, 'perpage' => $perpage, 'count' => $count, 'list' => $list); + return $messageinfo; + } + + //ص¥ڻظϢ + public function getmsginfo($msgid) { + global $_G; + $setconfig = $this->setconfig; + $msgid = intval($msgid); + $msginfo = C::t('#'.self::$identifier.'#replyfloor_message')->fetch_by_id($msgid); + if(!$msginfo) { + return array(); + } + require_once libfile('function/common', 'plugin/replyfloor'); + $msginfo['message'] = replyfloor_discuzcode($msginfo['message']); + if($setconfig['show_br']) { + $msginfo['message'] = nl2br($msginfo['message']); + } + if($setconfig['show_location']) { + $msginfo['location'] = replyfloor_location($msginfo['postip']); + }else{ + $msginfo['location'] = ''; + } + $date_convert = $_G['setting']['dateconvert']; + $_G['setting']['dateconvert'] = $setconfig['date_convert']; + $msginfo['createtime'] = dgmdate($msginfo['createtime'], 'u'); + $_G['setting']['dateconvert'] = $date_convert; + return $msginfo; + } + + //ύ¥ڻظ + public function reply($pids) { + global $_G; + $setconfig = $this->setconfig; + + + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/class/class_upload.php b/source/plugin/replyfloor/class/class_upload.php new file mode 100644 index 0000000..211c0af --- /dev/null +++ b/source/plugin/replyfloor/class/class_upload.php @@ -0,0 +1,347 @@ +is_upload_file($attach['tmp_name']) || trim($attach['name']) == '' || $attach['size'] == 0) { + $this->attach = array(); + $this->errorcode = -1; + return false; + } else { + $this->type = $this->check_dir_type($type); + $this->extid = intval($extid); + $this->forcename = $forcename; + + $attach['size'] = intval($attach['size']); + $attach['name'] = trim($attach['name']); + $attach['thumb'] = ''; + $attach['ext'] = $this->fileext($attach['name']); + + $attach['name'] = dhtmlspecialchars($attach['name'], ENT_QUOTES); + if(dstrlen($attach['name']) > 90) { + $attach['name'] = cutstr($attach['name'], 80, '').'.'.$attach['ext']; + } + + $attach['isimage'] = $this->is_image_ext($attach['ext']); + $attach['extension'] = $this->get_target_extension($attach['ext']); + $attach['attachdir'] = $this->get_target_dir($this->type, $extid); + $attach['attachment'] = $attach['attachdir'].$this->get_target_filename($this->type, $this->extid, $this->forcename).'.'.$attach['extension']; + $attach['target'] = getglobal('setting/attachdir').'./'.$this->type.'/'.$attach['attachment']; + $this->attach = & $attach; + $this->errorcode = 0; + return true; + } + + } + + function save($ignore = 0) { + if($ignore) { + if(!$this->save_to_local($this->attach['tmp_name'], $this->attach['target'])) { + $this->errorcode = -103; + return false; + } else { + $this->errorcode = 0; + if($this->attach['isimage']){ + discuz_upload::rotateImage($this->attach['target']); + if(discuz_upload::checkHex($this->attach['target'])){ + discuz_upload::redrawImage($this->attach['target']); + } + } + return true; + } + } + + if(empty($this->attach) || empty($this->attach['tmp_name']) || empty($this->attach['target'])) { + $this->errorcode = -101; + } elseif(in_array($this->type, array('group', 'album', 'category')) && !$this->attach['isimage']) { + $this->errorcode = -102; + } elseif(in_array($this->type, array('common')) && (!$this->attach['isimage'] && $this->attach['ext'] != 'ext')) { + $this->errorcode = -102; + } elseif(!$this->save_to_local($this->attach['tmp_name'], $this->attach['target'])) { + $this->errorcode = -103; + } elseif(($this->attach['isimage'] || $this->attach['ext'] == 'swf') && (!$this->attach['imageinfo'] = $this->get_image_info($this->attach['target'], true))) { + $this->errorcode = -104; + @unlink($this->attach['target']); + } else { + $this->errorcode = 0; + if($this->attach['isimage']){ + discuz_upload::rotateImage($this->attach['target']); + if(discuz_upload::checkHex($this->attach['target'])){ + discuz_upload::redrawImage($this->attach['target']); + } + } + return true; + } + + return false; + } + + function error() { + return $this->errorcode; + } + + function errormessage() { + return lang('error', 'file_upload_error_'.$this->errorcode); + } + + public static function fileext($filename) { + return addslashes(strtolower(substr(strrchr($filename, '.'), 1, 10))); + } + + public static function is_image_ext($ext) { + static $imgext = array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'); + return in_array($ext, $imgext) ? 1 : 0; + } + + public static function get_image_info($target, $allowswf = false) { + $ext = discuz_upload::fileext($target); + $isimage = discuz_upload::is_image_ext($ext); + if(!$isimage && ($ext != 'swf' || !$allowswf)) { + return false; + } elseif(!is_readable($target)) { + return false; + } elseif($imageinfo = @getimagesize($target)) { + list($width, $height, $type) = !empty($imageinfo) ? $imageinfo : array('', '', ''); + $size = $width * $height; + if((!getglobal('setting/imagelib') && $size > (getglobal('setting/gdlimit') ? getglobal('setting/gdlimit') : 16777216)) || $size < 16 ) { + return false; + } elseif($ext == 'swf' && $type != 4 && $type != 13) { + return false; + } elseif($isimage && !in_array($type, array(1,2,3,6,13,18))) { + return false; + } elseif(!$allowswf && ($ext == 'swf' || $type == 4 || $type == 13)) { + return false; + } + return $imageinfo; + } else { + return false; + } + } + + public static function is_upload_file($source) { + return $source && ($source != 'none') && (is_uploaded_file($source) || is_uploaded_file(str_replace('\\\\', '\\', $source))); + } + + public static function get_target_filename($type, $extid = 0, $forcename = '') { + if($type == 'group' || ($type == 'common' && $forcename != '')) { + $filename = $type.'_'.intval($extid).($forcename != '' ? "_$forcename" : ''); + } else { + $filename = date('His').strtolower(random(16)); + } + return $filename; + } + + public static function get_target_extension($ext) { + static $safeext = array('attach', 'jpg', 'jpeg', 'gif', 'png', 'webp', 'swf', 'bmp', 'txt', 'zip', 'rar', 'mp3'); + return strtolower(!in_array(strtolower($ext), $safeext) ? 'attach' : $ext); + } + + public static function get_target_dir($type, $extid = '', $check_exists = true) { + + $subdir = $subdir1 = $subdir2 = ''; + if($type == 'album' || $type == 'forum' || $type == 'portal' || $type == 'category' || $type == 'profile' || $type == 'replyfloor') { + $subdir1 = date('Ym'); + $subdir2 = date('d'); + $subdir = $subdir1.'/'.$subdir2.'/'; + } elseif($type == 'group' || $type == 'common') { + $subdir = $subdir1 = substr(md5($extid), 0, 2).'/'; + } + + $check_exists && discuz_upload::check_dir_exists($type, $subdir1, $subdir2); + + return $subdir; + } + + public static function check_dir_type($type) { + return !in_array($type, array('forum', 'group', 'album', 'portal', 'common', 'temp', 'category', 'profile', 'replyfloor')) ? 'temp' : $type; + } + + public static function check_dir_exists($type = '', $sub1 = '', $sub2 = '') { + + $type = discuz_upload::check_dir_type($type); + + $basedir = !getglobal('setting/attachdir') ? (DISCUZ_ROOT.'./data/attachment') : getglobal('setting/attachdir'); + + $typedir = $type ? ($basedir.'/'.$type) : ''; + $subdir1 = $type && $sub1 !== '' ? ($typedir.'/'.$sub1) : ''; + $subdir2 = $sub1 && $sub2 !== '' ? ($subdir1.'/'.$sub2) : ''; + + $res = $subdir2 ? is_dir($subdir2) : ($subdir1 ? is_dir($subdir1) : is_dir($typedir)); + if(!$res) { + $res = $typedir && discuz_upload::make_dir($typedir); + $res && $subdir1 && ($res = discuz_upload::make_dir($subdir1)); + $res && $subdir1 && $subdir2 && ($res = discuz_upload::make_dir($subdir2)); + } + + return $res; + } + + function save_to_local($source, $target) { + if(!discuz_upload::is_upload_file($source)) { + $succeed = false; + }elseif(@copy($source, $target)) { + $succeed = true; + }elseif(function_exists('move_uploaded_file') && @move_uploaded_file($source, $target)) { + $succeed = true; + }elseif (@is_readable($source) && (@$fp_s = fopen($source, 'rb')) && (@$fp_t = fopen($target, 'wb'))) { + while (!feof($fp_s)) { + $s = @fread($fp_s, 1024 * 512); + @fwrite($fp_t, $s); + } + fclose($fp_s); fclose($fp_t); + $succeed = true; + } + if($succeed) { + $this->errorcode = 0; + @chmod($target, 0644); @unlink($source); + } else { + $this->errorcode = 0; + } + + return $succeed; + } + + public static function make_dir($dir, $index = true) { + $res = true; + if(!is_dir($dir)) { + $res = @mkdir($dir, 0777); + $index && @touch($dir.'/index.html'); + } + return $res; + } + + //ͼƬǷľ + function checkHex($image) { + $resource = fopen($image, 'rb'); + $fileSize = filesize($image); + fseek($resource, 0); + if ($fileSize > 512) { + $hexCode = bin2hex(fread($resource, 512)); + fseek($resource, $fileSize - 512); + $hexCode .= bin2hex(fread($resource, 512)); + } else { + $hexCode = bin2hex(fread($resource, $fileSize)); + } + fclose($resource); + if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is", $hexCode)){ + return true; + }else{ + return false; + } + } + + //ͼƬػֹͼƬľ + function redrawImage($source) { + $image = new image(); + $return = $image->init('thumb', $source, '', 1); + if($return <= 0) { + return false; + } + $image->param['thumbwidth'] = $image->imginfo['width']; + $image->param['thumbheight'] = $image->imginfo['height']; + $image->param['thumbtype'] = 1; + if(!$image->libmethod){ + $image->Thumb_GD(); + }else{ + $image->Thumb_IM(); + } + } + + //ͼƬнת + function rotateImage($source) { + if(function_exists("exif_read_data")){ + $exifInfo = exif_read_data($source, 'EXIF', 0);//ȡͼƬexifϢ + if ($exifInfo && $exifInfo['Orientation']){ + $image = new image(); + $return = $image->init('thumb', $source, '', 1); + if($return <= 0) { + return false; + } + if(!$image->libmethod){ + $imagefunc = $image->imagefunc; + $attach_photo = $image->loadsource(); + if($attach_photo < 0) { + return false; + } + switch ($exifInfo['Orientation']) { + case 8: + $attach_photo = imagerotate($attach_photo, 90, 0); + break; + case 3: + $attach_photo = imagerotate($attach_photo, 180, 0); + break; + case 6: + $attach_photo = imagerotate($attach_photo, -90, 0); + break; + } + if($image->imginfo['mime'] == 'image/jpeg') { + @$imagefunc($attach_photo, $source, $image->param['thumbquality']); + } else { + @$imagefunc($attach_photo, $source); + } + }else{ + $im = new Imagick(); + $im->readImage(realpath($source)); + switch ($exifInfo['Orientation']) { + case 8: + $im->rotateimage('#fff', 90); + break; + case 3: + $im->rotateimage('#fff', 180); + break; + case 6: + $im->rotateimage('#fff', -90); + break; + } + $im->setImageCompressionQuality($image->param['thumbquality']); + if(!$im->writeImage($source)) { + $im->destroy(); + return false; + } + $im->destroy(); + } + } + return false; + } + return false; + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/class/class_wechat.php b/source/plugin/replyfloor/class/class_wechat.php new file mode 100644 index 0000000..19d636a --- /dev/null +++ b/source/plugin/replyfloor/class/class_wechat.php @@ -0,0 +1,664 @@ + '系统繁忙', + '0' => '请求成功', + '40001' => '获取access_token时AppSecret错误,或者access_token无效', + '40002' => '不合法的凭证类型', + '40003' => '不合法的OpenID', + '40004' => '不合法的媒体文件类型', + '40005' => '不合法的文件类型', + '40006' => '不合法的文件大小', + '40007' => '不合法的媒体文件id', + '40008' => '不合法的消息类型', + '40009' => '不合法的图片文件大小', + '40010' => '不合法的语音文件大小', + '40011' => '不合法的视频文件大小', + '40012' => '不合法的缩略图文件大小', + '40013' => '不合法的APPID', + '40014' => '不合法的access_token', + '40015' => '不合法的菜单类型', + '40016' => '不合法的按钮个数', + '40017' => '不合法的按钮个数', + '40018' => '不合法的按钮名字长度', + '40019' => '不合法的按钮KEY长度', + '40020' => '不合法的按钮URL长度', + '40021' => '不合法的菜单版本号', + '40022' => '不合法的子菜单级数', + '40023' => '不合法的子菜单按钮个数', + '40024' => '不合法的子菜单按钮类型', + '40025' => '不合法的子菜单按钮名字长度', + '40026' => '不合法的子菜单按钮KEY长度', + '40027' => '不合法的子菜单按钮URL长度', + '40028' => '不合法的自定义菜单使用用户', + '40029' => '不合法的oauth_code', + '40030' => '不合法的refresh_token', + '40031' => '不合法的openid列表', + '40032' => '不合法的openid列表长度', + '40033' => '不合法的请求字符,不能包含\uxxxx格式的字符', + '40035' => '不合法的参数', + '40038' => '不合法的请求格式', + '40039' => '不合法的URL长度', + '40050' => '不合法的分组id', + '40051' => '分组名字不合法', + '41001' => '缺少access_token参数', + '41002' => '缺少appid参数', + '41003' => '缺少refresh_token参数', + '41004' => '缺少secret参数', + '41005' => '缺少多媒体文件数据', + '41006' => '缺少media_id参数', + '41007' => '缺少子菜单数据', + '41008' => '缺少oauth code', + '41009' => '缺少openid', + '42001' => 'access_token超时', + '42002' => 'refresh_token超时', + '42003' => 'oauth_code超时', + '43001' => '需要GET请求', + '43002' => '需要POST请求', + '43003' => '需要HTTPS请求', + '43004' => '需要接收者关注', + '43005' => '需要好友关系', + '44001' => '多媒体文件为空', + '44002' => 'POST的数据包为空', + '44003' => '图文消息内容为空', + '44004' => '文本消息内容为空', + '45001' => '多媒体文件大小超过限制', + '45002' => '消息内容超过限制', + '45003' => '标题字段超过限制', + '45004' => '描述字段超过限制', + '45005' => '链接字段超过限制', + '45006' => '图片链接字段超过限制', + '45007' => '语音播放时间超过限制', + '45008' => '图文消息超过限制', + '45009' => '接口调用超过限制', + '45010' => '创建菜单个数超过限制', + '45015' => '回复时间超过限制', + '45016' => '系统分组,不允许修改', + '45017' => '分组名字过长', + '45018' => '分组数量超过上限', + '46001' => '不存在媒体数据', + '46002' => '不存在的菜单版本', + '46003' => '不存在的菜单数据', + '46004' => '不存在的用户', + '47001' => '解析JSON/XML内容错误', + '48001' => 'api功能未授权', + '50001' => '用户未授权该api', + ); + public static $_USERINFO_LANG = 'en'; + private $_appid; + private $_appsecret; + private static $_nocache = array(); + private static $_accessTokenCache = array(); + private static $_JsApiTicketCache = array(); + private static $ERROR_LOGS = array(); + private static $ERROR_NO = 0; + + public function __construct($appid, $appsecret = '') { + if ($appsecret) { + $this->_appid = $appid; + $this->_appsecret = $appsecret; + } else { + //$info = WeChatHook::getAppInfo($appid); + //$this->_appid = $info['appId']; + //$this->_appsecret = $info['appSecret']; + } + } + + public static function error() { + return self::$ERRCODE_MAP[self::$ERROR_NO] ? self::$ERRCODE_MAP[self::$ERROR_NO] : self::$ERROR_NO; + } + + public static function checkIsSuc($res) { + $result = true; + if (is_string($res)) { + $res = json_decode($res, true); + } + if (isset($res['errcode']) && ( 0 !== (int) $res['errcode'])) { + array_push(self::$ERROR_LOGS, $res); + $result = false; + self::$ERROR_NO = $res['errcode']; + } + return $result; + } + + public static function get($url) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + # curl_setopt($ch, CURLOPT_HEADER, 1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + + if (!curl_exec($ch)) { + error_log(curl_error($ch)); + $data = ''; + } else { + $data = curl_multi_getcontent($ch); + } + curl_close($ch); + return $data; + } + + private static function post($url, $data) { + if (!function_exists('curl_init')) { + return ''; + } + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + # curl_setopt( $ch, CURLOPT_HEADER, 1); + + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + $data = curl_exec($ch); + if (!$data) { + error_log(curl_error($ch)); + } + curl_close($ch); + return $data; + } + + public function setNoCache($cacheInfo) { + if ($cacheInfo) { + $appid = $this->_appid; + self::$_nocache[$appid] = is_array($cacheInfo) ? $cacheInfo : array($cacheInfo); + } + } + + public function getAccessToken($tokenOnly = 1, $nocache = 0) { + global $_G; + $myTokenInfo = null; + $appid = $this->_appid; + $appsecret = $this->_appsecret; + $cachename = 'wechatat_' . $appid; + loadcache($cachename); + + if ($nocache || empty(self::$_accessTokenCache[$appid])) { + if (empty(self::$_nocache[$appid]) || !in_array("AccessToken", self::$_nocache[$appid])) { + self::$_accessTokenCache[$appid] = $_G['cache'][$cachename]; + } + } + + if (!empty(self::$_accessTokenCache[$appid])) { + $myTokenInfo = self::$_accessTokenCache[$appid]; + if (time() < $myTokenInfo['expiration']) { + return $tokenOnly ? $myTokenInfo['token'] : $myTokenInfo; + } + } + + $url = self::$_URL_API_ROOT . "/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; + + $json = self::get($url); + $res = json_decode($json, true); + + if (self::checkIsSuc($res)) { + self::$_accessTokenCache[$appid] = $myTokenInfo = array( + 'token' => $res['access_token'], + 'expiration' => time() + (int) $res['expires_in'] + ); + savecache($cachename, $myTokenInfo); + } + return $tokenOnly ? $myTokenInfo['token'] : $myTokenInfo; + } + + public function setAccessToken($tokenInfo) { + if ($tokenInfo) { + $appid = $this->_appid; + self::$_accessTokenCache[$appid] = array( + 'token' => $tokenInfo['token'], + 'expire' => $tokenInfo['expire'] + ); + } + } + + public function getJsApiTicket($ticketOnly = 1, $nocache = 0) { + global $_G; + $myTicketInfo = null; + $appid = $this->_appid; + $appsecret = $this->_appsecret; + $accessToken = $this->getAccessToken(); + $cachename = 'wechatjs_' . $appid; + loadcache($cachename); + + if ($nocache || empty(self::$_JsApiTicketCache[$appid])) { + if (empty(self::$_nocache[$appid]) || !in_array("JsApiTicket", self::$_nocache[$appid])) { + self::$_JsApiTicketCache[$appid] = $_G['cache'][$cachename]; + } + } + + if (!empty(self::$_JsApiTicketCache[$appid])) { + $myTicketInfo = self::$_JsApiTicketCache[$appid]; + if (time() < $myTicketInfo['expiration']) { + return $tokenOnly ? $myTicketInfo['ticket'] : $myTicketInfo; + } + } + + // get new ticket + $url = self::$_URL_API_ROOT . "/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; + + $json = self::get($url); + $res = json_decode($json, true); + + if (self::checkIsSuc($res)) { + // update cache + $myTicketInfo = array( + 'ticket' => $res['ticket'], + 'expiration' => time() + (int) $res['expires_in'] + ); + savecache($cachename, $myTicketInfo); + } + return $ticketOnly ? $myTicketInfo['ticket'] : $myTicketInfo; + } + + public function upload($type, $file_path, $mediaidOnly = 1) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_FILE_API_ROOT . "/cgi-bin/media/upload?access_token=$access_token&type=$type"; + + $res = self::post($url, array('media' => "@$file_path")); + $res = json_decode($res, true); + + if (self::checkIsSuc($res)) { + return $mediaidOnly ? $res['media_id'] : $res; + } + return null; + } + + public function download($mid) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_FILE_API_ROOT . "/cgi-bin/media/get?access_token=$access_token&media_id=$mid"; + + return self::get($url); + } + + public function getMenu() { + + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/menu/get?access_token=$access_token"; + + $json = self::get($url); + + $res = json_decode($json, true); + if (self::checkIsSuc($res)) { + return $res; + } + return null; + } + + public function deleteMenu() { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/menu/delete?access_token=$access_token"; + + $res = self::get($url); + return self::checkIsSuc($res); + } + + public function setMenu($myMenu) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/menu/create?access_token=$access_token"; + + if (defined('JSON_UNESCAPED_UNICODE')) { + $json = is_string($myMenu) ? $myMenu : json_encode($myMenu, JSON_UNESCAPED_UNICODE); + } else { + $json = is_string($myMenu) ? $myMenu : json_encode($myMenu); + } + + $json = urldecode($json); + $res = self::post($url, $json); + + return self::checkIsSuc($res); + } + + private function _send($to, $type, $data) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/message/custom/send?access_token=$access_token"; + + $json = json_encode( + array( + 'touser' => $to, + 'msgtype' => $type, + $type => $data + ) + ); + + $res = self::post($url, $json); + + return self::checkIsSuc($res); + } + + public function sendTextMsg($to, $msg) { + return $this->_send($to, 'text', array('content' => $msg)); + } + + public function sendImgMsg($to, $mid) { + return $this->_send($to, 'image', array('media_id' => $mid)); + } + + public function sendVoice($to, $mid) { + return $this->_send($to, 'voice', array('media_id' => $mid)); + } + + public function sendVideo($to, $mid, $title, $desc) { + return $this->_send($to, 'video', array( + 'media_id' => $mid, + 'title' => $title, + 'description' => $desc + )); + } + + public function sendMusic($to, $url, $thumb_mid, $title, $desc = '', $hq_url = '') { + return $this->_send($to, 'music', array( + 'media_id' => $mid, + 'title' => $title, + 'description' => $desc || $title, + 'musicurl' => $url, + 'thumb_media_id' => $thumb_mid, + 'hqmusicurl' => $hq_url || $url + )); + } + + static private function _filterForRichMsg($articles) { + $i = 0; + $ii = len($articles); + $list = array('title', 'desc', 'url', 'thumb_url'); + $result = array(); + while ($i < $ii) { + $currentArticle = $articles[$i++]; + try { + array_push($result, array( + 'title' => $currentArticle['title'], + 'description' => $currentArticle['desc'], + 'url' => $currentArticle['url'], + 'picurl' => $currentArticle['thumb_url'] + )); + } catch (Exception $e) { + + } + } + return $result; + } + + public function uploadNews($articles) { + $i = 0; + $ii = count($articles); + $result = array(); + while ($i < $ii) { + $currentArticle = $articles[$i++]; + try { + array_push($result, array( + 'thumb_media_id' => $currentArticle['thumb_media_id'], + 'title' => $this->convertToUtf($currentArticle['title']), + 'content' => $this->convertToUtf($currentArticle['content']), + 'author' => $this->convertToUtf($currentArticle['author']), + 'content_source_url' => $this->convertToUtf($currentArticle['url']), + 'digest' => $this->convertToUtf($currentArticle['desc']), + 'show_cover_pic' => 1 + )); + } catch (Exception $e) { + + } + } + + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/media/uploadnews?access_token=$access_token"; + if (defined('JSON_UNESCAPED_UNICODE')) { + $json = json_encode(array('articles' => $result), JSON_UNESCAPED_UNICODE); + } else { + $json = json_encode(array('articles' => $result)); + } + + $json = urldecode($json); + + $res = self::post($url, $json); + if (self::checkIsSuc($res)) { + return json_decode($res, true); + } else { + return false; + } + } + + public function sendMassMsg($msg) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/message/mass/sendall?access_token=$access_token"; + $post = array(); + $post['filter'] = array('group_id' => $msg['group_id']); + if ($msg['type'] == 'media') { + $post['mpnews'] = array('media_id' => $msg['media_id']); + $post['msgtype'] = 'mpnews'; + } else { + $post['text'] = array('content' => $this->convertToUtf($msg['text'])); + $post['msgtype'] = 'text'; + } + + if (defined('JSON_UNESCAPED_UNICODE')) { + $json = json_encode($post, JSON_UNESCAPED_UNICODE); + } else { + $json = json_encode($post); + } + + $json = urldecode($json); + + $res = self::post($url, $json); + if (self::checkIsSuc($res)) { + return json_decode($res, true); + } else { + return false; + } + } + + function convertToUtf($str) { + return urlencode(diconv($str, CHARSET, 'UTF-8')); + } + + public function sendRichMsg($to, $articles) { + + return $this->_send($to, 'news', array( + 'articles' => self::_filterForRichMsg($articles) + )); + } + + public function createGroup($name) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/groups/create?access_token=$access_token"; + + $res = self::post($url, json_encode(array( + 'group' => array('name' => $name) + ))); + + $res = json_decode($res, true); + return self::checkIsSuc($res) ? $res['group']['id'] : null; + } + + public function renameGroup($gid, $name) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/groups/update?access_token=$access_token"; + + $res = self::post($url, json_encode(array( + 'group' => array( + 'id' => $gid, + 'name' => $name + ) + ))); + + $res = json_decode($res, true); + return self::checkIsSuc($res); + } + + public function moveUserById($uid, $gid) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/groups/members/update?access_token=$access_token"; + + $res = self::post( + $url, json_encode( + array( + 'openid' => $mid, + 'to_groupid' => $gid + ) + ) + ); + + $res = json_decode($res, true); + return self::checkIsSuc($res); + } + + public function getAllGroups() { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/groups/get?access_token=$access_token"; + + $res = json_decode(self::get($url), true); + + if (self::checkIsSuc($res)) { + return $res['groups']; + } else { + return null; + } + } + + public function getGroupidByUserid($uid) { + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/groups/getid?access_token=$access_token"; + + $res = self::post($url, json_encode(array( + 'openid' => $mid + ))); + + $res = json_decode($res, true); + return self::checkIsSuc($res) ? $res['groupid'] : null; + } + + public function getUserInfoById($uid, $lang = '') { + if (!$lang) { + $lang = self::$_USERINFO_LANG; + } + $access_token = $this->getAccessToken(); + $url = self::$_URL_API_ROOT . "/cgi-bin/user/info?access_token=$access_token&openid=$uid&lang=$lang"; + + $res = json_decode(self::get($url), true); + + return self::checkIsSuc($res) ? $res : null; + } + + public function getFollowersList($next_id = '') { + $access_token = $this->getAccessToken(); + $extend = ''; + if ($next_id) { + $extend = "&next_openid=$next_id"; + } + $url = self::$_URL_API_ROOT . "/cgi-bin/user/get?access_token=${access_token}$extend"; + + $res = json_decode( + self::get($url), true + ); + + return self::checkIsSuc($res) ? array( + 'total' => $res['total'], + 'list' => $res['data']['openid'], + 'next_id' => isset($res['next_openid']) ? $res['next_openid'] : null + ) : null; + } + + public function getOAuthConnectUri($redirect_uri, $state = '', $scope = 'snsapi_base') { + $redirect_uri = urlencode($redirect_uri); + $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->_appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state={$state}#wechat_redirect"; + return $url; + } + + public function getAccessTokenByCode($code) { + $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->_appid}&secret={$this->_appsecret}&code=$code&grant_type=authorization_code"; + $res = json_decode(self::get($url), true); + return $res; + } + + public function refreshAccessTocken($refresh_token) { + $url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={$this->_appid}&grant_type=refresh_token&refresh_token=$refresh_token"; + $res = json_decode(self::get($url), true); + return $res; + } + + public function getUserInfoByAuth($access_token, $openid, $lang = 'zh_CN') { + $url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=$lang"; + $res = json_decode(self::get($url), true); + return $res; + } + + public static function getQrcodeImgByTicket($ticket) { + return self::get($this->getQrcodeImgUrlByTicket($ticket)); + } + + public static function getQrcodeImgUrlByTicket($ticket) { + $ticket = urlencode($ticket); + return self::$_URL_QR_ROOT . "/cgi-bin/showqrcode?ticket=$ticket"; + } + + public function getQrcodeTicket($options = array()) { + $access_token = $this->getAccessToken(); + + $scene_id = isset($options['scene_id']) ? (int) $options['scene_id'] : 0; + $expire = isset($options['expire']) ? (int) $options['expire'] : 0; + $ticketOnly = isset($options['ticketOnly']) ? $options['ticketOnly'] : 1; + + $url = self::$_URL_API_ROOT . "/cgi-bin/qrcode/create?access_token=$access_token"; + $data = array( + 'action_name' => 'QR_LIMIT_SCENE', + 'action_info' => array( + 'scene' => array( + 'scene_id' => $scene_id + ) + ) + ); + if ($expire) { + $data['expire_seconds'] = $expire; + $data['action_name'] = 'QR_SCENE'; + } + + if ($data['action_name'] == 'QR_LIMIT_SCENE' && $scene_id > 100000) { + $data['action_info']['scene']['scene_id'] = self::$_QRCODE_TICKET_DEFAULT_ID; + } + + $data = json_encode($data); + + $res = self::post($url, $data); + $res = json_decode($res, true); + + if (self::checkIsSuc($res)) { + return $ticketOnly ? $res['ticket'] : array( + 'ticket' => $res['ticket'], + 'expire' => $res['expire_seconds'] + ); + } + return null; + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/function/function_common.php b/source/plugin/replyfloor/function/function_common.php new file mode 100644 index 0000000..cfba8a4 --- /dev/null +++ b/source/plugin/replyfloor/function/function_common.php @@ -0,0 +1,162 @@ +\\1\\3", $message); + $message = preg_replace_callback("/(?<=[^\]a-z0-9-=\"'\\/])?((https?|ftp|gopher|news|telnet|mms|rtsp):\/\/)([a-z0-9\/\-_+=.~!%@?#%&;:$\\()|]+)/i", 'replyfloor_parseurl', $message); + if(strpos($msglower, '[/color]')){ + $message = str_replace(array('[/color]'), array(''), preg_replace("/\[color=([#\w]+?)\]/i", "", $message)); + } + if(strpos($msglower, '[/b]')){ + $message = str_replace(array('[b]', '[/b]'), array('', ''), $message); + } + //if(strpos($msglower, '[/img]') !== FALSE) { + //$message = preg_replace_callback("/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", 'replyfloor_parseimg_1', $message); + //$message = preg_replace_callback("/\[img=(\d{1,4})[x|\,](\d{1,4})\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/is", 'replyfloor_parseimg_123', $message); + //} + $message = parsesmiles($message); + $message = preg_replace_callback("/\/i", 'replyfloor_imageurl', $message); + return str_replace(array("\t", ' ', ' '), array('        ', '   ', '  '), $message); +} + +function replyfloor_parseurl($matches) { + global $_G; + $url = $matches[0]; + $hash = authcode("$url\t$_G[timestamp]", 'ENCODE', md5(substr(md5($_G['config']['security']['authkey']), 0, 16))); + $hash = urlencode($hash); + $jumpurl = "plugin.php?id=replyfloor:jump&hash=".$hash; + return "".$url.""; +} + +function replyfloor_parseimg_1($matches) { + return replyfloor_parseimg(0, 0, $matches[1]); +} + +function replyfloor_parseimg_123($matches) { + return replyfloor_parseimg($matches[1], $matches[2], $matches[3]); +} + +function replyfloor_parseimg($width, $height, $src) { + global $_G; + if(strstr($src, 'file:') || substr($src, 1, 1) == ':') { + return $src; + } + $src = !in_array(strtolower(substr($src, 0, 6)), array('http:/', 'https:', 'ftp://')) ? $_G['siteurl'].$src : $src; + $rimg_id = random(5); + if(defined('IN_MOBILE')) { + return ''; + } else { + return ''; + } +} + +function replyfloor_imageurl($matches) { + global $_G; + $url = !in_array(strtolower(substr($matches[1], 0, 6)), array('http:/', 'https:', 'ftp://')) ? $_G['siteurl'] : ''; + return str_replace($matches[1], $url.$matches[1], $matches[0]); +} + +function replyfloor_location($ip = '') { + require_once libfile('function/misc'); + $location = trim(ltrim(convertip($ip), '-')); + if(in_array($location, array('Invalid', 'LAN', 'Reserved', 'Unknown', 'System Error'))){ + $location = lang('plugin/replyfloor', 'replyfloor_location_unknow'); + }else{ + $locarray = explode(' ', $location); + if(count($locarray) > 1){ + $location = $locarray[0]; + } + } + return $location; +} + +function replyfloor_deletemessage($ids, $idtype = 'id', $recycle = 0) { + global $_G; + if($idtype == 'id'){ + C::t('#replyfloor#replyfloor_message')->delete_by_id($ids, $recycle); + if(!$recycle){ + $attachlist = C::t('#replyfloor#replyfloor_attachment')->fetch_all_by_msgid($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + } + C::t('#replyfloor#replyfloor_attachment')->delete_by_msgid($ids); + } + }elseif($idtype == 'tid'){ + C::t('#replyfloor#replyfloor_message')->delete_by_tid($ids, $recycle); + if(!$recycle){ + $attachlist = C::t('#replyfloor#replyfloor_attachment')->fetch_all_by_tid($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + } + C::t('#replyfloor#replyfloor_attachment')->delete_by_tid($ids); + } + }elseif($idtype == 'pid'){ + C::t('#replyfloor#replyfloor_message')->delete_by_pid($ids, $recycle); + if(!$recycle){ + $attachlist = C::t('#replyfloor#replyfloor_attachment')->fetch_all_by_pid($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + } + C::t('#replyfloor#replyfloor_attachment')->delete_by_pid($ids); + } + }elseif($idtype == 'authorid'){ + C::t('#replyfloor#replyfloor_message')->delete_by_authorid($ids, $recycle); + if(!$recycle){ + $attachlist = C::t('#replyfloor#replyfloor_attachment')->fetch_all_by_authorid($ids); + foreach($attachlist as $attach){ + if($attach['remote']) { + ftpcmd('delete', 'replyfloor/'.$attach['attachment']); + } else { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$attach['attachment']); + } + } + C::t('#replyfloor#replyfloor_attachment')->delete_by_authorid($ids); + } + } +} + +function replyfloor_deletereport($ids) { + global $_G; + $reportlist = C::t('#replyfloor#replyfloor_report')->fetch_all_by_id($ids); + foreach($reportlist as $value){ + $value['images'] = $value['images'] ? unserialize($value['images']) : array(); + foreach ($value['images'] as $val) { + @unlink($_G['setting']['attachdir'].'/replyfloor/'.$val['image']); + } + } + C::t('#replyfloor#replyfloor_report')->delete_by_id($ids); +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/hook.class.php b/source/plugin/replyfloor/hook.class.php new file mode 100644 index 0000000..9e4baff --- /dev/null +++ b/source/plugin/replyfloor/hook.class.php @@ -0,0 +1,444 @@ + 0 ? $setconfig['perpage_pc'] : 10; + $this->setconfig = $setconfig; + } + + function deletethread($value) { + global $_G; + $setconfig = $this->setconfig; + if($value['step'] == 'delete'){ + list($tids, $membercount, $credit, $ponly) = $value['param']; + require_once libfile('function/common', 'plugin/replyfloor'); + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'tid', $setconfig['open_recycle']); + } + } + + function deletepost($value) { + global $_G; + $setconfig = $this->setconfig; + if($value['step'] == 'delete'){ + list($ids, $idtype, $credit, $posttableid, $recycle) = $value['param']; + require_once libfile('function/common', 'plugin/replyfloor'); + if($idtype == 'pid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'pid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'pid', $setconfig['open_recycle']); + } elseif($idtype == 'tid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function_forum', 'function'); + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'tid', $setconfig['open_recycle']); + } elseif($idtype == 'authorid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function_forum', 'function'); + $wherearr = array(); + $wherearr[] = 'uid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'authorid', $setconfig['open_recycle']); + } + } + } +} + +class plugin_replyfloor_forum extends plugin_replyfloor { + + function forumdisplay_top_output() { + global $_G; + $return = ''; + $setconfig = $this->setconfig; + if($setconfig['allow_forums'] && !in_array($_G['fid'], $setconfig['allow_forums'])){ + return $return; + } + if($setconfig['add_replies']){ + $tids = array(); + foreach ($_G['forum_threadlist'] as $key => $value) { + $tids[] = $value['tid']; + } + if(empty($tids)){ + return $return; + } + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT tid,count(*) as count FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '').' group by tid'); + $count = array(); + foreach ($recordlist as $value) { + $count[$value['tid']] = $value['count']; + } + foreach ($_G['forum_threadlist'] as &$thread) { + if($count[$thread['tid']]){ + $thread['allreplies'] += $count[$thread['tid']]; + $thread['replies'] += $count[$thread['tid']]; + } + } + } + return $return; + } + + function viewthread_top_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + if(($setconfig['position_pc'] > 0) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + if($setconfig['add_replies']){ + $_G['forum_thread']['allreplies'] += C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->count_by_search_where(array("tid = '".$_G['tid']."'", "status = '0'")); + } + include template(self::$identifier.':style'); + } + return $return; + } + + function viewthread_bottom_output() { + global $_G,$allowpostreply, $swfconfig; + $setconfig = $this->setconfig; + if(($setconfig['position_pc'] > 0) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + include template(self::$identifier.':js'); + } + if($setconfig['replace_pc'] == 1){ + if(!$_G['setting']['rewritestatus']){ + $_G['setting']['rewritestatus'] = array(); + }elseif(!is_array($_G['setting']['rewritestatus'])){ + $_G['setting']['rewritestatus'] = array($_G['setting']['rewritestatus']); + } + $_G['setting']['rewritestatus'][] = 'replyfloor_reply'; + $_G['setting']['output']['str']['search']['replyfloor'] = "showWindow('reply', this.href)"; + $_G['setting']['output']['str']['replace']['replyfloor'] = "replyfloor_reply(this.href)"; + } + return $return; + } + + function viewthread_postbottom_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax'] && (empty($_GET['viewpid']) || ($_GET['viewpid'] && $_GET['from']))){ + return $t; + } + if(($setconfig['position_pc'] == 1 || $setconfig['position_pc'] == 2) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_pc'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_pc'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : '')); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + if($setconfig['position_pc'] == 1){ + $post['message'] .= $return; + $postlist[$key] = $post; + }else{ + $t[] = $return; + } + } + } + } + } + return $t; + } + + function viewthread_replyfloor_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax'] && (empty($_GET['viewpid']) || ($_GET['viewpid'] && $_GET['from']))){ + return $t; + } + if(($setconfig['position_pc'] == 3) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_pc'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_pc'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : '')); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + $t[] = $return; + } + } + } + } + return $t; + } + +} + +class plugin_replyfloor_group extends plugin_replyfloor { + + function forumdisplay_top_output() { + global $_G; + $return = ''; + $setconfig = $this->setconfig; + if($setconfig['allow_groups'] && !$this->_allow_groups($_G['forum'], $setconfig['allow_groups'])){ + return $return; + } + if($setconfig['add_replies']){ + $tids = array(); + foreach ($_G['forum_threadlist'] as $key => $value) { + $tids[] = $value['tid']; + } + if(empty($tids)){ + return $return; + } + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT tid,count(*) as count FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '').' group by tid'); + $count = array(); + foreach ($recordlist as $value) { + $count[$value['tid']] = $value['count']; + } + foreach ($_G['forum_threadlist'] as &$thread) { + if($count[$thread['tid']]){ + $thread['allreplies'] += $count[$thread['tid']]; + } + } + } + return $return; + } + + function viewthread_top_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + if(($setconfig['position_pc'] > 0) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + if($setconfig['add_replies']){ + $_G['forum_thread']['allreplies'] += C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->count_by_search_where(array("tid = '".$_G['tid']."'", "status = '0'")); + } + include template(self::$identifier.':style'); + } + return $return; + } + + function viewthread_bottom_output() { + global $_G,$allowpostreply, $swfconfig; + $setconfig = $this->setconfig; + if(($setconfig['position_pc'] > 0) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + include template(self::$identifier.':js'); + } + if($setconfig['replace_pc'] == 1){ + if(!$_G['setting']['rewritestatus']){ + $_G['setting']['rewritestatus'] = array(); + }elseif(!is_array($_G['setting']['rewritestatus'])){ + $_G['setting']['rewritestatus'] = array($_G['setting']['rewritestatus']); + } + $_G['setting']['rewritestatus'][] = 'replyfloor_reply'; + $_G['setting']['output']['str']['search']['replyfloor'] = "showWindow('reply', this.href)"; + $_G['setting']['output']['str']['replace']['replyfloor'] = "replyfloor_reply(this.href)"; + } + return $return; + } + + function viewthread_postbottom_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax'] && (empty($_GET['viewpid']) || ($_GET['viewpid'] && $_GET['from']))){ + return $t; + } + if(($setconfig['position_pc'] == 1 || $setconfig['position_pc'] == 2) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_pc'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_pc'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : '')); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + if($setconfig['position_pc'] == 1){ + $post['message'] .= $return; + $postlist[$key] = $post; + }else{ + $t[] = $return; + } + } + } + } + } + return $t; + } + + function viewthread_replyfloor_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax'] && (empty($_GET['viewpid']) || ($_GET['viewpid'] && $_GET['from']))){ + return $t; + } + if(($setconfig['position_pc'] == 3) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_pc'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_pc'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : '')); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + $t[] = $return; + } + } + } + } + return $t; + } + + function _allow_groups($forum, $groupids) { + global $_G; + if(empty($forum) || empty($forum['fid']) || empty($forum['name'])) { + return false; + } + loadcache('grouptype'); + $groupsecond = $_G['cache']['grouptype']['second']; + if($forum['type'] == 'sub') { + $secondtype = !empty($groupsecond[$forum['fup']]) ? $groupsecond[$forum['fup']] : array(); + } else { + $secondtype = !empty($groupsecond[$forum['fid']]) ? $groupsecond[$forum['fid']] : array(); + } + $firstid = !empty($secondtype) ? $secondtype['fup'] : (!empty($forum['fup']) ? $forum['fup'] : $forum['fid']); + $firsttype = $_G['cache']['grouptype']['first'][$firstid]; + if($firsttype && in_array($firsttype['fid'], $groupids)) { + return true; + } + if($secondtype && in_array($secondtype['fid'], $groupids)) { + return true; + } + return false; + } + +} + +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/index.inc.php b/source/plugin/replyfloor/index.inc.php new file mode 100644 index 0000000..eabf14e --- /dev/null +++ b/source/plugin/replyfloor/index.inc.php @@ -0,0 +1,418 @@ +fetch('tid:'.$_G['tid'], $_GET['pid']); +if(!$post['tid']) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_post_nonexistence')); +} +if($post['tid'] != $_G['tid']) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_post_error')); +} + +if($ac == 'index') { + $_G['setting']['dateconvert'] = $setconfig['date_convert']; + $msgid = intval($_GET['msgid']); + if($msgid) { + $msginfo = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->fetch_by_id($msgid); + if(!$msginfo) { + showmessage(lang('plugin/'.CURMODULE, 'message_nonexistence')); + } + $msginfo['message'] = replyfloor_discuzcode($msginfo['message']); + if($setconfig['show_br']) { + $msginfo['message'] = nl2br($msginfo['message']); + } + if($setconfig['show_location']) { + $msginfo['location'] = replyfloor_location($msginfo['postip']); + }else{ + $msginfo['location'] = ''; + } + $msginfo['createtime'] = $setconfig['date_convert'] ? dgmdate($msginfo['createtime'], 'u', 9999, $setconfig['time_format']) : dgmdate($msginfo['createtime'], $setconfig['time_format']); + if(file_exists(DISCUZ_ROOT.'./source/plugin/'.CURMODULE.'/extend/extend_hidenum.php')){ + require_once libfile('extend/hidenum', 'plugin/replyfloor'); + $msginfo['message'] = replyfloor_extend_hidenum($msginfo['message']); + } + $uids = array(); + $uids[] = $msginfo['uid']; + if($msginfo['ruid']){ + $uids[] = $msginfo['ruid']; + } + if($uids) { + loadcache('usergroups'); + foreach(C::t('common_member')->fetch_all($uids) as $uid => $postuser) { + if($msginfo['uid'] == $uid) { + $msginfo['groupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + if($msginfo['ruid'] == $uid) { + $msginfo['rgroupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + } + } + }else{ + $page = max(1, $_G['page']); + if(defined('IN_MOBILE')) { + $shownum = $setconfig['shownum_mobile'] > 0 ? $setconfig['shownum_mobile'] : 5; + $perpage = $setconfig['perpage_mobile'] > 0 ? $setconfig['perpage_mobile'] : 10; + }else{ + $shownum = $setconfig['shownum_pc'] > 0 ? $setconfig['shownum_pc'] : 5; + $perpage = $setconfig['perpage_pc'] > 0 ? $setconfig['perpage_pc'] : 10; + } + $start = ($page-1)*$perpage; + if((!defined('IN_MOBILE') && $setconfig['pagemode_pc']) || (defined('IN_MOBILE') && $setconfig['pagemode_mobile'])){ + if($page == 1){ + $perpage = $shownum; + }else{ + $start = ($page-2)*$perpage + $shownum; + } + } + $mpurl = 'plugin.php?id='.CURMODULE.':index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : ''); + $wherearr = array(); + if($_G['uid']){ + $wherearr[] = "(status = '0' or (status = '-1' and uid = '".$_G['uid']."'))"; + }else{ + $wherearr[] = "status = '0'"; + } + $wherearr[] = "pid = '".$post['pid']."'"; + $count = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->count_by_search_where($wherearr); + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($thread['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $list = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->fetch_all_by_search_where($wherearr, $orderby, $start, $perpage); + $uids = array(); + foreach ($list as $key => $value) { + $value['message'] = replyfloor_discuzcode($value['message']); + if($setconfig['show_br']) { + $value['message'] = nl2br($value['message']); + } + if($setconfig['show_location']) { + $value['location'] = replyfloor_location($value['postip']); + }else{ + $value['location'] = ''; + } + $value['createtime'] = $setconfig['date_convert'] ? dgmdate($value['createtime'], 'u', 9999, $setconfig['time_format']) : dgmdate($value['createtime'], $setconfig['time_format']); + $list[$key] = $value; + $uids[] = $value['uid']; + if($value['ruid']){ + $uids[] = $value['ruid']; + } + } + if(defined('IN_MOBILE')) { + $multipage = multi($count, $perpage, $page, $mpurl, 0, 3, false, true); + }else{ + $multipage = multi($count, $perpage, $page, $mpurl); + } + if(file_exists(DISCUZ_ROOT.'./source/plugin/'.CURMODULE.'/extend/extend_hidenum.php')){ + require_once libfile('extend/hidenum', 'plugin/replyfloor'); + foreach ($list as $key => $value) { + $value['message'] = replyfloor_extend_hidenum($value['message']); + $list[$key] = $value; + } + } + if($uids) { + loadcache('usergroups'); + foreach(C::t('common_member')->fetch_all($uids) as $uid => $postuser) { + foreach ($list as $key => $value) { + if($value['uid'] == $uid) { + $value['groupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + if($value['ruid'] == $uid) { + $value['rgroupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + $list[$key] = $value; + } + } + } + } + include template(CURMODULE.':message'); + +} elseif($ac == 'post') { + if(empty($_G['uid'])) { + showmessage('to_login', '', array(), array('showmsg' => true)); + } + //ֻظϰ + cknewuser(); + + require_once libfile('function/post'); + require_once libfile('function/forumlist'); + $allowpostreply = ($_G['forum']['allowreply'] != -1) && (($_G['forum_thread']['isgroup'] || (!$_G['forum_thread']['closed'] && !checkautoclose($_G['forum_thread']))) || $_G['forum']['ismoderator']) && ((!$_G['forum']['replyperm'] && $_G['group']['allowreply']) || ($_G['forum']['replyperm'] && forumperm($_G['forum']['replyperm'])) || $_G['forum']['allowreply']); + if(!$allowpostreply) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_no_permission_to_post')); + } + + $ruid = 0; + $rusername = ''; + $_GET['msgid'] = intval($_GET['msgid']); + if($_GET['msgid']) { + $remsg = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->fetch_by_id($_GET['msgid']); + if($remsg) { + $ruid = $remsg['uid']; + $rusername = $remsg['username']; + } + } + $seccodecheck = in_array($_G['groupid'], $setconfig['open_seccheck']) ? 1 : 0; + if(submitcheck('savesubmit', 0, $seccodecheck)) { + if(file_exists(DISCUZ_ROOT.'./source/plugin/allowreply/extend/extend_replyfloor.php')){ + @include_once libfile('extend/replyfloor', 'plugin/allowreply'); + } + $message = isset($_GET['message']) ? censor($_GET['message']) : ''; + $attach = isset($_GET['attach']) ? $_GET['attach'] : array(); + //$message = messagecutstr($message, 200, ''); + if(strlen(preg_replace("/[\r\n]{1,2}/", "\n", $message)) < $setconfig['message_minsize']) { + showmessage(lang('plugin/'.CURMODULE, 'message_message_tooshort'), '', array('message_minsize' => $setconfig['message_minsize'])); + } + if(strlen(preg_replace("/[\r\n]{1,2}/", "\n", $message)) > $setconfig['message_maxsize']) { + showmessage(lang('plugin/'.CURMODULE, 'message_message_toolong'), '', array('message_maxsize' => $setconfig['message_maxsize'])); + } + //ηʱ + if(checkflood()) { + showmessage('post_flood_ctrl', '', array('floodctrl' => $_G['setting']['floodctrl'])); + } + $modnewreplies = 0; + if($setconfig['moderate_reply'] == 1) { + list(, $modnewreplies) = threadmodstatus($message); + }elseif($setconfig['moderate_reply'] == 2) { + if(in_array($_G['groupid'], $setconfig['audit_users'])) { + $modnewreplies = 1; + } + } + $attachment = $usedattach = $queryattach = array(); + if($attach){ + $queryattach = C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->fetch_all_by_id($attach); + foreach($attach as $aid){ + if($queryattach[$aid]){ + $usedattach[] = $queryattach[$aid]; + if(in_array($queryattach[$aid]['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp'))){ + $attachment[] = ($queryattach[$aid]['remote'] ? $_G['setting']['ftp']['attachurl'] : $_G['setting']['attachurl']) . 'replyfloor/'. $queryattach[$aid]['attachment']; + } + } + } + } + if(empty($message) && empty($attachment)) { + showmessage(lang('plugin/'.CURMODULE, 'message_message_empty')); + } + + if(discuz_process::islocked("replyfloor_post_".$_G['uid'], 600)) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_request_error')); + } + + $data = array( + 'tid' => $post['tid'], + 'pid' => $post['pid'], + 'uid' => $_G['uid'], + 'username' => $_G['username'], + 'ruid' => $ruid, + 'rusername' => $rusername, + 'message' => $message, + 'attachment' => implode("\t", $attachment), + 'mobile' => defined('IN_MOBILE') ? IN_MOBILE : 0, + 'createtime' => $_G['timestamp'], + 'postip' => $_G['clientip'], + 'status' => $modnewreplies ? -1 : 0, + ); + $msgid = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->insert($data, true); + + $i = 1; + foreach($usedattach as $value){ + $displayorder = in_array($value['fileext'], array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'webp')) ? $i : 0; + $attachdata = array( + 'id' => $value['id'], + 'displayorder' => $displayorder, + 'tid' => $post['tid'], + 'pid' => $post['pid'], + 'msgid' => $msgid, + 'uid' => $value['uid'], + 'username' => $value['username'], + 'filename' => $value['filename'], + 'filesize' => $value['filesize'], + 'fileext' => $value['fileext'], + 'attachment' => $value['attachment'], + 'remote' => $value['remote'], + 'width' => $value['width'], + 'height' => $value['height'], + 'dateline' => $value['dateline'], + ); + C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment')->insert($attachdata, false, true); + C::t('#'.CURMODULE.'#'.CURMODULE.'_attachment_unused')->delete_by_id($value['id']); + $i++; + } + + //ӻظ + //C::t('forum_thread')->increase($_G['tid'], array('replies' => 1)); + //° + //C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 1); + //½ + if($setconfig['today_posts']) { + C::t('forum_forum')->update_forum_counter($_G['fid'], 0, 0, 1); + } + + //ȶ + if($setconfig['open_heatthread']) { + update_threadpartake($_G['tid']); + } + + discuz_process::unlock("replyfloor_post_".$_G['uid']); + + if($modnewreplies) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_post_mod_succeed'), dreferer(), array('tid' => $post['tid'], 'pid' => $post['pid'], 'msgid' => $msgid)); + } + + if($setconfig['get_credit']) { + updatepostcredits('+', $_G['uid'], 'reply', $_G['fid']); + } + if($setconfig['thread_bump']) { + $expiration = $_G['timestamp']; + if($thread['lastpost'] < $expiration){ + C::t('forum_thread')->update($thread['tid'], array('lastpost'=>$expiration, 'lastposter'=>$_G['username']), true); + }else{ + C::t('forum_thread')->update($thread['tid'], array('lastposter'=>$_G['username']), true); + } + C::t('forum_forum')->update($_G['fid'], array('lastpost' => "$thread[tid]\t$thread[subject]\t$expiration\t$_G[username]")); + + $_G['forum']['threadcaches'] && deletethreadcaches($thread['tid']); + } + if($setconfig['notice_author'] == 1 || ($setconfig['notice_author'] == 2 && $_GET['notice_author'])) { + $nauthorid = $ruid ? $ruid : $post['authorid']; + if($nauthorid != $_G['uid']){ + notification_add($nauthorid, 'post', 'replyfloor:replyfloor_noticeauthor', array( + 'tid' => $thread['tid'], + 'subject' => $thread['subject'], + 'fid' => $_G['fid'], + 'pid' => $post['pid'], + 'from_id' => $post['tid'], + 'from_idtype' => 'post', + )); + } + } + + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_post_succeed'), dreferer(), array('tid' => $post['tid'], 'pid' => $post['pid'], 'msgid' => $msgid)); + } else { + include template(CURMODULE.':post'); + } +} elseif($ac == 'delete') { + if(empty($_G['uid'])) { + showmessage('to_login', '', array(), array('showmsg' => true, 'login' => 1)); + } + $msgid = intval($_GET['msgid']); + if(!$msgid) { + showmessage(lang('plugin/'.CURMODULE, 'message_nonexistence')); + } + $msginfo = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->fetch_by_id($msgid); + if(!$msginfo) { + showmessage(lang('plugin/'.CURMODULE, 'message_nonexistence')); + } + if(!($_G['forum']['ismoderator'] && $_G['group']['allowdelpost']) && !($setconfig['allow_delete'] && $_G['uid'] && $_G['uid'] == $_G['thread']['authorid']) && !($setconfig['self_delete'] && $_G['uid'] && $_G['uid'] == $msginfo['uid'])){ + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_no_permission')); + } + require_once libfile('function/misc'); + if(submitcheck('modsubmit')) { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + updatepostcredits('-', $msginfo['uid'], 'reply', $_G['fid']); + } + replyfloor_deletemessage(array($msgid), 'id', $setconfig['open_recycle']); + $wherearr = array(); + $wherearr[] = "status = '0'"; + $wherearr[] = "pid = '".$post['pid']."'"; + $count = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->count_by_search_where($wherearr); + showmessage('', dreferer(), array('tid' => $post['tid'], 'pid' => $post['pid'], 'count' => $count)); + } else { + include template(CURMODULE.':delete'); + } +} elseif($ac == 'report') { + if(empty($_G['uid'])) { + showmessage('to_login', '', array(), array('showmsg' => true, 'login' => 1)); + } + $msgid = intval($_GET['msgid']); + if(!$msgid) { + showmessage(lang('plugin/'.CURMODULE, 'message_nonexistence')); + } + $msginfo = C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->fetch_by_id($msgid); + if(!$msginfo) { + showmessage(lang('plugin/'.CURMODULE, 'message_nonexistence')); + } + if(submitcheck('savesubmit')) { + $message = trim($_GET['message']); + if(empty($message)) { + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_report_message')); + } + require_once libfile('class/upload', 'plugin/'.CURMODULE); + $upload = new discuz_upload(); + $images = array(); + $filelist = $_FILES['filedata']; + for ($i=0;$i $filelist["tmp_name"][$i], "name" => $filelist["name"][$i], "size" => $filelist["size"][$i], "type" => $filelist["type"][$i]); + $upres = $upload->init($filedata, CURMODULE); + if($upres && $upload->attach['isimage'] && $upload->save()) { + $images[] = array("name" => $upload->attach['name'], "image" => $upload->attach['attachment']); + } + } + $data = array( + 'uid' => $_G['uid'], + 'username' => $_G['username'], + 'msgid' => $msginfo['id'], + 'message' => dhtmlspecialchars($message), + 'images' => serialize($images), + 'createtime' => $_G['timestamp'], + 'postip' => $_G['clientip'], + ); + C::t('#'.CURMODULE.'#'.CURMODULE.'_report')->insert($data); + C::t('#'.CURMODULE.'#'.CURMODULE.'_message')->update_reportnum($msginfo['id']); + // + if($setconfig['report_remind']){ + foreach(explode(',', $setconfig['report_remind']) as $userid){ + if(preg_match("/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/", $userid)){ + require_once libfile('function/mail'); + $res = sendmail($userid, lang('plugin/'.CURMODULE, 'replyfloor_newreport_title'), lang('plugin/'.CURMODULE, 'replyfloor_newreport_message')); + }elseif(is_numeric($userid)){ + notification_add($userid, 'report', 'replyfloor:replyfloor_newreport_notice', array('from_id' => 1, 'from_idtype' => 'newreport', 'username' => $_G['username']), 1); + }else{ + $getuser = C::t('common_member')->fetch_by_username($userid, 1); + if($getuser){ + notification_add($getuser['uid'], 'report', 'replyfloor:replyfloor_newreport_notice', array('from_id' => 1, 'from_idtype' => 'newreport', 'username' => $_G['username']), 1); + } + } + } + } + showmessage(lang('plugin/'.CURMODULE, 'replyfloor_report_succeed'), dreferer(), array(), array('closetime' => true, 'showdialog' => 1, 'alert' => 'right')); + } else { + $navtitle = lang('plugin/'.CURMODULE, 'replyfloor_navtitle_report'); + include template(CURMODULE.':report'); + } +} \ No newline at end of file diff --git a/source/plugin/replyfloor/jump.inc.php b/source/plugin/replyfloor/jump.inc.php new file mode 100644 index 0000000..0aae272 --- /dev/null +++ b/source/plugin/replyfloor/jump.inc.php @@ -0,0 +1,38 @@ + 0 ? $setconfig['perpage_mobile'] : 10; + $this->setconfig = $setconfig; + } + + function deletethread($value) { + global $_G; + $setconfig = $this->setconfig; + if($value['step'] == 'delete'){ + list($tids, $membercount, $credit, $ponly) = $value['param']; + require_once libfile('function/common', 'plugin/replyfloor'); + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'tid', $setconfig['open_recycle']); + } + } + + function deletepost($value) { + global $_G; + $setconfig = $this->setconfig; + if($value['step'] == 'delete'){ + list($ids, $idtype, $credit, $posttableid, $recycle) = $value['param']; + require_once libfile('function/common', 'plugin/replyfloor'); + if($idtype == 'pid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'pid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'pid', $setconfig['open_recycle']); + } elseif($idtype == 'tid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'tid', $setconfig['open_recycle']); + } elseif($idtype == 'authorid') { + if($setconfig['get_credit']) { + require_once libfile('function/post'); + require_once libfile('function/forum'); + $wherearr = array(); + $wherearr[] = 'uid in ('.dimplode($ids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT * FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '')); + foreach ($recordlist as $value) { + $thread = get_thread_by_tid($value['tid']); + updatepostcredits('-', $value['uid'], 'reply', $thread['fid']); + } + } + replyfloor_deletemessage($ids, 'authorid', $setconfig['open_recycle']); + } + } + } +} + +class mobileplugin_replyfloor_forum extends mobileplugin_replyfloor { + + function forumdisplay_top_mobile_output() { + global $_G; + $return = ''; + $setconfig = $this->setconfig; + if($setconfig['allow_forums'] && !in_array($_G['fid'], $setconfig['allow_forums'])){ + return $return; + } + if($setconfig['add_replies']){ + $tids = array(); + foreach ($_G['forum_threadlist'] as $key => $value) { + $tids[] = $value['tid']; + } + if(empty($tids)){ + return $return; + } + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT tid,count(*) as count FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '').' group by tid'); + $count = array(); + foreach ($recordlist as $value) { + $count[$value['tid']] = $value['count']; + } + foreach ($_G['forum_threadlist'] as &$thread) { + if($count[$thread['tid']]){ + $thread['allreplies'] += $count[$thread['tid']]; + $thread['replies'] += $count[$thread['tid']]; + } + } + } + return $return; + } + + function viewthread_top_mobile_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + $return = ''; + if(($setconfig['position_mobile'] > 0) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + if($setconfig['add_replies']){ + $_G['forum_thread']['allreplies'] += C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->count_by_search_where(array("tid = '".$_G['tid']."'", "status = '0'")); + } + include template(self::$identifier.':style'); + } + return $return; + } + + function viewthread_bottom_mobile_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + $return = ''; + if(($setconfig['position_mobile'] > 0) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + include template(self::$identifier.':js'); + } + return $return; + } + + function viewthread_postbottom_mobile_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax']){ + //return $t; + } + if(($setconfig['position_mobile'] == 1 || $setconfig['position_mobile'] == 2) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_mobile'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_mobile'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : ''), 0, 3, false, true); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + if($setconfig['position_mobile'] == 1){ + $post['message'] .= $return; + $postlist[$key] = $post; + }else{ + $t[] = $return; + } + } + } + } + } + return $t; + } + + function viewthread_replyfloor_mobile_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax']){ + //return $t; + } + if(($setconfig['position_mobile'] == 3) && (!$setconfig['allow_forums'] || in_array($_G['fid'], $setconfig['allow_forums']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_mobile'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_mobile'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : ''), 0, 3, false, true); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + $t[] = $return; + } + } + } + } + return $t; + } + +} + +class mobileplugin_replyfloor_group extends mobileplugin_replyfloor { + + function forumdisplay_top_mobile_output() { + global $_G; + $return = ''; + $setconfig = $this->setconfig; + if($setconfig['allow_groups'] && !$this->_allow_groups($_G['forum'], $setconfig['allow_groups'])){ + return $return; + } + if($setconfig['add_replies']){ + $tids = array(); + foreach ($_G['forum_threadlist'] as $key => $value) { + $tids[] = $value['tid']; + } + if(empty($tids)){ + return $return; + } + $wherearr = array(); + $wherearr[] = 'tid in ('.dimplode($tids).')'; + $wherearr[] = "status = '0'"; + $recordlist = DB::fetch_all('SELECT tid,count(*) as count FROM '.DB::table('plugin_replyfloor_message').($wherearr ? ' WHERE '.implode(' AND ', $wherearr) : '').' group by tid'); + $count = array(); + foreach ($recordlist as $value) { + $count[$value['tid']] = $value['count']; + } + foreach ($_G['forum_threadlist'] as &$thread) { + if($count[$thread['tid']]){ + $thread['allreplies'] += $count[$thread['tid']]; + } + } + } + return $return; + } + + function viewthread_top_mobile_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + $return = ''; + if(($setconfig['position_mobile'] > 0) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + if($setconfig['add_replies']){ + $_G['forum_thread']['allreplies'] += C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->count_by_search_where(array("tid = '".$_G['tid']."'", "status = '0'")); + } + include template(self::$identifier.':style'); + } + return $return; + } + + function viewthread_bottom_mobile_output() { + global $_G,$allowpostreply; + $setconfig = $this->setconfig; + $return = ''; + if(($setconfig['position_mobile'] > 0) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + include template(self::$identifier.':js'); + } + return $return; + } + + function viewthread_postbottom_mobile_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax']){ + //return $t; + } + if(($setconfig['position_mobile'] == 1 || $setconfig['position_mobile'] == 2) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_mobile'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_mobile'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : ''), 0, 3, false, true); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + if($setconfig['position_mobile'] == 1){ + $post['message'] .= $return; + $postlist[$key] = $post; + }else{ + $t[] = $return; + } + } + } + } + } + return $t; + } + + function viewthread_replyfloor_mobile_output() { + global $_G,$postlist,$postno,$postnostick,$allowpostreply; + $setconfig = $this->setconfig; + $t = $pids = array(); + if($_G['inajax']){ + //return $t; + } + if(($setconfig['position_mobile'] == 3) && (!$setconfig['allow_groups'] || $this->_allow_groups($_G['forum'], $setconfig['allow_groups']))){ + foreach($postlist as $key => $post) { + if(!$post['first'] || $setconfig['thread_reply']){ + $pids[] = $post['pid']; + } + } + if($pids){ + if(!$setconfig['order_type']){ + $setconfig['order_type'] = empty($_GET['ordertype']) && getstatus($_G['forum_thread']['status'], 4) ? 1 : intval($_GET['ordertype']); + } + $orderby = 'order by createtime desc'; + if($setconfig['order_type'] == 2){ + $orderby = 'order by createtime asc'; + } + $messageinfo = C::t('#'.self::$identifier.'#'.self::$identifier.'_message')->fetch_message_by_pid($pids, $setconfig['perpage_mobile'], $orderby, $setconfig); + foreach($postlist as $key => $post) { + if($post['first'] && !$setconfig['thread_reply']){ + $t[] = ''; + }else{ + $count = $messageinfo[$post['pid']]['count'] ? $messageinfo[$post['pid']]['count'] : 0; + $list = $messageinfo[$post['pid']]['list']; + $_GET['ajaxtarget'] = 'replyfloor_content_'.$post['pid']; + $multipage = multi($count, $setconfig['perpage_mobile'], 1, 'plugin.php?id=replyfloor:index&tid='.$post['tid'].'&pid='.$post['pid'].($_GET['ordertype'] ? '&ordertype='.$_GET['ordertype'] : ''), 0, 3, false, true); + $_GET['ajaxtarget'] = ''; + include template(self::$identifier.':viewthread'); + $t[] = $return; + } + } + } + } + return $t; + } + + function _allow_groups($forum, $groupids) { + global $_G; + if(empty($forum) || empty($forum['fid']) || empty($forum['name'])) { + return false; + } + loadcache('grouptype'); + $groupsecond = $_G['cache']['grouptype']['second']; + if($forum['type'] == 'sub') { + $secondtype = !empty($groupsecond[$forum['fup']]) ? $groupsecond[$forum['fup']] : array(); + } else { + $secondtype = !empty($groupsecond[$forum['fid']]) ? $groupsecond[$forum['fid']] : array(); + } + $firstid = !empty($secondtype) ? $secondtype['fup'] : (!empty($forum['fup']) ? $forum['fup'] : $forum['fid']); + $firsttype = $_G['cache']['grouptype']['first'][$firstid]; + if($firsttype && in_array($firsttype['fid'], $groupids)) { + return true; + } + if($secondtype && in_array($secondtype['fid'], $groupids)) { + return true; + } + return false; + } + +} +?> \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/style1.css b/source/plugin/replyfloor/static/css/style1.css new file mode 100644 index 0000000..6b92301 --- /dev/null +++ b/source/plugin/replyfloor/static/css/style1.css @@ -0,0 +1,70 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{line-height: 24px;text-align: center;} +.replyfloor_link_unfold{display: inline-block;padding:0 8px 0 30px;border: 1px solid #f0f1f2;cursor: pointer;background: url(../image/fastreply.gif) #f7f8fa no-repeat 8px center;height: 30px;line-height: 30px;white-space: nowrap;color: #333;font-size: 12px;margin-bottom:30px;} +.replyfloor_link_fold{display: none;border: 1px solid #f0f1f2;border-bottom: 0;color: #1D53BF;cursor: pointer;height: 30px;line-height: 30px;text-align: center;width: 100px;background: #f7f8fa;font-size: 12px;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 15px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;} +.replyfloor_content_avatar img {width: 32px;height: 32px;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;margin-left: 5px;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:6px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg a, .replyfloor_content_pg .pg strong, .replyfloor_content_pg .pgb a, .replyfloor_content_pg .pg label{margin-left: 0px;margin-right: 4px;text-decoration: none;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_editor {padding-top: 13px;} +.replyfloor_editor .replyfloor_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_editor .tedt {width: 100%;box-sizing:border-box;} +.replyfloor_editor .pnpost {overflow: hidden;} +.replyfloor_editor .replyfloor_editor_left {float:left;} +.replyfloor_editor .replyfloor_editor_right {float:right;} +.replyfloor_editor #seccode_replyfloor {display: flex;} +.replyfloor_editor .replyfloor_seccodeverify {width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;} +.replyfloor_editor .replyfloor_seccodeimg {height: 26px;} +.replyfloor_editor .replyfloor_editor_btn {float:right;cursor: pointer;padding: 0 25px;height: 26px;line-height: 26px;color: #FFF;text-align: center;background: #38F;border: 0 none;} +.replyfloor_editor .replyfloor_editor_btntip {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_editor .replyfloor_editor_notice {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url(../image/icon_close.png);} \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/style2.css b/source/plugin/replyfloor/static/css/style2.css new file mode 100644 index 0000000..911702c --- /dev/null +++ b/source/plugin/replyfloor/static/css/style2.css @@ -0,0 +1,73 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{text-align: right;height: 28px;line-height: 28px;font-size: 12px;} +.replyfloor_tail_from{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_tail_floor{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_tail_time{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_link_unfold{display: inline-block;margin-left: 4px;color: #1D53BF;font-size: 12px;cursor: pointer;} +.replyfloor_link_fold{display: none;margin-left: 4px;border: 1px solid #f0f1f2;border-bottom: 0;color: #1D53BF;cursor: pointer;height: 28px;line-height: 28px;text-align: center;width: 80px;background: #f7f8fa;font-size: 12px;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 15px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;} +.replyfloor_content_avatar img {width: 32px;height: 32px;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;margin-left: 5px;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:6px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg a, .replyfloor_content_pg .pg strong, .replyfloor_content_pg .pgb a, .replyfloor_content_pg .pg label{margin-left: 0px;margin-right: 4px;text-decoration: none;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_editor {padding-top: 13px;} +.replyfloor_editor .replyfloor_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_editor .tedt {width: 100%;box-sizing:border-box;} +.replyfloor_editor .pnpost {overflow: hidden;} +.replyfloor_editor .replyfloor_editor_left {float:left;} +.replyfloor_editor .replyfloor_editor_right {float:right;} +.replyfloor_editor #seccode_replyfloor {display: flex;} +.replyfloor_editor .replyfloor_seccodeverify {width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;} +.replyfloor_editor .replyfloor_seccodeimg {height: 26px;} +.replyfloor_editor .replyfloor_editor_btn {float:right;cursor: pointer;padding: 0 25px;height: 26px;line-height: 26px;color: #FFF;text-align: center;background: #38F;border: 0 none;} +.replyfloor_editor .replyfloor_editor_btntip {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_editor .replyfloor_editor_notice {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url(../image/icon_close.png);} \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/style3.css b/source/plugin/replyfloor/static/css/style3.css new file mode 100644 index 0000000..1f44db0 --- /dev/null +++ b/source/plugin/replyfloor/static/css/style3.css @@ -0,0 +1,66 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{text-align: right;padding-bottom:10px;line-height: 20px;font-size: 12px;} +.replyfloor_hd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url(../image/icon_reply.png);background-repeat:no-repeat;background-position:left center;background-size:auto 12px;display:inline-block;cursor: pointer;} +.replyfloor_fd{text-align: right;padding-top:10px;line-height: 20px;font-size: 12px;} +.replyfloor_fd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url(../image/icon_reply.png);background-repeat:no-repeat;background-position:left center;background-size:auto 12px;display:inline-block;cursor: pointer;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 15px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;} +.replyfloor_content_avatar img {width: 32px;height: 32px;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;margin-left: 5px;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:6px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg {float:left;font-size:12px;} +.replyfloor_content_pg .pg a, .replyfloor_content_pg .pg strong, .replyfloor_content_pg .pgb a, .replyfloor_content_pg .pg label{margin-left: 0px;margin-right: 4px;text-decoration: none;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_replyto {font-size:12px;line-height:2;padding:0 4px;} +#seccode_replyfloor {display: flex;} +.replyfloor_editor_seccodeverify {width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;} +.replyfloor_editor_seccodeimg {height: 26px;} +.replyfloor_editor_btn {float:right;cursor: pointer;padding: 0 25px;height: 26px;line-height: 26px;color: #FFF;text-align: center;background: #38F;border: 0 none;} +.replyfloor_editor_btntip {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_editor_notice {float:right;height: 26px;line-height: 26px;margin-right:10px;font-size:12px;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url(../image/icon_close.png);} \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/touch/style1.css b/source/plugin/replyfloor/static/css/touch/style1.css new file mode 100644 index 0000000..4434d1b --- /dev/null +++ b/source/plugin/replyfloor/static/css/touch/style1.css @@ -0,0 +1,100 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{line-height: 24px;text-align: center;} +.replyfloor_link_unfold{display: inline-block;padding:0 8px 0 30px;border: 1px solid #f0f1f2;background: url("../../image/fastreply.svg") #f7f8fa no-repeat 8px center;height: 30px;line-height: 30px;white-space: nowrap;color: #333;font-size: 12px;cursor: pointer;margin-bottom:30px;} +.replyfloor_link_fold{display: none;border: 1px solid #f0f1f2;border-bottom: 0;color: #1D53BF;cursor: pointer;height: 30px;line-height: 30px;text-align: center;width: 100px;background: #f7f8fa;font-size: 12px;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 10px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;overflow: hidden;} +.replyfloor_content_avatar a {display:block;} +.replyfloor_content_avatar img {width: 100%;height: 100%;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;vertical-align: middle;margin:0 !important;border-radius:0 !important;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:4px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;line-height:26px;} +.replyfloor_content_pg a,.replyfloor_content_pg strong,.replyfloor_content_pg label { float:left; display:inline; margin-right:4px; padding:0 8px; height:26px; border:1px solid; border-color:#C2D5E3; background-color:#FFF; background-repeat:no-repeat; color:#333; overflow:hidden; text-decoration:none;} +.replyfloor_content_pg a.nxt { padding:0 10px;} +.replyfloor_content_pg a:hover { border-color:#369; color:#369;} +.replyfloor_content_pg a.nxt {padding-right:25px;background-image:url("../../image/arw_r.gif");background-position:90% 50%;} +.replyfloor_content_pg a.prev {background-image:url("../../image/arw_l.gif");background-position:50% 50%;} +.replyfloor_content_pg strong {background-color:#E5EDF2;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_editor {padding-top: 13px;} +.replyfloor_editor .replyfloor_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_editor .replyfloor_tedt {width: 100%;box-sizing:border-box;border: 1px solid #ccc;border-radius: 3px;overflow: hidden;} +.replyfloor_editor .replyfloor_tedtbar {padding: 0 10px 0 0;height: 32px;line-height: 32px;border-top: 1px solid #ccc;background: #eee;overflow: hidden;} +.replyfloor_editor .replyfloor_tedtbar span{float: left;display:block;width:32px;height: 32px;line-height: 32px;text-align:center;overflow: hidden;text-indent: -9999px;cursor: pointer;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fbld{background:url("../../image/fbld.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fclr{background:url("../../image/fclr.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fsml{background:url("../../image/fsml.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fmg{background:url("../../image/fmg.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtarea {padding:3px;} +.replyfloor_editor .replyfloor_tedtarea textarea {width: 100%;box-sizing:border-box;border: 0 none;display:block;resize: none;} +.replyfloor_editor .replyfloor_pnpost {overflow: hidden;} +.replyfloor_editor .replyfloor_editor_left {padding-top:10px;overflow: hidden;} +.replyfloor_editor .replyfloor_editor_right {padding-top:10px;overflow: hidden;} +.replyfloor_editor .replyfloor_seccodeverify {float:left;width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;margin-right: 5px;} +.replyfloor_editor .replyfloor_seccodeimg {float:left;height: 26px;margin: 0;} +.replyfloor_editor .replyfloor_editor_btn {width: auto;margin: 0;float:right;cursor: pointer;padding: 0 20px;height: 26px;line-height: 26px;color: #FFF;text-align: center;background: #38F;border: 0 none;font-size:12px;} +.replyfloor_editor .replyfloor_editor_btntip {float:right;height: 26px;line-height: 26px;margin-right:6px;font-size:12px;} +.replyfloor_editor .replyfloor_editor_notice {float:right;height: 26px;line-height: 26px;margin-right:6px;font-size:12px;} +.replyfloor_showcolorbox {overflow: hidden;display: flex;flex-wrap: wrap;} +.replyfloor_showcolorbox span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_showcolorbox button{display:block;margin: 0 auto;padding: 0;width: 24px;height: 24px;border: 0;cursor: pointer;} +.replyfloor_showsmilebox {overflow: hidden;} +.replyfloor_showsmilebox_tab{overflow: hidden;} +.replyfloor_showsmilebox_tab ul{overflow: hidden;overflow-x: auto;padding:10px 0;white-space:nowrap;} +.replyfloor_showsmilebox_tab ul li{display:inline-block;padding:0 5px;height:20px;line-height:20px;margin:0 5px;background: #E5EDF2;color:#999;font-size:12px;border: 1px solid #CDCDCD;} +.replyfloor_showsmilebox_tab ul li.current{background:#999;color:#fff;} +.replyfloor_showsmilebox_data{overflow: hidden;overflow-y: auto;max-height:120px;display: flex;flex-wrap: wrap;} +.replyfloor_showsmilebox_data span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("../../image/icon_close.png");} +.replyfloor_popup_mask{position: fixed;bottom: 0px;top: 0px;left: 0px;right: 0px;background-color: rgba(0, 0, 0, 0.4);z-index: 99;} +.replyfloor_popup_box{position: fixed;left: 0px;right: 0px;bottom: 0px;background:#fff;z-index: 99;} +.replyfloor_popup_close{position:absolute;top: 10px;right: 10px;height:20px;width:20px;overflow: hidden;background:url("../../image/close.png") no-repeat center center;} +.replyfloor_popup_area{padding: 10px;} +.replyfloor_popup_title {padding:0 0 10px;font-size:16px;font-weight:bold;} +.replyfloor_popup_reportarea{width:100%;line-height: 24px;border: 1px solid #D3D4D4;padding:4px 5px;font-size:14px;vertical-align:baseline;box-sizing:border-box;} +.replyfloor_popup_reportbtn{} +.replyfloor_popup_reportbtn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/touch/style2.css b/source/plugin/replyfloor/static/css/touch/style2.css new file mode 100644 index 0000000..1cb2d7d --- /dev/null +++ b/source/plugin/replyfloor/static/css/touch/style2.css @@ -0,0 +1,103 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{text-align: right;height: 28px;line-height: 28px;font-size: 12px;} +.replyfloor_tail_from{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_tail_floor{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_tail_time{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_link_unfold{display: inline-block;margin-left: 4px;color: #1D53BF;cursor: pointer;font-size: 12px;} +.replyfloor_link_fold{display: none;margin-left: 4px;border: 1px solid #f0f1f2;border-bottom: 0;color: #1D53BF;cursor: pointer;height: 28px;line-height: 28px;text-align: center;width: 80px;background: #f7f8fa;font-size: 12px;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 10px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;overflow: hidden;} +.replyfloor_content_avatar a {display:block;} +.replyfloor_content_avatar img {width: 100%;height: 100%;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;vertical-align: middle;margin:0 !important;border-radius:0 !important;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:4px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;line-height:26px;} +.replyfloor_content_pg a,.replyfloor_content_pg strong,.replyfloor_content_pg label { float:left; display:inline; margin-right:4px; padding:0 8px; height:26px; border:1px solid; border-color:#C2D5E3; background-color:#FFF; background-repeat:no-repeat; color:#333; overflow:hidden; text-decoration:none;} +.replyfloor_content_pg a.nxt { padding:0 10px;} +.replyfloor_content_pg a:hover { border-color:#369; color:#369;} +.replyfloor_content_pg a.nxt {padding-right:25px;background-image:url("../../image/arw_r.gif");background-position:90% 50%;} +.replyfloor_content_pg a.prev {background-image:url("../../image/arw_l.gif");background-position:50% 50%;} +.replyfloor_content_pg strong {background-color:#E5EDF2;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_editor {padding-top: 13px;} +.replyfloor_editor .replyfloor_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_editor .replyfloor_tedt {width: 100%;box-sizing:border-box;border: 1px solid #ccc;border-radius: 3px;overflow: hidden;} +.replyfloor_editor .replyfloor_tedtbar {padding: 0 10px 0 0;height: 32px;line-height: 32px;border-top: 1px solid #ccc;background: #eee;overflow: hidden;} +.replyfloor_editor .replyfloor_tedtbar span{float: left;display:block;width:32px;height: 32px;line-height: 32px;text-align:center;overflow: hidden;text-indent: -9999px;cursor: pointer;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fbld{background:url("../../image/fbld.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fclr{background:url("../../image/fclr.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fsml{background:url("../../image/fsml.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtbar span.replyfloor_tedtbar_fmg{background:url("../../image/fmg.svg") no-repeat center center;} +.replyfloor_editor .replyfloor_tedtarea {padding:3px;} +.replyfloor_editor .replyfloor_tedtarea textarea {width: 100%;box-sizing:border-box;border: 0 none;display:block;resize: none;} +.replyfloor_editor .replyfloor_pnpost {overflow: hidden;} +.replyfloor_editor .replyfloor_editor_left {padding-top:10px;overflow: hidden;} +.replyfloor_editor .replyfloor_editor_right {padding-top:10px;overflow: hidden;} +.replyfloor_editor .replyfloor_seccodeverify {float:left;width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;margin-right: 5px;} +.replyfloor_editor .replyfloor_seccodeimg {float:left;height: 26px;margin: 0;} +.replyfloor_editor .replyfloor_editor_btn {width: auto;margin: 0;float:right;cursor: pointer;padding: 0 20px;height: 26px;line-height: 26px;color: #FFF;text-align: center;background: #38F;border: 0 none;font-size:12px;} +.replyfloor_editor .replyfloor_editor_btntip {float:right;height: 26px;line-height: 26px;margin-right:6px;font-size:12px;} +.replyfloor_editor .replyfloor_editor_notice {float:right;height: 26px;line-height: 26px;margin-right:6px;font-size:12px;} +.replyfloor_showcolorbox {overflow: hidden;display: flex;flex-wrap: wrap;} +.replyfloor_showcolorbox span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_showcolorbox button{display:block;margin: 0 auto;padding: 0;width: 24px;height: 24px;border: 0;cursor: pointer;} +.replyfloor_showsmilebox {overflow: hidden;} +.replyfloor_showsmilebox_tab{overflow: hidden;} +.replyfloor_showsmilebox_tab ul{overflow: hidden;overflow-x: auto;padding:10px 0;white-space:nowrap;} +.replyfloor_showsmilebox_tab ul li{display:inline-block;padding:0 5px;height:20px;line-height:20px;margin:0 5px;background: #E5EDF2;color:#999;font-size:12px;border: 1px solid #CDCDCD;} +.replyfloor_showsmilebox_tab ul li.current{background:#999;color:#fff;} +.replyfloor_showsmilebox_data{overflow: hidden;overflow-y: auto;max-height:120px;display: flex;flex-wrap: wrap;} +.replyfloor_showsmilebox_data span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("../../image/icon_close.png");} +.replyfloor_popup_mask{position: fixed;bottom: 0px;top: 0px;left: 0px;right: 0px;background-color: rgba(0, 0, 0, 0.4);z-index: 99;} +.replyfloor_popup_box{position: fixed;left: 0px;right: 0px;bottom: 0px;background:#fff;z-index: 99;} +.replyfloor_popup_close{position:absolute;top: 10px;right: 10px;height:20px;width:20px;overflow: hidden;background:url("../../image/close.png") no-repeat center center;} +.replyfloor_popup_area{padding: 10px;} +.replyfloor_popup_title {padding:0 0 10px;font-size:16px;font-weight:bold;} +.replyfloor_popup_reportarea{width:100%;line-height: 24px;border: 1px solid #D3D4D4;padding:4px 5px;font-size:14px;vertical-align:baseline;box-sizing:border-box;} +.replyfloor_popup_reportbtn{} +.replyfloor_popup_reportbtn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} \ No newline at end of file diff --git a/source/plugin/replyfloor/static/css/touch/style3.css b/source/plugin/replyfloor/static/css/touch/style3.css new file mode 100644 index 0000000..6f81e56 --- /dev/null +++ b/source/plugin/replyfloor/static/css/touch/style3.css @@ -0,0 +1,100 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{text-align: right;padding-bottom:10px;line-height: 20px;font-size: 12px;display:none;} +.replyfloor_hd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url("../../image/fastreply.svg");background-repeat:no-repeat;background-position:left center;background-size:auto 16px;display:inline-block;cursor: pointer;} +.replyfloor_fd{text-align: right;padding-top:10px;line-height: 20px;font-size: 12px;} +.replyfloor_fd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url("../../image/fastreply.svg");background-repeat:no-repeat;background-position:left center;background-size:auto 16px;display:inline-block;cursor: pointer;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 10px 14px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;border: 1px #ccc solid;padding: 1px;overflow: hidden;} +.replyfloor_content_avatar a {display:block;} +.replyfloor_content_avatar img {width: 100%;height: 100%;margin:0 !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;vertical-align: middle;margin:0 !important;border-radius:0 !important;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:4px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;line-height:26px;} +.replyfloor_content_pg a,.replyfloor_content_pg strong,.replyfloor_content_pg label { float:left; display:inline; margin-right:4px; padding:0 8px; height:26px; border:1px solid; border-color:#C2D5E3; background-color:#FFF; background-repeat:no-repeat; color:#333; overflow:hidden; text-decoration:none;} +.replyfloor_content_pg a.nxt { padding:0 10px;} +.replyfloor_content_pg a:hover { border-color:#369; color:#369;} +.replyfloor_content_pg a.nxt {padding-right:25px;background-image:url("../../image/arw_r.gif");background-position:90% 50%;} +.replyfloor_content_pg a.prev {background-image:url("../../image/arw_l.gif");background-position:50% 50%;} +.replyfloor_content_pg strong {background-color:#E5EDF2;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_popup_mask{position: fixed;bottom: 0px;top: 0px;left: 0px;right: 0px;background-color: rgba(0, 0, 0, 0.4);z-index: 99;} +.replyfloor_popup_box{position: fixed;left: 0px;right: 0px;bottom: 0px;background:#fff;z-index: 99;} +.replyfloor_popup_close{position:absolute;top: 10px;right: 10px;height:20px;width:20px;overflow: hidden;background:url("../../image/close.png") no-repeat center center;cursor: pointer;} +.replyfloor_popup_area{padding: 10px;} +.replyfloor_popup_title {padding:0 0 10px;font-size:16px;font-weight:bold;} +.replyfloor_popup_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_popup_tedt {width: 100%;box-sizing:border-box;border: 1px solid #ccc;border-radius: 3px;overflow: hidden;} +.replyfloor_popup_tedtbar {padding: 0 10px 0 0;height: 32px;line-height: 32px;border-top: 1px solid #ccc;background: #eee;overflow: hidden;} +.replyfloor_popup_tedtbar span{float: left;display:block;width:32px;height: 32px;line-height: 32px;text-align:center;overflow: hidden;text-indent: -9999px;cursor: pointer;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fbld{background:url("../../image/fbld.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fclr{background:url("../../image/fclr.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fsml{background:url("../../image/fsml.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fmg{background:url("../../image/fmg.svg") no-repeat center center;} +.replyfloor_popup_tedtarea {padding:3px;} +.replyfloor_popup_tedtarea textarea {width: 100%;box-sizing:border-box;border: 0 none;display:block;resize: none;} +.replyfloor_popup_seccode {padding-top:10px;overflow: hidden;} +.replyfloor_popup_seccodeverify {float:left;width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;margin-right: 5px;} +.replyfloor_popup_seccodeimg {float:left;height: 26px;margin: 0;} +.replyfloor_popup_info{padding-top:10px;font-size: 14px;overflow: hidden;} +.replyfloor_popup_notice{float:left;} +.replyfloor_popup_btntip{float:right;} +.replyfloor_popup_btn{} +.replyfloor_popup_btn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_popup_reportarea{width:100%;line-height: 24px;border: 1px solid #D3D4D4;padding:4px 5px;font-size:14px;vertical-align:baseline;box-sizing:border-box;} +.replyfloor_popup_reportbtn{} +.replyfloor_popup_reportbtn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_showcolorbox {overflow: hidden;display: flex;flex-wrap: wrap;} +.replyfloor_showcolorbox span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_showcolorbox button{display:block;margin: 0 auto;padding: 0;width: 24px;height: 24px;border: 0;cursor: pointer;} +.replyfloor_showsmilebox {overflow: hidden;} +.replyfloor_showsmilebox_tab{overflow: hidden;} +.replyfloor_showsmilebox_tab ul{overflow: hidden;overflow-x: auto;padding:10px 0;white-space:nowrap;} +.replyfloor_showsmilebox_tab ul li{display:inline-block;padding:0 5px;height:20px;line-height:20px;margin:0 5px;background: #E5EDF2;color:#999;font-size:12px;border: 1px solid #CDCDCD;} +.replyfloor_showsmilebox_tab ul li.current{background:#999;color:#fff;} +.replyfloor_showsmilebox_data{overflow: hidden;overflow-y: auto;max-height:120px;display: flex;flex-wrap: wrap;} +.replyfloor_showsmilebox_data span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("../../image/icon_close.png");} diff --git a/source/plugin/replyfloor/static/css/touch/style4.css b/source/plugin/replyfloor/static/css/touch/style4.css new file mode 100644 index 0000000..fa6b8cb --- /dev/null +++ b/source/plugin/replyfloor/static/css/touch/style4.css @@ -0,0 +1,102 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{padding-bottom:10px;line-height: 20px;font-size: 12px;} +.replyfloor_tail_time{display: inline-block;margin: 0 4px;color: #999;} +.replyfloor_tail_reply{display: inline-block;margin: 0 4px;color: #666;} +.replyfloor_fd{padding-top:10px;line-height: 20px;font-size: 12px;display:none;} +.replyfloor_fd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url("../../image/icon_reply.png");background-repeat:no-repeat;background-position:left center;background-size:auto 12px;display:inline-block;cursor: pointer;} +.replyfloor_bd{margin-top: -1px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 24px;height: 24px;overflow: hidden;} +.replyfloor_content_avatar a {display:block;} +.replyfloor_content_avatar img {width: 100%;height: 100%;margin:0 !important;border-radius: 50% !important;} +.replyfloor_content_cnt {margin-left: 30px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;vertical-align: middle;margin:0 !important;border-radius:0 !important;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;display:inline-block;width:12px;height:16px;position: relative;text-indent:-9999px;overflow:hidden;vertical-align:middle;} +.replyfloor_content_toreply:after {content: "";position: absolute;border:6px solid transparent;border-left-color:#2d64b3;left: 3px;top: 1px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:4px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:left;margin-left:5px;} +.replyfloor_content_rpbtn {cursor: pointer;color: #666;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #666;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #666;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;overflow: hidden;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;line-height:26px;} +.replyfloor_content_pg a,.replyfloor_content_pg strong,.replyfloor_content_pg label { float:left; display:inline; margin-right:4px; padding:0 8px; height:26px; border:1px solid; border-color:#C2D5E3; background-color:#FFF; background-repeat:no-repeat; color:#333; overflow:hidden; text-decoration:none;} +.replyfloor_content_pg a.nxt { padding:0 10px;} +.replyfloor_content_pg a:hover { border-color:#369; color:#369;} +.replyfloor_content_pg a.nxt {padding-right:25px;background-image:url("../../image/arw_r.gif");background-position:90% 50%;} +.replyfloor_content_pg a.prev {background-image:url("../../image/arw_l.gif");background-position:50% 50%;} +.replyfloor_content_pg strong {background-color:#E5EDF2;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_popup_mask{position: fixed;bottom: 0px;top: 0px;left: 0px;right: 0px;background-color: rgba(0, 0, 0, 0.4);z-index: 99;} +.replyfloor_popup_box{position: fixed;left: 0px;right: 0px;bottom: 0px;background:#fff;z-index: 99;} +.replyfloor_popup_close{position:absolute;top: 10px;right: 10px;height:20px;width:20px;overflow: hidden;background:url("../../image/close.png") no-repeat center center;cursor: pointer;} +.replyfloor_popup_area{padding: 10px;} +.replyfloor_popup_title {padding:0 0 10px;font-size:16px;font-weight:bold;} +.replyfloor_popup_replyto {font-size:12px;line-height:2;padding:0 4px;} +.replyfloor_popup_tedt {width: 100%;box-sizing:border-box;border: 1px solid #ccc;border-radius: 3px;overflow: hidden;} +.replyfloor_popup_tedtbar {padding: 0 10px 0 0;height: 32px;line-height: 32px;border-top: 1px solid #ccc;background: #eee;overflow: hidden;} +.replyfloor_popup_tedtbar span{float: left;display:block;width:32px;height: 32px;line-height: 32px;text-align:center;overflow: hidden;text-indent: -9999px;cursor: pointer;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fbld{background:url("../../image/fbld.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fclr{background:url("../../image/fclr.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fsml{background:url("../../image/fsml.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fmg{background:url("../../image/fmg.svg") no-repeat center center;} +.replyfloor_popup_tedtarea {padding:3px;} +.replyfloor_popup_tedtarea textarea {width: 100%;box-sizing:border-box;border: 0 none;display:block;resize: none;} +.replyfloor_popup_seccode {padding-top:10px;overflow: hidden;} +.replyfloor_popup_seccodeverify {float:left;width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;margin-right: 5px;} +.replyfloor_popup_seccodeimg {float:left;height: 26px;margin: 0;} +.replyfloor_popup_info{padding-top:10px;font-size: 14px;overflow: hidden;} +.replyfloor_popup_notice{float:left;} +.replyfloor_popup_btntip{float:right;} +.replyfloor_popup_btn{} +.replyfloor_popup_btn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_popup_reportarea{width:100%;line-height: 24px;border: 1px solid #D3D4D4;padding:4px 5px;font-size:14px;vertical-align:baseline;box-sizing:border-box;} +.replyfloor_popup_reportbtn{} +.replyfloor_popup_reportbtn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_showcolorbox {overflow: hidden;display: flex;flex-wrap: wrap;} +.replyfloor_showcolorbox span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_showcolorbox button{display:block;margin: 0 auto;padding: 0;width: 24px;height: 24px;border: 0;cursor: pointer;} +.replyfloor_showsmilebox {overflow: hidden;} +.replyfloor_showsmilebox_tab{overflow: hidden;} +.replyfloor_showsmilebox_tab ul{overflow: hidden;overflow-x: auto;padding:10px 0;white-space:nowrap;} +.replyfloor_showsmilebox_tab ul li{display:inline-block;padding:0 5px;height:20px;line-height:20px;margin:0 5px;background: #E5EDF2;color:#999;font-size:12px;border: 1px solid #CDCDCD;} +.replyfloor_showsmilebox_tab ul li.current{background:#999;color:#fff;} +.replyfloor_showsmilebox_data{overflow: hidden;overflow-y: auto;max-height:120px;display: flex;flex-wrap: wrap;} +.replyfloor_showsmilebox_data span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("../../image/icon_close.png");} diff --git a/source/plugin/replyfloor/static/css/touch/style5.css b/source/plugin/replyfloor/static/css/touch/style5.css new file mode 100644 index 0000000..fdb6a74 --- /dev/null +++ b/source/plugin/replyfloor/static/css/touch/style5.css @@ -0,0 +1,103 @@ +.replyfloor_box{margin-top:30px;margin-bottom: 10px;} +.replyfloor_hd{overflow: hidden;padding-bottom:10px;line-height: 20px;font-size: 12px;} +.replyfloor_hd .replyfloor_tail_time{float:left;text-decoration: none;color: #aaa;} +.replyfloor_hd .replyfloor_tail_reply{float:right;text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url("../../image/fastreply.svg");background-repeat:no-repeat;background-position:left center;background-size:auto 16px;display:inline-block;cursor: pointer;} +.replyfloor_fd{text-align: right;padding-top:10px;line-height: 20px;font-size: 12px;display:none;} +.replyfloor_fd span{text-decoration: none;color: #aaa;font-size: 12px;padding-left:18px;background-image:url("../../image/fastreply.svg");background-repeat:no-repeat;background-position:left center;background-size:auto 16px;display:inline-block;cursor: pointer;} +.replyfloor_bd{background: #f7f8fa;border: 1px solid #f0f1f2;margin-top: -1px;padding: 4px 10px 4px;display:none;} +.replyfloor_content{} +.replyfloor_content_li {padding: 6px 0;border-bottom:1px dashed #d6d6d6;font-size:14px;overflow: hidden;} +.replyfloor_content_avatar {float: left;width: 32px;height: 32px;padding: 1px;overflow: hidden;} +.replyfloor_content_avatar a {display:block;} +.replyfloor_content_avatar img {width: 100%;height: 100%;margin:0 !important;border-radius: 50% !important;} +.replyfloor_content_cnt {margin-left: 45px;zoom: 1;word-wrap: break-word;word-break: break-all;} +.replyfloor_content_head {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;} +.replyfloor_content_head_z {float:left;} +.replyfloor_content_head_y {float:right;} +.replyfloor_content_main {margin-top:4px;} +.replyfloor_content_locked {overflow: hidden;padding: 6px 6px 6px 24px;border: 1px dashed #FF9A9A;background: url("../../image/locked.gif") no-repeat 6px 50%;font-size: 12px; zoom:1;} +.replyfloor_content_text {line-height: 20px;font-size:14px;} +.replyfloor_content_text a {color: #2d64b3;text-decoration: none;} +.replyfloor_content_text img {height: 20px;vertical-align: middle;margin:0 !important;border-radius:0 !important;} +.replyfloor_content_image {overflow: hidden;} +.replyfloor_content_image_li {float:left;width: 120px;height: 120px;margin:5px 5px 0 0;} +.replyfloor_content_image_li img {width: 120px;height: 120px;object-fit:cover;} +.replyfloor_content_user {color: #999;} +.replyfloor_content_user a{color: #2d64b3;} +.replyfloor_content_moderating {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_location {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_time {font-size:12px;color: #aaa;} +.replyfloor_content_from {font-size:12px;color: #999;margin-left: 5px;} +.replyfloor_content_from a{color: #999;} +.replyfloor_content_toreply {margin:0 5px;} +.replyfloor_content_foot {text-align: left;font-size:12px;line-height:18px;height:18px;overflow: hidden;color: #999;margin-top:4px;} +.replyfloor_content_foot_z {float:left;} +.replyfloor_content_foot_y {float:right;} +.replyfloor_content_rpbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_reportbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_delbtn {cursor: pointer;color: #999;margin-left: 5px;} +.replyfloor_content_pager {padding-top: 10px;overflow: hidden;} +.replyfloor_content_more {float:left;font-size:12px;line-height: 28px;} +.replyfloor_content_more a{color: #2d64b3;text-decoration: none;} +.replyfloor_content_hrmore{float:left;margin-right:6px;position: relative;width: 24px;height: 28px;} +.replyfloor_content_hrmore:before {content: "";position: absolute;left: 0;width: 24px;height: 1px;top: 13px;background: #ccc;} +.replyfloor_content_showmore{float:left;margin-right:10px;} +.replyfloor_content_showmore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_showmore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -6px;position: absolute;right: 3px;top: 50%;transform: rotate(-45deg);-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);width: 6px;} +.replyfloor_content_hidemore{float:left;margin-right:10px;} +.replyfloor_content_hidemore a{display:block;padding-right:16px;position: relative;} +.replyfloor_content_hidemore a:after{content: "";border-bottom: 1px solid #2d64b3;border-left: 1px solid #2d64b3;height: 6px;margin-top: -1px;position: absolute;right: 3px;top: 50%;transform: rotate(135deg);-ms-transform:rotate(135deg);-moz-transform:rotate(135deg);-webkit-transform:rotate(135deg);-o-transform:rotate(135deg);width: 6px;} +.replyfloor_content_pg {float:left;font-size:12px;line-height:26px;} +.replyfloor_content_pg a,.replyfloor_content_pg strong,.replyfloor_content_pg label { float:left; display:inline; margin-right:4px; padding:0 8px; height:26px; border:1px solid; border-color:#C2D5E3; background-color:#FFF; background-repeat:no-repeat; color:#333; overflow:hidden; text-decoration:none;} +.replyfloor_content_pg a.nxt { padding:0 10px;} +.replyfloor_content_pg a:hover { border-color:#369; color:#369;} +.replyfloor_content_pg a.nxt {padding-right:25px;background-image:url("../../image/arw_r.gif");background-position:90% 50%;} +.replyfloor_content_pg a.prev {background-image:url("../../image/arw_l.gif");background-position:50% 50%;} +.replyfloor_content_pg strong {background-color:#E5EDF2;} +.replyfloor_content_btn {float:right;} +.replyfloor_content_btn a {padding: 0px 8px;font-size: 12px;background-color: #fff;color: #333;border-radius: 2px;border: 1px solid #ccc;display: block;line-height: 26px;text-decoration: none;} +.replyfloor_content_btn a:hover {color: #38F;border: 1px solid #38F;} +.replyfloor_popup_mask{position: fixed;bottom: 0px;top: 0px;left: 0px;right: 0px;background-color: rgba(0, 0, 0, 0.4);z-index: 99;} +.replyfloor_popup_box{position: fixed;left: 0px;right: 0px;bottom: 0px;background:#fff;z-index: 99;} +.replyfloor_popup_close{position:absolute;top: 10px;right: 10px;height:20px;width:20px;overflow: hidden;background:url("../../image/close.png") no-repeat center center;cursor:pointer;} +.replyfloor_popup_area{padding: 10px;} +.replyfloor_popup_title {padding:0 0 10px;font-size:16px;font-weight:bold;} +.replyfloor_popup_tonotice {overflow: hidden;} +.replyfloor_popup_replyto {float:left;font-size:12px;line-height:3;} +.replyfloor_popup_notice{float:right;font-size:12px;line-height:3;} +.replyfloor_popup_noticez{float:left;font-size:12px;line-height:3;} +.replyfloor_popup_tedtbox {overflow: hidden;display:flex;align-items:flex-end;} +.replyfloor_popup_tedtarea {border: 1px solid #999;border-radius:5px;overflow: hidden;flex: 1;padding:10px;} +.replyfloor_popup_tedtarea textarea {width: 100%;box-sizing:border-box;border: 0 none;display:block;resize: none;height: 20px;line-height:20px;max-height:120px;} +.replyfloor_popup_tedtbar {float:left;padding: 0 10px 0 0;height: 32px;line-height: 32px;overflow: hidden;} +.replyfloor_popup_tedtbar span{float: left;display:block;width:32px;height: 32px;line-height: 32px;text-align:center;overflow: hidden;text-indent: -9999px;cursor: pointer;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fbld{background:url("../../image/fbld.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fclr{background:url("../../image/fclr.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fsml{background:url("../../image/fsml.svg") no-repeat center center;} +.replyfloor_popup_tedtbar span.replyfloor_popup_tedtbar_fmg{background:url("../../image/fmg.svg") no-repeat center center;} +.replyfloor_popup_seccode {padding-top:10px;overflow: hidden;} +.replyfloor_popup_seccodeverify {float:left;width:100px;height:24px;line-height:24px;border:1px solid #ddd;padding:0 5px;margin-right: 5px;} +.replyfloor_popup_seccodeimg {float:left;height: 26px;margin: 0;} +.replyfloor_popup_infobar{font-size: 12px;overflow: hidden;} +.replyfloor_popup_btntip{float:right;line-height: 32px;} +.replyfloor_popup_btn{width:80px;margin-left:10px;} +.replyfloor_popup_btn button{border-radius:5px;width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_popup_reportarea{width:100%;line-height: 24px;border: 1px solid #D3D4D4;padding:4px 5px;font-size:14px;vertical-align:baseline;box-sizing:border-box;} +.replyfloor_popup_reportbtn{} +.replyfloor_popup_reportbtn button{width: 100%;font-size: 16px;height: 42px;line-height: 42px;text-align: center;font-weight: 400;background: #38F;color: #FFF;border:0 none;padding:0;margin:0;} +.replyfloor_showcolorbox {overflow: hidden;display: flex;flex-wrap: wrap;} +.replyfloor_showcolorbox span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_showcolorbox button{display:block;margin: 0 auto;padding: 0;width: 24px;height: 24px;border: 0;cursor: pointer;} +.replyfloor_showsmilebox {overflow: hidden;} +.replyfloor_showsmilebox_tab{overflow: hidden;} +.replyfloor_showsmilebox_tab ul{overflow: hidden;overflow-x: auto;padding:10px 0;white-space:nowrap;} +.replyfloor_showsmilebox_tab ul li{display:inline-block;padding:0 5px;height:20px;line-height:20px;margin:0 5px;background: #E5EDF2;color:#999;font-size:12px;border: 1px solid #CDCDCD;} +.replyfloor_showsmilebox_tab ul li.current{background:#999;color:#fff;} +.replyfloor_showsmilebox_data{overflow: hidden;overflow-y: auto;max-height:120px;display: flex;flex-wrap: wrap;} +.replyfloor_showsmilebox_data span{width:12.5%;display:block;text-align:center;padding:5px 0;} +.replyfloor_upimage {width: 100%;overflow: hidden;} +.replyfloor_upimage_li {float:left;position:relative;margin:5px 5px 0 0;width:50px;height:50px;} +.replyfloor_upimage_img {width:50px;height:50px;} +.replyfloor_upimage_img img {display:block;width:50px;height:50px;object-fit:cover;} +.replyfloor_upimage_del {position:absolute;top:-3px;right:-3px;} +.replyfloor_upimage_del a {display:block;width:13px;height:11px;background: url("../../image/icon_close.png");} diff --git a/source/plugin/replyfloor/static/cwebuploader/cwebuploader.css b/source/plugin/replyfloor/static/cwebuploader/cwebuploader.css new file mode 100644 index 0000000..994ad37 --- /dev/null +++ b/source/plugin/replyfloor/static/cwebuploader/cwebuploader.css @@ -0,0 +1,9 @@ +.cwebuploader-container { + position: relative; +} +.cwebuploader-element-invisible { + position: absolute !important; + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px,1px,1px,1px); +} + diff --git a/source/plugin/replyfloor/static/cwebuploader/cwebuploader.js b/source/plugin/replyfloor/static/cwebuploader/cwebuploader.js new file mode 100644 index 0000000..fe32c93 --- /dev/null +++ b/source/plugin/replyfloor/static/cwebuploader/cwebuploader.js @@ -0,0 +1,8255 @@ +/*! CWebUploader 0.1.5 */ + + +/** + * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 + * + * AMD API 内部的简单不完全实现,请忽略。只有当CWebUploader被合并成一个文件的时候才会引入。 + */ +(function( root, factory ) { + var modules = {}, + + // 内部require, 简单不完全实现。 + // https://github.com/amdjs/amdjs-api/wiki/require + _require = function( deps, callback ) { + var args, len, i; + + // 如果deps不是数组,则直接返回指定module + if ( typeof deps === 'string' ) { + return getModule( deps ); + } else { + args = []; + for( len = deps.length, i = 0; i < len; i++ ) { + args.push( getModule( deps[ i ] ) ); + } + + return callback.apply( null, args ); + } + }, + + // 内部define,暂时不支持不指定id. + _define = function( id, deps, factory ) { + if ( arguments.length === 2 ) { + factory = deps; + deps = null; + } + + _require( deps || [], function() { + setModule( id, factory, arguments ); + }); + }, + + // 设置module, 兼容CommonJs写法。 + setModule = function( id, factory, args ) { + var module = { + exports: factory + }, + returned; + + if ( typeof factory === 'function' ) { + args.length || (args = [ _require, module.exports, module ]); + returned = factory.apply( null, args ); + returned !== undefined && (module.exports = returned); + } + + modules[ id ] = module.exports; + }, + + // 根据id获取module + getModule = function( id ) { + var module = modules[ id ] || root[ id ]; + + if ( !module ) { + throw new Error( '`' + id + '` is undefined' ); + } + + return module; + }, + + // 将所有modules,将路径ids装换成对象。 + exportsTo = function( obj ) { + var key, host, parts, part, last, ucFirst; + + // make the first character upper case. + ucFirst = function( str ) { + return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); + }; + + for ( key in modules ) { + host = obj; + + if ( !modules.hasOwnProperty( key ) ) { + continue; + } + + parts = key.split('/'); + last = ucFirst( parts.pop() ); + + while( (part = ucFirst( parts.shift() )) ) { + host[ part ] = host[ part ] || {}; + host = host[ part ]; + } + + host[ last ] = modules[ key ]; + } + + return obj; + }, + + makeExport = function( dollar ) { + root.__dollar = dollar; + + // exports every module. + return exportsTo( factory( root, _define, _require ) ); + }, + + origin; + + if ( typeof module === 'object' && typeof module.exports === 'object' ) { + + // For CommonJS and CommonJS-like environments where a proper window is present, + module.exports = makeExport(); + } else if ( typeof define === 'function' && define.amd ) { + + // Allow using this built library as an AMD module + // in another project. That other project will only + // see this AMD call, not the internal modules in + // the closure below. + define([ 'jquery' ], makeExport ); + } else { + + // Browser globals case. Just assign the + // result to a property on the global. + origin = root.CWebUploader; + root.CWebUploader = makeExport(); + root.CWebUploader.noConflict = function() { + root.CWebUploader = origin; + }; + } +})( window, function( window, define, require ) { + + + /** + * @fileOverview jQuery or Zepto + * @require "jquery" + * @require "zepto" + */ + define('dollar-third',[],function() { + var req = window.require; + var $ = window.__dollar || + window.cQuery || + window.jQuery || + window.Zepto || + req('jquery') || + req('zepto'); + + if ( !$ ) { + throw new Error('jQuery or Zepto not found!'); + } + + return $; + }); + + /** + * @fileOverview Dom 操作相关 + */ + define('dollar',[ + 'dollar-third' + ], function( _ ) { + return _; + }); + /** + * @fileOverview 使用jQuery的Promise + */ + define('promise-third',[ + 'dollar' + ], function( $ ) { + return { + Deferred: $.Deferred, + when: $.when, + + isPromise: function( anything ) { + return anything && typeof anything.then === 'function'; + } + }; + }); + /** + * @fileOverview Promise/A+ + */ + define('promise',[ + 'promise-third' + ], function( _ ) { + return _; + }); + /** + * @fileOverview 基础类方法。 + */ + + /** + * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`CWebUploader`这个变量中访问到。 + * + * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. + * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在CWebUploader中。如: + * + * * module `base`:CWebUploader.Base + * * module `file`: CWebUploader.File + * * module `lib/dnd`: CWebUploader.Lib.Dnd + * * module `runtime/html5/dnd`: CWebUploader.Runtime.Html5.Dnd + * + * + * 以下文档中对类的使用可能省略掉了`CWebUploader`前缀。 + * @module CWebUploader + * @title CWebUploader API文档 + */ + define('base',[ + 'dollar', + 'promise' + ], function( $, promise ) { + + var noop = function() {}, + call = Function.call; + + // http://jsperf.com/uncurrythis + // 反科里化 + function uncurryThis( fn ) { + return function() { + return call.apply( fn, arguments ); + }; + } + + function bindFn( fn, context ) { + return function() { + return fn.apply( context, arguments ); + }; + } + + function createObject( proto ) { + var f; + + if ( Object.create ) { + return Object.create( proto ); + } else { + f = function() {}; + f.prototype = proto; + return new f(); + } + } + + + /** + * 基础类,提供一些简单常用的方法。 + * @class Base + */ + return { + + /** + * @property {String} version 当前版本号。 + */ + version: '0.1.8-alpha', + + /** + * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 + */ + $: $, + + Deferred: promise.Deferred, + + isPromise: promise.isPromise, + + when: promise.when, + + /** + * @description 简单的浏览器检查结果。 + * + * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 + * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 + * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** + * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 + * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 + * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 + * + * @property {Object} [browser] + */ + browser: (function( ua ) { + var ret = {}, + webkit = ua.match( /WebKit\/([\d.]+)/ ), + chrome = ua.match( /Chrome\/([\d.]+)/ ) || + ua.match( /CriOS\/([\d.]+)/ ), + + ie = ua.match( /MSIE\s([\d\.]+)/ ) || + ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), + firefox = ua.match( /Firefox\/([\d.]+)/ ), + safari = ua.match( /Safari\/([\d.]+)/ ), + opera = ua.match( /OPR\/([\d.]+)/ ); + + webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); + chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); + ie && (ret.ie = parseFloat( ie[ 1 ] )); + firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); + safari && (ret.safari = parseFloat( safari[ 1 ] )); + opera && (ret.opera = parseFloat( opera[ 1 ] )); + + return ret; + })( navigator.userAgent ), + + /** + * @description 操作系统检查结果。 + * + * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 + * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 + * @property {Object} [os] + */ + os: (function( ua ) { + var ret = {}, + + // osx = !!ua.match( /\(Macintosh\; Intel / ), + android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), + ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); + + // osx && (ret.osx = true); + android && (ret.android = parseFloat( android[ 1 ] )); + ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); + + return ret; + })( navigator.userAgent ), + + /** + * 实现类与类之间的继承。 + * @method inherits + * @grammar Base.inherits( super ) => child + * @grammar Base.inherits( super, protos ) => child + * @grammar Base.inherits( super, protos, statics ) => child + * @param {Class} super 父类 + * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 + * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 + * @param {Object} [statics] 静态属性或方法。 + * @return {Class} 返回子类。 + * @example + * function Person() { + * console.log( 'Super' ); + * } + * Person.prototype.hello = function() { + * console.log( 'hello' ); + * }; + * + * var Manager = Base.inherits( Person, { + * world: function() { + * console.log( 'World' ); + * } + * }); + * + * // 因为没有指定构造器,父类的构造器将会执行。 + * var instance = new Manager(); // => Super + * + * // 继承子父类的方法 + * instance.hello(); // => hello + * instance.world(); // => World + * + * // 子类的__super__属性指向父类 + * console.log( Manager.__super__ === Person ); // => true + */ + inherits: function( Super, protos, staticProtos ) { + var child; + + if ( typeof protos === 'function' ) { + child = protos; + protos = null; + } else if ( protos && protos.hasOwnProperty('constructor') ) { + child = protos.constructor; + } else { + child = function() { + return Super.apply( this, arguments ); + }; + } + + // 复制静态方法 + $.extend( true, child, Super, staticProtos || {} ); + + /* jshint camelcase: false */ + + // 让子类的__super__属性指向父类。 + child.__super__ = Super.prototype; + + // 构建原型,添加原型方法或属性。 + // 暂时用Object.create实现。 + child.prototype = createObject( Super.prototype ); + protos && $.extend( true, child.prototype, protos ); + + return child; + }, + + /** + * 一个不做任何事情的方法。可以用来赋值给默认的callback. + * @method noop + */ + noop: noop, + + /** + * 返回一个新的方法,此方法将已指定的`context`来执行。 + * @grammar Base.bindFn( fn, context ) => Function + * @method bindFn + * @example + * var doSomething = function() { + * console.log( this.name ); + * }, + * obj = { + * name: 'Object Name' + * }, + * aliasFn = Base.bind( doSomething, obj ); + * + * aliasFn(); // => Object Name + * + */ + bindFn: bindFn, + + /** + * 引用Console.log如果存在的话,否则引用一个[空函数noop](#CWebUploader:Base.noop)。 + * @grammar Base.log( args... ) => undefined + * @method log + */ + log: (function() { + if ( window.console ) { + return bindFn( console.log, console ); + } + return noop; + })(), + + nextTick: (function() { + + return function( cb ) { + setTimeout( cb, 1 ); + }; + + // @bug 当浏览器不在当前窗口时就停了。 + // var next = window.requestAnimationFrame || + // window.webkitRequestAnimationFrame || + // window.mozRequestAnimationFrame || + // function( cb ) { + // window.setTimeout( cb, 1000 / 60 ); + // }; + + // // fix: Uncaught TypeError: Illegal invocation + // return bindFn( next, window ); + })(), + + /** + * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 + * 将用来将非数组对象转化成数组对象。 + * @grammar Base.slice( target, start[, end] ) => Array + * @method slice + * @example + * function doSomthing() { + * var args = Base.slice( arguments, 1 ); + * console.log( args ); + * } + * + * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] + */ + slice: uncurryThis( [].slice ), + + /** + * 生成唯一的ID + * @method guid + * @grammar Base.guid() => String + * @grammar Base.guid( prefx ) => String + */ + guid: (function() { + var counter = 0; + + return function( prefix ) { + var guid = (+new Date()).toString( 32 ), + i = 0; + + for ( ; i < 5; i++ ) { + guid += Math.floor( Math.random() * 65535 ).toString( 32 ); + } + + return (prefix || 'wu_') + guid + (counter++).toString( 32 ); + }; + })(), + + /** + * 格式化文件大小, 输出成带单位的字符串 + * @method formatSize + * @grammar Base.formatSize( size ) => String + * @grammar Base.formatSize( size, pointLength ) => String + * @grammar Base.formatSize( size, pointLength, units ) => String + * @param {Number} size 文件大小 + * @param {Number} [pointLength=2] 精确到的小数点数。 + * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. + * @example + * console.log( Base.formatSize( 100 ) ); // => 100B + * console.log( Base.formatSize( 1024 ) ); // => 1.00K + * console.log( Base.formatSize( 1024, 0 ) ); // => 1K + * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M + * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G + * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB + */ + formatSize: function( size, pointLength, units ) { + var unit; + + units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; + + while ( (unit = units.shift()) && size > 1024 ) { + size = size / 1024; + } + + return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + + unit; + } + }; + }); + /** + * 事件处理类,可以独立使用,也可以扩展给对象使用。 + * @fileOverview Mediator + */ + define('mediator',[ + 'base' + ], function( Base ) { + var $ = Base.$, + slice = [].slice, + separator = /\s+/, + protos; + + // 根据条件过滤出事件handlers. + function findHandlers( arr, name, callback, context ) { + return $.grep( arr, function( handler ) { + return handler && + (!name || handler.e === name) && + (!callback || handler.cb === callback || + handler.cb._cb === callback) && + (!context || handler.ctx === context); + }); + } + + function eachEvent( events, callback, iterator ) { + // 不支持对象,只支持多个event用空格隔开 + $.each( (events || '').split( separator ), function( _, key ) { + iterator( key, callback ); + }); + } + + function triggerHanders( events, args ) { + var stoped = false, + i = -1, + len = events.length, + handler; + + while ( ++i < len ) { + handler = events[ i ]; + + if ( handler.cb.apply( handler.ctx2, args ) === false ) { + stoped = true; + break; + } + } + + return !stoped; + } + + protos = { + + /** + * 绑定事件。 + * + * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 + * ```javascript + * var obj = {}; + * + * // 使得obj有事件行为 + * Mediator.installTo( obj ); + * + * obj.on( 'testa', function( arg1, arg2 ) { + * console.log( arg1, arg2 ); // => 'arg1', 'arg2' + * }); + * + * obj.trigger( 'testa', 'arg1', 'arg2' ); + * ``` + * + * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 + * 切会影响到`trigger`方法的返回值,为`false`。 + * + * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, + * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 + * ```javascript + * obj.on( 'all', function( type, arg1, arg2 ) { + * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' + * }); + * ``` + * + * @method on + * @grammar on( name, callback[, context] ) => self + * @param {String} name 事件名,支持多个事件用空格隔开 + * @param {Function} callback 事件处理器 + * @param {Object} [context] 事件处理器的上下文。 + * @return {self} 返回自身,方便链式 + * @chainable + * @class Mediator + */ + on: function( name, callback, context ) { + var me = this, + set; + + if ( !callback ) { + return this; + } + + set = this._events || (this._events = []); + + eachEvent( name, callback, function( name, callback ) { + var handler = { e: name }; + + handler.cb = callback; + handler.ctx = context; + handler.ctx2 = context || me; + handler.id = set.length; + + set.push( handler ); + }); + + return this; + }, + + /** + * 绑定事件,且当handler执行完后,自动解除绑定。 + * @method once + * @grammar once( name, callback[, context] ) => self + * @param {String} name 事件名 + * @param {Function} callback 事件处理器 + * @param {Object} [context] 事件处理器的上下文。 + * @return {self} 返回自身,方便链式 + * @chainable + */ + once: function( name, callback, context ) { + var me = this; + + if ( !callback ) { + return me; + } + + eachEvent( name, callback, function( name, callback ) { + var once = function() { + me.off( name, once ); + return callback.apply( context || me, arguments ); + }; + + once._cb = callback; + me.on( name, once, context ); + }); + + return me; + }, + + /** + * 解除事件绑定 + * @method off + * @grammar off( [name[, callback[, context] ] ] ) => self + * @param {String} [name] 事件名 + * @param {Function} [callback] 事件处理器 + * @param {Object} [context] 事件处理器的上下文。 + * @return {self} 返回自身,方便链式 + * @chainable + */ + off: function( name, cb, ctx ) { + var events = this._events; + + if ( !events ) { + return this; + } + + if ( !name && !cb && !ctx ) { + this._events = []; + return this; + } + + eachEvent( name, cb, function( name, cb ) { + $.each( findHandlers( events, name, cb, ctx ), function() { + delete events[ this.id ]; + }); + }); + + return this; + }, + + /** + * 触发事件 + * @method trigger + * @grammar trigger( name[, args...] ) => self + * @param {String} type 事件名 + * @param {*} [...] 任意参数 + * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true + */ + trigger: function( type ) { + var args, events, allEvents; + + if ( !this._events || !type ) { + return this; + } + + args = slice.call( arguments, 1 ); + events = findHandlers( this._events, type ); + allEvents = findHandlers( this._events, 'all' ); + + return triggerHanders( events, args ) && + triggerHanders( allEvents, arguments ); + } + }; + + /** + * 中介者,它本身是个单例,但可以通过[installTo](#CWebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 + * 主要目的是负责模块与模块之间的合作,降低耦合度。 + * + * @class Mediator + */ + return $.extend({ + + /** + * 可以通过这个接口,使任何对象具备事件功能。 + * @method installTo + * @param {Object} obj 需要具备事件行为的对象。 + * @return {Object} 返回obj. + */ + installTo: function( obj ) { + return $.extend( obj, protos ); + } + + }, protos ); + }); + /** + * @fileOverview Uploader上传类 + */ + define('uploader',[ + 'base', + 'mediator' + ], function( Base, Mediator ) { + + var $ = Base.$; + + /** + * 上传入口类。 + * @class Uploader + * @constructor + * @grammar new Uploader( opts ) => Uploader + * @example + * var uploader = CWebUploader.Uploader({ + * swf: 'path_of_swf/Uploader.swf', + * + * // 开起分片上传。 + * chunked: true + * }); + */ + function Uploader( opts ) { + this.options = $.extend( true, {}, Uploader.options, opts ); + this._init( this.options ); + } + + // default Options + // widgets中有相应扩展 + Uploader.options = {}; + Mediator.installTo( Uploader.prototype ); + + // 批量添加纯命令式方法。 + $.each({ + upload: 'start-upload', + stop: 'stop-upload', + getFile: 'get-file', + getFiles: 'get-files', + addFile: 'add-file', + addFiles: 'add-file', + sort: 'sort-files', + removeFile: 'remove-file', + cancelFile: 'cancel-file', + skipFile: 'skip-file', + retry: 'retry', + isInProgress: 'is-in-progress', + makeThumb: 'make-thumb', + md5File: 'md5-file', + getDimension: 'get-dimension', + addButton: 'add-btn', + predictRuntimeType: 'predict-runtime-type', + refresh: 'refresh', + disable: 'disable', + enable: 'enable', + reset: 'reset' + }, function( fn, command ) { + Uploader.prototype[ fn ] = function() { + return this.request( command, arguments ); + }; + }); + + $.extend( Uploader.prototype, { + state: 'pending', + + _init: function( opts ) { + var me = this; + + me.request( 'init', opts, function() { + me.state = 'ready'; + me.trigger('ready'); + }); + }, + + /** + * 获取或者设置Uploader配置项。 + * @method option + * @grammar option( key ) => * + * @grammar option( key, val ) => self + * @example + * + * // 初始状态图片上传前不会压缩 + * var uploader = new CWebUploader.Uploader({ + * compress: null; + * }); + * + * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 + * uploader.option( 'compress', { + * width: 1600, + * height: 1600 + * }); + */ + option: function( key, val ) { + var opts = this.options; + + // setter + if ( arguments.length > 1 ) { + + if ( $.isPlainObject( val ) && + $.isPlainObject( opts[ key ] ) ) { + $.extend( opts[ key ], val ); + } else { + opts[ key ] = val; + } + + } else { // getter + return key ? opts[ key ] : opts; + } + }, + + /** + * 获取文件统计信息。返回一个包含一下信息的对象。 + * * `successNum` 上传成功的文件数 + * * `progressNum` 上传中的文件数 + * * `cancelNum` 被删除的文件数 + * * `invalidNum` 无效的文件数 + * * `uploadFailNum` 上传失败的文件数 + * * `queueNum` 还在队列中的文件数 + * * `interruptNum` 被暂停的文件数 + * @method getStats + * @grammar getStats() => Object + */ + getStats: function() { + // return this._mgr.getStats.apply( this._mgr, arguments ); + var stats = this.request('get-stats'); + + return stats ? { + successNum: stats.numOfSuccess, + progressNum: stats.numOfProgress, + + // who care? + // queueFailNum: 0, + cancelNum: stats.numOfCancel, + invalidNum: stats.numOfInvalid, + uploadFailNum: stats.numOfUploadFailed, + queueNum: stats.numOfQueue, + interruptNum: stats.numOfInterrupt + } : {}; + }, + + // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 + trigger: function( type/*, args...*/ ) { + var args = [].slice.call( arguments, 1 ), + opts = this.options, + name = 'on' + type.substring( 0, 1 ).toUpperCase() + + type.substring( 1 ); + + if ( + // 调用通过on方法注册的handler. + Mediator.trigger.apply( this, arguments ) === false || + + // 调用opts.onEvent + $.isFunction( opts[ name ] ) && + opts[ name ].apply( this, args ) === false || + + // 调用this.onEvent + $.isFunction( this[ name ] ) && + this[ name ].apply( this, args ) === false || + + // 广播所有uploader的事件。 + Mediator.trigger.apply( Mediator, + [ this, type ].concat( args ) ) === false ) { + + return false; + } + + return true; + }, + + /** + * 销毁 cwebuploader 实例 + * @method destroy + * @grammar destroy() => undefined + */ + destroy: function() { + this.request( 'destroy', arguments ); + this.off(); + }, + + // widgets/widget.js将补充此方法的详细文档。 + request: Base.noop + }); + + /** + * 创建Uploader实例,等同于new Uploader( opts ); + * @method create + * @class Base + * @static + * @grammar Base.create( opts ) => Uploader + */ + Base.create = Uploader.create = function( opts ) { + return new Uploader( opts ); + }; + + // 暴露Uploader,可以通过它来扩展业务逻辑。 + Base.Uploader = Uploader; + + return Uploader; + }); + + /** + * @fileOverview Runtime管理器,负责Runtime的选择, 连接 + */ + define('runtime/runtime',[ + 'base', + 'mediator' + ], function( Base, Mediator ) { + + var $ = Base.$, + factories = {}, + + // 获取对象的第一个key + getFirstKey = function( obj ) { + for ( var key in obj ) { + if ( obj.hasOwnProperty( key ) ) { + return key; + } + } + return null; + }; + + // 接口类。 + function Runtime( options ) { + this.options = $.extend({ + container: document.body + }, options ); + this.uid = Base.guid('rt_'); + } + + $.extend( Runtime.prototype, { + + getContainer: function() { + var opts = this.options, + parent, container; + + if ( this._container ) { + return this._container; + } + + parent = $( opts.container || document.body ); + container = $( document.createElement('div') ); + + container.attr( 'id', 'rt_' + this.uid ); + container.css({ + position: 'absolute', + top: '0px', + left: '0px', + width: '100%', + height: '100%', + overflow: 'hidden' + }); + + parent.append( container ); + parent.addClass('cwebuploader-container'); + this._container = container; + this._parent = parent; + return container; + }, + + init: Base.noop, + exec: Base.noop, + + destroy: function() { + this._container && this._container.remove(); + this._parent && this._parent.removeClass('cwebuploader-container'); + this.off(); + } + }); + + Runtime.orders = 'html5,flash'; + + + /** + * 添加Runtime实现。 + * @param {String} type 类型 + * @param {Runtime} factory 具体Runtime实现。 + */ + Runtime.addRuntime = function( type, factory ) { + factories[ type ] = factory; + }; + + Runtime.hasRuntime = function( type ) { + return !!(type ? factories[ type ] : getFirstKey( factories )); + }; + + Runtime.create = function( opts, orders ) { + var type, runtime; + + orders = orders || Runtime.orders; + $.each( orders.split( /\s*,\s*/g ), function() { + if ( factories[ this ] ) { + type = this; + return false; + } + }); + + type = type || getFirstKey( factories ); + + if ( !type ) { + throw new Error('Runtime Error'); + } + + runtime = new factories[ type ]( opts ); + return runtime; + }; + + Mediator.installTo( Runtime.prototype ); + return Runtime; + }); + + /** + * @fileOverview Runtime管理器,负责Runtime的选择, 连接 + */ + define('runtime/client',[ + 'base', + 'mediator', + 'runtime/runtime' + ], function( Base, Mediator, Runtime ) { + + var cache; + + cache = (function() { + var obj = {}; + + return { + add: function( runtime ) { + obj[ runtime.uid ] = runtime; + }, + + get: function( ruid, standalone ) { + var i; + + if ( ruid ) { + return obj[ ruid ]; + } + + for ( i in obj ) { + // 有些类型不能重用,比如filepicker. + if ( standalone && obj[ i ].__standalone ) { + continue; + } + + return obj[ i ]; + } + + return null; + }, + + remove: function( runtime ) { + delete obj[ runtime.uid ]; + } + }; + })(); + + function RuntimeClient( component, standalone ) { + var deferred = Base.Deferred(), + runtime; + + this.uid = Base.guid('client_'); + + // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 + this.runtimeReady = function( cb ) { + return deferred.done( cb ); + }; + + this.connectRuntime = function( opts, cb ) { + + // already connected. + if ( runtime ) { + throw new Error('already connected!'); + } + + deferred.done( cb ); + + if ( typeof opts === 'string' && cache.get( opts ) ) { + runtime = cache.get( opts ); + } + + // 像filePicker只能独立存在,不能公用。 + runtime = runtime || cache.get( null, standalone ); + + // 需要创建 + if ( !runtime ) { + runtime = Runtime.create( opts, opts.runtimeOrder ); + runtime.__promise = deferred.promise(); + runtime.once( 'ready', deferred.resolve ); + runtime.init(); + cache.add( runtime ); + runtime.__client = 1; + } else { + // 来自cache + Base.$.extend( runtime.options, opts ); + runtime.__promise.then( deferred.resolve ); + runtime.__client++; + } + + standalone && (runtime.__standalone = standalone); + return runtime; + }; + + this.getRuntime = function() { + return runtime; + }; + + this.disconnectRuntime = function() { + if ( !runtime ) { + return; + } + + runtime.__client--; + + if ( runtime.__client <= 0 ) { + cache.remove( runtime ); + delete runtime.__promise; + runtime.destroy(); + } + + runtime = null; + }; + + this.exec = function() { + if ( !runtime ) { + return; + } + + var args = Base.slice( arguments ); + component && args.unshift( component ); + + return runtime.exec.apply( this, args ); + }; + + this.getRuid = function() { + return runtime && runtime.uid; + }; + + this.destroy = (function( destroy ) { + return function() { + destroy && destroy.apply( this, arguments ); + this.trigger('destroy'); + this.off(); + this.exec('destroy'); + this.disconnectRuntime(); + }; + })( this.destroy ); + } + + Mediator.installTo( RuntimeClient.prototype ); + return RuntimeClient; + }); + /** + * @fileOverview 错误信息 + */ + define('lib/dnd',[ + 'base', + 'mediator', + 'runtime/client' + ], function( Base, Mediator, RuntimeClient ) { + + var $ = Base.$; + + function DragAndDrop( opts ) { + opts = this.options = $.extend({}, DragAndDrop.options, opts ); + + opts.container = $( opts.container ); + + if ( !opts.container.length ) { + return; + } + + RuntimeClient.call( this, 'DragAndDrop', true ); + } + + DragAndDrop.options = { + accept: null, + disableGlobalDnd: false + }; + + Base.inherits( RuntimeClient, { + constructor: DragAndDrop, + + init: function() { + var me = this; + + me.connectRuntime( me.options, function() { + me.exec('init'); + me.trigger('ready'); + }); + } + }); + + Mediator.installTo( DragAndDrop.prototype ); + + return DragAndDrop; + }); + /** + * @fileOverview 组件基类。 + */ + define('widgets/widget',[ + 'base', + 'uploader' + ], function( Base, Uploader ) { + + var $ = Base.$, + _init = Uploader.prototype._init, + _destroy = Uploader.prototype.destroy, + IGNORE = {}, + widgetClass = []; + + function isArrayLike( obj ) { + if ( !obj ) { + return false; + } + + var length = obj.length, + type = $.type( obj ); + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === 'array' || type !== 'function' && type !== 'string' && + (length === 0 || typeof length === 'number' && length > 0 && + (length - 1) in obj); + } + + function Widget( uploader ) { + this.owner = uploader; + this.options = uploader.options; + } + + $.extend( Widget.prototype, { + + init: Base.noop, + + // 类Backbone的事件监听声明,监听uploader实例上的事件 + // widget直接无法监听事件,事件只能通过uploader来传递 + invoke: function( apiName, args ) { + + /* + { + 'make-thumb': 'makeThumb' + } + */ + var map = this.responseMap; + + // 如果无API响应声明则忽略 + if ( !map || !(apiName in map) || !(map[ apiName ] in this) || + !$.isFunction( this[ map[ apiName ] ] ) ) { + + return IGNORE; + } + + return this[ map[ apiName ] ].apply( this, args ); + + }, + + /** + * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 + * @method request + * @grammar request( command, args ) => * | Promise + * @grammar request( command, args, callback ) => Promise + * @for Uploader + */ + request: function() { + return this.owner.request.apply( this.owner, arguments ); + } + }); + + // 扩展Uploader. + $.extend( Uploader.prototype, { + + /** + * @property {String | Array} [disableWidgets=undefined] + * @namespace options + * @for Uploader + * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 + */ + + // 覆写_init用来初始化widgets + _init: function() { + var me = this, + widgets = me._widgets = [], + deactives = me.options.disableWidgets || ''; + + $.each( widgetClass, function( _, klass ) { + (!deactives || !~deactives.indexOf( klass._name )) && + widgets.push( new klass( me ) ); + }); + + return _init.apply( me, arguments ); + }, + + request: function( apiName, args, callback ) { + var i = 0, + widgets = this._widgets, + len = widgets && widgets.length, + rlts = [], + dfds = [], + widget, rlt, promise, key; + + args = isArrayLike( args ) ? args : [ args ]; + + for ( ; i < len; i++ ) { + widget = widgets[ i ]; + rlt = widget.invoke( apiName, args ); + + if ( rlt !== IGNORE ) { + + // Deferred对象 + if ( Base.isPromise( rlt ) ) { + dfds.push( rlt ); + } else { + rlts.push( rlt ); + } + } + } + + // 如果有callback,则用异步方式。 + if ( callback || dfds.length ) { + promise = Base.when.apply( Base, dfds ); + key = promise.pipe ? 'pipe' : 'then'; + + // 很重要不能删除。删除了会死循环。 + // 保证执行顺序。让callback总是在下一个 tick 中执行。 + return promise[ key ](function() { + var deferred = Base.Deferred(), + args = arguments; + + if ( args.length === 1 ) { + args = args[ 0 ]; + } + + setTimeout(function() { + deferred.resolve( args ); + }, 1 ); + + return deferred.promise(); + })[ callback ? key : 'done' ]( callback || Base.noop ); + } else { + return rlts[ 0 ]; + } + }, + + destroy: function() { + _destroy.apply( this, arguments ); + this._widgets = null; + } + }); + + /** + * 添加组件 + * @grammar Uploader.register(proto); + * @grammar Uploader.register(map, proto); + * @param {object} responseMap API 名称与函数实现的映射 + * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 + * @method Uploader.register + * @for Uploader + * @example + * Uploader.register({ + * 'make-thumb': 'makeThumb' + * }, { + * init: function( options ) {}, + * makeThumb: function() {} + * }); + * + * Uploader.register({ + * 'make-thumb': function() { + * + * } + * }); + */ + Uploader.register = Widget.register = function( responseMap, widgetProto ) { + var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, + klass; + + if ( arguments.length === 1 ) { + widgetProto = responseMap; + + // 自动生成 map 表。 + $.each(widgetProto, function(key) { + if ( key[0] === '_' || key === 'name' ) { + key === 'name' && (map.name = widgetProto.name); + return; + } + + map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; + }); + + } else { + map = $.extend( map, responseMap ); + } + + widgetProto.responseMap = map; + klass = Base.inherits( Widget, widgetProto ); + klass._name = map.name; + widgetClass.push( klass ); + + return klass; + }; + + /** + * 删除插件,只有在注册时指定了名字的才能被删除。 + * @grammar Uploader.unRegister(name); + * @param {string} name 组件名字 + * @method Uploader.unRegister + * @for Uploader + * @example + * + * Uploader.register({ + * name: 'custom', + * + * 'make-thumb': function() { + * + * } + * }); + * + * Uploader.unRegister('custom'); + */ + Uploader.unRegister = Widget.unRegister = function( name ) { + if ( !name || name === 'anonymous' ) { + return; + } + + // 删除指定的插件。 + for ( var i = widgetClass.length; i--; ) { + if ( widgetClass[i]._name === name ) { + widgetClass.splice(i, 1) + } + } + }; + + return Widget; + }); + /** + * @fileOverview DragAndDrop Widget。 + */ + define('widgets/filednd',[ + 'base', + 'uploader', + 'lib/dnd', + 'widgets/widget' + ], function( Base, Uploader, Dnd ) { + var $ = Base.$; + + Uploader.options.dnd = ''; + + /** + * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 + * @namespace options + * @for Uploader + */ + + /** + * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 + * @namespace options + * @for Uploader + */ + + /** + * @event dndAccept + * @param {DataTransferItemList} items DataTransferItem + * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 + * @for Uploader + */ + return Uploader.register({ + name: 'dnd', + + init: function( opts ) { + + if ( !opts.dnd || + this.request('predict-runtime-type') !== 'html5' ) { + return; + } + + var me = this, + deferred = Base.Deferred(), + options = $.extend({}, { + disableGlobalDnd: opts.disableGlobalDnd, + container: opts.dnd, + accept: opts.accept + }), + dnd; + + this.dnd = dnd = new Dnd( options ); + + dnd.once( 'ready', deferred.resolve ); + dnd.on( 'drop', function( files ) { + me.request( 'add-file', [ files ]); + }); + + // 检测文件是否全部允许添加。 + dnd.on( 'accept', function( items ) { + return me.owner.trigger( 'dndAccept', items ); + }); + + dnd.init(); + + return deferred.promise(); + }, + + destroy: function() { + this.dnd && this.dnd.destroy(); + } + }); + }); + + /** + * @fileOverview 错误信息 + */ + define('lib/filepaste',[ + 'base', + 'mediator', + 'runtime/client' + ], function( Base, Mediator, RuntimeClient ) { + + var $ = Base.$; + + function FilePaste( opts ) { + opts = this.options = $.extend({}, opts ); + opts.container = $( opts.container || document.body ); + RuntimeClient.call( this, 'FilePaste', true ); + } + + Base.inherits( RuntimeClient, { + constructor: FilePaste, + + init: function() { + var me = this; + + me.connectRuntime( me.options, function() { + me.exec('init'); + me.trigger('ready'); + }); + } + }); + + Mediator.installTo( FilePaste.prototype ); + + return FilePaste; + }); + /** + * @fileOverview 组件基类。 + */ + define('widgets/filepaste',[ + 'base', + 'uploader', + 'lib/filepaste', + 'widgets/widget' + ], function( Base, Uploader, FilePaste ) { + var $ = Base.$; + + /** + * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. + * @namespace options + * @for Uploader + */ + return Uploader.register({ + name: 'paste', + + init: function( opts ) { + + if ( !opts.paste || + this.request('predict-runtime-type') !== 'html5' ) { + return; + } + + var me = this, + deferred = Base.Deferred(), + options = $.extend({}, { + container: opts.paste, + accept: opts.accept + }), + paste; + + this.paste = paste = new FilePaste( options ); + + paste.once( 'ready', deferred.resolve ); + paste.on( 'paste', function( files ) { + me.owner.request( 'add-file', [ files ]); + }); + paste.init(); + + return deferred.promise(); + }, + + destroy: function() { + this.paste && this.paste.destroy(); + } + }); + }); + /** + * @fileOverview Blob + */ + define('lib/blob',[ + 'base', + 'runtime/client' + ], function( Base, RuntimeClient ) { + + function Blob( ruid, source ) { + var me = this; + + me.source = source; + me.ruid = ruid; + this.size = source.size || 0; + + // 如果没有指定 mimetype, 但是知道文件后缀。 + if ( !source.type && this.ext && + ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { + this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); + } else { + this.type = source.type || 'application/octet-stream'; + } + + RuntimeClient.call( me, 'Blob' ); + this.uid = source.uid || this.uid; + + if ( ruid ) { + me.connectRuntime( ruid ); + } + } + + Base.inherits( RuntimeClient, { + constructor: Blob, + + slice: function( start, end ) { + return this.exec( 'slice', start, end ); + }, + + getSource: function() { + return this.source; + } + }); + + return Blob; + }); + /** + * 为了统一化Flash的File和HTML5的File而存在。 + * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 + * @fileOverview File + */ + define('lib/file',[ + 'base', + 'lib/blob' + ], function( Base, Blob ) { + + var uid = 1, + rExt = /\.([^.]+)$/; + + function File( ruid, file ) { + var ext; + + this.name = file.name || ('untitled' + uid++); + ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; + + // todo 支持其他类型文件的转换。 + // 如果有 mimetype, 但是文件名里面没有找出后缀规律 + if ( !ext && file.type ) { + ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? + RegExp.$1.toLowerCase() : ''; + this.name += '.' + ext; + } + + this.ext = ext; + this.lastModifiedDate = file.lastModifiedDate || + file.lastModified && new Date(file.lastModified).toLocaleString() || + (new Date()).toLocaleString(); + + Blob.apply( this, arguments ); + } + + return Base.inherits( Blob, File ); + }); + + /** + * @fileOverview 错误信息 + */ + define('lib/filepicker',[ + 'base', + 'runtime/client', + 'lib/file' + ], function( Base, RuntimeClient, File ) { + + var $ = Base.$; + + function FilePicker( opts ) { + opts = this.options = $.extend({}, FilePicker.options, opts ); + + opts.container = $( opts.id ); + + if ( !opts.container.length ) { + throw new Error('按钮指定错误'); + } + + opts.innerHTML = opts.innerHTML || opts.label || + opts.container.html() || ''; + + opts.button = $( opts.button || document.createElement('div') ); + opts.button.html( opts.innerHTML ); + opts.container.html( opts.button ); + + RuntimeClient.call( this, 'FilePicker', true ); + } + + FilePicker.options = { + button: null, + container: null, + label: null, + innerHTML: null, + multiple: true, + accept: null, + name: 'file', + style: 'cwebuploader-pick' //pick element class attribute, default is "cwebuploader-pick" + }; + + Base.inherits( RuntimeClient, { + constructor: FilePicker, + + init: function() { + var me = this, + opts = me.options, + button = opts.button, + style = opts.style; + + if (style) + button.addClass('cwebuploader-pick'); + + me.on( 'all', function( type ) { + var files; + + switch ( type ) { + case 'mouseenter': + if (style) + button.addClass('cwebuploader-pick-hover'); + break; + + case 'mouseleave': + if (style) + button.removeClass('cwebuploader-pick-hover'); + break; + + case 'change': + files = me.exec('getFiles'); + me.trigger( 'select', $.map( files, function( file ) { + file = new File( me.getRuid(), file ); + + // 记录来源。 + file._refer = opts.container; + return file; + }), opts.container ); + break; + } + }); + + me.connectRuntime( opts, function() { + me.refresh(); + me.exec( 'init', opts ); + me.trigger('ready'); + }); + + this._resizeHandler = Base.bindFn( this.refresh, this ); + $( window ).on( 'resize', this._resizeHandler ); + }, + + refresh: function() { + var shimContainer = this.getRuntime().getContainer(), + button = this.options.button, + /* + width = button.outerWidth ? + button.outerWidth() : button.width(), + + height = button.outerHeight ? + button.outerHeight() : button.height(), + */ + width = button[0] && button[0].offsetWidth || button.outerWidth() || button.width(), + height = button[0] && button[0].offsetHeight || button.outerHeight() || button.height(), + pos = button.offset(); + + width && height && shimContainer.css({ + bottom: 'auto', + right: 'auto', + width: width + 'px', + height: height + 'px' + }).offset( pos ); + }, + + enable: function() { + var btn = this.options.button; + + btn.removeClass('cwebuploader-pick-disable'); + this.refresh(); + }, + + disable: function() { + var btn = this.options.button; + + this.getRuntime().getContainer().css({ + top: '-99999px' + }); + + btn.addClass('cwebuploader-pick-disable'); + }, + + destroy: function() { + var btn = this.options.button; + $( window ).off( 'resize', this._resizeHandler ); + btn.removeClass('cwebuploader-pick-disable cwebuploader-pick-hover ' + + 'cwebuploader-pick'); + } + }); + + return FilePicker; + }); + + /** + * @fileOverview 文件选择相关 + */ + define('widgets/filepicker',[ + 'base', + 'uploader', + 'lib/filepicker', + 'widgets/widget' + ], function( Base, Uploader, FilePicker ) { + var $ = Base.$; + + $.extend( Uploader.options, { + + /** + * @property {Selector | Object} [pick=undefined] + * @namespace options + * @for Uploader + * @description 指定选择文件的按钮容器,不指定则不创建按钮。 + * + * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 + * * `label` {String} 请采用 `innerHTML` 代替 + * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 + * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 + */ + pick: null, + + /** + * @property {Array} [accept=null] + * @namespace options + * @for Uploader + * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 + * + * * `title` {String} 文字描述 + * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 + * * `mimeTypes` {String} 多个用逗号分割。 + * + * 如: + * + * ``` + * { + * title: 'Images', + * extensions: 'gif,jpg,jpeg,bmp,png', + * mimeTypes: 'image/*' + * } + * ``` + */ + accept: null/*{ + title: 'Images', + extensions: 'gif,jpg,jpeg,bmp,png', + mimeTypes: 'image/*' + }*/ + }); + + return Uploader.register({ + name: 'picker', + + init: function( opts ) { + this.pickers = []; + return opts.pick && this.addBtn( opts.pick ); + }, + + refresh: function() { + $.each( this.pickers, function() { + this.refresh(); + }); + }, + + /** + * @method addButton + * @for Uploader + * @grammar addButton( pick ) => Promise + * @description + * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#CWebUploader:Uploader:options)一致。 + * @example + * uploader.addButton({ + * id: '#btnContainer', + * innerHTML: '选择文件' + * }); + */ + addBtn: function( pick ) { + var me = this, + opts = me.options, + accept = opts.accept, + promises = []; + + if ( !pick ) { + return; + } + + $.isPlainObject( pick ) || (pick = { + id: pick + }); + + $( pick.id ).each(function() { + var options, picker, deferred; + + deferred = Base.Deferred(); + + options = $.extend({}, pick, { + accept: $.isPlainObject( accept ) ? [ accept ] : accept, + swf: opts.swf, + runtimeOrder: opts.runtimeOrder, + id: this + }); + + picker = new FilePicker( options ); + + picker.once( 'ready', deferred.resolve ); + picker.on( 'select', function( files ) { + me.owner.request( 'add-file', [ files ]); + }); + picker.on('dialogopen', function() { + me.owner.trigger('dialogOpen', picker.button); + }); + picker.init(); + + me.pickers.push( picker ); + + promises.push( deferred.promise() ); + }); + + return Base.when.apply( Base, promises ); + }, + + disable: function() { + $.each( this.pickers, function() { + this.disable(); + }); + }, + + enable: function() { + $.each( this.pickers, function() { + this.enable(); + }); + }, + + destroy: function() { + $.each( this.pickers, function() { + this.destroy(); + }); + this.pickers = null; + } + }); + }); + /** + * @fileOverview Image + */ + define('lib/image',[ + 'base', + 'runtime/client', + 'lib/blob' + ], function( Base, RuntimeClient, Blob ) { + var $ = Base.$; + + // 构造器。 + function Image( opts ) { + this.options = $.extend({}, Image.options, opts ); + RuntimeClient.call( this, 'Image' ); + + this.on( 'load', function() { + this._info = this.exec('info'); + this._meta = this.exec('meta'); + }); + } + + // 默认选项。 + Image.options = { + + // 默认的图片处理质量 + quality: 90, + + // 是否裁剪 + crop: false, + + // 是否保留头部信息 + preserveHeaders: false, + + // 是否允许放大。 + allowMagnify: false + }; + + // 继承RuntimeClient. + Base.inherits( RuntimeClient, { + constructor: Image, + + info: function( val ) { + + // setter + if ( val ) { + this._info = val; + return this; + } + + // getter + return this._info; + }, + + meta: function( val ) { + + // setter + if ( val ) { + this._meta = val; + return this; + } + + // getter + return this._meta; + }, + + loadFromBlob: function( blob ) { + var me = this, + ruid = blob.getRuid(); + + this.connectRuntime( ruid, function() { + me.exec( 'init', me.options ); + me.exec( 'loadFromBlob', blob ); + }); + }, + + resize: function() { + var args = Base.slice( arguments ); + return this.exec.apply( this, [ 'resize' ].concat( args ) ); + }, + + crop: function() { + var args = Base.slice( arguments ); + return this.exec.apply( this, [ 'crop' ].concat( args ) ); + }, + + getAsDataUrl: function( type ) { + return this.exec( 'getAsDataUrl', type ); + }, + + getAsBlob: function( type ) { + var blob = this.exec( 'getAsBlob', type ); + + return new Blob( this.getRuid(), blob ); + } + }); + + return Image; + }); + /** + * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 + */ + define('widgets/image',[ + 'base', + 'uploader', + 'lib/image', + 'widgets/widget' + ], function( Base, Uploader, Image ) { + + var $ = Base.$, + throttle; + + // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 + throttle = (function( max ) { + var occupied = 0, + waiting = [], + tick = function() { + var item; + + while ( waiting.length && occupied < max ) { + item = waiting.shift(); + occupied += item[ 0 ]; + item[ 1 ](); + } + }; + + return function( emiter, size, cb ) { + waiting.push([ size, cb ]); + emiter.once( 'destroy', function() { + occupied -= size; + setTimeout( tick, 1 ); + }); + setTimeout( tick, 1 ); + }; + })( 5 * 1024 * 1024 ); + + $.extend( Uploader.options, { + + /** + * @property {Object} [thumb] + * @namespace options + * @for Uploader + * @description 配置生成缩略图的选项。 + * + * 默认为: + * + * ```javascript + * { + * width: 110, + * height: 110, + * + * // 图片质量,只有type为`image/jpeg`的时候才有效。 + * quality: 70, + * + * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. + * allowMagnify: true, + * + * // 是否允许裁剪。 + * crop: true, + * + * // 为空的话则保留原有图片格式。 + * // 否则强制转换成指定的类型。 + * type: 'image/jpeg' + * } + * ``` + */ + thumb: { + width: 110, + height: 110, + quality: 70, + allowMagnify: true, + crop: true, + preserveHeaders: false, + + // 为空的话则保留原有图片格式。 + // 否则强制转换成指定的类型。 + // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 + // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg + type: 'image/jpeg' + }, + + /** + * @property {Object} [compress] + * @namespace options + * @for Uploader + * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 + * + * 默认为: + * + * ```javascript + * { + * width: 1600, + * height: 1600, + * + * // 图片质量,只有type为`image/jpeg`的时候才有效。 + * quality: 90, + * + * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. + * allowMagnify: false, + * + * // 是否允许裁剪。 + * crop: false, + * + * // 是否保留头部meta信息。 + * preserveHeaders: true, + * + * // 如果发现压缩后文件大小比原来还大,则使用原来图片 + * // 此属性可能会影响图片自动纠正功能 + * noCompressIfLarger: false, + * + * // 单位字节,如果图片大小小于此值,不会采用压缩。 + * compressSize: 0 + * } + * ``` + */ + compress: { + width: 1600, + height: 1600, + quality: 90, + allowMagnify: false, + crop: false, + preserveHeaders: false + } + }); + + return Uploader.register({ + + name: 'image', + + + /** + * 生成缩略图,此过程为异步,所以需要传入`callback`。 + * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 + * + * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 + * + * `callback`中可以接收到两个参数。 + * * 第一个为error,如果生成缩略图有错误,此error将为真。 + * * 第二个为ret, 缩略图的Data URL值。 + * + * **注意** + * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 + * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 + * + * @method makeThumb + * @grammar makeThumb( file, callback ) => undefined + * @grammar makeThumb( file, callback, width, height ) => undefined + * @for Uploader + * @example + * + * uploader.on( 'fileQueued', function( file ) { + * var $li = ...; + * + * uploader.makeThumb( file, function( error, ret ) { + * if ( error ) { + * $li.text('预览错误'); + * } else { + * $li.append(''); + * } + * }); + * + * }); + */ + makeThumb: function( file, cb, width, height ) { + var opts, image; + + file = this.request( 'get-file', file ); + + // 只预览图片格式。 + if ( !file.type.match( /^image/ ) ) { + cb( true ); + return; + } + + opts = $.extend({}, this.options.thumb ); + + // 如果传入的是object. + if ( $.isPlainObject( width ) ) { + opts = $.extend( opts, width ); + width = null; + } + + width = width || opts.width; + height = height || opts.height; + + image = new Image( opts ); + + image.once( 'load', function() { + file._info = file._info || image.info(); + file._meta = file._meta || image.meta(); + + // 如果 width 的值介于 0 - 1 + // 说明设置的是百分比。 + if ( width <= 1 && width > 0 ) { + width = file._info.width * width; + } + + // 同样的规则应用于 height + if ( height <= 1 && height > 0 ) { + height = file._info.height * height; + } + + image.resize( width, height ); + }); + + // 当 resize 完后 + image.once( 'complete', function() { + cb( false, image.getAsDataUrl( opts.type ) ); + image.destroy(); + }); + + image.once( 'error', function( reason ) { + cb( reason || true ); + image.destroy(); + }); + + throttle( image, file.source.size, function() { + file._info && image.info( file._info ); + file._meta && image.meta( file._meta ); + image.loadFromBlob( file.source ); + }); + }, + + beforeSendFile: function( file ) { + var opts = this.options.compress || this.options.resize, + compressSize = opts && opts.compressSize || 0, + noCompressIfLarger = opts && opts.noCompressIfLarger || false, + pngtojpg = opts && opts.pngtojpg || false, + image, deferred; + + file = this.request( 'get-file', file ); + + // 只压缩 jpeg 图片格式。 + // gif 可能会丢失针 + // bmp png 基本上尺寸都不大,且压缩比比较小。 + if ( !opts || !~'image/jpeg,image/jpg,image/png,image/bmp'.indexOf( file.type ) || + (file.size < compressSize && !(pngtojpg && file.type == 'image/png')) || + file._compressed ) { + return; + } + + opts = $.extend({}, opts ); + deferred = Base.Deferred(); + + image = new Image( opts ); + + deferred.always(function() { + image.destroy(); + image = null; + }); + image.once( 'error', deferred.reject ); + image.once( 'load', function() { + var width = opts.width, + height = opts.height; + + file._info = file._info || image.info(); + file._meta = file._meta || image.meta(); + + // 如果 width 的值介于 0 - 1 + // 说明设置的是百分比。 + if ( width <= 1 && width > 0 ) { + width = file._info.width * width; + } + + // 同样的规则应用于 height + if ( height <= 1 && height > 0 ) { + height = file._info.height * height; + } + + image.resize( width, height ); + }); + + image.once( 'complete', function() { + var blob, size; + + // 移动端 UC / qq 浏览器的无图模式下 + // ctx.getImageData 处理大图的时候会报 Exception + // INDEX_SIZE_ERR: DOM Exception 1 + try { + var paste = file.source.paste; + if(paste || (pngtojpg && file.type == 'image/png')){ + file.type = 'image/jpeg'; + file.name = file.name.replace('.png', '.jpg'); + } + blob = image.getAsBlob( file.type ); + + size = file.size; + + // 如果压缩后,比原来还大则不用压缩后的。 + console.log(blob.size); + if ( !noCompressIfLarger || blob.size < size ) { + // file.source.destroy && file.source.destroy(); + file.source = blob; + file.source.paste = paste; + file.size = blob.size; + + file.trigger( 'resize', blob.size, size ); + } + + // 标记,避免重复压缩。 + file._compressed = true; + deferred.resolve(); + } catch ( e ) { + // 出错了直接继续,让其上传原始图片 + deferred.resolve(); + } + }); + + file._info && image.info( file._info ); + file._meta && image.meta( file._meta ); + + image.loadFromBlob( file.source ); + return deferred.promise(); + } + }); + }); + /** + * @fileOverview 文件属性封装 + */ + define('file',[ + 'base', + 'mediator' + ], function( Base, Mediator ) { + + var $ = Base.$, + idPrefix = 'WU_FILE_', + idSuffix = 0, + rExt = /\.([^.]+)$/, + statusMap = {}; + + function gid() { + return idPrefix + idSuffix++; + } + + /** + * 文件类 + * @class File + * @constructor 构造函数 + * @grammar new File( source ) => File + * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 + */ + function WUFile( source ) { + + /** + * 文件名,包括扩展名(后缀) + * @property name + * @type {string} + */ + this.name = source.name || 'Untitled'; + + /** + * 文件体积(字节) + * @property size + * @type {uint} + * @default 0 + */ + this.size = source.size || 0; + + /** + * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) + * @property type + * @type {string} + * @default 'application/octet-stream' + */ + this.type = source.type || 'application/octet-stream'; + + /** + * 文件最后修改日期 + * @property lastModifiedDate + * @type {int} + * @default 当前时间戳 + */ + this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); + + /** + * 文件ID,每个对象具有唯一ID,与文件名无关 + * @property id + * @type {string} + */ + this.id = gid(); + + /** + * 文件扩展名,通过文件名获取,例如test.png的扩展名为png + * @property ext + * @type {string} + */ + this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; + + + /** + * 状态文字说明。在不同的status语境下有不同的用途。 + * @property statusText + * @type {string} + */ + this.statusText = ''; + + // 存储文件状态,防止通过属性直接修改 + statusMap[ this.id ] = WUFile.Status.INITED; + + this.source = source; + this.loaded = 0; + + this.on( 'error', function( msg ) { + this.setStatus( WUFile.Status.ERROR, msg ); + }); + } + + $.extend( WUFile.prototype, { + + /** + * 设置状态,状态变化时会触发`change`事件。 + * @method setStatus + * @grammar setStatus( status[, statusText] ); + * @param {File.Status|String} status [文件状态值](#CWebUploader:File:File.Status) + * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 + */ + setStatus: function( status, text ) { + + var prevStatus = statusMap[ this.id ]; + + typeof text !== 'undefined' && (this.statusText = text); + + if ( status !== prevStatus ) { + statusMap[ this.id ] = status; + /** + * 文件状态变化 + * @event statuschange + */ + this.trigger( 'statuschange', status, prevStatus ); + } + + }, + + /** + * 获取文件状态 + * @return {File.Status} + * @example + 文件状态具体包括以下几种类型: + { + // 初始化 + INITED: 0, + // 已入队列 + QUEUED: 1, + // 正在上传 + PROGRESS: 2, + // 上传出错 + ERROR: 3, + // 上传成功 + COMPLETE: 4, + // 上传取消 + CANCELLED: 5 + } + */ + getStatus: function() { + return statusMap[ this.id ]; + }, + + /** + * 获取文件原始信息。 + * @return {*} + */ + getSource: function() { + return this.source; + }, + + destroy: function() { + this.off(); + delete statusMap[ this.id ]; + } + }); + + Mediator.installTo( WUFile.prototype ); + + /** + * 文件状态值,具体包括以下几种类型: + * * `inited` 初始状态 + * * `queued` 已经进入队列, 等待上传 + * * `progress` 上传中 + * * `complete` 上传完成。 + * * `error` 上传出错,可重试 + * * `interrupt` 上传中断,可续传。 + * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 + * * `cancelled` 文件被移除。 + * @property {Object} Status + * @namespace File + * @class File + * @static + */ + WUFile.Status = { + INITED: 'inited', // 初始状态 + QUEUED: 'queued', // 已经进入队列, 等待上传 + PROGRESS: 'progress', // 上传中 + ERROR: 'error', // 上传出错,可重试 + COMPLETE: 'complete', // 上传完成。 + CANCELLED: 'cancelled', // 上传取消。 + INTERRUPT: 'interrupt', // 上传中断,可续传。 + INVALID: 'invalid' // 文件不合格,不能重试上传。 + }; + + return WUFile; + }); + + /** + * @fileOverview 文件队列 + */ + define('queue',[ + 'base', + 'mediator', + 'file' + ], function( Base, Mediator, WUFile ) { + + var $ = Base.$, + STATUS = WUFile.Status; + + /** + * 文件队列, 用来存储各个状态中的文件。 + * @class Queue + * @extends Mediator + */ + function Queue() { + + /** + * 统计文件数。 + * * `numOfQueue` 队列中的文件数。 + * * `numOfSuccess` 上传成功的文件数 + * * `numOfCancel` 被取消的文件数 + * * `numOfProgress` 正在上传中的文件数 + * * `numOfUploadFailed` 上传错误的文件数。 + * * `numOfInvalid` 无效的文件数。 + * * `numOfDeleted` 被移除的文件数。 + * * `numOfInterrupt` 被中断的文件数。 + * @property {Object} stats + */ + this.stats = { + numOfQueue: 0, + numOfSuccess: 0, + numOfCancel: 0, + numOfProgress: 0, + numOfUploadFailed: 0, + numOfInvalid: 0, + numOfDeleted: 0, + numOfInterrupt: 0 + }; + + // 上传队列,仅包括等待上传的文件 + this._queue = []; + + // 存储所有文件 + this._map = {}; + } + + $.extend( Queue.prototype, { + + /** + * 将新文件加入对队列尾部 + * + * @method append + * @param {File} file 文件对象 + */ + append: function( file ) { + this._queue.push( file ); + this._fileAdded( file ); + return this; + }, + + /** + * 将新文件加入对队列头部 + * + * @method prepend + * @param {File} file 文件对象 + */ + prepend: function( file ) { + this._queue.unshift( file ); + this._fileAdded( file ); + return this; + }, + + /** + * 获取文件对象 + * + * @method getFile + * @param {String} fileId 文件ID + * @return {File} + */ + getFile: function( fileId ) { + if ( typeof fileId !== 'string' ) { + return fileId; + } + return this._map[ fileId ]; + }, + + /** + * 从队列中取出一个指定状态的文件。 + * @grammar fetch( status ) => File + * @method fetch + * @param {String} status [文件状态值](#CWebUploader:File:File.Status) + * @return {File} [File](#CWebUploader:File) + */ + fetch: function( status ) { + var len = this._queue.length, + i, file; + + status = status || STATUS.QUEUED; + + for ( i = 0; i < len; i++ ) { + file = this._queue[ i ]; + + if ( status === file.getStatus() ) { + return file; + } + } + + return null; + }, + + /** + * 对队列进行排序,能够控制文件上传顺序。 + * @grammar sort( fn ) => undefined + * @method sort + * @param {Function} fn 排序方法 + */ + sort: function( fn ) { + if ( typeof fn === 'function' ) { + this._queue.sort( fn ); + } + }, + + /** + * 获取指定类型的文件列表, 列表中每一个成员为[File](#CWebUploader:File)对象。 + * @grammar getFiles( [status1[, status2 ...]] ) => Array + * @method getFiles + * @param {String} [status] [文件状态值](#CWebUploader:File:File.Status) + */ + getFiles: function() { + var sts = [].slice.call( arguments, 0 ), + ret = [], + i = 0, + len = this._queue.length, + file; + + for ( ; i < len; i++ ) { + file = this._queue[ i ]; + + if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { + continue; + } + + ret.push( file ); + } + + return ret; + }, + + /** + * 在队列中删除文件。 + * @grammar removeFile( file ) => Array + * @method removeFile + * @param {File} 文件对象。 + */ + removeFile: function( file ) { + var me = this, + existing = this._map[ file.id ]; + + if ( existing ) { + delete this._map[ file.id ]; + this._delFile(file); + file.destroy(); + this.stats.numOfDeleted++; + + } + }, + + _fileAdded: function( file ) { + var me = this, + existing = this._map[ file.id ]; + + if ( !existing ) { + this._map[ file.id ] = file; + + file.on( 'statuschange', function( cur, pre ) { + me._onFileStatusChange( cur, pre ); + }); + } + }, + + _delFile : function(file){ + for(var i = this._queue.length - 1 ; i >= 0 ; i-- ){ + if(this._queue[i] == file){ + this._queue.splice(i,1); + break; + } + } + }, + + _onFileStatusChange: function( curStatus, preStatus ) { + var stats = this.stats; + + switch ( preStatus ) { + case STATUS.PROGRESS: + stats.numOfProgress--; + break; + + case STATUS.QUEUED: + stats.numOfQueue --; + break; + + case STATUS.ERROR: + stats.numOfUploadFailed--; + break; + + case STATUS.INVALID: + stats.numOfInvalid--; + break; + + case STATUS.INTERRUPT: + stats.numOfInterrupt--; + break; + } + + switch ( curStatus ) { + case STATUS.QUEUED: + stats.numOfQueue++; + break; + + case STATUS.PROGRESS: + stats.numOfProgress++; + break; + + case STATUS.ERROR: + stats.numOfUploadFailed++; + break; + + case STATUS.COMPLETE: + stats.numOfSuccess++; + break; + + case STATUS.CANCELLED: + stats.numOfCancel++; + break; + + + case STATUS.INVALID: + stats.numOfInvalid++; + break; + + case STATUS.INTERRUPT: + stats.numOfInterrupt++; + break; + } + } + + }); + + Mediator.installTo( Queue.prototype ); + + return Queue; + }); + + /** + * @fileOverview 队列 + */ + define('widgets/queue',[ + 'base', + 'uploader', + 'queue', + 'file', + 'lib/file', + 'runtime/client', + 'widgets/widget' + ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { + + var $ = Base.$, + rExt = /\.\w+$/, + Status = WUFile.Status; + + return Uploader.register({ + name: 'queue', + + init: function( opts ) { + var me = this, + deferred, len, i, item, arr, accept, runtime; + + if ( $.isPlainObject( opts.accept ) ) { + opts.accept = [ opts.accept ]; + } + + // accept中的中生成匹配正则。 + if ( opts.accept ) { + arr = []; + + for ( i = 0, len = opts.accept.length; i < len; i++ ) { + item = opts.accept[ i ].extensions; + item && arr.push( item ); + } + + if ( arr.length ) { + accept = '\\.' + arr.join(',') + .replace( /,/g, '$|\\.' ) + .replace( /\*/g, '.*' ) + '$'; + } + + me.accept = new RegExp( accept, 'i' ); + } + + me.queue = new Queue(); + me.stats = me.queue.stats; + + // 如果当前不是html5运行时,那就算了。 + // 不执行后续操作 + if ( this.request('predict-runtime-type') !== 'html5' ) { + return; + } + + // 创建一个 html5 运行时的 placeholder + // 以至于外部添加原生 File 对象的时候能正确包裹一下供 cwebuploader 使用。 + deferred = Base.Deferred(); + this.placeholder = runtime = new RuntimeClient('Placeholder'); + runtime.connectRuntime({ + runtimeOrder: 'html5' + }, function() { + me._ruid = runtime.getRuid(); + deferred.resolve(); + }); + return deferred.promise(); + }, + + + // 为了支持外部直接添加一个原生File对象。 + _wrapFile: function( file ) { + if ( !(file instanceof WUFile) ) { + + if ( !(file instanceof File) ) { + if ( !this._ruid ) { + throw new Error('Can\'t add external files.'); + } + file = new File( this._ruid, file ); + } + + file = new WUFile( file ); + } + + return file; + }, + + // 判断文件是否可以被加入队列 + acceptFile: function( file ) { + var invalid = !file || !file.size || this.accept && + + // 如果名字中有后缀,才做后缀白名单处理。 + rExt.exec( file.name ) && !this.accept.test( file.name ); + + return !invalid; + }, + + + /** + * @event beforeFileQueued + * @param {File} file File对象 + * @description 当文件被加入队列之前触发。如果此事件handler的返回值为`false`,则此文件不会被添加进入队列。 + * @for Uploader + */ + + /** + * @event fileQueued + * @param {File} file File对象 + * @description 当文件被加入队列以后触发。 + * @for Uploader + */ + + _addFile: function( file ) { + var me = this; + + file = me._wrapFile( file ); + + // 不过类型判断允许不允许,先派送 `beforeFileQueued` + if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { + return; + } + + // 类型不匹配,则派送错误事件,并返回。 + if ( !me.acceptFile( file ) ) { + me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); + return; + } + + me.queue.append( file ); + me.owner.trigger( 'fileQueued', file ); + return file; + }, + + getFile: function( fileId ) { + return this.queue.getFile( fileId ); + }, + + /** + * @event filesQueued + * @param {File} files 数组,内容为原始File(lib/File)对象。 + * @description 当一批文件添加进队列以后触发。 + * @for Uploader + */ + + /** + * @property {Boolean} [auto=false] + * @namespace options + * @for Uploader + * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 + * + */ + + /** + * @method addFiles + * @grammar addFiles( file ) => undefined + * @grammar addFiles( [file1, file2 ...] ) => undefined + * @param {Array of File or File} [files] Files 对象 数组 + * @description 添加文件到队列 + * @for Uploader + */ + addFile: function( files ) { + var me = this; + + if ( !files.length ) { + files = [ files ]; + } + + files = $.map( files, function( file ) { + return me._addFile( file ); + }); + + if ( files.length ) { + + me.owner.trigger( 'filesQueued', files ); + + if ( me.options.auto ) { + setTimeout(function() { + me.request('start-upload'); + }, 20 ); + } + } + }, + + getStats: function() { + return this.stats; + }, + + /** + * @event fileDequeued + * @param {File} file File对象 + * @description 当文件被移除队列后触发。 + * @for Uploader + */ + + /** + * @method removeFile + * @grammar removeFile( file ) => undefined + * @grammar removeFile( id ) => undefined + * @grammar removeFile( file, true ) => undefined + * @grammar removeFile( id, true ) => undefined + * @param {File|id} file File对象或这File对象的id + * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 + * @for Uploader + * @example + * + * $li.on('click', '.remove-this', function() { + * uploader.removeFile( file ); + * }) + */ + removeFile: function( file, remove ) { + var me = this; + + file = file.id ? file : me.queue.getFile( file ); + + this.request( 'cancel-file', file ); + + if ( remove ) { + this.queue.removeFile( file ); + } + }, + + /** + * @method getFiles + * @grammar getFiles() => Array + * @grammar getFiles( status1, status2, status... ) => Array + * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 + * @for Uploader + * @example + * console.log( uploader.getFiles() ); // => all files + * console.log( uploader.getFiles('error') ) // => all error files. + */ + getFiles: function() { + return this.queue.getFiles.apply( this.queue, arguments ); + }, + + fetchFile: function() { + return this.queue.fetch.apply( this.queue, arguments ); + }, + + /** + * @method retry + * @grammar retry() => undefined + * @grammar retry( file ) => undefined + * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 + * @for Uploader + * @example + * function retry() { + * uploader.retry(); + * } + */ + retry: function( file, noForceStart ) { + var me = this, + files, i, len; + + if ( file ) { + file = file.id ? file : me.queue.getFile( file ); + file.setStatus( Status.QUEUED ); + noForceStart || me.request('start-upload'); + return; + } + + files = me.queue.getFiles( Status.ERROR ); + i = 0; + len = files.length; + + for ( ; i < len; i++ ) { + file = files[ i ]; + file.setStatus( Status.QUEUED ); + } + + me.request('start-upload'); + }, + + /** + * @method sort + * @grammar sort( fn ) => undefined + * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 + * @for Uploader + */ + sortFiles: function() { + return this.queue.sort.apply( this.queue, arguments ); + }, + + /** + * @event reset + * @description 当 uploader 被重置的时候触发。 + * @for Uploader + */ + + /** + * @method reset + * @grammar reset() => undefined + * @description 重置uploader。目前只重置了队列。 + * @for Uploader + * @example + * uploader.reset(); + */ + reset: function() { + this.owner.trigger('reset'); + this.queue = new Queue(); + this.stats = this.queue.stats; + }, + + destroy: function() { + this.reset(); + this.placeholder && this.placeholder.destroy(); + } + }); + + }); + /** + * @fileOverview 添加获取Runtime相关信息的方法。 + */ + define('widgets/runtime',[ + 'uploader', + 'runtime/runtime', + 'widgets/widget' + ], function( Uploader, Runtime ) { + + Uploader.support = function() { + return Runtime.hasRuntime.apply( Runtime, arguments ); + }; + + /** + * @property {Object} [runtimeOrder=html5,flash] + * @namespace options + * @for Uploader + * @description 指定运行时启动顺序。默认会先尝试 html5 是否支持,如果支持则使用 html5, 否则使用 flash. + * + * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 + */ + + return Uploader.register({ + name: 'runtime', + + init: function() { + if ( !this.predictRuntimeType() ) { + throw Error('Runtime Error'); + } + }, + + /** + * 预测Uploader将采用哪个`Runtime` + * @grammar predictRuntimeType() => String + * @method predictRuntimeType + * @for Uploader + */ + predictRuntimeType: function() { + var orders = this.options.runtimeOrder || Runtime.orders, + type = this.type, + i, len; + + if ( !type ) { + orders = orders.split( /\s*,\s*/g ); + + for ( i = 0, len = orders.length; i < len; i++ ) { + if ( Runtime.hasRuntime( orders[ i ] ) ) { + this.type = type = orders[ i ]; + break; + } + } + } + + return type; + } + }); + }); + /** + * @fileOverview Transport + */ + define('lib/transport',[ + 'base', + 'runtime/client', + 'mediator' + ], function( Base, RuntimeClient, Mediator ) { + + var $ = Base.$; + + function Transport( opts ) { + var me = this; + + opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); + RuntimeClient.call( this, 'Transport' ); + + this._blob = null; + this._formData = opts.formData || {}; + this._headers = opts.headers || {}; + + this.on( 'progress', this._timeout ); + this.on( 'load error', function() { + me.trigger( 'progress', 1 ); + clearTimeout( me._timer ); + }); + } + + Transport.options = { + server: '', + method: 'POST', + + // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 + withCredentials: false, + fileVal: 'file', + timeout: 2 * 60 * 1000, // 2分钟 + formData: {}, + headers: {}, + sendAsBinary: false + }; + + $.extend( Transport.prototype, { + + // 添加Blob, 只能添加一次,最后一次有效。 + appendBlob: function( key, blob, filename ) { + var me = this, + opts = me.options; + + if ( me.getRuid() ) { + me.disconnectRuntime(); + } + + // 连接到blob归属的同一个runtime. + me.connectRuntime( blob.ruid, function() { + me.exec('init'); + }); + + me._blob = blob; + opts.fileVal = key || opts.fileVal; + opts.filename = filename || opts.filename; + }, + + // 添加其他字段 + append: function( key, value ) { + if ( typeof key === 'object' ) { + $.extend( this._formData, key ); + } else { + this._formData[ key ] = value; + } + }, + + setRequestHeader: function( key, value ) { + if ( typeof key === 'object' ) { + $.extend( this._headers, key ); + } else { + this._headers[ key ] = value; + } + }, + + send: function( method ) { + this.exec( 'send', method ); + this._timeout(); + }, + + abort: function() { + clearTimeout( this._timer ); + return this.exec('abort'); + }, + + destroy: function() { + this.trigger('destroy'); + this.off(); + this.exec('destroy'); + this.disconnectRuntime(); + }, + + getResponseHeaders: function() { + return this.exec('getResponseHeaders'); + }, + + getResponse: function() { + return this.exec('getResponse'); + }, + + getResponseAsJson: function() { + return this.exec('getResponseAsJson'); + }, + + getStatus: function() { + return this.exec('getStatus'); + }, + + _timeout: function() { + var me = this, + duration = me.options.timeout; + + if ( !duration ) { + return; + } + + clearTimeout( me._timer ); + me._timer = setTimeout(function() { + me.abort(); + me.trigger( 'error', 'timeout' ); + }, duration ); + } + + }); + + // 让Transport具备事件功能。 + Mediator.installTo( Transport.prototype ); + + return Transport; + }); + + /** + * @fileOverview 负责文件上传相关。 + */ + define('widgets/upload',[ + 'base', + 'uploader', + 'file', + 'lib/transport', + 'widgets/widget' + ], function( Base, Uploader, WUFile, Transport ) { + + var $ = Base.$, + isPromise = Base.isPromise, + Status = WUFile.Status; + + // 添加默认配置项 + $.extend( Uploader.options, { + + + /** + * @property {Boolean} [prepareNextFile=false] + * @namespace options + * @for Uploader + * @description 是否允许在文件传输时提前把下一个文件准备好。 + * 某些文件的准备工作比较耗时,比如图片压缩,md5序列化。 + * 如果能提前在当前文件传输期处理,可以节省总体耗时。 + */ + prepareNextFile: false, + + /** + * @property {Boolean} [chunked=false] + * @namespace options + * @for Uploader + * @description 是否要分片处理大文件上传。 + */ + chunked: false, + + /** + * @property {Boolean} [chunkSize=5242880] + * @namespace options + * @for Uploader + * @description 如果要分片,分多大一片? 默认大小为5M. + */ + chunkSize: 5 * 1024 * 1024, + + /** + * @property {Boolean} [chunkRetry=2] + * @namespace options + * @for Uploader + * @description 如果某个分片由于网络问题出错,允许自动重传多少次? + */ + chunkRetry: 2, + + /** + * @property {Number} [chunkRetryDelay=1000] + * @namespace options + * @for Uploader + * @description 开启重试后,设置重试延时时间, 单位毫秒。默认1000毫秒,即1秒. + */ + chunkRetryDelay: 1000, + + /** + * @property {Boolean} [threads=3] + * @namespace options + * @for Uploader + * @description 上传并发数。允许同时最大上传进程数。 + */ + threads: 3, + + + /** + * @property {Object} [formData={}] + * @namespace options + * @for Uploader + * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 + */ + formData: {} + + /** + * @property {Object} [fileVal='file'] + * @namespace options + * @for Uploader + * @description 设置文件上传域的name。 + */ + + /** + * @property {Object} [method=POST] + * @namespace options + * @for Uploader + * @description 文件上传方式,`POST` 或者 `GET`。 + */ + + /** + * @property {Object} [sendAsBinary=false] + * @namespace options + * @for Uploader + * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, + * 其他参数在$_GET数组中。 + */ + }); + + // 负责将文件切片。 + function CuteFile( file, chunkSize ) { + var pending = [], + blob = file.source, + total = blob.size, + chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, + start = 0, + index = 0, + len, api; + + api = { + file: file, + + has: function() { + return !!pending.length; + }, + + shift: function() { + return pending.shift(); + }, + + unshift: function( block ) { + pending.unshift( block ); + } + }; + + while ( index < chunks ) { + len = Math.min( chunkSize, total - start ); + + pending.push({ + file: file, + start: start, + end: chunkSize ? (start + len) : total, + total: total, + chunks: chunks, + chunk: index++, + cuted: api + }); + start += len; + } + + file.blocks = pending.concat(); + file.remaning = pending.length; + + return api; + } + + Uploader.register({ + name: 'upload', + + init: function() { + var owner = this.owner, + me = this; + + this.runing = false; + this.progress = false; + + owner + .on( 'startUpload', function() { + me.progress = true; + }) + .on( 'uploadFinished', function() { + me.progress = false; + }); + + // 记录当前正在传的数据,跟threads相关 + this.pool = []; + + // 缓存分好片的文件。 + this.stack = []; + + // 缓存即将上传的文件。 + this.pending = []; + + // 跟踪还有多少分片在上传中但是没有完成上传。 + this.remaning = 0; + this.__tick = Base.bindFn( this._tick, this ); + + // 销毁上传相关的属性。 + owner.on( 'uploadComplete', function( file ) { + + // 把其他块取消了。 + file.blocks && $.each( file.blocks, function( _, v ) { + v.transport && (v.transport.abort(), v.transport.destroy()); + delete v.transport; + }); + + delete file.blocks; + delete file.remaning; + }); + }, + + reset: function() { + this.request( 'stop-upload', true ); + this.runing = false; + this.pool = []; + this.stack = []; + this.pending = []; + this.remaning = 0; + this._trigged = false; + this._promise = null; + }, + + /** + * @event startUpload + * @description 当开始上传流程时触发。 + * @for Uploader + */ + + /** + * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 + * + * 可以指定开始某一个文件。 + * @grammar upload() => undefined + * @grammar upload( file | fileId) => undefined + * @method upload + * @for Uploader + */ + startUpload: function(file) { + var me = this; + + // 移出invalid的文件 + $.each( me.request( 'get-files', Status.INVALID ), function() { + me.request( 'remove-file', this ); + }); + + // 如果指定了开始某个文件,则只开始指定的文件。 + if ( file ) { + file = file.id ? file : me.request( 'get-file', file ); + + if (file.getStatus() === Status.INTERRUPT) { + file.setStatus( Status.QUEUED ); + + $.each( me.pool, function( _, v ) { + + // 之前暂停过。 + if (v.file !== file) { + return; + } + + v.transport && v.transport.send(); + file.setStatus( Status.PROGRESS ); + }); + + + } else if (file.getStatus() !== Status.PROGRESS) { + file.setStatus( Status.QUEUED ); + } + } else { + $.each( me.request( 'get-files', [ Status.INITED ] ), function() { + this.setStatus( Status.QUEUED ); + }); + } + + if ( me.runing ) { + me.owner.trigger('startUpload', file);// 开始上传或暂停恢复的,trigger event + return Base.nextTick( me.__tick ); + } + + me.runing = true; + var files = []; + + // 如果有暂停的,则续传 + file || $.each( me.pool, function( _, v ) { + var file = v.file; + + if ( file.getStatus() === Status.INTERRUPT ) { + me._trigged = false; + files.push(file); + + if (v.waiting) { + return; + } + + // 文件 prepare 完后,如果暂停了,这个时候只会把文件插入 pool, 而不会创建 tranport, + v.transport ? v.transport.send() : me._doSend(v); + } + }); + + $.each(files, function() { + this.setStatus( Status.PROGRESS ); + }); + + file || $.each( me.request( 'get-files', + Status.INTERRUPT ), function() { + this.setStatus( Status.PROGRESS ); + }); + + me._trigged = false; + Base.nextTick( me.__tick ); + me.owner.trigger('startUpload'); + }, + + /** + * @event stopUpload + * @description 当开始上传流程暂停时触发。 + * @for Uploader + */ + + /** + * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 + * + * 如果第一个参数是文件,则只暂停指定文件。 + * @grammar stop() => undefined + * @grammar stop( true ) => undefined + * @grammar stop( file ) => undefined + * @method stop + * @for Uploader + */ + stopUpload: function( file, interrupt ) { + var me = this; + + if (file === true) { + interrupt = file; + file = null; + } + + if ( me.runing === false ) { + return; + } + + // 如果只是暂停某个文件。 + if ( file ) { + file = file.id ? file : me.request( 'get-file', file ); + + if ( file.getStatus() !== Status.PROGRESS && + file.getStatus() !== Status.QUEUED ) { + return; + } + + file.setStatus( Status.INTERRUPT ); + + + $.each( me.pool, function( _, v ) { + + // 只 abort 指定的文件,每一个分片。 + if (v.file === file) { + v.transport && v.transport.abort(); + + if (interrupt) { + me._putback(v); + me._popBlock(v); + } + } + }); + + me.owner.trigger('stopUpload', file);// 暂停,trigger event + + return Base.nextTick( me.__tick ); + } + + me.runing = false; + + // 正在准备中的文件。 + if (this._promise && this._promise.file) { + this._promise.file.setStatus( Status.INTERRUPT ); + } + + interrupt && $.each( me.pool, function( _, v ) { + v.transport && v.transport.abort(); + v.file.setStatus( Status.INTERRUPT ); + }); + + me.owner.trigger('stopUpload'); + }, + + /** + * @method cancelFile + * @grammar cancelFile( file ) => undefined + * @grammar cancelFile( id ) => undefined + * @param {File|id} file File对象或这File对象的id + * @description 标记文件状态为已取消, 同时将中断文件传输。 + * @for Uploader + * @example + * + * $li.on('click', '.remove-this', function() { + * uploader.cancelFile( file ); + * }) + */ + cancelFile: function( file ) { + file = file.id ? file : this.request( 'get-file', file ); + + // 如果正在上传。 + file.blocks && $.each( file.blocks, function( _, v ) { + var _tr = v.transport; + + if ( _tr ) { + _tr.abort(); + _tr.destroy(); + delete v.transport; + } + }); + + file.setStatus( Status.CANCELLED ); + this.owner.trigger( 'fileDequeued', file ); + }, + + /** + * 判断`Uploader`是否正在上传中。 + * @grammar isInProgress() => Boolean + * @method isInProgress + * @for Uploader + */ + isInProgress: function() { + return !!this.progress; + }, + + _getStats: function() { + return this.request('get-stats'); + }, + + /** + * 跳过一个文件上传,直接标记指定文件为已上传状态。 + * @grammar skipFile( file ) => undefined + * @method skipFile + * @for Uploader + */ + skipFile: function( file, status ) { + file = file.id ? file : this.request( 'get-file', file ); + + file.setStatus( status || Status.COMPLETE ); + file.skipped = true; + + // 如果正在上传。 + file.blocks && $.each( file.blocks, function( _, v ) { + var _tr = v.transport; + + if ( _tr ) { + _tr.abort(); + _tr.destroy(); + delete v.transport; + } + }); + + this.owner.trigger( 'uploadSkip', file ); + }, + + /** + * @event uploadFinished + * @description 当所有文件上传结束时触发。 + * @for Uploader + */ + _tick: function() { + var me = this, + opts = me.options, + fn, val; + + // 上一个promise还没有结束,则等待完成后再执行。 + if ( me._promise ) { + return me._promise.always( me.__tick ); + } + + // 还有位置,且还有文件要处理的话。 + if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { + me._trigged = false; + + fn = function( val ) { + me._promise = null; + + // 有可能是reject过来的,所以要检测val的类型。 + val && val.file && me._startSend( val ); + Base.nextTick( me.__tick ); + }; + + me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); + + // 没有要上传的了,且没有正在传输的了。 + } else if ( !me.remaning && !me._getStats().numOfQueue && + !me._getStats().numOfInterrupt ) { + me.runing = false; + + me._trigged || Base.nextTick(function() { + me.owner.trigger('uploadFinished'); + }); + me._trigged = true; + } + }, + + _putback: function(block) { + var idx; + + block.cuted.unshift(block); + idx = this.stack.indexOf(block.cuted); + + if (!~idx) { + // 如果不在里面,说明移除过,需要把计数还原回去。 + this.remaning++; + block.file.remaning++; + this.stack.unshift(block.cuted); + } + }, + + _getStack: function() { + var i = 0, + act; + + while ( (act = this.stack[ i++ ]) ) { + if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { + return act; + } else if (!act.has() || + act.file.getStatus() !== Status.PROGRESS && + act.file.getStatus() !== Status.INTERRUPT ) { + + // 把已经处理完了的,或者,状态为非 progress(上传中)、 + // interupt(暂停中) 的移除。 + this.stack.splice( --i, 1 ); + } + } + + return null; + }, + + _nextBlock: function() { + var me = this, + opts = me.options, + act, next, done, preparing; + + // 如果当前文件还有没有需要传输的,则直接返回剩下的。 + if ( (act = this._getStack()) ) { + + // 是否提前准备下一个文件 + if ( opts.prepareNextFile && !me.pending.length ) { + me._prepareNextFile(); + } + + return act.shift(); + + // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 + } else if ( me.runing ) { + + // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 + if ( !me.pending.length && me._getStats().numOfQueue ) { + me._prepareNextFile(); + } + + next = me.pending.shift(); + done = function( file ) { + if ( !file ) { + return null; + } + + act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); + me.stack.push(act); + return act.shift(); + }; + + // 文件可能还在prepare中,也有可能已经完全准备好了。 + if ( isPromise( next) ) { + preparing = next.file; + next = next[ next.pipe ? 'pipe' : 'then' ]( done ); + next.file = preparing; + return next; + } + + return done( next ); + } + }, + + + /** + * @event uploadStart + * @param {File} file File对象 + * @description 某个文件开始上传前触发,一个文件只会触发一次。 + * @for Uploader + */ + _prepareNextFile: function() { + var me = this, + file = me.request('fetch-file'), + pending = me.pending, + promise; + + if ( file ) { + promise = me.request( 'before-send-file', file, function() { + + // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. + if ( file.getStatus() === Status.PROGRESS || + file.getStatus() === Status.INTERRUPT ) { + return file; + } + + return me._finishFile( file ); + }); + + me.owner.trigger( 'uploadStart', file ); + file.setStatus( Status.PROGRESS ); + + promise.file = file; + + // 如果还在pending中,则替换成文件本身。 + promise.done(function() { + var idx = $.inArray( promise, pending ); + + ~idx && pending.splice( idx, 1, file ); + }); + + // befeore-send-file的钩子就有错误发生。 + promise.fail(function( reason ) { + file.setStatus( Status.ERROR, reason ); + me.owner.trigger( 'uploadError', file, reason ); + me.owner.trigger( 'uploadComplete', file ); + }); + + pending.push( promise ); + } + }, + + // 让出位置了,可以让其他分片开始上传 + _popBlock: function( block ) { + var idx = $.inArray( block, this.pool ); + + this.pool.splice( idx, 1 ); + block.file.remaning--; + this.remaning--; + }, + + // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 + _startSend: function( block ) { + var me = this, + file = block.file, + promise; + + // 有可能在 before-send-file 的 promise 期间改变了文件状态。 + // 如:暂停,取消 + // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 + if ( file.getStatus() !== Status.PROGRESS ) { + + // 如果是中断,则还需要放回去。 + if (file.getStatus() === Status.INTERRUPT) { + me._putback(block); + } + + return; + } + + me.pool.push( block ); + me.remaning++; + + // 如果没有分片,则直接使用原始的。 + // 不会丢失content-type信息。 + block.blob = block.chunks === 1 ? file.source : + file.source.slice( block.start, block.end ); + + // hook, 每个分片发送之前可能要做些异步的事情。 + block.waiting = promise = me.request( 'before-send', block, function() { + delete block.waiting; + + // 有可能文件已经上传出错了,所以不需要再传输了。 + if ( file.getStatus() === Status.PROGRESS ) { + me._doSend( block ); + } else if (block.file.getStatus() !== Status.INTERRUPT) { + me._popBlock(block); + } + + Base.nextTick(me.__tick); + }); + + // 如果为fail了,则跳过此分片。 + promise.fail(function() { + delete block.waiting; + + if ( file.remaning === 1 ) { + me._finishFile( file ).always(function() { + block.percentage = 1; + me._popBlock( block ); + me.owner.trigger( 'uploadComplete', file ); + Base.nextTick( me.__tick ); + }); + } else { + block.percentage = 1; + me.updateFileProgress( file ); + me._popBlock( block ); + Base.nextTick( me.__tick ); + } + }); + }, + + + /** + * @event uploadBeforeSend + * @param {Object} object + * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 + * @param {Object} headers 可以扩展此对象来控制上传头部。 + * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 + * @for Uploader + */ + + /** + * @event uploadAccept + * @param {Object} object + * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 + * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 + * @for Uploader + */ + + /** + * @event uploadProgress + * @param {File} file File对象 + * @param {Number} percentage 上传进度 + * @description 上传过程中触发,携带上传进度。 + * @for Uploader + */ + + + /** + * @event uploadError + * @param {File} file File对象 + * @param {String} reason 出错的code + * @description 当文件上传出错时触发。 + * @for Uploader + */ + + /** + * @event uploadSuccess + * @param {File} file File对象 + * @param {Object} response 服务端返回的数据 + * @description 当文件上传成功时触发。 + * @for Uploader + */ + + /** + * @event uploadComplete + * @param {File} [file] File对象 + * @description 不管成功或者失败,文件上传完成时触发。 + * @for Uploader + */ + + // 做上传操作。 + _doSend: function( block ) { + var me = this, + owner = me.owner, + opts = $.extend({}, me.options, block.options), + file = block.file, + tr = new Transport( opts ), + data = $.extend({}, opts.formData ), + headers = $.extend({}, opts.headers ), + requestAccept, ret; + + block.transport = tr; + + tr.on( 'destroy', function() { + delete block.transport; + me._popBlock( block ); + Base.nextTick( me.__tick ); + }); + + // 广播上传进度。以文件为单位。 + tr.on( 'progress', function( percentage ) { + block.percentage = percentage; + me.updateFileProgress( file ); + }); + + // 用来询问,是否返回的结果是有错误的。 + requestAccept = function( reject ) { + var fn; + + ret = tr.getResponseAsJson() || {}; + ret._raw = tr.getResponse(); + ret._headers = tr.getResponseHeaders(); + block.response = ret; + fn = function( value ) { + reject = value; + }; + + // 服务端响应了,不代表成功了,询问是否响应正确。 + if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { + reject = reject || 'server'; + } + + return reject; + }; + + // 尝试重试,然后广播文件上传出错。 + tr.on( 'error', function( type, flag ) { + // 在 runtime/html5/transport.js 上为 type 加上了状态码,形式:type|status|text(如:http-403-Forbidden) + // 这里把状态码解释出来,并还原后面代码所依赖的 type 变量 + var typeArr = type.split( '|' ), status, statusText; + type = typeArr[0]; + status = parseFloat( typeArr[1] ), + statusText = typeArr[2]; + + block.retried = block.retried || 0; + + // 自动重试 + if ( block.chunks > 1 && ~'http,abort,server'.indexOf( type.replace( /-.*/, '' ) ) && + block.retried < opts.chunkRetry ) { + + block.retried++; + + me.retryTimer = setTimeout(function() { + tr.send(); + }, opts.chunkRetryDelay || 1000); + + } else { + + // http status 500 ~ 600 + if ( !flag && type === 'server' ) { + type = requestAccept( type ); + } + + file.setStatus( Status.ERROR, type ); + owner.trigger( 'uploadError', file, type, status, statusText ); + owner.trigger( 'uploadComplete', file ); + } + }); + + // 上传成功 + tr.on( 'load', function() { + var reason; + + // 如果非预期,转向上传出错。 + if ( (reason = requestAccept()) ) { + tr.trigger( 'error', reason, true ); + return; + } + + // 全部上传完成。 + if ( file.remaning === 1 ) { + me._finishFile( file, ret ); + } else { + tr.destroy(); + } + }); + + // 配置默认的上传字段。 + data = $.extend( data, { + //id: file.id, + //name: file.name, + filetype: file.type, + //lastModifiedDate: file.lastModifiedDate, + size: file.size + }); + + block.chunks > 1 && $.extend( data, { + chunks: block.chunks, + chunk: block.chunk + }); + + // 在发送之间可以添加字段什么的。。。 + // 如果默认的字段不够使用,可以通过监听此事件来扩展 + owner.trigger( 'uploadBeforeSend', block, data, headers ); + + // 开始发送。 + tr.appendBlob( opts.fileVal, block.blob, file.name ); + tr.append( data ); + tr.setRequestHeader( headers ); + tr.send(); + }, + + // 完成上传。 + _finishFile: function( file, ret, hds ) { + var owner = this.owner; + + return owner + .request( 'after-send-file', arguments, function() { + file.setStatus( Status.COMPLETE ); + owner.trigger( 'uploadSuccess', file, ret, hds ); + }) + .fail(function( reason ) { + + // 如果外部已经标记为invalid什么的,不再改状态。 + if ( file.getStatus() === Status.PROGRESS ) { + file.setStatus( Status.ERROR, reason ); + } + + owner.trigger( 'uploadError', file, reason ); + }) + .always(function() { + owner.trigger( 'uploadComplete', file ); + }); + }, + + updateFileProgress: function(file) { + var totalPercent = 0, + uploaded = 0; + + if (!file.blocks) { + return; + } + + $.each( file.blocks, function( _, v ) { + uploaded += (v.percentage || 0) * (v.end - v.start); + }); + + totalPercent = uploaded / file.size; + this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); + }, + + destroy: function() { + clearTimeout(this.retryTimer); + } + + }); + }); + + /** + * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 + */ + + define('widgets/validator',[ + 'base', + 'uploader', + 'file', + 'widgets/widget' + ], function( Base, Uploader, WUFile ) { + + var $ = Base.$, + validators = {}, + api; + + /** + * @event error + * @param {String} type 错误类型。 + * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 + * + * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 + * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 + * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 + * @for Uploader + */ + + // 暴露给外面的api + api = { + + // 添加验证器 + addValidator: function( type, cb ) { + validators[ type ] = cb; + }, + + // 移除验证器 + removeValidator: function( type ) { + delete validators[ type ]; + } + }; + + // 在Uploader初始化的时候启动Validators的初始化 + Uploader.register({ + name: 'validator', + + init: function() { + var me = this; + Base.nextTick(function() { + $.each( validators, function() { + this.call( me.owner ); + }); + }); + } + }); + + /** + * @property {int} [fileNumLimit=undefined] + * @namespace options + * @for Uploader + * @description 验证文件总数量, 超出则不允许加入队列。 + */ + api.addValidator( 'fileNumLimit', function() { + var uploader = this, + opts = uploader.options, + count = 0, + max = parseInt( opts.fileNumLimit, 10 ), + flag = true; + + if ( !max ) { + return; + } + + uploader.on( 'beforeFileQueued', function( file ) { + // 增加beforeFileQueuedCheckfileNumLimit验证,主要为了再次加载时(已存在历史文件)验证数量是否超过设置项 + if (!this.trigger('beforeFileQueuedCheckfileNumLimit', file,count)) { + return false; + } + if ( count >= max && flag ) { + flag = false; + this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); + setTimeout(function() { + flag = true; + }, 1 ); + } + + return count >= max ? false : true; + }); + + uploader.on( 'fileQueued', function() { + count++; + }); + + uploader.on( 'fileDequeued', function() { + count--; + }); + + uploader.on( 'reset', function() { + count = 0; + }); + }); + + + /** + * @property {int} [fileSizeLimit=undefined] + * @namespace options + * @for Uploader + * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 + */ + api.addValidator( 'fileSizeLimit', function() { + var uploader = this, + opts = uploader.options, + count = 0, + max = parseInt( opts.fileSizeLimit, 10 ), + flag = true; + + if ( !max ) { + return; + } + + uploader.on( 'beforeFileQueued', function( file ) { + var invalid = count + file.size > max; + + if ( invalid && flag ) { + flag = false; + this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); + setTimeout(function() { + flag = true; + }, 1 ); + } + + return invalid ? false : true; + }); + + uploader.on( 'fileQueued', function( file ) { + count += file.size; + }); + + uploader.on( 'fileDequeued', function( file ) { + count -= file.size; + }); + + uploader.on( 'reset', function() { + count = 0; + }); + }); + + /** + * @property {int} [fileSingleSizeLimit=undefined] + * @namespace options + * @for Uploader + * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 + */ + api.addValidator( 'fileSingleSizeLimit', function() { + var uploader = this, + opts = uploader.options, + max = opts.fileSingleSizeLimit; + + if ( !max ) { + return; + } + + uploader.on( 'beforeFileQueued', function( file ) { + + if ( file.size > max ) { + file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); + this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); + return false; + } + + }); + + }); + + /** + * @property {Boolean} [duplicate=undefined] + * @namespace options + * @for Uploader + * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. + */ + api.addValidator( 'duplicate', function() { + var uploader = this, + opts = uploader.options, + mapping = {}; + + if ( opts.duplicate ) { + return; + } + + function hashString( str ) { + var hash = 0, + i = 0, + len = str.length, + _char; + + for ( ; i < len; i++ ) { + _char = str.charCodeAt( i ); + hash = _char + (hash << 6) + (hash << 16) - hash; + } + + return hash; + } + + uploader.on( 'beforeFileQueued', function( file ) { + var hash = file.__hash || (file.__hash = hashString( file.name + + file.size + file.lastModifiedDate )); + + // 已经重复了 + if ( mapping[ hash ] ) { + this.trigger( 'error', 'F_DUPLICATE', file ); + return false; + } + }); + + uploader.on( 'fileQueued', function( file ) { + var hash = file.__hash; + + hash && (mapping[ hash ] = true); + }); + + uploader.on( 'fileDequeued', function( file ) { + var hash = file.__hash; + + hash && (delete mapping[ hash ]); + }); + + uploader.on( 'reset', function() { + mapping = {}; + }); + }); + + return api; + }); + + /** + * @fileOverview Md5 + */ + define('lib/md5',[ + 'runtime/client', + 'mediator' + ], function( RuntimeClient, Mediator ) { + + function Md5() { + RuntimeClient.call( this, 'Md5' ); + } + + // 让 Md5 具备事件功能。 + Mediator.installTo( Md5.prototype ); + + Md5.prototype.loadFromBlob = function( blob ) { + var me = this; + + if ( me.getRuid() ) { + me.disconnectRuntime(); + } + + // 连接到blob归属的同一个runtime. + me.connectRuntime( blob.ruid, function() { + me.exec('init'); + me.exec( 'loadFromBlob', blob ); + }); + }; + + Md5.prototype.getResult = function() { + return this.exec('getResult'); + }; + + return Md5; + }); + /** + * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 + */ + define('widgets/md5',[ + 'base', + 'uploader', + 'lib/md5', + 'lib/blob', + 'widgets/widget' + ], function( Base, Uploader, Md5, Blob ) { + + return Uploader.register({ + name: 'md5', + + + /** + * 计算文件 md5 值,返回一个 promise 对象,可以监听 progress 进度。 + * + * + * @method md5File + * @grammar md5File( file[, start[, end]] ) => promise + * @for Uploader + * @example + * + * uploader.on( 'fileQueued', function( file ) { + * var $li = ...; + * + * uploader.md5File( file ) + * + * // 及时显示进度 + * .progress(function(percentage) { + * console.log('Percentage:', percentage); + * }) + * + * // 完成 + * .then(function(val) { + * console.log('md5 result:', val); + * }); + * + * }); + */ + md5File: function( file, start, end ) { + var md5 = new Md5(), + deferred = Base.Deferred(), + blob = (file instanceof Blob) ? file : + this.request( 'get-file', file ).source; + + md5.on( 'progress load', function( e ) { + e = e || {}; + deferred.notify( e.total ? e.loaded / e.total : 1 ); + }); + + md5.on( 'complete', function() { + deferred.resolve( md5.getResult() ); + }); + + md5.on( 'error', function( reason ) { + deferred.reject( reason ); + }); + + if ( arguments.length > 1 ) { + start = start || 0; + end = end || 0; + start < 0 && (start = blob.size + start); + end < 0 && (end = blob.size + end); + end = Math.min( end, blob.size ); + blob = blob.slice( start, end ); + } + + md5.loadFromBlob( blob ); + + return deferred.promise(); + } + }); + }); + /** + * @fileOverview Runtime管理器,负责Runtime的选择, 连接 + */ + define('runtime/compbase',[],function() { + + function CompBase( owner, runtime ) { + + this.owner = owner; + this.options = owner.options; + + this.getRuntime = function() { + return runtime; + }; + + this.getRuid = function() { + return runtime.uid; + }; + + this.trigger = function() { + return owner.trigger.apply( owner, arguments ); + }; + } + + return CompBase; + }); + /** + * @fileOverview Html5Runtime + */ + define('runtime/html5/runtime',[ + 'base', + 'runtime/runtime', + 'runtime/compbase' + ], function( Base, Runtime, CompBase ) { + + var type = 'html5', + components = {}; + + function Html5Runtime() { + var pool = {}, + me = this, + destroy = this.destroy; + + Runtime.apply( me, arguments ); + me.type = type; + + + // 这个方法的调用者,实际上是RuntimeClient + me.exec = function( comp, fn/*, args...*/) { + var client = this, + uid = client.uid, + args = Base.slice( arguments, 2 ), + instance; + + if ( components[ comp ] ) { + instance = pool[ uid ] = pool[ uid ] || + new components[ comp ]( client, me ); + + if ( instance[ fn ] ) { + return instance[ fn ].apply( instance, args ); + } + } + }; + + me.destroy = function() { + // @todo 删除池子中的所有实例 + return destroy && destroy.apply( this, arguments ); + }; + } + + Base.inherits( Runtime, { + constructor: Html5Runtime, + + // 不需要连接其他程序,直接执行callback + init: function() { + var me = this; + setTimeout(function() { + me.trigger('ready'); + }, 1 ); + } + + }); + + // 注册Components + Html5Runtime.register = function( name, component ) { + var klass = components[ name ] = Base.inherits( CompBase, component ); + return klass; + }; + + // 注册html5运行时。 + // 只有在支持的前提下注册。 + if ( window.Blob && window.FileReader && window.DataView ) { + Runtime.addRuntime( type, Html5Runtime ); + } + + return Html5Runtime; + }); + /** + * @fileOverview Blob Html实现 + */ + define('runtime/html5/blob',[ + 'runtime/html5/runtime', + 'lib/blob' + ], function( Html5Runtime, Blob ) { + + return Html5Runtime.register( 'Blob', { + slice: function( start, end ) { + var blob = this.owner.source, + slice = blob.slice || blob.webkitSlice || blob.mozSlice; + + blob = slice.call( blob, start, end ); + + return new Blob( this.getRuid(), blob ); + } + }); + }); + /** + * @fileOverview FilePaste + */ + define('runtime/html5/dnd',[ + 'base', + 'runtime/html5/runtime', + 'lib/file' + ], function( Base, Html5Runtime, File ) { + + var $ = Base.$, + prefix = 'cwebuploader-dnd-'; + + return Html5Runtime.register( 'DragAndDrop', { + init: function() { + var elem = this.elem = this.options.container; + + this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); + this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); + this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); + this.dropHandler = Base.bindFn( this._dropHandler, this ); + this.dndOver = false; + + elem.on( 'dragenter', this.dragEnterHandler ); + elem.on( 'dragover', this.dragOverHandler ); + elem.on( 'dragleave', this.dragLeaveHandler ); + elem.on( 'drop', this.dropHandler ); + + if ( this.options.disableGlobalDnd ) { + $( document ).on( 'dragover', this.dragOverHandler ); + $( document ).on( 'drop', this.dropHandler ); + } + }, + + _dragEnterHandler: function( e ) { + var me = this, + denied = me._denied || false, + items; + + e = e.originalEvent || e; + + if ( !me.dndOver ) { + me.dndOver = true; + + // 注意只有 chrome 支持。 + items = e.dataTransfer.items; + + if ( items && items.length ) { + me._denied = denied = !me.trigger( 'accept', items ); + } + + me.elem.addClass( prefix + 'over' ); + me.elem[ denied ? 'addClass' : + 'removeClass' ]( prefix + 'denied' ); + } + + e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; + + return false; + }, + + _dragOverHandler: function( e ) { + // 只处理框内的。 + var parentElem = this.elem.parent().get( 0 ); + if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { + return false; + } + + clearTimeout( this._leaveTimer ); + this._dragEnterHandler.call( this, e ); + + return false; + }, + + _dragLeaveHandler: function() { + var me = this, + handler; + + handler = function() { + me.dndOver = false; + me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); + }; + + clearTimeout( me._leaveTimer ); + me._leaveTimer = setTimeout( handler, 100 ); + return false; + }, + + _dropHandler: function( e ) { + var me = this, + ruid = me.getRuid(), + parentElem = me.elem.parent().get( 0 ), + dataTransfer, data; + + // 只处理框内的。 + if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { + return false; + } + + e = e.originalEvent || e; + dataTransfer = e.dataTransfer; + + // 如果是页面内拖拽,还不能处理,不阻止事件。 + // 此处 ie11 下会报参数错误, + try { + data = dataTransfer.getData('text/html'); + } catch( err ) { + } + + me.dndOver = false; + me.elem.removeClass( prefix + 'over' ); + + if ( !dataTransfer || data ) { + return; + } + + me._getTansferFiles( dataTransfer, function( results ) { + me.trigger( 'drop', $.map( results, function( file ) { + return new File( ruid, file ); + }) ); + }); + + return false; + }, + + // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 + _getTansferFiles: function( dataTransfer, callback ) { + var results = [], + promises = [], + items, files, file, item, i, len, canAccessFolder; + + items = dataTransfer.items; + files = dataTransfer.files; + + canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); + + for ( i = 0, len = files.length; i < len; i++ ) { + file = files[ i ]; + item = items && items[ i ]; + + if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { + + promises.push( this._traverseDirectoryTree( + item.webkitGetAsEntry(), results ) ); + } else { + results.push( file ); + } + } + + Base.when.apply( Base, promises ).done(function() { + + if ( !results.length ) { + return; + } + + callback( results ); + }); + }, + + _traverseDirectoryTree: function( entry, results ) { + var deferred = Base.Deferred(), + me = this; + + if ( entry.isFile ) { + entry.file(function( file ) { + results.push( file ); + deferred.resolve(); + }); + } else if ( entry.isDirectory ) { + entry.createReader().readEntries(function( entries ) { + var len = entries.length, + promises = [], + arr = [], // 为了保证顺序。 + i; + + for ( i = 0; i < len; i++ ) { + promises.push( me._traverseDirectoryTree( + entries[ i ], arr ) ); + } + + Base.when.apply( Base, promises ).then(function() { + results.push.apply( results, arr ); + deferred.resolve(); + }, deferred.reject ); + }); + } + + return deferred.promise(); + }, + + destroy: function() { + var elem = this.elem; + + // 还没 init 就调用 destroy + if (!elem) { + return; + } + + elem.off( 'dragenter', this.dragEnterHandler ); + elem.off( 'dragover', this.dragOverHandler ); + elem.off( 'dragleave', this.dragLeaveHandler ); + elem.off( 'drop', this.dropHandler ); + + if ( this.options.disableGlobalDnd ) { + $( document ).off( 'dragover', this.dragOverHandler ); + $( document ).off( 'drop', this.dropHandler ); + } + } + }); + }); + + /** + * @fileOverview FilePaste + */ + define('runtime/html5/filepaste',[ + 'base', + 'runtime/html5/runtime', + 'lib/file' + ], function( Base, Html5Runtime, File ) { + + return Html5Runtime.register( 'FilePaste', { + init: function() { + var opts = this.options, + elem = this.elem = opts.container, + accept = '.*', + arr, i, len, item; + + // accetp的mimeTypes中生成匹配正则。 + if ( opts.accept ) { + arr = []; + + for ( i = 0, len = opts.accept.length; i < len; i++ ) { + item = opts.accept[ i ].mimeTypes; + item && arr.push( item ); + } + + if ( arr.length ) { + accept = arr.join(','); + accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); + } + } + this.accept = accept = new RegExp( accept, 'i' ); + this.hander = Base.bindFn( this._pasteHander, this ); + elem.on( 'paste', this.hander ); + }, + + _pasteHander: function( e ) { + var allowed = [], + ruid = this.getRuid(), + items, item, blob, i, len; + + e = e.originalEvent || e; + items = e.clipboardData ? e.clipboardData.items : []; + + for ( i = 0, len = items.length; i < len; i++ ) { + item = items[ i ]; + + if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { + continue; + } + + fileitem = new File( ruid, blob ); + fileitem.paste = 1; + allowed.push( fileitem ); + //allowed.push( new File( ruid, blob ) ); + } + + if ( allowed.length ) { + // 不阻止非文件粘贴(文字粘贴)的事件冒泡 + e.preventDefault(); + e.stopPropagation(); + this.trigger( 'paste', allowed ); + } + }, + + destroy: function() { + this.elem.off( 'paste', this.hander ); + } + }); + }); + + /** + * @fileOverview FilePicker + */ + define('runtime/html5/filepicker',[ + 'base', + 'runtime/html5/runtime' + ], function( Base, Html5Runtime ) { + + var $ = Base.$; + + return Html5Runtime.register( 'FilePicker', { + init: function() { + var container = this.getRuntime().getContainer(), + me = this, + owner = me.owner, + opts = me.options, + label = this.label = $( document.createElement('label') ), + input = this.input = $( document.createElement('input') ), + arr, i, len, mouseHandler, changeHandler; + + input.attr( 'type', 'file' ); + //input.attr( 'capture', 'camera'); + input.attr( 'name', opts.name ); + input.addClass('cwebuploader-element-invisible'); + + label.on( 'click', function(e) { + input.trigger('click'); + e.stopPropagation(); + owner.trigger('dialogopen'); + }); + + label.css({ + opacity: 0, + width: '100%', + height: '100%', + display: 'block', + cursor: 'pointer', + background: '#ffffff' + }); + + if ( opts.multiple ) { + input.attr( 'multiple', 'multiple' ); + } + + // @todo Firefox不支持单独指定后缀 + if ( opts.accept && opts.accept.length > 0 ) { + arr = []; + + for ( i = 0, len = opts.accept.length; i < len; i++ ) { + arr.push( opts.accept[ i ].mimeTypes ); + } + + input.attr( 'accept', arr.join(',') ); + } + + container.append( input ); + container.append( label ); + + mouseHandler = function( e ) { + owner.trigger( e.type ); + }; + + changeHandler = function( e ) { + var clone; + + // 解决chrome 56 第二次打开文件选择器,然后点击取消,依然会触发change事件的问题 + if (e.target.files.length === 0){ + return false; + } + + // 第一次上传图片后,第二次再点击弹出文件选择器窗,等待 + me.files = e.target.files; + + + // reset input + clone = this.cloneNode( true ); + clone.value = null; + this.parentNode.replaceChild( clone, this ); + + input.off(); + input = $( clone ).on( 'change', changeHandler ) + .on( 'mouseenter mouseleave', mouseHandler ); + + owner.trigger('change'); + } + input.on( 'change', changeHandler); + label.on( 'mouseenter mouseleave', mouseHandler ); + + }, + + + getFiles: function() { + return this.files; + }, + + destroy: function() { + this.input.off(); + this.label.off(); + } + }); + }); + + /** + * Terms: + * + * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer + * @fileOverview Image控件 + */ + define('runtime/html5/util',[ + 'base' + ], function( Base ) { + + var urlAPI = window.createObjectURL && window || + window.URL && URL.revokeObjectURL && URL || + window.webkitURL, + createObjectURL = Base.noop, + revokeObjectURL = createObjectURL; + + if ( urlAPI ) { + + // 更安全的方式调用,比如android里面就能把context改成其他的对象。 + createObjectURL = function() { + return urlAPI.createObjectURL.apply( urlAPI, arguments ); + }; + + revokeObjectURL = function() { + return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); + }; + } + + return { + createObjectURL: createObjectURL, + revokeObjectURL: revokeObjectURL, + + dataURL2Blob: function( dataURI ) { + var byteStr, intArray, ab, i, mimetype, parts; + + parts = dataURI.split(','); + + if ( ~parts[ 0 ].indexOf('base64') ) { + byteStr = atob( parts[ 1 ] ); + } else { + byteStr = decodeURIComponent( parts[ 1 ] ); + } + + ab = new ArrayBuffer( byteStr.length ); + intArray = new Uint8Array( ab ); + + for ( i = 0; i < byteStr.length; i++ ) { + intArray[ i ] = byteStr.charCodeAt( i ); + } + + mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; + + return this.arrayBufferToBlob( ab, mimetype ); + }, + + dataURL2ArrayBuffer: function( dataURI ) { + var byteStr, intArray, i, parts; + + parts = dataURI.split(','); + + if ( ~parts[ 0 ].indexOf('base64') ) { + byteStr = atob( parts[ 1 ] ); + } else { + byteStr = decodeURIComponent( parts[ 1 ] ); + } + + intArray = new Uint8Array( byteStr.length ); + + for ( i = 0; i < byteStr.length; i++ ) { + intArray[ i ] = byteStr.charCodeAt( i ); + } + + return intArray.buffer; + }, + + arrayBufferToBlob: function( buffer, type ) { + var builder = window.BlobBuilder || window.WebKitBlobBuilder, + bb; + + // android不支持直接new Blob, 只能借助blobbuilder. + if ( builder ) { + bb = new builder(); + bb.append( buffer ); + return bb.getBlob( type ); + } + + return new Blob([ buffer ], type ? { type: type } : {} ); + }, + + // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. + // 你得到的结果是png. + canvasToDataUrl: function( canvas, type, quality ) { + return canvas.toDataURL( type, quality / 100 ); + }, + + // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 + parseMeta: function( blob, callback ) { + callback( false, {}); + }, + + // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 + updateImageHead: function( data ) { + return data; + } + }; + }); + /** + * Terms: + * + * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer + * @fileOverview Image控件 + */ + define('runtime/html5/imagemeta',[ + 'runtime/html5/util' + ], function( Util ) { + + var api; + + api = { + parsers: { + 0xffe1: [] + }, + + maxMetaDataSize: 262144, + + parse: function( blob, cb ) { + var me = this, + fr = new FileReader(); + + fr.onload = function() { + cb( false, me._parse( this.result ) ); + fr = fr.onload = fr.onerror = null; + }; + + fr.onerror = function( e ) { + cb( e.message ); + fr = fr.onload = fr.onerror = null; + }; + + blob = blob.slice( 0, me.maxMetaDataSize ); + fr.readAsArrayBuffer( blob.getSource() ); + }, + + _parse: function( buffer, noParse ) { + if ( buffer.byteLength < 6 ) { + return; + } + + var dataview = new DataView( buffer ), + offset = 2, + maxOffset = dataview.byteLength - 4, + headLength = offset, + ret = {}, + markerBytes, markerLength, parsers, i; + + if ( dataview.getUint16( 0 ) === 0xffd8 ) { + + while ( offset < maxOffset ) { + markerBytes = dataview.getUint16( offset ); + + if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || + markerBytes === 0xfffe ) { + + markerLength = dataview.getUint16( offset + 2 ) + 2; + + if ( offset + markerLength > dataview.byteLength ) { + break; + } + + parsers = api.parsers[ markerBytes ]; + + if ( !noParse && parsers ) { + for ( i = 0; i < parsers.length; i += 1 ) { + parsers[ i ].call( api, dataview, offset, + markerLength, ret ); + } + } + + offset += markerLength; + headLength = offset; + } else { + break; + } + } + + if ( headLength > 6 ) { + if ( buffer.slice ) { + ret.imageHead = buffer.slice( 2, headLength ); + } else { + // Workaround for IE10, which does not yet + // support ArrayBuffer.slice: + ret.imageHead = new Uint8Array( buffer ) + .subarray( 2, headLength ); + } + } + } + + return ret; + }, + + updateImageHead: function( buffer, head ) { + var data = this._parse( buffer, true ), + buf1, buf2, bodyoffset; + + + bodyoffset = 2; + if ( data.imageHead ) { + bodyoffset = 2 + data.imageHead.byteLength; + } + + if ( buffer.slice ) { + buf2 = buffer.slice( bodyoffset ); + } else { + buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); + } + + buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); + + buf1[ 0 ] = 0xFF; + buf1[ 1 ] = 0xD8; + buf1.set( new Uint8Array( head ), 2 ); + buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); + + return buf1.buffer; + } + }; + + Util.parseMeta = function() { + return api.parse.apply( api, arguments ); + }; + + Util.updateImageHead = function() { + return api.updateImageHead.apply( api, arguments ); + }; + + return api; + }); + /** + * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image + * 暂时项目中只用了orientation. + * + * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. + * @fileOverview EXIF解析 + */ + + // Sample + // ==================================== + // Make : Apple + // Model : iPhone 4S + // Orientation : 1 + // XResolution : 72 [72/1] + // YResolution : 72 [72/1] + // ResolutionUnit : 2 + // Software : QuickTime 7.7.1 + // DateTime : 2013:09:01 22:53:55 + // ExifIFDPointer : 190 + // ExposureTime : 0.058823529411764705 [1/17] + // FNumber : 2.4 [12/5] + // ExposureProgram : Normal program + // ISOSpeedRatings : 800 + // ExifVersion : 0220 + // DateTimeOriginal : 2013:09:01 22:52:51 + // DateTimeDigitized : 2013:09:01 22:52:51 + // ComponentsConfiguration : YCbCr + // ShutterSpeedValue : 4.058893515764426 + // ApertureValue : 2.5260688216892597 [4845/1918] + // BrightnessValue : -0.3126686601998395 + // MeteringMode : Pattern + // Flash : Flash did not fire, compulsory flash mode + // FocalLength : 4.28 [107/25] + // SubjectArea : [4 values] + // FlashpixVersion : 0100 + // ColorSpace : 1 + // PixelXDimension : 2448 + // PixelYDimension : 3264 + // SensingMethod : One-chip color area sensor + // ExposureMode : 0 + // WhiteBalance : Auto white balance + // FocalLengthIn35mmFilm : 35 + // SceneCaptureType : Standard + define('runtime/html5/imagemeta/exif',[ + 'base', + 'runtime/html5/imagemeta' + ], function( Base, ImageMeta ) { + + var EXIF = {}; + + EXIF.ExifMap = function() { + return this; + }; + + EXIF.ExifMap.prototype.map = { + 'Orientation': 0x0112 + }; + + EXIF.ExifMap.prototype.get = function( id ) { + return this[ id ] || this[ this.map[ id ] ]; + }; + + EXIF.exifTagTypes = { + // byte, 8-bit unsigned int: + 1: { + getValue: function( dataView, dataOffset ) { + return dataView.getUint8( dataOffset ); + }, + size: 1 + }, + + // ascii, 8-bit byte: + 2: { + getValue: function( dataView, dataOffset ) { + return String.fromCharCode( dataView.getUint8( dataOffset ) ); + }, + size: 1, + ascii: true + }, + + // short, 16 bit int: + 3: { + getValue: function( dataView, dataOffset, littleEndian ) { + return dataView.getUint16( dataOffset, littleEndian ); + }, + size: 2 + }, + + // long, 32 bit int: + 4: { + getValue: function( dataView, dataOffset, littleEndian ) { + return dataView.getUint32( dataOffset, littleEndian ); + }, + size: 4 + }, + + // rational = two long values, + // first is numerator, second is denominator: + 5: { + getValue: function( dataView, dataOffset, littleEndian ) { + return dataView.getUint32( dataOffset, littleEndian ) / + dataView.getUint32( dataOffset + 4, littleEndian ); + }, + size: 8 + }, + + // slong, 32 bit signed int: + 9: { + getValue: function( dataView, dataOffset, littleEndian ) { + return dataView.getInt32( dataOffset, littleEndian ); + }, + size: 4 + }, + + // srational, two slongs, first is numerator, second is denominator: + 10: { + getValue: function( dataView, dataOffset, littleEndian ) { + return dataView.getInt32( dataOffset, littleEndian ) / + dataView.getInt32( dataOffset + 4, littleEndian ); + }, + size: 8 + } + }; + + // undefined, 8-bit byte, value depending on field: + EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; + + EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, + littleEndian ) { + + var tagType = EXIF.exifTagTypes[ type ], + tagSize, dataOffset, values, i, str, c; + + if ( !tagType ) { + Base.log('Invalid Exif data: Invalid tag type.'); + return; + } + + tagSize = tagType.size * length; + + // Determine if the value is contained in the dataOffset bytes, + // or if the value at the dataOffset is a pointer to the actual data: + dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, + littleEndian ) : (offset + 8); + + if ( dataOffset + tagSize > dataView.byteLength ) { + Base.log('Invalid Exif data: Invalid data offset.'); + return; + } + + if ( length === 1 ) { + return tagType.getValue( dataView, dataOffset, littleEndian ); + } + + values = []; + + for ( i = 0; i < length; i += 1 ) { + values[ i ] = tagType.getValue( dataView, + dataOffset + i * tagType.size, littleEndian ); + } + + if ( tagType.ascii ) { + str = ''; + + // Concatenate the chars: + for ( i = 0; i < values.length; i += 1 ) { + c = values[ i ]; + + // Ignore the terminating NULL byte(s): + if ( c === '\u0000' ) { + break; + } + str += c; + } + + return str; + } + return values; + }; + + EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, + data ) { + + var tag = dataView.getUint16( offset, littleEndian ); + data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, + dataView.getUint16( offset + 2, littleEndian ), // tag type + dataView.getUint32( offset + 4, littleEndian ), // tag length + littleEndian ); + }; + + EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, + littleEndian, data ) { + + var tagsNumber, dirEndOffset, i; + + if ( dirOffset + 6 > dataView.byteLength ) { + Base.log('Invalid Exif data: Invalid directory offset.'); + return; + } + + tagsNumber = dataView.getUint16( dirOffset, littleEndian ); + dirEndOffset = dirOffset + 2 + 12 * tagsNumber; + + if ( dirEndOffset + 4 > dataView.byteLength ) { + Base.log('Invalid Exif data: Invalid directory size.'); + return; + } + + for ( i = 0; i < tagsNumber; i += 1 ) { + this.parseExifTag( dataView, tiffOffset, + dirOffset + 2 + 12 * i, // tag offset + littleEndian, data ); + } + + // Return the offset to the next directory: + return dataView.getUint32( dirEndOffset, littleEndian ); + }; + + // EXIF.getExifThumbnail = function(dataView, offset, length) { + // var hexData, + // i, + // b; + // if (!length || offset + length > dataView.byteLength) { + // Base.log('Invalid Exif data: Invalid thumbnail data.'); + // return; + // } + // hexData = []; + // for (i = 0; i < length; i += 1) { + // b = dataView.getUint8(offset + i); + // hexData.push((b < 16 ? '0' : '') + b.toString(16)); + // } + // return 'data:image/jpeg,%' + hexData.join('%'); + // }; + + EXIF.parseExifData = function( dataView, offset, length, data ) { + + var tiffOffset = offset + 10, + littleEndian, dirOffset; + + // Check for the ASCII code for "Exif" (0x45786966): + if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { + // No Exif data, might be XMP data instead + return; + } + if ( tiffOffset + 8 > dataView.byteLength ) { + Base.log('Invalid Exif data: Invalid segment size.'); + return; + } + + // Check for the two null bytes: + if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { + Base.log('Invalid Exif data: Missing byte alignment offset.'); + return; + } + + // Check the byte alignment: + switch ( dataView.getUint16( tiffOffset ) ) { + case 0x4949: + littleEndian = true; + break; + + case 0x4D4D: + littleEndian = false; + break; + + default: + Base.log('Invalid Exif data: Invalid byte alignment marker.'); + return; + } + + // Check for the TIFF tag marker (0x002A): + if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { + Base.log('Invalid Exif data: Missing TIFF marker.'); + return; + } + + // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: + dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); + // Create the exif object to store the tags: + data.exif = new EXIF.ExifMap(); + // Parse the tags of the main image directory and retrieve the + // offset to the next directory, usually the thumbnail directory: + dirOffset = EXIF.parseExifTags( dataView, tiffOffset, + tiffOffset + dirOffset, littleEndian, data ); + + // 尝试读取缩略图 + // if ( dirOffset ) { + // thumbnailData = {exif: {}}; + // dirOffset = EXIF.parseExifTags( + // dataView, + // tiffOffset, + // tiffOffset + dirOffset, + // littleEndian, + // thumbnailData + // ); + + // // Check for JPEG Thumbnail offset: + // if (thumbnailData.exif[0x0201]) { + // data.exif.Thumbnail = EXIF.getExifThumbnail( + // dataView, + // tiffOffset + thumbnailData.exif[0x0201], + // thumbnailData.exif[0x0202] // Thumbnail data length + // ); + // } + // } + }; + + ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); + return EXIF; + }); + /** + * 这个方式性能不行,但是可以解决android里面的toDataUrl的bug + * android里面toDataUrl('image/jpege')得到的结果却是png. + * + * 所以这里没辙,只能借助这个工具 + * @fileOverview jpeg encoder + */ + define('runtime/html5/jpegencoder',[], function( require, exports, module ) { + + /* + Copyright (c) 2008, Adobe Systems Incorporated + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of Adobe Systems Incorporated nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + /* + JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 + + Basic GUI blocking jpeg encoder + */ + + function JPEGEncoder(quality) { + var self = this; + var fround = Math.round; + var ffloor = Math.floor; + var YTable = new Array(64); + var UVTable = new Array(64); + var fdtbl_Y = new Array(64); + var fdtbl_UV = new Array(64); + var YDC_HT; + var UVDC_HT; + var YAC_HT; + var UVAC_HT; + + var bitcode = new Array(65535); + var category = new Array(65535); + var outputfDCTQuant = new Array(64); + var DU = new Array(64); + var byteout = []; + var bytenew = 0; + var bytepos = 7; + + var YDU = new Array(64); + var UDU = new Array(64); + var VDU = new Array(64); + var clt = new Array(256); + var RGB_YUV_TABLE = new Array(2048); + var currentQuality; + + var ZigZag = [ + 0, 1, 5, 6,14,15,27,28, + 2, 4, 7,13,16,26,29,42, + 3, 8,12,17,25,30,41,43, + 9,11,18,24,31,40,44,53, + 10,19,23,32,39,45,52,54, + 20,22,33,38,46,51,55,60, + 21,34,37,47,50,56,59,61, + 35,36,48,49,57,58,62,63 + ]; + + var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; + var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; + var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; + var std_ac_luminance_values = [ + 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, + 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, + 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, + 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, + 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, + 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, + 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, + 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, + 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, + 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, + 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, + 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, + 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, + 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, + 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, + 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, + 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, + 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, + 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, + 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; + var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; + var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; + var std_ac_chrominance_values = [ + 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, + 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, + 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, + 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, + 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, + 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, + 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, + 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, + 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, + 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, + 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, + 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, + 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, + 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, + 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, + 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, + 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, + 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, + 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, + 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, + 0xf9,0xfa + ]; + + function initQuantTables(sf){ + var YQT = [ + 16, 11, 10, 16, 24, 40, 51, 61, + 12, 12, 14, 19, 26, 58, 60, 55, + 14, 13, 16, 24, 40, 57, 69, 56, + 14, 17, 22, 29, 51, 87, 80, 62, + 18, 22, 37, 56, 68,109,103, 77, + 24, 35, 55, 64, 81,104,113, 92, + 49, 64, 78, 87,103,121,120,101, + 72, 92, 95, 98,112,100,103, 99 + ]; + + for (var i = 0; i < 64; i++) { + var t = ffloor((YQT[i]*sf+50)/100); + if (t < 1) { + t = 1; + } else if (t > 255) { + t = 255; + } + YTable[ZigZag[i]] = t; + } + var UVQT = [ + 17, 18, 24, 47, 99, 99, 99, 99, + 18, 21, 26, 66, 99, 99, 99, 99, + 24, 26, 56, 99, 99, 99, 99, 99, + 47, 66, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + ]; + for (var j = 0; j < 64; j++) { + var u = ffloor((UVQT[j]*sf+50)/100); + if (u < 1) { + u = 1; + } else if (u > 255) { + u = 255; + } + UVTable[ZigZag[j]] = u; + } + var aasf = [ + 1.0, 1.387039845, 1.306562965, 1.175875602, + 1.0, 0.785694958, 0.541196100, 0.275899379 + ]; + var k = 0; + for (var row = 0; row < 8; row++) + { + for (var col = 0; col < 8; col++) + { + fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); + fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); + k++; + } + } + } + + function computeHuffmanTbl(nrcodes, std_table){ + var codevalue = 0; + var pos_in_table = 0; + var HT = new Array(); + for (var k = 1; k <= 16; k++) { + for (var j = 1; j <= nrcodes[k]; j++) { + HT[std_table[pos_in_table]] = []; + HT[std_table[pos_in_table]][0] = codevalue; + HT[std_table[pos_in_table]][1] = k; + pos_in_table++; + codevalue++; + } + codevalue*=2; + } + return HT; + } + + function initHuffmanTbl() + { + YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); + UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); + YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); + UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); + } + + function initCategoryNumber() + { + var nrlower = 1; + var nrupper = 2; + for (var cat = 1; cat <= 15; cat++) { + //Positive numbers + for (var nr = nrlower; nr>0] = 38470 * i; + RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; + RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; + RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; + RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; + RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; + RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; + } + } + + // IO functions + function writeBits(bs) + { + var value = bs[0]; + var posval = bs[1]-1; + while ( posval >= 0 ) { + if (value & (1 << posval) ) { + bytenew |= (1 << bytepos); + } + posval--; + bytepos--; + if (bytepos < 0) { + if (bytenew == 0xFF) { + writeByte(0xFF); + writeByte(0); + } + else { + writeByte(bytenew); + } + bytepos=7; + bytenew=0; + } + } + } + + function writeByte(value) + { + byteout.push(clt[value]); // write char directly instead of converting later + } + + function writeWord(value) + { + writeByte((value>>8)&0xFF); + writeByte((value )&0xFF); + } + + // DCT & quantization core + function fDCTQuant(data, fdtbl) + { + var d0, d1, d2, d3, d4, d5, d6, d7; + /* Pass 1: process rows. */ + var dataOff=0; + var i; + var I8 = 8; + var I64 = 64; + for (i=0; i 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); + //outputfDCTQuant[i] = fround(fDCTQuant); + + } + return outputfDCTQuant; + } + + function writeAPP0() + { + writeWord(0xFFE0); // marker + writeWord(16); // length + writeByte(0x4A); // J + writeByte(0x46); // F + writeByte(0x49); // I + writeByte(0x46); // F + writeByte(0); // = "JFIF",'\0' + writeByte(1); // versionhi + writeByte(1); // versionlo + writeByte(0); // xyunits + writeWord(1); // xdensity + writeWord(1); // ydensity + writeByte(0); // thumbnwidth + writeByte(0); // thumbnheight + } + + function writeSOF0(width, height) + { + writeWord(0xFFC0); // marker + writeWord(17); // length, truecolor YUV JPG + writeByte(8); // precision + writeWord(height); + writeWord(width); + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0x11); // HVY + writeByte(0); // QTY + writeByte(2); // IdU + writeByte(0x11); // HVU + writeByte(1); // QTU + writeByte(3); // IdV + writeByte(0x11); // HVV + writeByte(1); // QTV + } + + function writeDQT() + { + writeWord(0xFFDB); // marker + writeWord(132); // length + writeByte(0); + for (var i=0; i<64; i++) { + writeByte(YTable[i]); + } + writeByte(1); + for (var j=0; j<64; j++) { + writeByte(UVTable[j]); + } + } + + function writeDHT() + { + writeWord(0xFFC4); // marker + writeWord(0x01A2); // length + + writeByte(0); // HTYDCinfo + for (var i=0; i<16; i++) { + writeByte(std_dc_luminance_nrcodes[i+1]); + } + for (var j=0; j<=11; j++) { + writeByte(std_dc_luminance_values[j]); + } + + writeByte(0x10); // HTYACinfo + for (var k=0; k<16; k++) { + writeByte(std_ac_luminance_nrcodes[k+1]); + } + for (var l=0; l<=161; l++) { + writeByte(std_ac_luminance_values[l]); + } + + writeByte(1); // HTUDCinfo + for (var m=0; m<16; m++) { + writeByte(std_dc_chrominance_nrcodes[m+1]); + } + for (var n=0; n<=11; n++) { + writeByte(std_dc_chrominance_values[n]); + } + + writeByte(0x11); // HTUACinfo + for (var o=0; o<16; o++) { + writeByte(std_ac_chrominance_nrcodes[o+1]); + } + for (var p=0; p<=161; p++) { + writeByte(std_ac_chrominance_values[p]); + } + } + + function writeSOS() + { + writeWord(0xFFDA); // marker + writeWord(12); // length + writeByte(3); // nrofcomponents + writeByte(1); // IdY + writeByte(0); // HTY + writeByte(2); // IdU + writeByte(0x11); // HTU + writeByte(3); // IdV + writeByte(0x11); // HTV + writeByte(0); // Ss + writeByte(0x3f); // Se + writeByte(0); // Bf + } + + function processDU(CDU, fdtbl, DC, HTDC, HTAC){ + var EOB = HTAC[0x00]; + var M16zeroes = HTAC[0xF0]; + var pos; + var I16 = 16; + var I63 = 63; + var I64 = 64; + var DU_DCT = fDCTQuant(CDU, fdtbl); + //ZigZag reorder + for (var j=0;j0)&&(DU[end0pos]==0); end0pos--) {}; + //end0pos = first element in reverse order !=0 + if ( end0pos == 0) { + writeBits(EOB); + return DC; + } + var i = 1; + var lng; + while ( i <= end0pos ) { + var startpos = i; + for (; (DU[i]==0) && (i<=end0pos); ++i) {} + var nrzeroes = i-startpos; + if ( nrzeroes >= I16 ) { + lng = nrzeroes>>4; + for (var nrmarker=1; nrmarker <= lng; ++nrmarker) + writeBits(M16zeroes); + nrzeroes = nrzeroes&0xF; + } + pos = 32767+DU[i]; + writeBits(HTAC[(nrzeroes<<4)+category[pos]]); + writeBits(bitcode[pos]); + i++; + } + if ( end0pos != I63 ) { + writeBits(EOB); + } + return DC; + } + + function initCharLookupTable(){ + var sfcc = String.fromCharCode; + for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 + clt[i] = sfcc(i); + } + } + + this.encode = function(image,quality) // image data object + { + // var time_start = new Date().getTime(); + + if(quality) setQuality(quality); + + // Initialize bit writer + byteout = new Array(); + bytenew=0; + bytepos=7; + + // Add JPEG headers + writeWord(0xFFD8); // SOI + writeAPP0(); + writeDQT(); + writeSOF0(image.width,image.height); + writeDHT(); + writeSOS(); + + + // Encode 8x8 macroblocks + var DCY=0; + var DCU=0; + var DCV=0; + + bytenew=0; + bytepos=7; + + + this.encode.displayName = "_encode_"; + + var imageData = image.data; + var width = image.width; + var height = image.height; + + var quadWidth = width*4; + var tripleWidth = width*3; + + var x, y = 0; + var r, g, b; + var start,p, col,row,pos; + while(y < height){ + x = 0; + while(x < quadWidth){ + start = quadWidth * y + x; + p = start; + col = -1; + row = 0; + + for(pos=0; pos < 64; pos++){ + row = pos >> 3;// /8 + col = ( pos & 7 ) * 4; // %8 + p = start + ( row * quadWidth ) + col; + + if(y+row >= height){ // padding bottom + p-= (quadWidth*(y+1+row-height)); + } + + if(x+col >= quadWidth){ // padding right + p-= ((x+col) - quadWidth +4) + } + + r = imageData[ p++ ]; + g = imageData[ p++ ]; + b = imageData[ p++ ]; + + + /* // calculate YUV values dynamically + YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 + UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); + VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); + */ + + // use lookup table (slightly faster) + YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; + UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; + VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; + + } + + DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); + DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); + DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); + x+=32; + } + y+=8; + } + + + //////////////////////////////////////////////////////////////// + + // Do the bit alignment of the EOI marker + if ( bytepos >= 0 ) { + var fillbits = []; + fillbits[1] = bytepos+1; + fillbits[0] = (1<<(bytepos+1))-1; + writeBits(fillbits); + } + + writeWord(0xFFD9); //EOI + + var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); + + byteout = []; + + // benchmarking + // var duration = new Date().getTime() - time_start; + // console.log('Encoding time: '+ currentQuality + 'ms'); + // + + return jpegDataUri + } + + function setQuality(quality){ + if (quality <= 0) { + quality = 1; + } + if (quality > 100) { + quality = 100; + } + + if(currentQuality == quality) return // don't recalc if unchanged + + var sf = 0; + if (quality < 50) { + sf = Math.floor(5000 / quality); + } else { + sf = Math.floor(200 - quality*2); + } + + initQuantTables(sf); + currentQuality = quality; + // console.log('Quality set to: '+quality +'%'); + } + + function init(){ + // var time_start = new Date().getTime(); + if(!quality) quality = 50; + // Create tables + initCharLookupTable() + initHuffmanTbl(); + initCategoryNumber(); + initRGBYUVTable(); + + setQuality(quality); + // var duration = new Date().getTime() - time_start; + // console.log('Initialization '+ duration + 'ms'); + } + + init(); + + }; + + JPEGEncoder.encode = function( data, quality ) { + var encoder = new JPEGEncoder( quality ); + + return encoder.encode( data ); + } + + return JPEGEncoder; + }); + /** + * @fileOverview Fix android canvas.toDataUrl bug. + */ + define('runtime/html5/androidpatch',[ + 'runtime/html5/util', + 'runtime/html5/jpegencoder', + 'base' + ], function( Util, encoder, Base ) { + var origin = Util.canvasToDataUrl, + supportJpeg; + + Util.canvasToDataUrl = function( canvas, type, quality ) { + var ctx, w, h, fragement, parts; + + // 非android手机直接跳过。 + if ( !Base.os.android ) { + return origin.apply( null, arguments ); + } + + // 检测是否canvas支持jpeg导出,根据数据格式来判断。 + // JPEG 前两位分别是:255, 216 + if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) { + fragement = origin.apply( null, arguments ); + + parts = fragement.split(','); + + if ( ~parts[ 0 ].indexOf('base64') ) { + fragement = atob( parts[ 1 ] ); + } else { + fragement = decodeURIComponent( parts[ 1 ] ); + } + + fragement = fragement.substring( 0, 2 ); + + supportJpeg = fragement.charCodeAt( 0 ) === 255 && + fragement.charCodeAt( 1 ) === 216; + } + + // 只有在android环境下才修复 + if ( type === 'image/jpeg' && !supportJpeg ) { + w = canvas.width; + h = canvas.height; + ctx = canvas.getContext('2d'); + + return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality ); + } + + return origin.apply( null, arguments ); + }; + }); + /** + * @fileOverview Image + */ + define('runtime/html5/image',[ + 'base', + 'runtime/html5/runtime', + 'runtime/html5/util' + ], function( Base, Html5Runtime, Util ) { + + var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; + + return Html5Runtime.register( 'Image', { + + // flag: 标记是否被修改过。 + modified: false, + + init: function() { + var me = this, + img = new Image(); + + img.onload = function() { + + me._info = { + type: me.type, + width: this.width, + height: this.height + }; + + //debugger; + + // 读取meta信息。 + if ( !me._metas && 'image/jpeg' === me.type ) { + Util.parseMeta( me._blob, function( error, ret ) { + me._metas = ret; + me.owner.trigger('load'); + }); + } else { + me.owner.trigger('load'); + } + }; + + img.onerror = function() { + me.owner.trigger('error'); + }; + + me._img = img; + }, + + loadFromBlob: function( blob ) { + var me = this, + img = me._img; + + me._blob = blob; + me.type = blob.type; + img.src = Util.createObjectURL( blob.getSource() ); + me.owner.once( 'load', function() { + Util.revokeObjectURL( img.src ); + }); + }, + + resize: function( width, height ) { + var canvas = this._canvas || + (this._canvas = document.createElement('canvas')); + + this._resize( this._img, canvas, width, height ); + this._blob = null; // 没用了,可以删掉了。 + this.modified = true; + this.owner.trigger( 'complete', 'resize' ); + }, + + crop: function( x, y, w, h, s ) { + var cvs = this._canvas || + (this._canvas = document.createElement('canvas')), + opts = this.options, + img = this._img, + iw = img.naturalWidth, + ih = img.naturalHeight, + orientation = this.getOrientation(); + + s = s || 1; + + // todo 解决 orientation 的问题。 + // values that require 90 degree rotation + // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { + + // switch ( orientation ) { + // case 6: + // tmp = x; + // x = y; + // y = iw * s - tmp - w; + // console.log(ih * s, tmp, w) + // break; + // } + + // (w ^= h, h ^= w, w ^= h); + // } + + cvs.width = w; + cvs.height = h; + + opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); + this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); + + this._blob = null; // 没用了,可以删掉了。 + this.modified = true; + this.owner.trigger( 'complete', 'crop' ); + }, + + getAsBlob: function( type ) { + var blob = this._blob, + opts = this.options, + canvas; + + type = type || this.type; + + // blob需要重新生成。 + if ( this.modified || this.type !== type ) { + canvas = this._canvas; + + if ( type === 'image/jpeg' ) { + + blob = Util.canvasToDataUrl( canvas, type, opts.quality ); + + if ( !opts.preserveHeaders && this._metas && + this._metas.imageHead ) { + + blob = Util.dataURL2ArrayBuffer( blob ); + blob = Util.updateImageHead( blob, + this._metas.imageHead ); + blob = Util.arrayBufferToBlob( blob, type ); + return blob; + } + } else { + blob = Util.canvasToDataUrl( canvas, type ); + } + + blob = Util.dataURL2Blob( blob ); + } + + return blob; + }, + + getAsDataUrl: function( type ) { + var opts = this.options; + + type = type || this.type; + + if ( type === 'image/jpeg' ) { + return Util.canvasToDataUrl( this._canvas, type, opts.quality ); + } else { + return this._canvas.toDataURL( type ); + } + }, + + getOrientation: function() { + return this._metas && this._metas.exif && + this._metas.exif.get('Orientation') || 1; + }, + + info: function( val ) { + + // setter + if ( val ) { + this._info = val; + return this; + } + + // getter + return this._info; + }, + + meta: function( val ) { + + // setter + if ( val ) { + this._metas = val; + return this; + } + + // getter + return this._metas; + }, + + destroy: function() { + var canvas = this._canvas; + this._img.onload = null; + + if ( canvas ) { + canvas.getContext('2d') + .clearRect( 0, 0, canvas.width, canvas.height ); + canvas.width = canvas.height = 0; + this._canvas = null; + } + + // 释放内存。非常重要,否则释放不了image的内存。 + this._img.src = BLANK; + this._img = this._blob = null; + }, + + _resize: function( img, cvs, width, height ) { + var opts = this.options, + naturalWidth = img.width, + naturalHeight = img.height, + orientation = this.getOrientation(), + scale, w, h, x, y; + + // values that require 90 degree rotation + if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { + + // 交换width, height的值。 + width ^= height; + height ^= width; + width ^= height; + } + + scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, + height / naturalHeight ); + + // 不允许放大。 + opts.allowMagnify || (scale = Math.min( 1, scale )); + + w = naturalWidth * scale; + h = naturalHeight * scale; + + if ( opts.crop ) { + cvs.width = width; + cvs.height = height; + } else { + cvs.width = w; + cvs.height = h; + } + + x = (cvs.width - w) / 2; + y = (cvs.height - h) / 2; + + opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); + + this._renderImageToCanvas( cvs, img, x, y, w, h ); + }, + + _rotate2Orientaion: function( canvas, orientation ) { + var width = canvas.width, + height = canvas.height, + ctx = canvas.getContext('2d'); + + switch ( orientation ) { + case 5: + case 6: + case 7: + case 8: + canvas.width = height; + canvas.height = width; + break; + } + + switch ( orientation ) { + case 2: // horizontal flip + ctx.translate( width, 0 ); + ctx.scale( -1, 1 ); + break; + + case 3: // 180 rotate left + ctx.translate( width, height ); + ctx.rotate( Math.PI ); + break; + + case 4: // vertical flip + ctx.translate( 0, height ); + ctx.scale( 1, -1 ); + break; + + case 5: // vertical flip + 90 rotate right + ctx.rotate( 0.5 * Math.PI ); + ctx.scale( 1, -1 ); + break; + + case 6: // 90 rotate left + ctx.rotate( -0.5 * Math.PI ); + ctx.translate( -width, 0 ); + break; + + case 7: // horizontal flip + 90 rotate right + ctx.rotate( 0.5 * Math.PI ); + ctx.translate( width, -height ); + ctx.scale( -1, 1 ); + break; + + case 8: // 90 rotate right + ctx.rotate( 0.5 * Math.PI ); + ctx.translate( 0, -height ); + break; + } + }, + + // https://github.com/stomita/ios-imagefile-megapixel/ + // blob/master/src/megapix-image.js + _renderImageToCanvas: (function() { + + // 如果不是ios, 不需要这么复杂! + if ( !Base.os.ios ) { + return function( canvas ) { + var args = Base.slice( arguments, 1 ), + ctx = canvas.getContext('2d'); + + ctx.drawImage.apply( ctx, args ); + }; + } + + /** + * Detecting vertical squash in loaded image. + * Fixes a bug which squash image vertically while drawing into + * canvas for some images. + */ + function detectVerticalSquash( img, iw, ih ) { + var canvas = document.createElement('canvas'), + ctx = canvas.getContext('2d'), + sy = 0, + ey = ih, + py = ih, + data, alpha, ratio; + + + canvas.width = 1; + canvas.height = ih; + ctx.drawImage( img, 0, 0 ); + data = ctx.getImageData( 0, 0, 1, ih ).data; + + // search image edge pixel position in case + // it is squashed vertically. + while ( py > sy ) { + alpha = data[ (py - 1) * 4 + 3 ]; + + if ( alpha === 0 ) { + ey = py; + } else { + sy = py; + } + + py = (ey + sy) >> 1; + } + + ratio = (py / ih); + return (ratio === 0) ? 1 : ratio; + } + + // fix ie7 bug + // http://stackoverflow.com/questions/11929099/ + // html5-canvas-drawimage-ratio-bug-ios + if ( Base.os.ios >= 7 ) { + return function( canvas, img, x, y, w, h ) { + var iw = img.naturalWidth, + ih = img.naturalHeight, + vertSquashRatio = detectVerticalSquash( img, iw, ih ); + + return canvas.getContext('2d').drawImage( img, 0, 0, + iw * vertSquashRatio, ih * vertSquashRatio, + x, y, w, h ); + }; + } + + /** + * Detect subsampling in loaded image. + * In iOS, larger images than 2M pixels may be + * subsampled in rendering. + */ + function detectSubsampling( img ) { + var iw = img.naturalWidth, + ih = img.naturalHeight, + canvas, ctx; + + // subsampling may happen overmegapixel image + if ( iw * ih > 1024 * 1024 ) { + canvas = document.createElement('canvas'); + canvas.width = canvas.height = 1; + ctx = canvas.getContext('2d'); + ctx.drawImage( img, -iw + 1, 0 ); + + // subsampled image becomes half smaller in rendering size. + // check alpha channel value to confirm image is covering + // edge pixel or not. if alpha value is 0 + // image is not covering, hence subsampled. + return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; + } else { + return false; + } + } + + + return function( canvas, img, x, y, width, height ) { + var iw = img.naturalWidth, + ih = img.naturalHeight, + ctx = canvas.getContext('2d'), + subsampled = detectSubsampling( img ), + doSquash = this.type === 'image/jpeg', + d = 1024, + sy = 0, + dy = 0, + tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; + + if ( subsampled ) { + iw /= 2; + ih /= 2; + } + + ctx.save(); + tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = tmpCanvas.height = d; + + tmpCtx = tmpCanvas.getContext('2d'); + vertSquashRatio = doSquash ? + detectVerticalSquash( img, iw, ih ) : 1; + + dw = Math.ceil( d * width / iw ); + dh = Math.ceil( d * height / ih / vertSquashRatio ); + + while ( sy < ih ) { + sx = 0; + dx = 0; + while ( sx < iw ) { + tmpCtx.clearRect( 0, 0, d, d ); + tmpCtx.drawImage( img, -sx, -sy ); + ctx.drawImage( tmpCanvas, 0, 0, d, d, + x + dx, y + dy, dw, dh ); + sx += d; + dx += dw; + } + sy += d; + dy += dh; + } + ctx.restore(); + tmpCanvas = tmpCtx = null; + }; + })() + }); + }); + + /** + * @fileOverview Transport + * @todo 支持chunked传输,优势: + * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, + * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 + */ + define('runtime/html5/transport',[ + 'base', + 'runtime/html5/runtime' + ], function( Base, Html5Runtime ) { + + var noop = Base.noop, + $ = Base.$; + + return Html5Runtime.register( 'Transport', { + init: function() { + this._status = 0; + this._response = null; + }, + + send: function() { + var owner = this.owner, + opts = this.options, + xhr = this._initAjax(), + blob = owner._blob, + server = opts.server, + formData, binary, fr; + + if ( opts.sendAsBinary ) { + server += opts.attachInfoToQuery !== false ? ((/\?/.test( server ) ? '&' : '?') + + $.param( owner._formData )) : ''; + + binary = blob.getSource(); + } else { + formData = new FormData(); + $.each( owner._formData, function( k, v ) { + formData.append( k, v ); + }); + + formData.append( opts.fileVal, blob.getSource(), + opts.filename || owner._formData.name || '' ); + } + + if ( opts.withCredentials && 'withCredentials' in xhr ) { + xhr.open( opts.method, server, true ); + xhr.withCredentials = true; + } else { + xhr.open( opts.method, server ); + } + + this._setRequestHeader( xhr, opts.headers ); + + if ( binary ) { + // 强制设置成 content-type 为文件流。 + xhr.overrideMimeType && + xhr.overrideMimeType('application/octet-stream'); + + // android直接发送blob会导致服务端接收到的是空文件。 + // bug详情。 + // https://code.google.com/p/android/issues/detail?id=39882 + // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 + if ( Base.os.android ) { + fr = new FileReader(); + + fr.onload = function() { + xhr.send( this.result ); + fr = fr.onload = null; + }; + + fr.readAsArrayBuffer( binary ); + } else { + xhr.send( binary ); + } + } else { + xhr.send( formData ); + } + }, + + getResponse: function() { + return this._response; + }, + + getResponseAsJson: function() { + return this._parseJson( this._response ); + }, + + getResponseHeaders: function() { + return this._headers; + }, + + getStatus: function() { + return this._status; + }, + + abort: function() { + var xhr = this._xhr; + + if ( xhr ) { + xhr.upload.onprogress = noop; + xhr.onreadystatechange = noop; + xhr.abort(); + + this._xhr = xhr = null; + } + }, + + destroy: function() { + this.abort(); + }, + + _parseHeader: function(raw) { + var ret = {}; + + raw && raw.replace(/^([^\:]+):(.*)$/mg, function(_, key, value) { + ret[key.trim()] = value.trim(); + }); + + return ret; + }, + + _initAjax: function() { + var me = this, + xhr = new XMLHttpRequest(), + opts = this.options; + + if ( opts.withCredentials && !('withCredentials' in xhr) && + typeof XDomainRequest !== 'undefined' ) { + xhr = new XDomainRequest(); + } + + xhr.upload.onprogress = function( e ) { + var percentage = 0; + + if ( e.lengthComputable ) { + percentage = e.loaded / e.total; + } + + return me.trigger( 'progress', percentage ); + }; + + xhr.onreadystatechange = function() { + + if ( xhr.readyState !== 4 ) { + return; + } + + xhr.upload.onprogress = noop; + xhr.onreadystatechange = noop; + me._xhr = null; + me._status = xhr.status; + + var separator = '|', // 分隔符 + // 拼接的状态,在 widgets/upload.js 会有代码用到这个分隔符 + status = separator + xhr.status + + separator + xhr.statusText; + + if ( xhr.status >= 200 && xhr.status < 300 ) { + me._response = xhr.responseText; + me._headers = me._parseHeader(xhr.getAllResponseHeaders()); + return me.trigger('load'); + } else if ( xhr.status >= 500 && xhr.status < 600 ) { + me._response = xhr.responseText; + me._headers = me._parseHeader(xhr.getAllResponseHeaders()); + return me.trigger( 'error', 'server' + status ); + } + + + return me.trigger( 'error', me._status ? 'http' + status : 'abort' ); + }; + + me._xhr = xhr; + return xhr; + }, + + _setRequestHeader: function( xhr, headers ) { + $.each( headers, function( key, val ) { + xhr.setRequestHeader( key, val ); + }); + }, + + _parseJson: function( str ) { + var json; + + try { + json = JSON.parse( str ); + } catch ( ex ) { + json = {}; + } + + return json; + } + }); + }); + + /** + * @fileOverview Transport flash实现 + */ + define('runtime/html5/md5',[ + 'runtime/html5/runtime' + ], function( FlashRuntime ) { + + /* + * Fastest md5 implementation around (JKM md5) + * Credits: Joseph Myers + * + * @see http://www.myersdaily.org/joseph/javascript/md5-text.html + * @see http://jsperf.com/md5-shootout/7 + */ + + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. */ + var add32 = function (a, b) { + return (a + b) & 0xFFFFFFFF; + }, + + cmn = function (q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); + }, + + ff = function (a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); + }, + + gg = function (a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); + }, + + hh = function (a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); + }, + + ii = function (a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); + }, + + md5cycle = function (x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + }, + + /* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + md5blk = function (s) { + var md5blks = [], + i; /* Andy King said do it this way. */ + + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; + }, + + md5blk_array = function (a) { + var md5blks = [], + i; /* Andy King said do it this way. */ + + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); + } + return md5blks; + }, + + md51 = function (s) { + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i, + length, + tail, + tmp, + lo, + hi; + + for (i = 64; i <= n; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + length = s.length; + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < length; i += 1) { + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + } + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i += 1) { + tail[i] = 0; + } + } + + // Beware that the final length might not fit in 32 bits so we take care of that + tmp = n * 8; + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); + lo = parseInt(tmp[2], 16); + hi = parseInt(tmp[1], 16) || 0; + + tail[14] = lo; + tail[15] = hi; + + md5cycle(state, tail); + return state; + }, + + md51_array = function (a) { + var n = a.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i, + length, + tail, + tmp, + lo, + hi; + + for (i = 64; i <= n; i += 64) { + md5cycle(state, md5blk_array(a.subarray(i - 64, i))); + } + + // Not sure if it is a bug, however IE10 will always produce a sub array of length 1 + // containing the last element of the parent array if the sub array specified starts + // beyond the length of the parent array - weird. + // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue + a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0); + + length = a.length; + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < length; i += 1) { + tail[i >> 2] |= a[i] << ((i % 4) << 3); + } + + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i += 1) { + tail[i] = 0; + } + } + + // Beware that the final length might not fit in 32 bits so we take care of that + tmp = n * 8; + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); + lo = parseInt(tmp[2], 16); + hi = parseInt(tmp[1], 16) || 0; + + tail[14] = lo; + tail[15] = hi; + + md5cycle(state, tail); + + return state; + }, + + hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'], + + rhex = function (n) { + var s = '', + j; + for (j = 0; j < 4; j += 1) { + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + } + return s; + }, + + hex = function (x) { + var i; + for (i = 0; i < x.length; i += 1) { + x[i] = rhex(x[i]); + } + return x.join(''); + }, + + md5 = function (s) { + return hex(md51(s)); + }, + + + + //////////////////////////////////////////////////////////////////////////// + + /** + * SparkMD5 OOP implementation. + * + * Use this class to perform an incremental md5, otherwise use the + * static methods instead. + */ + SparkMD5 = function () { + // call reset to init the instance + this.reset(); + }; + + + // In some cases the fast add32 function cannot be used.. + if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') { + add32 = function (x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + }; + } + + + /** + * Appends a string. + * A conversion will be applied if an utf8 string is detected. + * + * @param {String} str The string to be appended + * + * @return {SparkMD5} The instance itself + */ + SparkMD5.prototype.append = function (str) { + // converts the string to utf8 bytes if necessary + if (/[\u0080-\uFFFF]/.test(str)) { + str = unescape(encodeURIComponent(str)); + } + + // then append as binary + this.appendBinary(str); + + return this; + }; + + /** + * Appends a binary string. + * + * @param {String} contents The binary string to be appended + * + * @return {SparkMD5} The instance itself + */ + SparkMD5.prototype.appendBinary = function (contents) { + this._buff += contents; + this._length += contents.length; + + var length = this._buff.length, + i; + + for (i = 64; i <= length; i += 64) { + md5cycle(this._state, md5blk(this._buff.substring(i - 64, i))); + } + + this._buff = this._buff.substr(i - 64); + + return this; + }; + + /** + * Finishes the incremental computation, reseting the internal state and + * returning the result. + * Use the raw parameter to obtain the raw result instead of the hex one. + * + * @param {Boolean} raw True to get the raw result, false to get the hex result + * + * @return {String|Array} The result + */ + SparkMD5.prototype.end = function (raw) { + var buff = this._buff, + length = buff.length, + i, + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + ret; + + for (i = 0; i < length; i += 1) { + tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3); + } + + this._finish(tail, length); + ret = !!raw ? this._state : hex(this._state); + + this.reset(); + + return ret; + }; + + /** + * Finish the final calculation based on the tail. + * + * @param {Array} tail The tail (will be modified) + * @param {Number} length The length of the remaining buffer + */ + SparkMD5.prototype._finish = function (tail, length) { + var i = length, + tmp, + lo, + hi; + + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(this._state, tail); + for (i = 0; i < 16; i += 1) { + tail[i] = 0; + } + } + + // Do the final computation based on the tail and length + // Beware that the final length may not fit in 32 bits so we take care of that + tmp = this._length * 8; + tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); + lo = parseInt(tmp[2], 16); + hi = parseInt(tmp[1], 16) || 0; + + tail[14] = lo; + tail[15] = hi; + md5cycle(this._state, tail); + }; + + /** + * Resets the internal state of the computation. + * + * @return {SparkMD5} The instance itself + */ + SparkMD5.prototype.reset = function () { + this._buff = ""; + this._length = 0; + this._state = [1732584193, -271733879, -1732584194, 271733878]; + + return this; + }; + + /** + * Releases memory used by the incremental buffer and other aditional + * resources. If you plan to use the instance again, use reset instead. + */ + SparkMD5.prototype.destroy = function () { + delete this._state; + delete this._buff; + delete this._length; + }; + + + /** + * Performs the md5 hash on a string. + * A conversion will be applied if utf8 string is detected. + * + * @param {String} str The string + * @param {Boolean} raw True to get the raw result, false to get the hex result + * + * @return {String|Array} The result + */ + SparkMD5.hash = function (str, raw) { + // converts the string to utf8 bytes if necessary + if (/[\u0080-\uFFFF]/.test(str)) { + str = unescape(encodeURIComponent(str)); + } + + var hash = md51(str); + + return !!raw ? hash : hex(hash); + }; + + /** + * Performs the md5 hash on a binary string. + * + * @param {String} content The binary string + * @param {Boolean} raw True to get the raw result, false to get the hex result + * + * @return {String|Array} The result + */ + SparkMD5.hashBinary = function (content, raw) { + var hash = md51(content); + + return !!raw ? hash : hex(hash); + }; + + /** + * SparkMD5 OOP implementation for array buffers. + * + * Use this class to perform an incremental md5 ONLY for array buffers. + */ + SparkMD5.ArrayBuffer = function () { + // call reset to init the instance + this.reset(); + }; + + //////////////////////////////////////////////////////////////////////////// + + /** + * Appends an array buffer. + * + * @param {ArrayBuffer} arr The array to be appended + * + * @return {SparkMD5.ArrayBuffer} The instance itself + */ + SparkMD5.ArrayBuffer.prototype.append = function (arr) { + // TODO: we could avoid the concatenation here but the algorithm would be more complex + // if you find yourself needing extra performance, please make a PR. + var buff = this._concatArrayBuffer(this._buff, arr), + length = buff.length, + i; + + this._length += arr.byteLength; + + for (i = 64; i <= length; i += 64) { + md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i))); + } + + // Avoids IE10 weirdness (documented above) + this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0); + + return this; + }; + + /** + * Finishes the incremental computation, reseting the internal state and + * returning the result. + * Use the raw parameter to obtain the raw result instead of the hex one. + * + * @param {Boolean} raw True to get the raw result, false to get the hex result + * + * @return {String|Array} The result + */ + SparkMD5.ArrayBuffer.prototype.end = function (raw) { + var buff = this._buff, + length = buff.length, + tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + i, + ret; + + for (i = 0; i < length; i += 1) { + tail[i >> 2] |= buff[i] << ((i % 4) << 3); + } + + this._finish(tail, length); + ret = !!raw ? this._state : hex(this._state); + + this.reset(); + + return ret; + }; + + SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; + + /** + * Resets the internal state of the computation. + * + * @return {SparkMD5.ArrayBuffer} The instance itself + */ + SparkMD5.ArrayBuffer.prototype.reset = function () { + this._buff = new Uint8Array(0); + this._length = 0; + this._state = [1732584193, -271733879, -1732584194, 271733878]; + + return this; + }; + + /** + * Releases memory used by the incremental buffer and other aditional + * resources. If you plan to use the instance again, use reset instead. + */ + SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; + + /** + * Concats two array buffers, returning a new one. + * + * @param {ArrayBuffer} first The first array buffer + * @param {ArrayBuffer} second The second array buffer + * + * @return {ArrayBuffer} The new array buffer + */ + SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) { + var firstLength = first.length, + result = new Uint8Array(firstLength + second.byteLength); + + result.set(first); + result.set(new Uint8Array(second), firstLength); + + return result; + }; + + /** + * Performs the md5 hash on an array buffer. + * + * @param {ArrayBuffer} arr The array buffer + * @param {Boolean} raw True to get the raw result, false to get the hex result + * + * @return {String|Array} The result + */ + SparkMD5.ArrayBuffer.hash = function (arr, raw) { + var hash = md51_array(new Uint8Array(arr)); + + return !!raw ? hash : hex(hash); + }; + + return FlashRuntime.register( 'Md5', { + init: function() { + // do nothing. + }, + + loadFromBlob: function( file ) { + var blob = file.getSource(), + chunkSize = 2 * 1024 * 1024, + chunks = Math.ceil( blob.size / chunkSize ), + chunk = 0, + owner = this.owner, + spark = new SparkMD5.ArrayBuffer(), + me = this, + blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice, + loadNext, fr; + + fr = new FileReader(); + + loadNext = function() { + var start, end; + + start = chunk * chunkSize; + end = Math.min( start + chunkSize, blob.size ); + + fr.onload = function( e ) { + spark.append( e.target.result ); + owner.trigger( 'progress', { + total: file.size, + loaded: end + }); + }; + + fr.onloadend = function() { + fr.onloadend = fr.onload = null; + + if ( ++chunk < chunks ) { + setTimeout( loadNext, 1 ); + } else { + setTimeout(function(){ + owner.trigger('load'); + me.result = spark.end(); + loadNext = file = blob = spark = null; + owner.trigger('complete'); + }, 50 ); + } + }; + + fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) ); + }; + + loadNext(); + }, + + getResult: function() { + return this.result; + } + }); + }); + /** + * @fileOverview FlashRuntime + */ + define('runtime/flash/runtime',[ + 'base', + 'runtime/runtime', + 'runtime/compbase' + ], function( Base, Runtime, CompBase ) { + + var $ = Base.$, + type = 'flash', + components = {}; + + + function getFlashVersion() { + var version; + + try { + version = navigator.plugins[ 'Shockwave Flash' ]; + version = version.description; + } catch ( ex ) { + try { + version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') + .GetVariable('$version'); + } catch ( ex2 ) { + version = '0.0'; + } + } + version = version.match( /\d+/g ); + return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); + } + + function FlashRuntime() { + var pool = {}, + clients = {}, + destroy = this.destroy, + me = this, + jsreciver = Base.guid('cwebuploader_'); + + Runtime.apply( me, arguments ); + me.type = type; + + + // 这个方法的调用者,实际上是RuntimeClient + me.exec = function( comp, fn/*, args...*/ ) { + var client = this, + uid = client.uid, + args = Base.slice( arguments, 2 ), + instance; + + clients[ uid ] = client; + + if ( components[ comp ] ) { + if ( !pool[ uid ] ) { + pool[ uid ] = new components[ comp ]( client, me ); + } + + instance = pool[ uid ]; + + if ( instance[ fn ] ) { + return instance[ fn ].apply( instance, args ); + } + } + + return me.flashExec.apply( client, arguments ); + }; + + function handler( evt, obj ) { + var type = evt.type || evt, + parts, uid; + + parts = type.split('::'); + uid = parts[ 0 ]; + type = parts[ 1 ]; + + // console.log.apply( console, arguments ); + + if ( type === 'Ready' && uid === me.uid ) { + me.trigger('ready'); + } else if ( clients[ uid ] ) { + clients[ uid ].trigger( type.toLowerCase(), evt, obj ); + } + + // Base.log( evt, obj ); + } + + // flash的接受器。 + window[ jsreciver ] = function() { + var args = arguments; + + // 为了能捕获得到。 + setTimeout(function() { + handler.apply( null, args ); + }, 1 ); + }; + + this.jsreciver = jsreciver; + + this.destroy = function() { + // @todo 删除池子中的所有实例 + return destroy && destroy.apply( this, arguments ); + }; + + this.flashExec = function( comp, fn ) { + var flash = me.getFlash(), + args = Base.slice( arguments, 2 ); + + return flash.exec( this.uid, comp, fn, args ); + }; + + // @todo + } + + Base.inherits( Runtime, { + constructor: FlashRuntime, + + init: function() { + var container = this.getContainer(), + opts = this.options, + html; + + // if not the minimal height, shims are not initialized + // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) + container.css({ + position: 'absolute', + top: '-8px', + left: '-8px', + width: '9px', + height: '9px', + overflow: 'hidden' + }); + + // insert flash object + html = '' + + '' + + '' + + '' + + ''; + + container.html( html ); + }, + + getFlash: function() { + if ( this._flash ) { + return this._flash; + } + + this._flash = $( '#' + this.uid ).get( 0 ); + return this._flash; + } + + }); + + FlashRuntime.register = function( name, component ) { + component = components[ name ] = Base.inherits( CompBase, $.extend({ + + // @todo fix this later + flashExec: function() { + var owner = this.owner, + runtime = this.getRuntime(); + + return runtime.flashExec.apply( owner, arguments ); + } + }, component ) ); + + return component; + }; + + if ( getFlashVersion() >= 11.4 ) { + Runtime.addRuntime( type, FlashRuntime ); + } + + return FlashRuntime; + }); + /** + * @fileOverview FilePicker + */ + define('runtime/flash/filepicker',[ + 'base', + 'runtime/flash/runtime' + ], function( Base, FlashRuntime ) { + var $ = Base.$; + + return FlashRuntime.register( 'FilePicker', { + init: function( opts ) { + var copy = $.extend({}, opts ), + len, i; + + // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. + len = copy.accept && copy.accept.length; + for ( i = 0; i < len; i++ ) { + if ( !copy.accept[ i ].title ) { + copy.accept[ i ].title = 'Files'; + } + } + + delete copy.button; + delete copy.id; + delete copy.container; + + this.flashExec( 'FilePicker', 'init', copy ); + }, + + destroy: function() { + this.flashExec( 'FilePicker', 'destroy' ); + } + }); + }); + /** + * @fileOverview 图片压缩 + */ + define('runtime/flash/image',[ + 'runtime/flash/runtime' + ], function( FlashRuntime ) { + + return FlashRuntime.register( 'Image', { + // init: function( options ) { + // var owner = this.owner; + + // this.flashExec( 'Image', 'init', options ); + // owner.on( 'load', function() { + // debugger; + // }); + // }, + + loadFromBlob: function( blob ) { + var owner = this.owner; + + owner.info() && this.flashExec( 'Image', 'info', owner.info() ); + owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() ); + + this.flashExec( 'Image', 'loadFromBlob', blob.uid ); + } + }); + }); + /** + * @fileOverview Transport flash实现 + */ + define('runtime/flash/transport',[ + 'base', + 'runtime/flash/runtime', + 'runtime/client' + ], function( Base, FlashRuntime, RuntimeClient ) { + var $ = Base.$; + + return FlashRuntime.register( 'Transport', { + init: function() { + this._status = 0; + this._response = null; + this._responseJson = null; + }, + + send: function() { + var owner = this.owner, + opts = this.options, + xhr = this._initAjax(), + blob = owner._blob, + server = opts.server, + binary; + + xhr.connectRuntime( blob.ruid ); + + if ( opts.sendAsBinary ) { + server += (/\?/.test( server ) ? '&' : '?') + + $.param( owner._formData ); + + binary = blob.uid; + } else { + $.each( owner._formData, function( k, v ) { + xhr.exec( 'append', k, v ); + }); + + xhr.exec( 'appendBlob', opts.fileVal, blob.uid, + opts.filename || owner._formData.name || '' ); + } + + this._setRequestHeader( xhr, opts.headers ); + xhr.exec( 'send', { + method: opts.method, + url: server, + forceURLStream: opts.forceURLStream, + mimeType: 'application/octet-stream' + }, binary ); + }, + + getStatus: function() { + return this._status; + }, + + getResponse: function() { + return this._response || ''; + }, + + getResponseAsJson: function() { + return this._responseJson; + }, + + getResponseHeaders: function() { + // flash 暂不支持 + return {}; + }, + + abort: function() { + var xhr = this._xhr; + + if ( xhr ) { + xhr.exec('abort'); + xhr.destroy(); + this._xhr = xhr = null; + } + }, + + destroy: function() { + this.abort(); + }, + + _initAjax: function() { + var me = this, + xhr = new RuntimeClient('XMLHttpRequest'); + + xhr.on( 'uploadprogress progress', function( e ) { + var percent = e.loaded / e.total; + percent = Math.min( 1, Math.max( 0, percent ) ); + return me.trigger( 'progress', percent ); + }); + + xhr.on( 'load', function() { + var status = xhr.exec('getStatus'), + readBody = false, + err = '', + p; + + xhr.off(); + me._xhr = null; + + if ( status >= 200 && status < 300 ) { + readBody = true; + } else if ( status >= 500 && status < 600 ) { + readBody = true; + err = 'server-'+status; + } else { + err = 'http-'+status; + } + + if ( readBody ) { + me._response = xhr.exec('getResponse'); + me._response = decodeURIComponent( me._response ); + + // flash 处理可能存在 bug, 没辙只能靠 js 了 + // try { + // me._responseJson = xhr.exec('getResponseAsJson'); + // } catch ( error ) { + + p = function( s ) { + try { + if (window.JSON && window.JSON.parse) { + return JSON.parse(s); + } + + return new Function('return ' + s).call(); + } catch ( err ) { + return {}; + } + }; + me._responseJson = me._response ? p(me._response) : {}; + + // } + } + + xhr.destroy(); + xhr = null; + + return err ? me.trigger( 'error', err ) : me.trigger('load'); + }); + + xhr.on( 'error', function() { + var status = xhr.exec('getStatus'),err = status?'http-'+status:'http'; + xhr.off(); + me._xhr = null; + me.trigger( 'error', err ); + }); + + me._xhr = xhr; + return xhr; + }, + + _setRequestHeader: function( xhr, headers ) { + $.each( headers, function( key, val ) { + xhr.exec( 'setRequestHeader', key, val ); + }); + } + }); + }); + + /** + * @fileOverview Blob Html实现 + */ + define('runtime/flash/blob',[ + 'runtime/flash/runtime', + 'lib/blob' + ], function( FlashRuntime, Blob ) { + + return FlashRuntime.register( 'Blob', { + slice: function( start, end ) { + var blob = this.flashExec( 'Blob', 'slice', start, end ); + + return new Blob( this.getRuid(), blob ); + } + }); + }); + /** + * @fileOverview Md5 flash实现 + */ + define('runtime/flash/md5',[ + 'runtime/flash/runtime' + ], function( FlashRuntime ) { + + return FlashRuntime.register( 'Md5', { + init: function() { + // do nothing. + }, + + loadFromBlob: function( blob ) { + return this.flashExec( 'Md5', 'loadFromBlob', blob.uid ); + } + }); + }); + /** + * @fileOverview 完全版本。 + */ + define('preset/all',[ + 'base', + + // widgets + 'widgets/filednd', + 'widgets/filepaste', + 'widgets/filepicker', + 'widgets/image', + 'widgets/queue', + 'widgets/runtime', + 'widgets/upload', + 'widgets/validator', + 'widgets/md5', + + // runtimes + // html5 + 'runtime/html5/blob', + 'runtime/html5/dnd', + 'runtime/html5/filepaste', + 'runtime/html5/filepicker', + 'runtime/html5/imagemeta/exif', + 'runtime/html5/androidpatch', + 'runtime/html5/image', + 'runtime/html5/transport', + 'runtime/html5/md5', + + // flash + 'runtime/flash/filepicker', + 'runtime/flash/image', + 'runtime/flash/transport', + 'runtime/flash/blob', + 'runtime/flash/md5' + ], function( Base ) { + return Base; + }); + /** + * @fileOverview 日志组件,主要用来收集错误信息,可以帮助 cwebuploader 更好的定位问题和发展。 + * + * 如果您不想要启用此功能,请在打包的时候去掉 log 模块。 + * + * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。 + * + * 如: + * CWebUploader.create({ + * ... + * + * disableWidgets: 'log', + * + * ... + * }) + */ + define('widgets/log',[ + 'base', + 'uploader', + 'widgets/widget' + ], function( Base, Uploader ) { + var $ = Base.$, + logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??', + product = (location.hostname || location.host || 'protected').toLowerCase(), + + // 只针对 baidu 内部产品用户做统计功能。 + enable = product && /baidu/i.exec(product), + base; + + if (!enable) { + return; + } + + base = { + dv: 3, + master: 'cwebuploader', + online: /test/.exec(product) ? 0 : 1, + module: '', + product: product, + type: 0 + }; + + function send(data) { + var obj = $.extend({}, base, data), + url = logUrl.replace(/^(.*)\?/, '$1' + $.param( obj )), + image = new Image(); + + image.src = url; + } + + return Uploader.register({ + name: 'log', + + init: function() { + var owner = this.owner, + count = 0, + size = 0; + + owner + .on('error', function(code) { + send({ + type: 2, + c_error_code: code + }); + }) + .on('uploadError', function(file, reason) { + send({ + type: 2, + c_error_code: 'UPLOAD_ERROR', + c_reason: '' + reason + }); + }) + .on('uploadComplete', function(file) { + count++; + size += file.size; + }). + on('uploadFinished', function() { + send({ + c_count: count, + c_size: size + }); + count = size = 0; + }); + + send({ + c_usage: 1 + }); + } + }); + }); + /** + * @fileOverview Uploader上传类 + */ + define('cwebuploader',[ + 'preset/all', + 'widgets/log' + ], function( preset ) { + return preset; + }); + return require('cwebuploader'); +}); diff --git a/source/plugin/replyfloor/static/image/agree.gif b/source/plugin/replyfloor/static/image/agree.gif new file mode 100644 index 0000000..9355884 Binary files /dev/null and b/source/plugin/replyfloor/static/image/agree.gif differ diff --git a/source/plugin/replyfloor/static/image/arw_l.gif b/source/plugin/replyfloor/static/image/arw_l.gif new file mode 100644 index 0000000..705f065 Binary files /dev/null and b/source/plugin/replyfloor/static/image/arw_l.gif differ diff --git a/source/plugin/replyfloor/static/image/arw_r.gif b/source/plugin/replyfloor/static/image/arw_r.gif new file mode 100644 index 0000000..eeeafdc Binary files /dev/null and b/source/plugin/replyfloor/static/image/arw_r.gif differ diff --git a/source/plugin/replyfloor/static/image/close.png b/source/plugin/replyfloor/static/image/close.png new file mode 100644 index 0000000..da0e796 Binary files /dev/null and b/source/plugin/replyfloor/static/image/close.png differ diff --git a/source/plugin/replyfloor/static/image/digg.png b/source/plugin/replyfloor/static/image/digg.png new file mode 100644 index 0000000..d07db51 Binary files /dev/null and b/source/plugin/replyfloor/static/image/digg.png differ diff --git a/source/plugin/replyfloor/static/image/fastreply.gif b/source/plugin/replyfloor/static/image/fastreply.gif new file mode 100644 index 0000000..ac442b3 Binary files /dev/null and b/source/plugin/replyfloor/static/image/fastreply.gif differ diff --git a/source/plugin/replyfloor/static/image/fastreply.svg b/source/plugin/replyfloor/static/image/fastreply.svg new file mode 100644 index 0000000..4731e78 --- /dev/null +++ b/source/plugin/replyfloor/static/image/fastreply.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/static/image/fbld.png b/source/plugin/replyfloor/static/image/fbld.png new file mode 100644 index 0000000..efe44b4 Binary files /dev/null and b/source/plugin/replyfloor/static/image/fbld.png differ diff --git a/source/plugin/replyfloor/static/image/fbld.svg b/source/plugin/replyfloor/static/image/fbld.svg new file mode 100644 index 0000000..454afa6 --- /dev/null +++ b/source/plugin/replyfloor/static/image/fbld.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/static/image/fclr.png b/source/plugin/replyfloor/static/image/fclr.png new file mode 100644 index 0000000..638c98c Binary files /dev/null and b/source/plugin/replyfloor/static/image/fclr.png differ diff --git a/source/plugin/replyfloor/static/image/fclr.svg b/source/plugin/replyfloor/static/image/fclr.svg new file mode 100644 index 0000000..10235e5 --- /dev/null +++ b/source/plugin/replyfloor/static/image/fclr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/static/image/fmg.png b/source/plugin/replyfloor/static/image/fmg.png new file mode 100644 index 0000000..58ef43c Binary files /dev/null and b/source/plugin/replyfloor/static/image/fmg.png differ diff --git a/source/plugin/replyfloor/static/image/fmg.svg b/source/plugin/replyfloor/static/image/fmg.svg new file mode 100644 index 0000000..c09dcfd --- /dev/null +++ b/source/plugin/replyfloor/static/image/fmg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/static/image/fsml.png b/source/plugin/replyfloor/static/image/fsml.png new file mode 100644 index 0000000..f0a8999 Binary files /dev/null and b/source/plugin/replyfloor/static/image/fsml.png differ diff --git a/source/plugin/replyfloor/static/image/fsml.svg b/source/plugin/replyfloor/static/image/fsml.svg new file mode 100644 index 0000000..87624d6 --- /dev/null +++ b/source/plugin/replyfloor/static/image/fsml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/replyfloor/static/image/icon_close.png b/source/plugin/replyfloor/static/image/icon_close.png new file mode 100644 index 0000000..26a4384 Binary files /dev/null and b/source/plugin/replyfloor/static/image/icon_close.png differ diff --git a/source/plugin/replyfloor/static/image/icon_reply.png b/source/plugin/replyfloor/static/image/icon_reply.png new file mode 100644 index 0000000..e4ef2c0 Binary files /dev/null and b/source/plugin/replyfloor/static/image/icon_reply.png differ diff --git a/source/plugin/replyfloor/static/image/locked.gif b/source/plugin/replyfloor/static/image/locked.gif new file mode 100644 index 0000000..7f26020 Binary files /dev/null and b/source/plugin/replyfloor/static/image/locked.gif differ diff --git a/source/plugin/replyfloor/static/image/settop.png b/source/plugin/replyfloor/static/image/settop.png new file mode 100644 index 0000000..2a480ef Binary files /dev/null and b/source/plugin/replyfloor/static/image/settop.png differ diff --git a/source/plugin/replyfloor/static/image/share_btn.png b/source/plugin/replyfloor/static/image/share_btn.png new file mode 100644 index 0000000..30df92c Binary files /dev/null and b/source/plugin/replyfloor/static/image/share_btn.png differ diff --git a/source/plugin/replyfloor/static/image/share_inputEdit.png b/source/plugin/replyfloor/static/image/share_inputEdit.png new file mode 100644 index 0000000..1506751 Binary files /dev/null and b/source/plugin/replyfloor/static/image/share_inputEdit.png differ diff --git a/source/plugin/replyfloor/static/image/xcp-like.png b/source/plugin/replyfloor/static/image/xcp-like.png new file mode 100644 index 0000000..e7e800c Binary files /dev/null and b/source/plugin/replyfloor/static/image/xcp-like.png differ diff --git a/source/plugin/replyfloor/static/image/xcp-reply.png b/source/plugin/replyfloor/static/image/xcp-reply.png new file mode 100644 index 0000000..bdc28f9 Binary files /dev/null and b/source/plugin/replyfloor/static/image/xcp-reply.png differ diff --git a/source/plugin/replyfloor/static/js/Sortable.js b/source/plugin/replyfloor/static/js/Sortable.js new file mode 100644 index 0000000..b86493e --- /dev/null +++ b/source/plugin/replyfloor/static/js/Sortable.js @@ -0,0 +1,2349 @@ +/**! + * Sortable + * @author RubaXa + * @author owenm + * @license MIT + */ + +(function sortableModule(factory) { + "use strict"; + + if (typeof define === "function" && define.amd) { + define(factory); + } + else if (typeof module != "undefined" && typeof module.exports != "undefined") { + module.exports = factory(); + } + else { + /* jshint sub:true */ + window["Sortable"] = factory(); + } +})(function sortableFactory() { + "use strict"; + + if (typeof window === "undefined" || !window.document) { + return function sortableError() { + throw new Error("Sortable.js requires a window with a document"); + }; + } + + var dragEl, + parentEl, + ghostEl, + cloneEl, + rootEl, + nextEl, + lastDownEl, + + scrollEl, + scrollParentEl, + scrollCustomFn, + + oldIndex, + newIndex, + + activeGroup, + putSortable, + + autoScrolls = [], + scrolling = false, + + awaitingDragStarted = false, + ignoreNextClick = false, + sortables = [], + + pointerElemChangedInterval, + lastPointerElemX, + lastPointerElemY, + + tapEvt, + touchEvt, + + moved, + + + lastTarget, + lastDirection, + pastFirstInvertThresh = false, + isCircumstantialInvert = false, + lastMode, // 'swap' or 'insert' + + targetMoveDistance, + + + forRepaintDummy, + realDragElRect, // dragEl rect after current animation + + /** @const */ + R_SPACE = /\s+/g, + + expando = 'Sortable' + (new Date).getTime(), + + win = window, + document = win.document, + parseInt = win.parseInt, + setTimeout = win.setTimeout, + + $ = win.jQuery || win.Zepto, + Polymer = win.Polymer, + + captureMode = { + capture: false, + passive: false + }, + + IE11OrLess = !!navigator.userAgent.match(/(?:Trident.*rv[ :]?11\.|msie|iemobile)/i), + Edge = !!navigator.userAgent.match(/Edge/i), + // FireFox = !!navigator.userAgent.match(/firefox/i), + + CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float', + + // This will not pass for IE9, because IE9 DnD only works on anchors + supportDraggable = ('draggable' in document.createElement('div')), + + supportCssPointerEvents = (function() { + // false when <= IE11 + if (IE11OrLess) { + return false; + } + var el = document.createElement('x'); + el.style.cssText = 'pointer-events:auto'; + return el.style.pointerEvents === 'auto'; + })(), + + _silent = false, + _alignedSilent = false, + + abs = Math.abs, + min = Math.min, + + savedInputChecked = [], + + _detectDirection = function(el, options) { + var elCSS = _css(el), + elWidth = parseInt(elCSS.width), + child1 = _getChild(el, 0, options), + child2 = _getChild(el, 1, options), + firstChildCSS = child1 && _css(child1), + secondChildCSS = child2 && _css(child2), + firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + _getRect(child1).width, + secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + _getRect(child2).width; + if (elCSS.display === 'flex') { + return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' + ? 'vertical' : 'horizontal'; + } + if (child1 && firstChildCSS.float !== 'none') { + var touchingSideChild2 = firstChildCSS.float === 'left' ? 'left' : 'right'; + + return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? + 'vertical' : 'horizontal'; + } + return (child1 && + ( + firstChildCSS.display === 'block' || + firstChildCSS.display === 'flex' || + firstChildCSS.display === 'table' || + firstChildCSS.display === 'grid' || + firstChildWidth >= elWidth && + elCSS[CSSFloatProperty] === 'none' || + child2 && + elCSS[CSSFloatProperty] === 'none' && + firstChildWidth + secondChildWidth > elWidth + ) ? + 'vertical' : 'horizontal' + ); + }, + + /** + * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold. + * @param {Number} x X position + * @param {Number} y Y position + * @return {HTMLElement} Element of the first found nearest Sortable + */ + _detectNearestEmptySortable = function(x, y) { + for (var i = 0; i < sortables.length; i++) { + if (sortables[i].children.length) continue; + + var rect = _getRect(sortables[i]), + threshold = sortables[i][expando].options.emptyInsertThreshold, + insideHorizontally = x >= (rect.left - threshold) && x <= (rect.right + threshold), + insideVertically = y >= (rect.top - threshold) && y <= (rect.bottom + threshold); + + if (insideHorizontally && insideVertically) { + return sortables[i]; + } + } + }, + + _isClientInRowColumn = function(x, y, el, axis, options) { + var targetRect = _getRect(el), + targetS1Opp = axis === 'vertical' ? targetRect.left : targetRect.top, + targetS2Opp = axis === 'vertical' ? targetRect.right : targetRect.bottom, + mouseOnOppAxis = axis === 'vertical' ? x : y; + + return targetS1Opp < mouseOnOppAxis && mouseOnOppAxis < targetS2Opp; + }, + + _isElInRowColumn = function(el1, el2, axis) { + var el1Rect = el1 === dragEl && realDragElRect || _getRect(el1), + el2Rect = el2 === dragEl && realDragElRect || _getRect(el2), + el1S1Opp = axis === 'vertical' ? el1Rect.left : el1Rect.top, + el1S2Opp = axis === 'vertical' ? el1Rect.right : el1Rect.bottom, + el1OppLength = axis === 'vertical' ? el1Rect.width : el1Rect.height, + el2S1Opp = axis === 'vertical' ? el2Rect.left : el2Rect.top, + el2S2Opp = axis === 'vertical' ? el2Rect.right : el2Rect.bottom, + el2OppLength = axis === 'vertical' ? el2Rect.width : el2Rect.height; + + return ( + el1S1Opp === el2S1Opp || + el1S2Opp === el2S2Opp || + (el1S1Opp + el1OppLength / 2) === (el2S1Opp + el2OppLength / 2) + ); + }, + + _getParentAutoScrollElement = function(el, includeSelf) { + // skip to window + if (!el || !el.getBoundingClientRect) return win; + + var elem = el; + var gotSelf = false; + do { + // we don't need to get elem css if it isn't even overflowing in the first place (performance) + if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) { + var elemCSS = _css(elem); + if ( + elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || + elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll') + ) { + if (!elem || !elem.getBoundingClientRect || elem === document.body) return win; + + if (gotSelf || includeSelf) return elem; + gotSelf = true; + } + } + /* jshint boss:true */ + } while (elem = elem.parentNode); + + return win; + }, + + _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl, /**Boolean*/isFallback) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (options.scroll) { + var _this = rootEl ? rootEl[expando] : window, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + + x = evt.clientX, + y = evt.clientY, + + winWidth = window.innerWidth, + winHeight = window.innerHeight, + + scrollThisInstance = false; + + // Detect scrollEl + if (scrollParentEl !== rootEl) { + _clearAutoScrolls(); + + scrollEl = options.scroll; + scrollCustomFn = options.scrollFn; + + if (scrollEl === true) { + scrollEl = _getParentAutoScrollElement(rootEl, true); + scrollParentEl = scrollEl; + } + } + + + var layersOut = 0; + var currentParent = scrollEl; + do { + var el = currentParent, + rect = _getRect(el), + + top = rect.top, + bottom = rect.bottom, + left = rect.left, + right = rect.right, + + width = rect.width, + height = rect.height, + + scrollWidth, + scrollHeight, + + css, + + vx, + vy, + + canScrollX, + canScrollY, + + scrollPosX, + scrollPosY; + + + if (el !== win) { + scrollWidth = el.scrollWidth; + scrollHeight = el.scrollHeight; + + css = _css(el); + + canScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll'); + canScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll'); + + scrollPosX = el.scrollLeft; + scrollPosY = el.scrollTop; + } else { + scrollWidth = document.documentElement.scrollWidth; + scrollHeight = document.documentElement.scrollHeight; + + css = _css(document.documentElement); + + canScrollX = width < scrollWidth && (css.overflowX === 'auto' || css.overflowX === 'scroll' || css.overflowX === 'visible'); + canScrollY = height < scrollHeight && (css.overflowY === 'auto' || css.overflowY === 'scroll' || css.overflowY === 'visible'); + + scrollPosX = document.documentElement.scrollLeft; + scrollPosY = document.documentElement.scrollTop; + } + + vx = canScrollX && (abs(right - x) <= sens && (scrollPosX + width) < scrollWidth) - (abs(left - x) <= sens && !!scrollPosX); + + vy = canScrollY && (abs(bottom - y) <= sens && (scrollPosY + height) < scrollHeight) - (abs(top - y) <= sens && !!scrollPosY); + + + if (!autoScrolls[layersOut]) { + for (var i = 0; i <= layersOut; i++) { + if (!autoScrolls[i]) { + autoScrolls[i] = {}; + } + } + } + + if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) { + autoScrolls[layersOut].el = el; + autoScrolls[layersOut].vx = vx; + autoScrolls[layersOut].vy = vy; + + clearInterval(autoScrolls[layersOut].pid); + + if (el && (vx != 0 || vy != 0)) { + scrollThisInstance = true; + /* jshint loopfunc:true */ + autoScrolls[layersOut].pid = setInterval((function () { + // emulate drag over during autoscroll (fallback), emulating native DnD behaviour + if (isFallback && this.layer === 0) { + Sortable.active._emulateDragOver(true); + } + var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0; + var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0; + + if ('function' === typeof(scrollCustomFn)) { + if (scrollCustomFn.call(_this, scrollOffsetX, scrollOffsetY, evt, touchEvt, autoScrolls[this.layer].el) !== 'continue') { + return; + } + } + if (autoScrolls[this.layer].el === win) { + win.scrollTo(win.pageXOffset + scrollOffsetX, win.pageYOffset + scrollOffsetY); + } else { + autoScrolls[this.layer].el.scrollTop += scrollOffsetY; + autoScrolls[this.layer].el.scrollLeft += scrollOffsetX; + } + }).bind({layer: layersOut}), 24); + } + } + layersOut++; + } while (options.bubbleScroll && currentParent !== win && (currentParent = _getParentAutoScrollElement(currentParent, false))); + scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not + } + }, 30), + + _clearAutoScrolls = function () { + autoScrolls.forEach(function(autoScroll) { + clearInterval(autoScroll.pid); + }); + autoScrolls = []; + }, + + _prepareGroup = function (options) { + function toFn(value, pull) { + return function(to, from, dragEl, evt) { + var sameGroup = to.options.group.name && + from.options.group.name && + to.options.group.name === from.options.group.name; + + if (value == null && (pull || sameGroup)) { + // Default pull value + // Default pull and put value if same group + return true; + } else if (value == null || value === false) { + return false; + } else if (pull && value === 'clone') { + return value; + } else if (typeof value === 'function') { + return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt); + } else { + var otherGroup = (pull ? to : from).options.group.name; + + return (value === true || + (typeof value === 'string' && value === otherGroup) || + (value.join && value.indexOf(otherGroup) > -1)); + } + }; + } + + var group = {}; + var originalGroup = options.group; + + if (!originalGroup || typeof originalGroup != 'object') { + originalGroup = {name: originalGroup}; + } + + group.name = originalGroup.name; + group.checkPull = toFn(originalGroup.pull, true); + group.checkPut = toFn(originalGroup.put); + group.revertClone = originalGroup.revertClone; + + options.group = group; + }, + + _checkAlignment = function(evt) { + if (!dragEl || !dragEl.parentNode) return; + dragEl.parentNode[expando] && dragEl.parentNode[expando]._computeIsAligned(evt); + }, + + _isTrueParentSortable = function(el, target) { + var trueParent = target; + while (!trueParent[expando]) { + trueParent = trueParent.parentNode; + } + + return el === trueParent; + }, + + _artificalBubble = function(sortable, originalEvt, method) { + // Artificial IE bubbling + var nextParent = sortable.parentNode; + while (nextParent && !nextParent[expando]) { + nextParent = nextParent.parentNode; + } + + if (nextParent) { + nextParent[expando][method](_extend(originalEvt, { + artificialBubble: true + })); + } + }, + + _hideGhostForTarget = function() { + if (!supportCssPointerEvents && ghostEl) { + _css(ghostEl, 'display', 'none'); + } + }, + + _unhideGhostForTarget = function() { + if (!supportCssPointerEvents && ghostEl) { + _css(ghostEl, 'display', ''); + } + }; + + + // #1184 fix - Prevent click event on fallback if dragged but item not changed position + document.addEventListener('click', function(evt) { + if (ignoreNextClick) { + evt.preventDefault(); + evt.stopPropagation && evt.stopPropagation(); + evt.stopImmediatePropagation && evt.stopImmediatePropagation(); + ignoreNextClick = false; + return false; + } + }, true); + + var nearestEmptyInsertDetectEvent = function(evt) { + evt = evt.touches ? evt.touches[0] : evt; + if (dragEl) { + var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY); + + if (nearest) { + nearest[expando]._onDragOver({ + clientX: evt.clientX, + clientY: evt.clientY, + target: nearest, + rootEl: nearest + }); + } + } + }; + // We do not want this to be triggered if completed (bubbling canceled), so only define it here + _on(document, 'dragover', nearestEmptyInsertDetectEvent); + _on(document, 'mousemove', nearestEmptyInsertDetectEvent); + _on(document, 'touchmove', nearestEmptyInsertDetectEvent); + + /** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ + function Sortable(el, options) { + if (!(el && el.nodeType && el.nodeType === 1)) { + throw 'Sortable: `el` must be HTMLElement, not ' + {}.toString.call(el); + } + + this.el = el; // root element + this.options = options = _extend({}, options); + + + // Export instance + el[expando] = this; + + // Default options + var defaults = { + group: null, + sort: true, + disabled: false, + store: null, + handle: null, + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + bubbleScroll: true, + draggable: /[uo]l/i.test(el.nodeName) ? '>li' : '>*', + swapThreshold: 1, // percentage; 0 <= x <= 1 + invertSwap: false, // invert always + invertedSwapThreshold: null, // will be set to same as swapThreshold if default + removeCloneOnHide: true, + direction: function() { + return _detectDirection(el, this.options); + }, + ghostClass: 'sortable-ghost', + chosenClass: 'sortable-chosen', + dragClass: 'sortable-drag', + ignore: 'a, img', + filter: null, + preventOnFilter: true, + animation: 0, + easing: null, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData('Text', dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: 'data-id', + delay: 0, + touchStartThreshold: parseInt(window.devicePixelRatio, 10) || 1, + forceFallback: false, + fallbackClass: 'sortable-fallback', + fallbackOnBody: false, + fallbackTolerance: 0, + fallbackOffset: {x: 0, y: 0}, + supportPointer: Sortable.supportPointer !== false && ( + ('PointerEvent' in window) || + window.navigator && ('msPointerEnabled' in window.navigator) // microsoft + ), + emptyInsertThreshold: 5 + }; + + + // Set default options + for (var name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + _prepareGroup(options); + + // Bind all private methods + for (var fn in this) { + if (fn.charAt(0) === '_' && typeof this[fn] === 'function') { + this[fn] = this[fn].bind(this); + } + } + + // Setup drag mode + this.nativeDraggable = options.forceFallback ? false : supportDraggable; + + // Bind events + if (options.supportPointer) { + _on(el, 'pointerdown', this._onTapStart); + } else { + _on(el, 'mousedown', this._onTapStart); + _on(el, 'touchstart', this._onTapStart); + } + + if (this.nativeDraggable) { + _on(el, 'dragover', this); + _on(el, 'dragenter', this); + } + + sortables.push(this.el); + + // Restore sorting + options.store && options.store.get && this.sort(options.store.get(this) || []); + } + + Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _computeIsAligned: function(evt) { + var target; + + if (ghostEl && !supportCssPointerEvents) { + _hideGhostForTarget(); + target = document.elementFromPoint(evt.clientX, evt.clientY); + _unhideGhostForTarget(); + } else { + target = evt.target; + } + + target = _closest(target, this.options.draggable, this.el, false); + if (_alignedSilent) return; + if (!dragEl || dragEl.parentNode !== this.el) return; + + var children = this.el.children; + for (var i = 0; i < children.length; i++) { + // Don't change for target in case it is changed to aligned before onDragOver is fired + if (_closest(children[i], this.options.draggable, this.el, false) && children[i] !== target) { + children[i].sortableMouseAligned = _isClientInRowColumn(evt.clientX, evt.clientY, children[i], this._getDirection(evt, null), this.options); + } + } + // Used for nulling last target when not in element, nothing to do with checking if aligned + if (!_closest(target, this.options.draggable, this.el, true)) { + lastTarget = null; + } + + _alignedSilent = true; + setTimeout(function() { + _alignedSilent = false; + }, 30); + + }, + + _getDirection: function(evt, target) { + return (typeof this.options.direction === 'function') ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction; + }, + + _onTapStart: function (/** Event|TouchEvent */evt) { + if (!evt.cancelable) return; + var _this = this, + el = this.el, + options = this.options, + preventOnFilter = options.preventOnFilter, + type = evt.type, + touch = evt.touches && evt.touches[0], + target = (touch || evt).target, + originalTarget = evt.target.shadowRoot && ((evt.path && evt.path[0]) || (evt.composedPath && evt.composedPath()[0])) || target, + filter = options.filter, + startIndex; + + _saveInputCheckedState(el); + + + // IE: Calls events in capture mode if event element is nested. This ensures only correct element's _onTapStart goes through. + // This process is also done in _onDragOver + if (IE11OrLess && !evt.artificialBubble && !_isTrueParentSortable(el, target)) { + return; + } + + // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group. + if (dragEl) { + return; + } + + if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) { + return; // only left button and enabled + } + + // cancel dnd if original target is content editable + if (originalTarget.isContentEditable) { + return; + } + + target = _closest(target, options.draggable, el, false); + + if (!target) { + if (IE11OrLess) { + _artificalBubble(el, evt, '_onTapStart'); + } + return; + } + + if (lastDownEl === target) { + // Ignoring duplicate `down` + return; + } + + // Get the index of the dragged element within its parent + startIndex = _index(target, options.draggable); + + // Check filter + if (typeof filter === 'function') { + if (filter.call(this, evt, target, this)) { + _dispatchEvent(_this, originalTarget, 'filter', target, el, el, startIndex); + preventOnFilter && evt.cancelable && evt.preventDefault(); + return; // cancel dnd + } + } + else if (filter) { + filter = filter.split(',').some(function (criteria) { + criteria = _closest(originalTarget, criteria.trim(), el, false); + + if (criteria) { + _dispatchEvent(_this, criteria, 'filter', target, el, el, startIndex); + return true; + } + }); + + if (filter) { + preventOnFilter && evt.cancelable && evt.preventDefault(); + return; // cancel dnd + } + } + + if (options.handle && !_closest(originalTarget, options.handle, el, false)) { + return; + } + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target, startIndex); + }, + + + _handleAutoScroll: function(evt, fallback) { + if (!dragEl || !this.options.scroll) return; + var x = evt.clientX, + y = evt.clientY, + + elem = document.elementFromPoint(x, y), + _this = this; + + // IE does not seem to have native autoscroll, + // Edge's autoscroll seems too conditional, + // Firefox and Chrome are good + if (fallback || Edge || IE11OrLess) { + _autoScroll(evt, _this.options, elem, fallback); + + // Listener for pointer element change + var ogElemScroller = _getParentAutoScrollElement(elem, true); + if ( + scrolling && + ( + !pointerElemChangedInterval || + x !== lastPointerElemX || + y !== lastPointerElemY + ) + ) { + + pointerElemChangedInterval && clearInterval(pointerElemChangedInterval); + // Detect for pointer elem change, emulating native DnD behaviour + pointerElemChangedInterval = setInterval(function() { + if (!dragEl) return; + // could also check if scroll direction on newElem changes due to parent autoscrolling + var newElem = _getParentAutoScrollElement(document.elementFromPoint(x, y), true); + if (newElem !== ogElemScroller) { + ogElemScroller = newElem; + _clearAutoScrolls(); + _autoScroll(evt, _this.options, ogElemScroller, fallback); + } + }, 10); + lastPointerElemX = x; + lastPointerElemY = y; + } + + } else { + // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll + if (!_this.options.bubbleScroll || _getParentAutoScrollElement(elem, true) === window) { + _clearAutoScrolls(); + return; + } + _autoScroll(evt, _this.options, _getParentAutoScrollElement(elem, false), false); + } + }, + + _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target, /** Number */startIndex) { + var _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && (target.parentNode === el)) { + rootEl = el; + dragEl = target; + parentEl = dragEl.parentNode; + nextEl = dragEl.nextSibling; + lastDownEl = target; + activeGroup = options.group; + oldIndex = startIndex; + + tapEvt = { + target: dragEl, + clientX: (touch || evt).clientX, + clientY: (touch || evt).clientY + }; + + this._lastX = (touch || evt).clientX; + this._lastY = (touch || evt).clientY; + + dragEl.style['will-change'] = 'all'; + // undo animation if needed + dragEl.style.transition = ''; + dragEl.style.transform = ''; + + dragStartFn = function () { + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDrag(); + + // Make the element draggable + dragEl.draggable = _this.nativeDraggable; + + // Bind the events: dragstart/dragend + _this._triggerDragStart(evt, touch); + + // Drag start event + _dispatchEvent(_this, rootEl, 'choose', dragEl, rootEl, rootEl, oldIndex); + + // Chosen item + _toggleClass(dragEl, options.chosenClass, true); + }; + + // Disable "draggable" + options.ignore.split(',').forEach(function (criteria) { + _find(dragEl, criteria.trim(), _disableDraggable); + }); + + if (options.supportPointer) { + _on(ownerDocument, 'pointerup', _this._onDrop); + } else { + _on(ownerDocument, 'mouseup', _this._onDrop); + _on(ownerDocument, 'touchend', _this._onDrop); + _on(ownerDocument, 'touchcancel', _this._onDrop); + } + + if (options.delay) { + // If the user moves the pointer or let go the click or touch + // before the delay has been reached: + // disable the delayed drag + _on(ownerDocument, 'mouseup', _this._disableDelayedDrag); + _on(ownerDocument, 'touchend', _this._disableDelayedDrag); + _on(ownerDocument, 'touchcancel', _this._disableDelayedDrag); + _on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler); + _on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler); + options.supportPointer && _on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _delayedDragTouchMoveHandler: function (/** TouchEvent|PointerEvent **/e) { + var touch = e.touches ? e.touches[0] : e; + if (min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) + >= this.options.touchStartThreshold + ) { + this._disableDelayedDrag(); + } + }, + + _disableDelayedDrag: function () { + var ownerDocument = this.el.ownerDocument; + + clearTimeout(this._dragStartTimer); + _off(ownerDocument, 'mouseup', this._disableDelayedDrag); + _off(ownerDocument, 'touchend', this._disableDelayedDrag); + _off(ownerDocument, 'touchcancel', this._disableDelayedDrag); + _off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler); + _off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler); + _off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler); + }, + + _triggerDragStart: function (/** Event */evt, /** Touch */touch) { + touch = touch || (evt.pointerType == 'touch' ? evt : null); + + if (!this.nativeDraggable || touch) { + if (this.options.supportPointer) { + _on(document, 'pointermove', this._onTouchMove); + } else if (touch) { + _on(document, 'touchmove', this._onTouchMove); + } else { + _on(document, 'mousemove', this._onTouchMove); + } + } else { + _on(dragEl, 'dragend', this); + _on(rootEl, 'dragstart', this._onDragStart); + } + + try { + if (document.selection) { + // Timeout neccessary for IE9 + _nextTick(function () { + document.selection.empty(); + }); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) { + } + }, + + _dragStarted: function (fallback) { + awaitingDragStarted = false; + if (rootEl && dragEl) { + if (this.nativeDraggable) { + _on(document, 'dragover', this._handleAutoScroll); + _on(document, 'dragover', _checkAlignment); + } + var options = this.options; + + // Apply effect + !fallback && _toggleClass(dragEl, options.dragClass, false); + _toggleClass(dragEl, options.ghostClass, true); + + // In case dragging an animated element + _css(dragEl, 'transform', ''); + + Sortable.active = this; + + fallback && this._appendGhost(); + + // Drag start event + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, rootEl, oldIndex); + } else { + this._nulling(); + } + }, + + _emulateDragOver: function (bypassLastTouchCheck) { + if (touchEvt) { + if (this._lastX === touchEvt.clientX && this._lastY === touchEvt.clientY && !bypassLastTouchCheck) { + return; + } + this._lastX = touchEvt.clientX; + this._lastY = touchEvt.clientY; + + _hideGhostForTarget(); + + var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + var parent = target; + + while (target && target.shadowRoot) { + target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY); + parent = target; + } + + if (parent) { + do { + if (parent[expando]) { + var inserted; + + inserted = parent[expando]._onDragOver({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent + }); + + if (inserted && !this.options.dragoverBubble) { + break; + } + } + + target = parent; // store last element + } + /* jshint boss:true */ + while (parent = parent.parentNode); + } + dragEl.parentNode[expando]._computeIsAligned(touchEvt); + + _unhideGhostForTarget(); + } + }, + + + _onTouchMove: function (/**TouchEvent*/evt) { + if (tapEvt) { + var options = this.options, + fallbackTolerance = options.fallbackTolerance, + fallbackOffset = options.fallbackOffset, + touch = evt.touches ? evt.touches[0] : evt, + matrix = ghostEl && _matrix(ghostEl), + scaleX = ghostEl && matrix && matrix.a, + scaleY = ghostEl && matrix && matrix.d, + dx = ((touch.clientX - tapEvt.clientX) + fallbackOffset.x) / (scaleX ? scaleX : 1), + dy = ((touch.clientY - tapEvt.clientY) + fallbackOffset.y) / (scaleY ? scaleY : 1), + translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; + + + // only set the status to dragging, when we are actually dragging + if (!Sortable.active && !awaitingDragStarted) { + if (fallbackTolerance && + min(abs(touch.clientX - this._lastX), abs(touch.clientY - this._lastY)) < fallbackTolerance + ) { + return; + } + this._onDragStart(evt, true); + } + + this._handleAutoScroll(touch, true); + + + moved = true; + touchEvt = touch; + + + _css(ghostEl, 'webkitTransform', translate3d); + _css(ghostEl, 'mozTransform', translate3d); + _css(ghostEl, 'msTransform', translate3d); + _css(ghostEl, 'transform', translate3d); + + evt.cancelable && evt.preventDefault(); + } + }, + + _appendGhost: function () { + if (!ghostEl) { + var rect = _getRect(dragEl, this.options.fallbackOnBody ? document.body : rootEl, true), + css = _css(dragEl), + options = this.options; + + ghostEl = dragEl.cloneNode(true); + + _toggleClass(ghostEl, options.ghostClass, false); + _toggleClass(ghostEl, options.fallbackClass, true); + _toggleClass(ghostEl, options.dragClass, true); + + _css(ghostEl, 'box-sizing', 'border-box'); + _css(ghostEl, 'margin', 0); + _css(ghostEl, 'top', rect.top); + _css(ghostEl, 'left', rect.left); + _css(ghostEl, 'width', rect.width); + _css(ghostEl, 'height', rect.height); + _css(ghostEl, 'opacity', '0.8'); + _css(ghostEl, 'position', 'fixed'); + _css(ghostEl, 'zIndex', '100000'); + _css(ghostEl, 'pointerEvents', 'none'); + + options.fallbackOnBody && document.body.appendChild(ghostEl) || rootEl.appendChild(ghostEl); + } + }, + + _onDragStart: function (/**Event*/evt, /**boolean*/fallback) { + var _this = this; + var dataTransfer = evt.dataTransfer; + var options = _this.options; + + // Setup clone + cloneEl = _clone(dragEl); + + cloneEl.draggable = false; + cloneEl.style['will-change'] = ''; + + this._hideClone(); + + _toggleClass(cloneEl, _this.options.chosenClass, false); + + + // #1143: IFrame support workaround + _this._cloneId = _nextTick(function () { + if (!_this.options.removeCloneOnHide) { + rootEl.insertBefore(cloneEl, dragEl); + } + _dispatchEvent(_this, rootEl, 'clone', dragEl); + }); + + + !fallback && _toggleClass(dragEl, options.dragClass, true); + + // Set proper drop events + if (fallback) { + ignoreNextClick = true; + _this._loopId = setInterval(_this._emulateDragOver, 50); + } else { + // Undo what was set in _prepareDragStart before drag started + _off(document, 'mouseup', _this._onDrop); + _off(document, 'touchend', _this._onDrop); + _off(document, 'touchcancel', _this._onDrop); + + if (dataTransfer) { + dataTransfer.effectAllowed = 'move'; + options.setData && options.setData.call(_this, dataTransfer, dragEl); + } + + _on(document, 'drop', _this); + + // #1276 fix: + _css(dragEl, 'transform', 'translateZ(0)'); + } + + awaitingDragStarted = true; + + _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback)); + _on(document, 'selectstart', _this); + }, + + // Returns true - if no further action is needed (either inserted or another condition) + _onDragOver: function (/**Event*/evt) { + var el = this.el, + target = evt.target, + dragRect, + targetRect, + revert, + options = this.options, + group = options.group, + activeSortable = Sortable.active, + isOwner = (activeGroup === group), + canSort = options.sort, + _this = this; + + if (_silent) return; + + // IE event order fix + if (IE11OrLess && !evt.rootEl && !evt.artificialBubble && !_isTrueParentSortable(el, target)) { + return; + } + + // Return invocation when no further action is needed in another sortable + function completed() { + if (activeSortable) { + // Set ghost class to new sortable's ghost class + _toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false); + _toggleClass(dragEl, options.ghostClass, true); + } + + if (putSortable !== _this && _this !== Sortable.active) { + putSortable = _this; + } else if (_this === Sortable.active) { + putSortable = null; + } + + + // Null lastTarget if it is not inside a previously swapped element + if ((target === dragEl && !dragEl.animated) || (target === el && !target.animated)) { + lastTarget = null; + } + // no bubbling and not fallback + if (!options.dragoverBubble && !evt.rootEl && target !== document) { + _this._handleAutoScroll(evt); + dragEl.parentNode[expando]._computeIsAligned(evt); + } + + !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation(); + + return true; + } + + // Call when dragEl has been inserted + function changed() { + _dispatchEvent(_this, rootEl, 'change', target, el, rootEl, oldIndex, _index(dragEl, options.draggable), evt); + } + + + if (evt.preventDefault !== void 0) { + evt.cancelable && evt.preventDefault(); + } + + + moved = true; + + target = _closest(target, options.draggable, el, true); + + // target is dragEl or target is animated + if (!!_closest(evt.target, null, dragEl, true) || target.animated) { + return completed(); + } + + if (target !== dragEl) { + ignoreNextClick = false; + } + + if (activeSortable && !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : ( + putSortable === this || + ( + (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && + group.checkPut(this, activeSortable, dragEl, evt) + ) + ) + ) + ) { + var axis = this._getDirection(evt, target); + + dragRect = _getRect(dragEl); + + if (revert) { + this._hideClone(); + parentEl = rootEl; // actualization + + if (nextEl) { + rootEl.insertBefore(dragEl, nextEl); + } else { + rootEl.appendChild(dragEl); + } + + return completed(); + } + + if ((el.children.length === 0) || (el.children[0] === ghostEl) || + _ghostIsLast(evt, axis, el) && !dragEl.animated + ) { + //assign target only if condition is true + if (el.children.length !== 0 && el.children[0] !== ghostEl && el === evt.target) { + target = _lastChild(el); + } + + if (target) { + targetRect = _getRect(target); + } + + if (isOwner) { + activeSortable._hideClone(); + } else { + activeSortable._showClone(this); + } + + if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) { + el.appendChild(dragEl); + parentEl = el; // actualization + realDragElRect = null; + + changed(); + this._animate(dragRect, dragEl); + target && this._animate(targetRect, target); + return completed(); + } + } + else if (target && target !== dragEl && target.parentNode === el) { + var direction = 0, + targetBeforeFirstSwap, + aligned = target.sortableMouseAligned, + differentLevel = dragEl.parentNode !== el, + scrolledPastTop = _isScrolledPast(target, axis === 'vertical' ? 'top' : 'left'); + + if (lastTarget !== target) { + lastMode = null; + targetBeforeFirstSwap = _getRect(target)[axis === 'vertical' ? 'top' : 'left']; + pastFirstInvertThresh = false; + } + + // Reference: https://www.lucidchart.com/documents/view/10fa0e93-e362-4126-aca2-b709ee56bd8b/0 + if ( + _isElInRowColumn(dragEl, target, axis) && aligned || + differentLevel || + scrolledPastTop || + options.invertSwap || + lastMode === 'insert' || + // Needed, in the case that we are inside target and inserted because not aligned... aligned will stay false while inside + // and lastMode will change to 'insert', but we must swap + lastMode === 'swap' + ) { + // New target that we will be inside + if (lastMode !== 'swap') { + isCircumstantialInvert = options.invertSwap || differentLevel || scrolling || scrolledPastTop; + } + + direction = _getSwapDirection(evt, target, axis, + options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, + isCircumstantialInvert, + lastTarget === target); + lastMode = 'swap'; + } else { + // Insert at position + direction = _getInsertDirection(target, options); + lastMode = 'insert'; + } + if (direction === 0) return completed(); + + realDragElRect = null; + lastTarget = target; + + lastDirection = direction; + + targetRect = _getRect(target); + + var nextSibling = target.nextElementSibling, + after = false; + + after = direction === 1; + + var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after); + + if (moveVector !== false) { + if (moveVector === 1 || moveVector === -1) { + after = (moveVector === 1); + } + + _silent = true; + setTimeout(_unsilent, 30); + + if (isOwner) { + activeSortable._hideClone(); + } else { + activeSortable._showClone(this); + } + + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore(dragEl, after ? nextSibling : target); + } + + parentEl = dragEl.parentNode; // actualization + + // must be done before animation + if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) { + targetMoveDistance = abs(targetBeforeFirstSwap - _getRect(target)[axis === 'vertical' ? 'top' : 'left']); + } + changed(); + !differentLevel && this._animate(targetRect, target); + this._animate(dragRect, dragEl); + + return completed(); + } + } + + if (el.contains(dragEl)) { + return completed(); + } + } + + if (IE11OrLess && !evt.rootEl) { + _artificalBubble(el, evt, '_onDragOver'); + } + + return false; + }, + + _animate: function (prevRect, target) { + var ms = this.options.animation; + + if (ms) { + var currentRect = _getRect(target); + + if (target === dragEl) { + realDragElRect = currentRect; + } + + if (prevRect.nodeType === 1) { + prevRect = _getRect(prevRect); + } + + // Check if actually moving position + if ((prevRect.left + prevRect.width / 2) !== (currentRect.left + currentRect.width / 2) + || (prevRect.top + prevRect.height / 2) !== (currentRect.top + currentRect.height / 2) + ) { + var matrix = _matrix(this.el), + scaleX = matrix && matrix.a, + scaleY = matrix && matrix.d; + + _css(target, 'transition', 'none'); + _css(target, 'transform', 'translate3d(' + + (prevRect.left - currentRect.left) / (scaleX ? scaleX : 1) + 'px,' + + (prevRect.top - currentRect.top) / (scaleY ? scaleY : 1) + 'px,0)' + ); + + forRepaintDummy = target.offsetWidth; // repaint + _css(target, 'transition', 'transform ' + ms + 'ms' + (this.options.easing ? ' ' + this.options.easing : '')); + _css(target, 'transform', 'translate3d(0,0,0)'); + } + + (typeof target.animated === 'number') && clearTimeout(target.animated); + target.animated = setTimeout(function () { + _css(target, 'transition', ''); + _css(target, 'transform', ''); + target.animated = false; + }, ms); + } + }, + + _offUpEvents: function () { + var ownerDocument = this.el.ownerDocument; + + _off(document, 'touchmove', this._onTouchMove); + _off(document, 'pointermove', this._onTouchMove); + _off(ownerDocument, 'mouseup', this._onDrop); + _off(ownerDocument, 'touchend', this._onDrop); + _off(ownerDocument, 'pointerup', this._onDrop); + _off(ownerDocument, 'touchcancel', this._onDrop); + _off(document, 'selectstart', this); + }, + + _onDrop: function (/**Event*/evt) { + var el = this.el, + options = this.options; + awaitingDragStarted = false; + scrolling = false; + isCircumstantialInvert = false; + pastFirstInvertThresh = false; + + clearInterval(this._loopId); + + clearInterval(pointerElemChangedInterval); + _clearAutoScrolls(); + _cancelThrottle(); + + clearTimeout(this._dragStartTimer); + + _cancelNextTick(this._cloneId); + _cancelNextTick(this._dragStartId); + + // Unbind events + _off(document, 'mousemove', this._onTouchMove); + + + if (this.nativeDraggable) { + _off(document, 'drop', this); + _off(el, 'dragstart', this._onDragStart); + _off(document, 'dragover', this._handleAutoScroll); + _off(document, 'dragover', _checkAlignment); + } + + this._offUpEvents(); + + if (evt) { + if (moved) { + evt.cancelable && evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + } + + ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl); + + if (rootEl === parentEl || (putSortable && putSortable.lastPutMode !== 'clone')) { + // Remove clone + cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl); + } + + if (dragEl) { + if (this.nativeDraggable) { + _off(dragEl, 'dragend', this); + } + + _disableDraggable(dragEl); + dragEl.style['will-change'] = ''; + + // Remove class's + _toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false); + _toggleClass(dragEl, this.options.chosenClass, false); + + // Drag stop event + _dispatchEvent(this, rootEl, 'unchoose', dragEl, parentEl, rootEl, oldIndex, null, evt); + + if (rootEl !== parentEl) { + newIndex = _index(dragEl, options.draggable); + + if (newIndex >= 0) { + // Add event + _dispatchEvent(null, parentEl, 'add', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + + // Remove event + _dispatchEvent(this, rootEl, 'remove', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + + // drag from one list and drop into another + _dispatchEvent(null, parentEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + } + + putSortable && putSortable.save(); + } + else { + if (dragEl.nextSibling !== nextEl) { + // Get the index of the dragged element within its parent + newIndex = _index(dragEl, options.draggable); + + if (newIndex >= 0) { + // drag & drop within the same list + _dispatchEvent(this, rootEl, 'update', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + _dispatchEvent(this, rootEl, 'sort', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + } + } + } + + if (Sortable.active) { + /* jshint eqnull:true */ + if (newIndex == null || newIndex === -1) { + newIndex = oldIndex; + } + + _dispatchEvent(this, rootEl, 'end', dragEl, parentEl, rootEl, oldIndex, newIndex, evt); + + // Save sorting + this.save(); + } + } + + } + this._nulling(); + }, + + _nulling: function() { + rootEl = + dragEl = + parentEl = + ghostEl = + nextEl = + cloneEl = + lastDownEl = + + scrollEl = + scrollParentEl = + autoScrolls.length = + + pointerElemChangedInterval = + lastPointerElemX = + lastPointerElemY = + + tapEvt = + touchEvt = + + moved = + newIndex = + oldIndex = + + lastTarget = + lastDirection = + + forRepaintDummy = + realDragElRect = + + putSortable = + activeGroup = + Sortable.active = null; + + savedInputChecked.forEach(function (el) { + el.checked = true; + }); + + savedInputChecked.length = 0; + }, + + handleEvent: function (/**Event*/evt) { + switch (evt.type) { + case 'drop': + case 'dragend': + this._onDrop(evt); + break; + + case 'dragenter': + case 'dragover': + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + break; + + case 'selectstart': + evt.preventDefault(); + break; + } + }, + + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + var order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (_closest(el, options.draggable, this.el, false)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + var items = {}, rootEl = this.el; + + this.toArray().forEach(function (id, i) { + var el = rootEl.children[i]; + + if (_closest(el, this.options.draggable, rootEl, false)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + + /** + * Save the current sorting + */ + save: function () { + var store = this.options.store; + store && store.set && store.set(this); + }, + + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return _closest(el, selector || this.options.draggable, this.el, false); + }, + + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + var options = this.options; + + if (value === void 0) { + return options[name]; + } else { + options[name] = value; + + if (name === 'group') { + _prepareGroup(options); + } + } + }, + + + /** + * Destroy + */ + destroy: function () { + var el = this.el; + + el[expando] = null; + + _off(el, 'mousedown', this._onTapStart); + _off(el, 'touchstart', this._onTapStart); + _off(el, 'pointerdown', this._onTapStart); + + if (this.nativeDraggable) { + _off(el, 'dragover', this); + _off(el, 'dragenter', this); + } + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { + el.removeAttribute('draggable'); + }); + + this._onDrop(); + + sortables.splice(sortables.indexOf(this.el), 1); + + this.el = el = null; + }, + + _hideClone: function() { + if (!cloneEl.cloneHidden) { + _css(cloneEl, 'display', 'none'); + cloneEl.cloneHidden = true; + if (cloneEl.parentNode && this.options.removeCloneOnHide) { + cloneEl.parentNode.removeChild(cloneEl); + } + } + }, + + _showClone: function(putSortable) { + if (putSortable.lastPutMode !== 'clone') { + this._hideClone(); + return; + } + + if (cloneEl.cloneHidden) { + // show clone at dragEl or original position + if (rootEl.contains(dragEl) && !this.options.group.revertClone) { + rootEl.insertBefore(cloneEl, dragEl); + } else if (nextEl) { + rootEl.insertBefore(cloneEl, nextEl); + } else { + rootEl.appendChild(cloneEl); + } + + if (this.options.group.revertClone) { + this._animate(dragEl, cloneEl); + } + _css(cloneEl, 'display', ''); + cloneEl.cloneHidden = false; + } + } + }; + + function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) { + if (el) { + ctx = ctx || document; + + do { + if ( + selector != null && + ( + selector[0] === '>' && el.parentNode === ctx && _matches(el, selector.substring(1)) || + _matches(el, selector) + ) || + includeCTX && el === ctx + ) { + return el; + } + + if (el === ctx) break; + /* jshint boss:true */ + } while (el = _getParentOrHost(el)); + } + + return null; + } + + + function _getParentOrHost(el) { + return (el.host && el !== document && el.host.nodeType) + ? el.host + : el.parentNode; + } + + + function _globalDragOver(/**Event*/evt) { + if (evt.dataTransfer) { + evt.dataTransfer.dropEffect = 'move'; + } + evt.cancelable && evt.preventDefault(); + } + + + function _on(el, event, fn) { + el.addEventListener(event, fn, captureMode); + } + + + function _off(el, event, fn) { + el.removeEventListener(event, fn, captureMode); + } + + + function _toggleClass(el, name, state) { + if (el && name) { + if (el.classList) { + el.classList[state ? 'add' : 'remove'](name); + } + else { + var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' '); + el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' '); + } + } + } + + + function _css(el, prop, val) { + var style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ''); + } + else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } + else { + if (!(prop in style) && prop.indexOf('webkit') === -1) { + prop = '-webkit-' + prop; + } + + style[prop] = val + (typeof val === 'string' ? '' : 'px'); + } + } + } + + function _matrix(el) { + var appliedTransforms = ''; + do { + var transform = _css(el, 'transform'); + + if (transform && transform !== 'none') { + appliedTransforms = transform + ' ' + appliedTransforms; + } + /* jshint boss:true */ + } while (el = el.parentNode); + + if (window.DOMMatrix) { + return new DOMMatrix(appliedTransforms); + } else if (window.WebKitCSSMatrix) { + return new WebKitCSSMatrix(appliedTransforms); + } else if (window.CSSMatrix) { + return new CSSMatrix(appliedTransforms); + } + } + + + function _find(ctx, tagName, iterator) { + if (ctx) { + var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; + } + + + + function _dispatchEvent(sortable, rootEl, name, targetEl, toEl, fromEl, startIndex, newIndex, originalEvt) { + sortable = (sortable || rootEl[expando]); + var evt, + options = sortable.options, + onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); + // Support for new CustomEvent feature + if (window.CustomEvent && !IE11OrLess && !Edge) { + evt = new CustomEvent(name, { + bubbles: true, + cancelable: true + }); + } else { + evt = document.createEvent('Event'); + evt.initEvent(name, true, true); + } + + evt.to = toEl || rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = startIndex; + evt.newIndex = newIndex; + + evt.originalEvent = originalEvt; + + if (rootEl) { + rootEl.dispatchEvent(evt); + } + + if (options[onName]) { + options[onName].call(sortable, evt); + } + } + + + function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvt, willInsertAfter) { + var evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + // Support for new CustomEvent feature + if (window.CustomEvent && !IE11OrLess && !Edge) { + evt = new CustomEvent('move', { + bubbles: true, + cancelable: true + }); + } else { + evt = document.createEvent('Event'); + evt.initEvent('move', true, true); + } + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + evt.relatedRect = targetRect || _getRect(toEl); + evt.willInsertAfter = willInsertAfter; + + evt.originalEvent = originalEvt; + + fromEl.dispatchEvent(evt); + + if (onMoveFn) { + retVal = onMoveFn.call(sortable, evt, originalEvt); + } + + return retVal; + } + + function _disableDraggable(el) { + el.draggable = false; + } + + function _unsilent() { + _silent = false; + } + + /** + * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible) + * and non-draggable elements + * @param {HTMLElement} el The parent element + * @param {Number} childNum The index of the child + * @param {Object} options Parent Sortable's options + * @return {HTMLElement} The child at index childNum, or null if not found + */ + function _getChild(el, childNum, options) { + var currentChild = 0, + i = 0, + children = el.children; + + while (i < children.length) { + if ( + children[i].style.display !== 'none' && + children[i] !== ghostEl && + children[i] !== dragEl && + _closest(children[i], options.draggable, el, false) + ) { + if (currentChild === childNum) { + return children[i]; + } + currentChild++; + } + + i++; + } + return null; + } + + /** + * Gets the last child in the el, ignoring ghostEl or invisible elements (clones) + * @param {HTMLElement} el Parent element + * @return {HTMLElement} The last child, ignoring ghostEl + */ + function _lastChild(el) { + var last = el.lastElementChild; + + while (last === ghostEl || last.style.display === 'none') { + last = last.previousElementSibling; + + if (!last) break; + } + + return last || null; + } + + function _ghostIsLast(evt, axis, el) { + var elRect = _getRect(_lastChild(el)), + mouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX, + mouseOnOppAxis = axis === 'vertical' ? evt.clientX : evt.clientY, + targetS2 = axis === 'vertical' ? elRect.bottom : elRect.right, + targetS1Opp = axis === 'vertical' ? elRect.left : elRect.top, + targetS2Opp = axis === 'vertical' ? elRect.right : elRect.bottom, + spacer = 10; + + return ( + axis === 'vertical' ? + (mouseOnOppAxis > targetS2Opp + spacer || mouseOnOppAxis <= targetS2Opp && mouseOnAxis > targetS2 && mouseOnOppAxis >= targetS1Opp) : + (mouseOnAxis > targetS2 && mouseOnOppAxis > targetS1Opp || mouseOnAxis <= targetS2 && mouseOnOppAxis > targetS2Opp + spacer) + ); + } + + function _getSwapDirection(evt, target, axis, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) { + var targetRect = _getRect(target), + mouseOnAxis = axis === 'vertical' ? evt.clientY : evt.clientX, + targetLength = axis === 'vertical' ? targetRect.height : targetRect.width, + targetS1 = axis === 'vertical' ? targetRect.top : targetRect.left, + targetS2 = axis === 'vertical' ? targetRect.bottom : targetRect.right, + dragRect = _getRect(dragEl), + invert = false; + + + if (!invertSwap) { + // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold + if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) { // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2 + // check if past first invert threshold on side opposite of lastDirection + if (!pastFirstInvertThresh && + (lastDirection === 1 ? + ( + mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 + ) : + ( + mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2 + ) + ) + ) + { + // past first invert threshold, do not restrict inverted threshold to dragEl shadow + pastFirstInvertThresh = true; + } + + if (!pastFirstInvertThresh) { + var dragS1 = axis === 'vertical' ? dragRect.top : dragRect.left, + dragS2 = axis === 'vertical' ? dragRect.bottom : dragRect.right; + // dragEl shadow (target move distance shadow) + if ( + lastDirection === 1 ? + ( + mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow + ) : + ( + mouseOnAxis > targetS2 - targetMoveDistance + ) + ) + { + return lastDirection * -1; + } + } else { + invert = true; + } + } else { + // Regular + if ( + mouseOnAxis > targetS1 + (targetLength * (1 - swapThreshold) / 2) && + mouseOnAxis < targetS2 - (targetLength * (1 - swapThreshold) / 2) + ) { + return ((mouseOnAxis > targetS1 + targetLength / 2) ? -1 : 1); + } + } + } + + invert = invert || invertSwap; + + if (invert) { + // Invert of regular + if ( + mouseOnAxis < targetS1 + (targetLength * invertedSwapThreshold / 2) || + mouseOnAxis > targetS2 - (targetLength * invertedSwapThreshold / 2) + ) + { + return ((mouseOnAxis > targetS1 + targetLength / 2) ? 1 : -1); + } + } + + return 0; + } + + /** + * Gets the direction dragEl must be swapped relative to target in order to make it + * seem that dragEl has been "inserted" into that element's position + * @param {HTMLElement} target The target whose position dragEl is being inserted at + * @param {Object} options options of the parent sortable + * @return {Number} Direction dragEl must be swapped + */ + function _getInsertDirection(target, options) { + var dragElIndex = _index(dragEl, options.draggable), + targetIndex = _index(target, options.draggable); + + if (dragElIndex < targetIndex) { + return 1; + } else { + return -1; + } + } + + + /** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ + function _generateId(el) { + var str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); + } + + /** + * Returns the index of an element within its parent for a selected set of + * elements + * @param {HTMLElement} el + * @param {selector} selector + * @return {number} + */ + function _index(el, selector) { + var index = 0; + + if (!el || !el.parentNode) { + return -1; + } + + while (el && (el = el.previousElementSibling)) { + if ((el.nodeName.toUpperCase() !== 'TEMPLATE') && el !== cloneEl) { + index++; + } + } + + return index; + } + + function _matches(/**HTMLElement*/el, /**String*/selector) { + if (el) { + try { + if (el.matches) { + return el.matches(selector); + } else if (el.msMatchesSelector) { + return el.msMatchesSelector(selector); + } else if (el.webkitMatchesSelector) { + return el.webkitMatchesSelector(selector); + } + } catch(_) { + return false; + } + } + + return false; + } + + var _throttleTimeout; + function _throttle(callback, ms) { + return function () { + if (!_throttleTimeout) { + var args = arguments, + _this = this; + + _throttleTimeout = setTimeout(function () { + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + _throttleTimeout = void 0; + }, ms); + } + }; + } + + function _cancelThrottle() { + clearTimeout(_throttleTimeout); + _throttleTimeout = void 0; + } + + function _extend(dst, src) { + if (dst && src) { + for (var key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; + } + + function _clone(el) { + if (Polymer && Polymer.dom) { + return Polymer.dom(el).cloneNode(true); + } + else if ($) { + return $(el).clone(true)[0]; + } + else { + return el.cloneNode(true); + } + } + + function _saveInputCheckedState(root) { + savedInputChecked.length = 0; + + var inputs = root.getElementsByTagName('input'); + var idx = inputs.length; + + while (idx--) { + var el = inputs[idx]; + el.checked && savedInputChecked.push(el); + } + } + + function _nextTick(fn) { + return setTimeout(fn, 0); + } + + function _cancelNextTick(id) { + return clearTimeout(id); + } + + + /** + * Returns the "bounding client rect" of given element + * @param {HTMLElement} el The element whose boundingClientRect is wanted + * @param {[HTMLElement]} container the parent the element will be placed in + * @param {[Boolean]} adjustForTransform Whether the rect should compensate for parent's transform + * (used for fixed positioning on el) + * @return {Object} The boundingClientRect of el + */ + function _getRect(el, container, adjustForTransform) { + if (!el.getBoundingClientRect && el !== win) return; + + var elRect, + top, + left, + bottom, + right, + height, + width; + + if (el !== win) { + elRect = el.getBoundingClientRect(); + top = elRect.top; + left = elRect.left; + bottom = elRect.bottom; + right = elRect.right; + height = elRect.height; + width = elRect.width; + } else { + top = 0; + left = 0; + bottom = window.innerHeight; + right = window.innerWidth; + height = window.innerHeight; + width = window.innerWidth; + } + + if (adjustForTransform && el !== win) { + // Adjust for translate() + container = container || el.parentNode; + + // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312) + // Not needed on <= IE11 + if (!IE11OrLess) { + do { + if (container && container.getBoundingClientRect && _css(container, 'transform') !== 'none') { + var containerRect = container.getBoundingClientRect(); + + // Set relative to edges of padding box of container + top -= containerRect.top + parseInt(_css(container, 'border-top-width')); + left -= containerRect.left + parseInt(_css(container, 'border-left-width')); + bottom = top + elRect.height; + right = left + elRect.width; + + break; + } + /* jshint boss:true */ + } while (container = container.parentNode); + } + + // Adjust for scale() + var matrix = _matrix(el), + scaleX = matrix && matrix.a, + scaleY = matrix && matrix.d; + + if (matrix) { + top /= scaleY; + left /= scaleX; + + width /= scaleX; + height /= scaleY; + + bottom = top + height; + right = left + width; + } + } + + return { + top: top, + left: left, + bottom: bottom, + right: right, + width: width, + height: height + }; + } + + + /** + * Checks if a side of an element is scrolled past a side of it's parents + * @param {HTMLElement} el The element who's side being scrolled out of view is in question + * @param {String} side Side of the element in question ('top', 'left', 'right', 'bottom') + * @return {Boolean} Whether the element is overflowing the viewport on the given side of it's parent + */ + function _isScrolledPast(el, side) { + var parent = _getParentAutoScrollElement(parent, true), + elSide = _getRect(el)[side]; + + /* jshint boss:true */ + while (parent) { + var parentSide = _getRect(parent)[side], + visible; + + if (side === 'top' || side === 'left') { + visible = elSide >= parentSide; + } else { + visible = elSide <= parentSide; + } + + if (!visible) return true; + + if (parent === win) break; + + parent = _getParentAutoScrollElement(parent, false); + } + + return false; + } + + // Fixed #973: + _on(document, 'touchmove', function(evt) { + if ((Sortable.active || awaitingDragStarted) && evt.cancelable) { + evt.preventDefault(); + } + }); + + + // Export utils + Sortable.utils = { + on: _on, + off: _off, + css: _css, + find: _find, + is: function (el, selector) { + return !!_closest(el, selector, el, false); + }, + extend: _extend, + throttle: _throttle, + closest: _closest, + toggleClass: _toggleClass, + clone: _clone, + index: _index, + nextTick: _nextTick, + cancelNextTick: _cancelNextTick, + detectDirection: _detectDirection, + getChild: _getChild + }; + + + /** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ + Sortable.create = function (el, options) { + return new Sortable(el, options); + }; + + + // Export + Sortable.version = '1.8.3'; + return Sortable; +}); diff --git a/source/plugin/replyfloor/static/js/common.js b/source/plugin/replyfloor/static/js/common.js new file mode 100644 index 0000000..2be83b3 --- /dev/null +++ b/source/plugin/replyfloor/static/js/common.js @@ -0,0 +1,257 @@ +function replyfloor_postid(url) { + url = url.replace(/&/, "&"); + var urlarr = new Array(); + urlarr = url.split("&"); + var value = new Array(); + var postid = 0; + for (var i = 0, L = urlarr.length; i < L; i++) { + value = urlarr[i].split("="); + if(value[0] == "repquote"){ + postid = value[1]; + return postid; + } + } + return postid; +} +function replyfloor_leftshow(postid) { + if(document.getElementById('replyfloor_content_ul_' + postid)){ + document.getElementById('replyfloor_content_ul_' + postid).style.display = 'block'; + } + if(document.getElementById('replyfloor_content_more_' + postid)){ + document.getElementById('replyfloor_content_more_' + postid).style.display = 'none'; + } + if(document.getElementById('replyfloor_content_pg_' + postid)){ + document.getElementById('replyfloor_content_pg_' + postid).style.display = 'block'; + } +} +function replyfloor_seccodeimg(obj) { + document.getElementById('replyfloor_seccodeverify').value = ''; + var tmprandom = 'S' + Math.floor(Math.random() * 1000); + obj.src = 'misc.php?mod=seccode&update='+ tmprandom+'&idhash=replyfloor'; +} +function replyfloor_replace() { + var fastre = document.getElementsByClassName('fastre'); + for (var i = 0, L = fastre.length; i < L; i++) { + var postid = replyfloor_postid(fastre[i].href); + if(postid){ + fastre[i].onclick = function(e) { + replyfloor_reply(this.href); + } + } + } +} +function replyfloor_collapse(obj, postid, type) { + document.getElementById('replyfloor_content_more_'+postid).innerHTML = ''; + if(type == 1){ + var nextpageurl = obj.getAttribute('rel').valueOf(); + var x = new Ajax(); + x.get(nextpageurl + '&inajax=1', function(s){ + s = s.replace(/\n|\r/g, ' '); + var nexts = s.match(/\
    (.+?)\
    \<\/div>\<\/div>/g); + for(i in nexts) { + var insertid = nexts[i].match(/
    /); + if(!document.getElementById('replyfloor_content_li_' + insertid[1])) { + var div = document.createElement('div'); + document.getElementById('replyfloor_newbox_'+postid).appendChild(div); + div.outerHTML = nexts[i].replace(/\
    \<\/div>/g, ''); + } + } + var moreinfo = s.match(/\
    (.+?)\
    \<\/div>\<\/div\>/); + if(document.getElementById('replyfloor_content_more_'+postid)){ + document.getElementById('replyfloor_content_more_'+postid).innerHTML = moreinfo[2]; + } + }); + }else{ + document.getElementById('replyfloor_newbox_'+postid).innerHTML = ''; + var nextpageurl = obj.getAttribute('rel').valueOf(); + var x = new Ajax(); + x.get(nextpageurl + '&inajax=1', function(s){ + if(document.getElementById('replyfloor_content_'+postid)){ + document.getElementById('replyfloor_content_'+postid).innerHTML = s; + } + var replyfloor_box_sxy = fetchOffset(document.getElementById("replyfloor_box_"+postid)); + if(Math.max(document.documentElement.scrollTop, document.body.scrollTop) > replyfloor_box_sxy['top']){ + window.scrollTo('0',replyfloor_box_sxy['top']); + } + }); + } + return false; +} +function replyfloor_uploadimage(userSettings) { + replyfloor_webupload(userSettings); +} +function replyfloor_uploadattach(userSettings) { + replyfloor_webupload(userSettings); +} +function replyfloor_webupload(userSettings) { + var settings = {}; + var ensureDefault = function(settingName, defaultValue) { + var setting = userSettings[settingName]; + if (setting != undefined) { + settings[settingName] = setting; + } else { + settings[settingName] = defaultValue; + } + }; + ensureDefault("auto", false); + ensureDefault("compress", false); + ensureDefault("upload_url", ""); + ensureDefault("pick", undefined); + ensureDefault("dnd", undefined); + ensureDefault("paste", undefined); + ensureDefault("accept", null); + ensureDefault("fileVal", "file"); + ensureDefault("chunked", false); + ensureDefault("chunkSize", 5242880); + ensureDefault("post_params", {}); + ensureDefault("threads", 1); + ensureDefault("fileNumLimit", undefined); + ensureDefault("fileSingleSizeLimit", undefined); + + var getBasePath = function() { + var els = document.getElementsByTagName('script'), src; + for (var i = 0, len = els.length; i < len; i++) { + src = els[i].src || ''; + if (/cwebuploader[\w\-\.]*\.js/.test(src)) { + return src.substring(0, src.lastIndexOf('/') + 1); + } + } + return ''; + }; + + var uploader = CWebUploader.create({ + auto: false, + swf: getBasePath() + 'Uploader.swf', + compress: settings.compress, + server: settings.upload_url, + pick: settings.pick, + dnd: settings.dnd, + paste: settings.paste, + accept: settings.accept, + fileVal: settings.fileVal, + chunked: settings.chunked, + chunkSize: settings.chunkSize, + formData: settings.post_params, + threads: settings.threads, + fileNumLimit: settings.fileNumLimit, + fileSingleSizeLimit: settings.fileSingleSizeLimit, + duplicate: true, + disableWidgets: 'log' + }); + uploader.on('beforeFileQueued', function(file) { + + }); + uploader.on('fileQueued', function( file ) { + var eles = document.getElementById('replyfloor_upimage').getElementsByClassName('replyfloor_upimage_li'); + if (settings.fileNumLimit && eles.length >= settings.fileNumLimit) { + showDialog('最多只能上传' + settings.fileNumLimit + '张', 'alert'); + return false; + } else { + var div = document.createElement("div"); + div.id = 'replyfloor_upimage_li_'+file.id; + div.className = 'replyfloor_upimage_li'; + document.getElementById('replyfloor_upimage').appendChild(div); + uploader.upload(file); + } + }); + uploader.on('uploadStart', function( file ) { + uploader.options.formData['filetype'] = file.ext; + }); + uploader.on('uploadSuccess', function( file, response ) { + var obj = document.getElementById('replyfloor_upimage_li_'+file.id); + if(response['status'] == 0) { + obj.parentNode.removeChild(obj); + showDialog(response['message'], 'alert'); + } else { + obj.innerHTML = '
    '+response['filename']+'
    '; + } + }); + uploader.on("uploadError", function (file, response) { + var obj = document.getElementById('replyfloor_upimage_li_'+file.id); + obj.parentNode.removeChild(obj); + }); + uploader.on("uploadFinished", function () { + uploader.reset(); + }); + uploader.on('error', function (code) { + var err = ''; + switch (code) { + case 'F_EXCEED_SIZE': + err += '单张图片大小不得超过' + Base.formatSize(uploader.option('fileSingleSizeLimit')) + '!'; + break; + case 'Q_EXCEED_NUM_LIMIT': + err += '最多只能上传' + settings.fileNumLimit + '张!'; + break; + case 'Q_EXCEED_SIZE_LIMIT': + err += '上传图片总大小超出' + Base.formatSize(uploader.option('fileSizeLimit')) + '!'; + break; + case 'Q_TYPE_DENIED': + err += '无效图片类型,请上传正确的图片格式!'; + break; + case 'F_DUPLICATE': + err += '请不要重复上传相同图片!'; + break; + default: + err += '上传错误,请刷新重试!'+code; + break; + } + showDialog(err, 'alert'); + return false; + }); +} +function replyfloor_plupload(userSettings) { + var settings = {}; + var ensureDefault = function(settingName, defaultValue) { + var setting = userSettings[settingName]; + if (setting != undefined) { + settings[settingName] = setting; + } else { + settings[settingName] = defaultValue; + } + }; + ensureDefault("auto", false); + ensureDefault("upload_url", ""); + ensureDefault("pick", undefined); + ensureDefault("accept", null); + ensureDefault("fileVal", "file"); + ensureDefault("post_params", {}); + + var pluploader = new plupload.Uploader({ + browse_button : settings.pick, + url : settings.upload_url, + file_data_name: settings.fileVal, + multi_selection: false, + multipart_params: settings.post_params, + filters:settings.accept + }); + pluploader.init(); + pluploader.bind('FilesAdded',function(uploader,files){ + pluploader.start(); + }); + pluploader.bind('FileUploaded', function(uploader,file, res){ + var response = eval('(' + res.response + ')'); + if(response['status'] == 0) { + showDialog(response['message'], 'alert'); + } else { + var div = document.createElement("div"); + div.id = 'replyfloor_upimage_li_'+response['aid']; + div.className = 'replyfloor_upimage_li'; + div.innerHTML = '
    '+response['filename']+'
    '; + document.getElementById('replyfloor_upimage').appendChild(div); + } + }); + pluploader.bind('Error', function(uploader,error){ + showDialog('上传错误,请刷新重试!', 'alert'); + }); + return false; +} +function replyfloor_delimage(aid) { + var obj = document.getElementById('replyfloor_upimage_del_'+aid).parentNode.parentNode; + if(obj) { + obj.parentNode.removeChild(obj); + var x = new Ajax(); + x.get('plugin.php?id=replyfloor:attachment&operation=delete&aid='+aid + '&inajax=1', function(s){ + + }); + } +} diff --git a/source/plugin/replyfloor/static/js/cquery.js b/source/plugin/replyfloor/static/js/cquery.js new file mode 100644 index 0000000..0691b76 --- /dev/null +++ b/source/plugin/replyfloor/static/js/cquery.js @@ -0,0 +1,11002 @@ +/*! + * cQuery JavaScript Library v1.12.4 + * http://cquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright cQuery Foundation and other contributors + * Released under the MIT license + * http://cquery.org/license + * + * Date: 2016-05-20T17:17Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get cQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var cQuery = require("cquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "cQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var deletedIds = []; + +var document = window.document; + +var slice = deletedIds.slice; + +var concat = deletedIds.concat; + +var push = deletedIds.push; + +var indexOf = deletedIds.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "1.12.4", + + // Define a local copy of cQuery + cQuery = function( selector, context ) { + + // The cQuery object is actually just the init constructor 'enhanced' + // Need init if cQuery is called (just allow error to be thrown if not included) + return new cQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1, IE<9 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by cQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +cQuery.fn = cQuery.prototype = { + + // The current version of cQuery being used + cquery: version, + + constructor: cQuery, + + // Start with an empty selector + selector: "", + + // The default length of a cQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new cQuery matched element set + var ret = cQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return cQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( cQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a cQuery method. + push: push, + sort: deletedIds.sort, + splice: deletedIds.splice +}; + +cQuery.extend = cQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !cQuery.isFunction( target ) ) { + target = {}; + } + + // extend cQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( cQuery.isPlainObject( copy ) || + ( copyIsArray = cQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && cQuery.isArray( src ) ? src : []; + + } else { + clone = src && cQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = cQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +cQuery.extend( { + + // Unique for each copy of cQuery on the page + expando: "cQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume cQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return cQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return cQuery.type( obj ) === "array"; + }, + + isWindow: function( obj ) { + /* jshint eqeqeq: false */ + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !cQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + isPlainObject: function( obj ) { + var key; + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || cQuery.type( obj ) !== "object" || obj.nodeType || cQuery.isWindow( obj ) ) { + return false; + } + + try { + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { + return false; + } + } catch ( e ) { + + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Support: IE<9 + // Handle iteration over inherited properties before own properties. + if ( !support.ownFirst ) { + for ( key in obj ) { + return hasOwn.call( obj, key ); + } + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && cQuery.trim( data ) ) { + + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than cQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1, IE<9 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + cQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( indexOf ) { + return indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + while ( j < len ) { + first[ i++ ] = second[ j++ ]; + } + + // Support: IE<9 + // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) + if ( len !== len ) { + while ( second[ j ] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !cQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || cQuery.guid++; + + return proxy; + }, + + now: function() { + return +( new Date() ); + }, + + // cQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + cQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +cQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = cQuery.type( obj ); + + if ( type === "function" || cQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright cQuery Foundation and other contributors + * Released under the MIT license + * http://cquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (cQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.cquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.cquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (cQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/cquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (cQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (cQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (cQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (cQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (cQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +cQuery.find = Sizzle; +cQuery.expr = Sizzle.selectors; +cQuery.expr[ ":" ] = cQuery.expr.pseudos; +cQuery.uniqueSort = cQuery.unique = Sizzle.uniqueSort; +cQuery.text = Sizzle.getText; +cQuery.isXMLDoc = Sizzle.isXML; +cQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && cQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = cQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( cQuery.isFunction( qualifier ) ) { + return cQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return cQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return cQuery.filter( qualifier, elements, not ); + } + + qualifier = cQuery.filter( qualifier, elements ); + } + + return cQuery.grep( elements, function( elem ) { + return ( cQuery.inArray( elem, qualifier ) > -1 ) !== not; + } ); +} + +cQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + cQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + cQuery.find.matches( expr, cQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +cQuery.fn.extend( { + find: function( selector ) { + var i, + ret = [], + self = this, + len = self.length; + + if ( typeof selector !== "string" ) { + return this.pushStack( cQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( cQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + cQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? cQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + cQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a cQuery object + + +// A central reference to the root cQuery(document) +var rootcQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = cQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // init accepts an alternate rootcQuery + // so migrate can support cQuery.sub (gh-2101) + root = root || rootcQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt( 0 ) === "<" && + selector.charAt( selector.length - 1 ) === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof cQuery ? context[ 0 ] : context; + + // scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + cQuery.merge( this, cQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && cQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( cQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[ 2 ] ) { + return rootcQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the cQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.cquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( cQuery.isFunction( selector ) ) { + return typeof root.ready !== "undefined" ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( cQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return cQuery.makeArray( selector, this ); + }; + +// Give the init function the cQuery prototype for later instantiation +init.prototype = cQuery.fn; + +// Initialize central reference +rootcQuery = cQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +cQuery.fn.extend( { + has: function( target ) { + var i, + targets = cQuery( target, this ), + len = targets.length; + + return this.filter( function() { + for ( i = 0; i < len; i++ ) { + if ( cQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + cQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + cQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? cQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return cQuery.inArray( this[ 0 ], cQuery( elem ) ); + } + + // Locate the position of the desired element + return cQuery.inArray( + + // If it receives a cQuery object, the first element is used + elem.cquery ? elem[ 0 ] : elem, this ); + }, + + add: function( selector, context ) { + return this.pushStack( + cQuery.uniqueSort( + cQuery.merge( this.get(), cQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +cQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return cQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + cQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + cQuery.fn[ name ] = function( until, selector ) { + var ret = cQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = cQuery.filter( selector, ret ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + ret = cQuery.uniqueSort( ret ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + } + + return this.pushStack( ret ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + cQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +cQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + cQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + cQuery.each( args, function( _, arg ) { + if ( cQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && cQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + cQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = cQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + cQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = true; + if ( !memory ) { + self.disable(); + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +cQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", cQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", cQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", cQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return cQuery.Deferred( function( newDefer ) { + cQuery.each( tuples, function( i, tuple ) { + var fn = cQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && cQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? cQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + cQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && cQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : cQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && cQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +cQuery.fn.ready = function( fn ) { + + // Add the callback + cQuery.ready.promise().done( fn ); + + return this; +}; + +cQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + cQuery.readyWait++; + } else { + cQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --cQuery.readyWait : cQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + cQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --cQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ cQuery ] ); + + // Trigger any bound ready events + if ( cQuery.fn.triggerHandler ) { + cQuery( document ).triggerHandler( "ready" ); + cQuery( document ).off( "ready" ); + } + } +} ); + +/** + * Clean-up method for dom ready events + */ +function detach() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } +} + +/** + * The ready event handler and self cleanup method + */ +function completed() { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || + window.event.type === "load" || + document.readyState === "complete" ) { + + detach(); + cQuery.ready(); + } +} + +cQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = cQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE6-10 + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( cQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + + // If IE event model is used + } else { + + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch ( e ) {} + + if ( top && top.doScroll ) { + ( function doScrollCheck() { + if ( !cQuery.isReady ) { + + try { + + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll( "left" ); + } catch ( e ) { + return window.setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + cQuery.ready(); + } + } )(); + } + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +cQuery.ready.promise(); + + + + +// Support: IE<9 +// Iteration over object's inherited properties before its own +var i; +for ( i in cQuery( support ) ) { + break; +} +support.ownFirst = i === "0"; + +// Note: most support tests are defined in their respective modules. +// false until the test is run +support.inlineBlockNeedsLayout = false; + +// Execute ASAP in case we need to set body.style.zoom +cQuery( function() { + + // Minified: var a,b,c,d + var val, div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Return for frameset docs that don't have a body + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + if ( typeof div.style.zoom !== "undefined" ) { + + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1"; + + support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; + if ( val ) { + + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); +} ); + + +( function() { + var div = document.createElement( "div" ); + + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch ( e ) { + support.deleteExpando = false; + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); +var acceptData = function( elem ) { + var noData = cQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], + nodeType = +elem.nodeType || 1; + + // Do not set data on non-element DOM nodes because it will not be cleared (#8335). + return nodeType !== 1 && nodeType !== 9 ? + false : + + // Nodes accept data unless otherwise specified; rejection can be conditional + !noData || noData !== true && elem.getAttribute( "classid" ) === noData; +}; + + + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /([A-Z])/g; + +function dataAttr( elem, key, data ) { + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? cQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + cQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && cQuery.isEmptyObject( obj[ name ] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + +function internalData( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !acceptData( elem ) ) { + return; + } + + var ret, thisCache, + internalKey = cQuery.expando, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global cQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? cQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && + data === undefined && typeof name === "string" ) { + return; + } + + if ( !id ) { + + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + id = elem[ internalKey ] = deletedIds.pop() || cQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + + // Avoid exposing cQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + cache[ id ] = isNode ? {} : { toJSON: cQuery.noop }; + } + + // An object can be passed to cQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = cQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = cQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // cQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ cQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( typeof name === "string" ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ cQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !acceptData( elem ) ) { + return; + } + + var thisCache, i, + isNode = elem.nodeType, + + // See cQuery.data for more information + cache = isNode ? cQuery.cache : elem, + id = isNode ? elem[ cQuery.expando ] : cQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !cQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = cQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } else { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( cQuery.map( name, cQuery.camelCase ) ); + } + + i = name.length; + while ( i-- ) { + delete thisCache[ name[ i ] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( pvt ? !isEmptyDataObject( thisCache ) : !cQuery.isEmptyObject( thisCache ) ) { + return; + } + } + } + + // See cQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + cQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + /* jshint eqeqeq: false */ + } else if ( support.deleteExpando || cache != cache.window ) { + /* jshint eqeqeq: true */ + delete cache[ id ]; + + // When all else fails, undefined + } else { + cache[ id ] = undefined; + } +} + +cQuery.extend( { + cache: {}, + + // The following elements (space-suffixed to avoid Object.prototype collisions) + // throw uncatchable exceptions if you attempt to set expando properties + noData: { + "applet ": true, + "embed ": true, + + // ...but Flash objects (which have this classid) *can* handle expandos + "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" + }, + + hasData: function( elem ) { + elem = elem.nodeType ? cQuery.cache[ elem[ cQuery.expando ] ] : elem[ cQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + } +} ); + +cQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Special expections of .data basically thwart cQuery.access, + // so implement the relevant behavior ourselves + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = cQuery.data( elem ); + + if ( elem.nodeType === 1 && !cQuery._data( elem, "parsedAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = cQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + cQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + cQuery.data( this, key ); + } ); + } + + return arguments.length > 1 ? + + // Sets one value + this.each( function() { + cQuery.data( this, key, value ); + } ) : + + // Gets one value + // Try to fetch any internally stored data first + elem ? dataAttr( elem, key, cQuery.data( elem, key ) ) : undefined; + }, + + removeData: function( key ) { + return this.each( function() { + cQuery.removeData( this, key ); + } ); + } +} ); + + +cQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = cQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || cQuery.isArray( data ) ) { + queue = cQuery._data( elem, type, cQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = cQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = cQuery._queueHooks( elem, type ), + next = function() { + cQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, + // or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return cQuery._data( elem, key ) || cQuery._data( elem, key, { + empty: cQuery.Callbacks( "once memory" ).add( function() { + cQuery._removeData( elem, type + "queue" ); + cQuery._removeData( elem, key ); + } ) + } ); + } +} ); + +cQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return cQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = cQuery.queue( this, type, data ); + + // ensure a hooks for this queue + cQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + cQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + cQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = cQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = cQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); + + +( function() { + var shrinkWrapBlocksVal; + + support.shrinkWrapBlocks = function() { + if ( shrinkWrapBlocksVal != null ) { + return shrinkWrapBlocksVal; + } + + // Will be changed later if needed. + shrinkWrapBlocksVal = false; + + // Minified: var b,c,d + var div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Test fired too early or in an unsupported environment, exit. + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + if ( typeof div.style.zoom !== "undefined" ) { + + // Reset CSS: box-sizing; display; margin; border + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;" + + "padding:1px;width:1px;zoom:1"; + div.appendChild( document.createElement( "div" ) ).style.width = "5px"; + shrinkWrapBlocksVal = div.offsetWidth !== 3; + } + + body.removeChild( container ); + + return shrinkWrapBlocksVal; + }; + +} )(); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from cQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return cQuery.css( elem, "display" ) === "none" || + !cQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return cQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( cQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( cQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( cQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by cQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + cQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( cQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !cQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( cQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( + elems[ i ], + key, + raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[ 0 ], key ) : emptyGet; +}; +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + +var rleadingWhitespace = ( /^\s+/ ); + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + + +( function() { + var div = document.createElement( "div" ), + fragment = document.createDocumentFragment(), + input = document.createElement( "input" ); + + // Setup + div.innerHTML = "
    a"; + + // IE strips leading whitespace when .innerHTML is used + support.leadingWhitespace = div.firstChild.nodeType === 3; + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + support.tbody = !div.getElementsByTagName( "tbody" ).length; + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + support.htmlSerialize = !!div.getElementsByTagName( "link" ).length; + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + support.html5Clone = + document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav>"; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + input.type = "checkbox"; + input.checked = true; + fragment.appendChild( input ); + support.appendChecked = input.checked; + + // Make sure textarea (and checkbox) defaultValue is properly cloned + // Support: IE6-IE11+ + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // #11217 - WebKit loses check when the name is after the checked attribute + fragment.appendChild( div ); + + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input = document.createElement( "input" ); + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 + // old WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ + support.noCloneEvent = !!div.addEventListener; + + // Support: IE<9 + // Since attributes and properties are the same in IE, + // cleanData must set properties to undefined rather than use removeAttribute + div[ cQuery.expando ] = 1; + support.attributes = !div.getAttribute( cQuery.expando ); +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
    ", "
    " ], + area: [ 1, "", "" ], + + // Support: IE8 + param: [ 1, "", "" ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + col: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] +}; + +// Support: IE8-IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; + ( elem = elems[ i ] ) != null; + i++ + ) { + if ( !tag || cQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + cQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && cQuery.nodeName( context, tag ) ? + cQuery.merge( [ context ], found ) : + found; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + cQuery._data( + elem, + "globalEval", + !refElements || cQuery._data( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/, + rtbody = / from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[ 1 ] === "
    " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( cQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && + !tbody.childNodes.length ) { + + elem.removeChild( tbody ); + } + } + } + + cQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + cQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && cQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + + continue; + } + + contains = cQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; +} + + +( function() { + var i, eventName, + div = document.createElement( "div" ); + + // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) + for ( i in { submit: true, change: true, focusin: true } ) { + eventName = "on" + i; + + if ( !( support[ i ] = eventName in window ) ) { + + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) + div.setAttribute( eventName, "t" ); + support[ i ] = div.attributes[ eventName ].expando === false; + } + } + + // Null elements to avoid leaks in IE. + div = null; +} )(); + + +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + cQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = cQuery.guid++ ); + } + return elem.each( function() { + cQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +cQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = cQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = cQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a cQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof cQuery !== "undefined" && + ( !e || cQuery.event.triggered !== e.type ) ? + cQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + + // Add elem as a property of the handle fn to prevent a memory leak + // with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = cQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = cQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = cQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && cQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + cQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = cQuery.hasData( elem ) && cQuery._data( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + cQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = cQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + cQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( cQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + cQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + cQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a cQuery.Event object, Object, or just an event type string + event = event[ cQuery.expando ] ? + event : + new cQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for cQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + cQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = cQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !cQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // cQuery handler + handle = ( cQuery._data( cur, "events" ) || {} )[ event.type ] && + cQuery._data( cur, "handle" ); + + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( + ( !special._default || + special._default.apply( eventPath.pop(), data ) === false + ) && acceptData( elem ) + ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !cQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + cQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + cQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable cQuery.Event from the native event object + event = cQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( cQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = cQuery.event.special[ event.type ] || {}; + + // Use the fix-ed cQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = cQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( cQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + /* jshint eqeqeq: false */ + for ( ; cur != this; cur = cur.parentNode || this ) { + /* jshint eqeqeq: true */ + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + cQuery( sel, this ).index( cur ) > -1 : + cQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ cQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new cQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Safari 6-8+ + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY fromElement offsetX offsetY " + + "pageX pageY screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? + original.toElement : + fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( cQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return cQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { + var e = cQuery.extend( + new cQuery.Event(), + event, + { + type: type, + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // cQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // Guard for simulated events was moved to cQuery.event.stopPropagation function + // since `originalEvent` should point to the original event for the + // constancy with other events and for more focused logic + } + ); + + cQuery.event.trigger( e, null, elem ); + + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +cQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, + // to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +cQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof cQuery.Event ) ) { + return new cQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: IE < 9, Android < 4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + cQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || cQuery.now(); + + // Mark it as fixed + this[ cQuery.expando ] = true; +}; + +// cQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +cQuery.Event.prototype = { + constructor: cQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( !e || this.isSimulated ) { + return; + } + + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && e.stopImmediatePropagation ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in cQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +cQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + cQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !cQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +// IE submit delegation +if ( !support.submit ) { + + cQuery.event.special.submit = { + setup: function() { + + // Only need this for delegated form submit events + if ( cQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + cQuery.event.add( this, "click._submit keypress._submit", function( e ) { + + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = cQuery.nodeName( elem, "input" ) || cQuery.nodeName( elem, "button" ) ? + + // Support: IE <=8 + // We use cQuery.prop instead of elem.form + // to allow fixing the IE8 delegated submit issue (gh-2332) + // by 3rd party polyfills/workarounds. + cQuery.prop( elem, "form" ) : + undefined; + + if ( form && !cQuery._data( form, "submit" ) ) { + cQuery.event.add( form, "submit._submit", function( event ) { + event._submitBubble = true; + } ); + cQuery._data( form, "submit", true ); + } + } ); + + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + + // If form was submitted by the user, bubble the event up the tree + if ( event._submitBubble ) { + delete event._submitBubble; + if ( this.parentNode && !event.isTrigger ) { + cQuery.event.simulate( "submit", this.parentNode, event ); + } + } + }, + + teardown: function() { + + // Only need this for delegated form submit events + if ( cQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + cQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !support.change ) { + + cQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + cQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._justChanged = true; + } + } ); + cQuery.event.add( this, "click._change", function( event ) { + if ( this._justChanged && !event.isTrigger ) { + this._justChanged = false; + } + + // Allow triggered, simulated change events (#11500) + cQuery.event.simulate( "change", this, event ); + } ); + } + return false; + } + + // Delegated event; lazy-add a change handler on descendant inputs + cQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !cQuery._data( elem, "change" ) ) { + cQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + cQuery.event.simulate( "change", this.parentNode, event ); + } + } ); + cQuery._data( elem, "change", true ); + } + } ); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || + ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { + + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + cQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Support: Firefox +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome, Safari +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + cQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + cQuery.event.simulate( fix, event.target, cQuery.event.fix( event ) ); + }; + + cQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = cQuery._data( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + cQuery._data( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = cQuery._data( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + cQuery._removeData( doc, fix ); + } else { + cQuery._data( doc, fix, attaches ); + } + } + }; + } ); +} + +cQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched cQuery.Event + handleObj = types.handleObj; + cQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + cQuery.event.remove( this, types, fn, selector ); + } ); + }, + + trigger: function( type, data ) { + return this.each( function() { + cQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return cQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var rinlinecQuery = / cQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); + +// Support: IE<8 +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return cQuery.nodeName( elem, "table" ) && + cQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( cQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + return elem; +} + +function cloneCopyEvent( src, dest ) { + if ( dest.nodeType !== 1 || !cQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = cQuery._data( src ), + curData = cQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + cQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = cQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !support.noCloneEvent && dest[ cQuery.expando ] ) { + data = cQuery._data( dest ); + + for ( e in data.events ) { + cQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( cQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( support.html5Clone && ( src.innerHTML && !cQuery.trim( dest.innerHTML ) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = cQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = cQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = cQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + cQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + cQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !cQuery._data( node, "globalEval" ) && + cQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( cQuery._evalUrl ) { + cQuery._evalUrl( node.src ); + } + } else { + cQuery.globalEval( + ( node.text || node.textContent || node.innerHTML || "" ) + .replace( rcleanScript, "" ) + ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + elems = selector ? cQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = elems[ i ] ) != null; i++ ) { + + if ( !keepData && node.nodeType === 1 ) { + cQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && cQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +cQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = cQuery.contains( elem.ownerDocument, elem ); + + if ( support.html5Clone || cQuery.isXMLDoc( elem ) || + !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( ( !support.noCloneEvent || !support.noCloneChecked ) && + ( elem.nodeType === 1 || elem.nodeType === 11 ) && !cQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { + + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[ i ] ) { + fixCloneNodeIssues( node, destElements[ i ] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { + cloneCopyEvent( node, destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + cleanData: function( elems, /* internal */ forceAcceptData ) { + var elem, type, id, data, + i = 0, + internalKey = cQuery.expando, + cache = cQuery.cache, + attributes = support.attributes, + special = cQuery.event.special; + + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + if ( forceAcceptData || acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + cQuery.event.remove( elem, type ); + + // This is a shortcut to avoid cQuery.event.remove's overhead + } else { + cQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by cQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // Support: IE<9 + // IE does not allow us to delete expando properties from nodes + // IE creates expando attributes along with the property + // IE does not have a removeAttribute function on Document nodes + if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { + elem.removeAttribute( internalKey ); + + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + } else { + elem[ internalKey ] = undefined; + } + + deletedIds.push( id ); + } + } + } + } + } +} ); + +cQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + cQuery.text( this ) : + this.empty().append( + ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) + ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + cQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && cQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return cQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinecQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = cQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + + // Remove element nodes and prevent memory leaks + elem = this[ i ] || {}; + if ( elem.nodeType === 1 ) { + cQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( cQuery.inArray( this, ignored ) < 0 ) { + cQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +cQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + cQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = cQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + cQuery( insert[ i ] )[ original ]( elems ); + + // Modern browsers can apply cQuery collections as arrays, but oldIE needs a .get() + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = cQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = cQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || cQuery( "',l=r.firstChild,i.appendChild(l),o.addEvent(l,"load",function(){var i;try{i=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(i.title)?u=i.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(i.body.innerHTML),v.trigger({type:"progress",loaded:c.length,total:c.length}),x&&v.trigger({type:"uploadprogress",loaded:x.size||1025,total:x.size||1025}))}catch(r){if(!n.hasSameOrigin(d.url))return e.call(v,function(){v.trigger("error")}),void 0;u=404}e.call(v,function(){v.trigger("load")})},v.uid)}var f,p,g,x,v=this,w=v.getRuntime();if(u=c=null,m instanceof s&&m.hasBlob()){if(x=m.getBlob(),f=x.uid,g=i.get(f),p=i.get(f+"_form"),!p)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else f=t.guid("uid_"),p=document.createElement("form"),p.setAttribute("id",f+"_form"),p.setAttribute("method",d.method),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),w.getShimContainer().appendChild(p);p.setAttribute("target",f+"_iframe"),m instanceof s&&m.each(function(e,i){if(e instanceof a)g&&g.setAttribute("name",i);else{var n=document.createElement("input");t.extend(n,{type:"hidden",name:i,value:e}),g?p.insertBefore(n,g):p.appendChild(n)}}),p.setAttribute("action",d.url),h(),p.submit(),v.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(i){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})},destroy:function(){this.getRuntime().getShim().removeInstance(this.uid)}})}return e.XMLHttpRequest=u}),n("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t}),a(["moxie/core/utils/Basic","moxie/core/utils/Encode","moxie/core/utils/Env","moxie/core/Exceptions","moxie/core/utils/Dom","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/core/I18n","moxie/core/utils/Mime","moxie/file/FileInput","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/image/Image","moxie/core/utils/Events","moxie/runtime/html5/image/ResizerCanvas"])}(this)}); +/** + * Plupload - multi-runtime File Uploader + * v3.1.5 + * + * Copyright 2018, Ephox + * Released under AGPLv3 License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2021-11-15 + */ +!function(t,e){var i=function(){var t={};return e.apply(t,arguments),t.plupload};"function"==typeof define&&define.amd?define("plupload",["./moxie"],i):"object"==typeof module&&module.exports?module.exports=i(require("./moxie")):t.plupload=i(t.moxie)}(this||window,function(t){!function(e,i){"use strict";function n(t,e){for(var i,n=[],r=0;r":"gt","&":"amp",'"':"quot","'":"#39"},i=/[<>&\"\']/g;return t?(""+t).replace(i,function(t){return e[t]?"&"+e[t]+";":t}):t},toArray:i.Basic.toArray,inArray:i.Basic.inArray,addI18n:e.core.I18n.addI18n,translate:e.core.I18n.translate,sprintf:i.Basic.sprintf,isEmptyObj:i.Basic.isEmptyObj,hasClass:i.Dom.hasClass,addClass:i.Dom.addClass,removeClass:i.Dom.removeClass,getStyle:i.Dom.getStyle,addEvent:i.Events.addEvent,removeEvent:i.Events.removeEvent,removeAllEvents:i.Events.removeAllEvents,cleanName:function(t){var e,i;for(i=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"],e=0;e0?"&":"?")+n),t},formatSize:function(t){function e(t,e){return Math.round(t*Math.pow(10,e))/Math.pow(10,e)}var i=this;if(t=parseInt(t,10),isNaN(t))return i.translate("N/A");var n=Math.pow(1024,4);return t>n?e(t/n,1)+" "+i.translate("tb"):t>(n/=1024)?e(t/n,1)+" "+i.translate("gb"):t>(n/=1024)?e(t/n,1)+" "+i.translate("mb"):t>1024?Math.round(t/1024)+" "+i.translate("kb"):t+" "+i.translate("b")},mimes2extList:t.core.utils.Mime.mimes2extList,resolveUrl:i.Url.resolveUrl,parseSize:i.Basic.parseSizeStr,delay:i.Basic.delay,EventTarget:t.core.EventTarget,Runtime:t.runtime.Runtime,FileInput:t.file.FileInput,FileReader:t.file.FileReader}}),r("plupload/core/Collection",["plupload"],function(){var t=function(){function e(){var t;for(t in n);return n[t]}var i,n={},r=0;plupload.extend(this,{count:function(){return r},hasKey:function(t){return n.hasOwnProperty(t)},get:function(t){return n[t]},first:function(){for(var t in n)return n[t]},last:function(){return i},toObject:function(){return n},add:function(t,e){var s=this;return"object"!=typeof t||e?n.hasOwnProperty(t)?s.update.apply(s,arguments):(n[t]=i=e,r++,void 0):plupload.each(t,function(t,e){s.add(e,t)})},remove:function(t){if(this.hasKey(t)){var s=n[t];delete n[t],r--,i===s&&(i=e())}},extract:function(t){var e=this.get(t);return this.remove(t),e},shift:function(){var t,e,i=this;for(e in n)return t=n[e],i.remove(e),t},update:function(t,e){n[t]=e},each:function(t){plupload.each(n,t)},combineWith:function(){var e=new t;return e.add(n),plupload.each(arguments,function(i){i instanceof t&&e.add(i.toObject())}),e},clear:function(){n={},i=null,r=0}})};return t}),r("plupload/core/ArrCollection",["plupload"],function(t){var e=function(){var e=[];t.extend(this,{count:function(){return e.length},hasKey:function(t){return this.getIdx(t)>-1},get:function(t){var i=this.getIdx(t);return i>-1?e[i]:null},getIdx:function(t){for(var i=0,n=e.length;n>i;i++)if(e[i].uid===t)return i;return-1},getByIdx:function(t){return e[t]},first:function(){return e[0]},last:function(){return e[e.length-1]},add:function(t){t=arguments[1]||t;var i=this.getIdx(t.uid);return i>-1?(e[i]=t,i):(e.push(t),e.length-1)},remove:function(t){return!!this.extract(t)},splice:function(i,n){return i="undefinded"===t.typeOf(i)?0:Math.max(i,0),n="undefinded"!==t.typeOf(n)&&i+n-1?e.splice(i,1):null},shift:function(){return e.shift()},update:function(t,i){var n=this.getIdx(t);return n>-1?(e[n]=i,!0):!1},each:function(i){t.each(e,i)},combineWith:function(){return Array.prototype.concat.apply(this.toArray(),arguments)},sort:function(t){e.sort(t||function(t,e){return t.priority-e.priority})},clear:function(){e=[]},toObject:function(){for(var t={},i=0,n=e.length;n>i;i++)t[e[i].uid]=e[i];return t},toArray:function(){return Array.prototype.slice.call(e)}})};return e}),r("plupload/core/Optionable",["plupload"],function(e){var i=t.core.EventTarget;return function(t){function i(){t.apply(this,arguments),this._options={}}return e.inherit(i,t),e.extend(i.prototype,{setOption:function(t,i,n){var r,s=this;return"object"==typeof t?(n=i,e.each(t,function(t,e){s.setOption(e,t,n)}),void 0):((!n||s._options.hasOwnProperty(t))&&(r=e.clone(s._options[t]),"object"===e.typeOf(i)&&"object"===e.typeOf(s._options[t])?e.extend(s._options[t],i):s._options[t]=i,s.trigger("OptionChanged",t,i,r)),void 0)},getOption:function(t){if(!t)return this._options;var i=this._options[t];return e.inArray(e.typeOf(i),["array","object"])>-1?e.extendImmutable({},i):i},setOptions:function(t,e){"object"==typeof t&&this.setOption(t,e)},getOptions:function(){return this.getOption()}}),i}(i)}),r("plupload/core/Queueable",["plupload","plupload/core/Optionable"],function(t,e){return function(e){function i(){e.apply(this,arguments),this.uid=t.guid(),this.state=i.IDLE,this.processed=0,this.total=0,this.percent=0,this.retries=0,this.priority=0,this.startedTimestamp=0,this.processedTimestamp=0}return i.IDLE=1,i.PROCESSING=2,i.PAUSED=6,i.RESUMED=7,i.DONE=5,i.FAILED=4,i.DESTROYED=8,t.inherit(i,e),t.extend(i.prototype,{start:function(){var t=this.state;return this.state===i.PROCESSING?!1:(this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=i.PROCESSING,this.trigger("statechanged",this.state,t),this.trigger("started"),!0)},pause:function(){var e=this.state;return-1===t.inArray(this.state,[i.IDLE,i.RESUMED,i.PROCESSING])?!1:(this.processed=this.percent=0,this.loaded=this.processed,this.state=i.PAUSED,this.trigger("statechanged",this.state,e),this.trigger("paused"),!0)},resume:function(){var t=this.state;return this.state!==i.PAUSED&&this.state!==i.RESUMED?!1:(this.state=i.RESUMED,this.trigger("statechanged",this.state,t),this.trigger("resumed"),!0)},stop:function(){var t=this.state;return this.state===i.IDLE?!1:(this.processed=this.percent=0,this.loaded=this.processed,this.startedTimestamp=0,this.state=i.IDLE,this.trigger("statechanged",this.state,t),this.trigger("stopped"),!0)},done:function(t){var e=this.state;return this.state===i.DONE?!1:(this.processed=this.total,this.loaded=this.processed,this.percent=100,this.processedTimestamp=+new Date,this.state=i.DONE,this.trigger("statechanged",this.state,e),this.trigger("done",t),this.trigger("processed"),!0)},failed:function(t){var e=this.state;return this.state===i.FAILED?!1:(this.processed=this.percent=0,this.loaded=this.processed,this.processedTimestamp=+new Date,this.state=i.FAILED,this.trigger("statechanged",this.state,e),this.trigger("failed",t),this.trigger("processed"),!0)},progress:function(t,e){e&&(this.total=e),this.processed=Math.min(t,this.total),this.loaded=this.processed,this.percent=Math.ceil(100*(this.processed/this.total)),this.trigger({type:"progress",loaded:this.processed,total:this.total})},destroy:function(){var t=this.state;return this.state===i.DESTROYED?!1:(this.state=i.DESTROYED,this.trigger("statechanged",this.state,t),this.trigger("destroy"),this.unbindAll(),!0)}}),i}(e)}),r("plupload/core/Stats",[],function(){return function(){var t=this;t.size=0,t.total=0,t.loaded=0,t.uploaded=0,t.done=0,t.failed=0,t.queued=0,t.paused=0,t.processing=0,t.paused=0,t.percent=0,t.bytesPerSec=0,t.processedPerSec=0,t.reset=function(){t.size=t.total=t.loaded=t.processed=t.uploaded=t.done=t.failed=t.queued=t.processing=t.paused=t.percent=t.bytesPerSec=t.processedPerSec=0}}}),r("plupload/core/Queue",["plupload","plupload/core/ArrCollection","plupload/core/Queueable","plupload/core/Stats"],function(t,e,i,n){return function(r){function s(i){r.apply(this,arguments),this._queue=new e,this.stats=new n,this._options=t.extend({},this._options,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1},i)}function o(){var t;return this.forEachItem(function(e){return e.state===i.IDLE||e.state===i.RESUMED?(t=e,!1):void 0}),t?t:null}function a(){var t;if(this.state!==i.PROCESSING&&this.state!==i.PAUSED)return!1;if(this.stats.processingt.startedTimestamp)&&(r+=n),e.processedPerSec=Math.ceil(r/((+new Date-t.startedTimestamp||1)/1e3)),e.processed=n,e.total+=s.total,e.total&&(e.percent=Math.ceil(100*(e.processed/e.total)))}),t.percent=e.percent,e.loaded=e.processed,e.size=e.total,e.bytesPerSec=e.processedPerSec,!0):!1},destroy:function(){var e=this;return e.state===i.DESTROYED?!1:e.state!==i.IDLE?(e.bindOnce("Stopped",function(){t.delay.call(e,e.destroy)}),e.stop()):(e.clear(),s.parent.destroy.call(this),e._queue=e.stats=null,!0)}}),s}(i)}),r("plupload/QueueUpload",["plupload","plupload/core/Queue"],function(t,e){return function(i){function n(t){e.call(this,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1,url:!1,chunk_size:0,multipart:!0,http_method:"POST",params:{},headers:!1,file_data_name:"file",send_file_name:!0,stop_on_fail:!0}),this.setOption=function(t,e){"object"!=typeof t&&"max_upload_slots"==t&&(t="max_slots"),n.prototype.setOption.call(this,t,e,!0)},this.setOptions(t)}return t.inherit(n,i),n}(e)}),r("plupload/QueueResize",["plupload","plupload/core/Queue"],function(t,e){return function(i){function n(t){e.call(this,{max_slots:1,max_retries:0,auto_start:!1,finish_active:!1,resize:{}}),this.setOption=function(t,e){"object"!=typeof t&&"max_resize_slots"==t&&(t="max_slots"),n.prototype.setOption.call(this,t,e,!0)},this.setOptions(t)}return t.inherit(n,i),n}(e)}),r("plupload/ChunkUploader",["plupload","plupload/core/Collection","plupload/core/Queueable"],function(e,i,n){function r(t){function i(t,i){var n="";return e.each(i,function(t,e){n+=(n?"&":"")+encodeURIComponent(e)+"="+encodeURIComponent(t)}),n&&(t+=(t.indexOf("?")>0?"&":"?")+n),t}var a;n.call(this),this._options={file_data_name:"file",headers:!1,http_method:"POST",multipart:!0,params:{},send_file_name:!0,url:!1},e.extend(this,{start:function(){var r,u,l=this,p=this.state,c=l._options;if(this.state===n.PROCESSING)return!1;this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=n.PROCESSING,this.trigger("statechanged",this.state,p),a=new s,a.upload&&(a.upload.onprogress=function(t){l.progress(t.loaded,t.total)}),a.onload=function(){var t={response:this.responseText,status:this.status,responseHeaders:this.getAllResponseHeaders()};return this.status<200||this.status>=400?l.failed(t):(l.done(t),void 0)},a.onerror=function(){l.failed()},a.onloadend=function(){setTimeout(function(){a&&(a.destroy(),a=null)},1)};try{r=c.multipart?c.url:i(c.url,c.params),a.open(c.http_method,r,!0),e.isEmptyObj(c.headers)||e.each(c.headers,function(t,e){a.setRequestHeader(e,t)}),c.multipart?(u=new o,e.isEmptyObj(c.params)||e.each(c.params,function(t,e){u.append(e,t)}),u.append(c.file_data_name,t),a.send(u)):((e.isEmptyObj(c.headers)||!a.hasRequestHeader("content-type"))&&a.setRequestHeader("content-type","application/octet-stream"),a.send(t)),this.trigger("started")}catch(d){l.failed()}},stop:function(){a&&(a.abort(),a.destroy(),a=null),r.prototype.stop.call(this)},setOption:function(t,e){r.prototype.setOption.call(this,t,e,!0)},setOptions:function(t){r.prototype.setOption.call(this,t,!0)},destroy:function(){this.stop(),r.prototype.destroy.call(this)}})}var s=t.xhr.XMLHttpRequest,o=t.xhr.FormData;return e.inherit(r,n),r}),r("plupload/FileUploader",["plupload","plupload/core/Collection","plupload/core/Queueable","plupload/ChunkUploader"],function(t,e,i,n){function r(s,o){function a(){var t=0;return l.each(function(e){e.state===i.DONE&&(t+=e.end-e.start)}),t}function u(){for(var t=0;p>t&&l.hasKey(t);)t++;return t}var l=new e,p=1;i.call(this),this._options={chunk_size:0,params:{},send_file_name:!0,stop_on_fail:!0},t.extend(this,{name:s.name,start:function(){var t,e=this,r=this.state;return this.state===i.PROCESSING?!1:(this.startedTimestamp||(this.startedTimestamp=+new Date),this.state=i.PROCESSING,this.trigger("statechanged",this.state,r),e._options.send_file_name&&(e._options.params.name=e.target_name||e.name),e._options.chunk_size?(p=Math.ceil(s.size/e._options.chunk_size),e.uploadChunk(!1,!0)):(t=new n(s),t.bind("progress",function(t){e.progress(t.loaded,t.total)}),t.bind("done",function(t,i){e.done(i)}),t.bind("failed",function(t,i){e.failed(i)}),t.setOptions(e._options),o.addItem(t)),this.trigger("started"),void 0)},uploadChunk:function(e,r){var c,d,h=this,f=this.getOption("chunk_size"),g={};return g.seq=parseInt(e,10)||u(),g.start=g.seq*f,g.end=Math.min(g.start+f,s.size),g.total=s.size,g.start<0||g.start>=s.size?!1:(d=t.extendImmutable({},this.getOptions(),{params:{chunk:g.seq,chunks:p}}),c=new n(s.slice(g.start,g.end,s.type)),c.bind("progress",function(t){h.progress(a()+t.loaded,s.size)}),c.bind("failed",function(e,n){l.add(g.seq,t.extend({state:i.FAILED},g)),h.trigger("chunkuploadfailed",t.extendImmutable({},g,n)),d.stop_on_fail&&h.failed(n)}),c.bind("done",function(e,n){l.add(g.seq,t.extend({state:i.DONE},g)),h.trigger("chunkuploaded",t.extendImmutable({},g,n)),a()>=s.size?(h.progress(s.size,s.size),h.done(n)):r&&t.delay(function(){h.uploadChunk(u(),r)})}),c.bind("processed",function(){this.destroy()}),c.setOptions(d),l.add(g.seq,t.extend({state:i.PROCESSING},g)),o.addItem(c),r&&o.countSpareSlots()&&h.uploadChunk(u(),r),!0)},destroy:function(){r.prototype.destroy.call(this),l.clear()}})}return t.inherit(r,i),r}),r("plupload/ImageResizer",["plupload","plupload/core/Queueable"],function(e,i){function n(t){i.call(this),this._options={type:"image/jpeg",quality:90,crop:!1,fit:!0,preserveHeaders:!0,resample:"default",multipass:!0},this.setOption=function(t){("object"==typeof t||this._options.hasOwnProperty(t))&&n.prototype.setOption.apply(this,arguments)},this.start=function(e){var i,n=this;e&&this.setOptions(e.resize),i=new r,i.bind("load",function(){this.resize(n.getOptions())}),i.bind("resize",function(){n.done(this.getAsBlob(n.getOption("type"),n.getOption("quality"))),this.destroy()}),i.bind("error",function(){n.failed(),this.destroy()}),i.load(t,n.getOption("runtimeOptions"))}}var r=t.image.Image;return e.inherit(n,i),e.Image=r,n}),r("plupload/File",["plupload","plupload/core/Queueable","plupload/FileUploader","plupload/ImageResizer"],function(t,e,i,n){function r(a,u,l){e.call(this),t.extend(this,{id:this.uid,name:a.name,target_name:null,type:a.type,size:a.size,origSize:a.size,start:function(){var i=this.state;return this.state===e.PROCESSING?!1:(this.state=e.PROCESSING,this.trigger("statechanged",this.state,i),this.trigger("started"),!t.isEmptyObj(this._options.resize)&&s(this.type)&&o(a,"send_binary_string")?this.resizeAndUpload():this.upload(),!0)},getSource:function(){return a},getNative:function(){return this.getFile().getSource()},resizeAndUpload:function(){var t=this,e=t.getOptions(),i=new n(a);i.bind("progress",function(e){t.progress(e.loaded,e.total)}),i.bind("done",function(e,i){i=i,t.upload()}),i.bind("failed",function(){t.upload()}),i.setOption("runtimeOptions",{runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:e.preferred_caps,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url}),l.addItem(i)},upload:function(){var t=this,e=new i(a,u);e.bind("paused",function(){t.pause()}),e.bind("resumed",function(){this.start()}),e.bind("started",function(){t.trigger("startupload")}),e.bind("progress",function(e){t.progress(e.loaded,e.total)}),e.bind("done",function(e,i){t.done(i)}),e.bind("failed",function(e,i){t.failed(i)}),e.setOptions(t.getOptions()),e.start()},destroy:function(){r.prototype.destroy.call(this),a=null}})}function s(e){return t.inArray(e,["image/jpeg","image/png"])>-1}function o(e,i){if(e.ruid){var n=t.Runtime.getInfo(e.ruid);if(n)return n.can(i)}return!1}return t.inherit(r,e),r}),r("plupload/Uploader",["plupload","plupload/core/Collection","plupload/core/Queue","plupload/QueueUpload","plupload/QueueResize","plupload/File"],function(e,i,n,r,s,o){function a(i){function u(){var t=O[0]||b[0];return t?t.getRuntime().uid:!1}function c(){this.bind("FilesAdded FilesRemoved",function(t){t.trigger("QueueChanged"),t.refresh()},this,999),this.bind("BeforeUpload",g),this.bind("Stopped",function(t){t.trigger("UploadComplete")}),this.bind("Error",m),this.bind("Destroy",_)}function d(i){var n=this,r=0,s=[],o={runtime_order:n.getOption("runtimes"),required_caps:n.getOption("required_features"),preferred_caps:n.getOption("preferred_caps"),swf_url:n.getOption("flash_swf_url"),xap_url:n.getOption("silverlight_xap_url")};e.each(n.getOption("runtimes").split(/\s*,\s*/),function(t){n.getOption(t)&&(o[t]=n.getOption(t))}),n.getOption("browse_button")&&e.each(n.getOption("browse_button"),function(i){s.push(function(s){var a=new t.file.FileInput(e.extend({},o,{accept:n.getOption("filters").mime_types,name:n.getOption("file_data_name"),multiple:n.getOption("multi_selection"),container:n.getOption("container"),browse_button:i}));a.onready=function(){var t=e.Runtime.getInfo(this.ruid);e.extend(n.features,{chunks:t.can("slice_blob"),multipart:t.can("send_multipart"),multi_selection:t.can("select_multiple")}),r++,O.push(this),s()},a.onchange=function(){n.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(t){R||(n.getOption("browse_button_hover")&&("mouseenter"===t.type?e.addClass(i,n.getOption("browse_button_hover")):"mouseleave"===t.type&&e.removeClass(i,n.getOption("browse_button_hover"))),n.getOption("browse_button_active")&&("mousedown"===t.type?e.addClass(i,n.getOption("browse_button_active")):"mouseup"===t.type&&e.removeClass(i,n.getOption("browse_button_active"))))}),a.bind("mousedown",function(){n.trigger("Browse")}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),n.getOption("drop_element")&&e.each(n.getOption("drop_element"),function(i){s.push(function(s){var a=new t.file.FileDrop(e.extend({},o,{drop_zone:i}));a.onready=function(){var t=e.Runtime.getInfo(this.ruid);e.extend(n.features,{chunks:t.can("slice_blob"),multipart:t.can("send_multipart"),dragdrop:t.can("drag_and_drop")}),r++,b.push(this),s()},a.ondrop=function(){n.addFile(this.files)},a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.inParallel(s,function(){"function"==typeof i&&i(r)})}function g(t,e){if(t.getOption("unique_names")){var i=e.name.match(/\.([^.]+)$/),n="part";i&&(n=i[1]),e.target_name=e.id+"."+n}}function m(t,i){i.code===e.INIT_ERROR?t.destroy():i.code===e.HTTP_ERROR&&t.state==e.STARTED&&t.trigger("CancelUpload")}function _(t){t.forEachItem(function(t){t.destroy()}),O.length&&(e.each(O,function(t){t.destroy()}),O=[]),b.length&&(e.each(b,function(t){t.destroy()}),b=[]),E=!1,y&&y.destroy(),v&&v.destroy(),I=y=v=null}var y,v,O=[],b=[],E=!1,R=!1,I=l(e.extend({backward_compatibility:!0,chunk_size:0,file_data_name:"file",filters:{mime_types:"*",prevent_duplicates:!1,max_file_size:0},flash_swf_url:"js/Moxie.swf",http_method:"POST",max_resize_slots:1,max_retries:0,max_upload_slots:1,multipart:!0,multipart_params:{},multi_selection:!0,params:{},resize:!1,runtimes:e.Runtime.order,send_chunk_number:!0,send_file_name:!0,silverlight_xap_url:"js/Moxie.xap",required_features:!1,preferred_caps:!1},i));n.call(this),e.extend(this,{_options:I,id:this.uid,state:e.STOPPED,features:{},settings:I,runtime:null,files:[],total:this.stats,init:function(){var t,i,n=this;return t=n.getOption("preinit"),"function"==typeof t?t(n):e.each(t,function(t,e){n.bind(e,t)}),c.call(n),e.each(["container","browse_button","drop_element"],function(t){return null===n.getOption(t)?(i={code:e.INIT_ERROR,message:e.sprintf(e.translate("%s specified, but cannot be found."),t)},!1):void 0}),i?n.trigger("Error",i):n.getOption("browse_button")||n.getOption("drop_element")?(d.call(n,function(t){var i,o=n.getOption("init"),a=e.extendImmutable({},n.getOption(),{auto_start:!0});"function"==typeof o?o(n):e.each(o,function(t,e){n.bind(e,t)}),t?(E=!0,i=e.Runtime.getInfo(u()),y=new r(a),v=new s(a),n.trigger("Init",{ruid:i.uid,runtime:n.runtime=i.type}),n.trigger("PostInit")):n.trigger("Error",{code:e.INIT_ERROR,message:e.translate("Init error.")})}),void 0):n.trigger("Error",{code:e.INIT_ERROR,message:e.translate("You must specify either browse_button or drop_element.")})},setOption:function(t,i){return E&&e.inArray(t,["container","browse_button","drop_element","runtimes","multi_selection","flash_swf_url","silverlight_xap_url"])>-1?this.trigger("Error",{code:e.OPTION_ERROR,message:e.sprintf(e.translate("%s option cannot be changed.")),option:t}):("object"!=typeof t&&(i=p(t,i,this._options),y&&y.setOption(t,i),v&&v.setOption(t,i)),a.prototype.setOption.call(this,t,i),void 0)},refresh:function(){O.length&&e.each(O,function(t){t.trigger("Refresh")}),b.length&&e.each(b,function(t){t.trigger("Refresh")}),this.trigger("Refresh")},stop:function(){a.prototype.stop.call(this)&&this.state!=e.STOPPED&&this.trigger("CancelUpload")},disableBrowse:function(){R=arguments[0]!==h?arguments[0]:!0,O.length&&e.each(O,function(t){t.disable(R)}),this.trigger("DisableBrowse",R)},getFile:function(t){return this.getItem(t)},addFile:function(i,n){function r(t){t.bind("beforestart",function(t){return p.trigger("BeforeUpload",t.target)}),t.bind("startupload",function(){p.trigger("UploadFile",this)}),t.bind("progress",function(){p.trigger("UploadProgress",this)}),t.bind("done",function(t,e){p.trigger("FileUploaded",this,e)}),t.bind("failed",function(t,i){p.trigger("Error",e.extend({code:e.HTTP_ERROR,message:e.translate("HTTP Error."),file:this},i))})}function s(t,i){var n=[];e.each(p.getOption("filters"),function(e,i){f[i]&&n.push(function(n){f[i].call(p,e,t,function(t){n(!t)})})}),e.inParallel(n,i)}function a(i){var u=e.typeOf(i);if(i instanceof t.file.File){if(!i.ruid&&!i.isDetached()){if(!l)return!1;i.ruid=l,i.connectRuntime(l)}c.push(function(t){s(i,function(s){var a;s||(a=new o(i,y,v),n&&(a.name=n),r(a),p.addItem(a),d.push(a),p.trigger("FileFiltered",a)),e.delay(t)})})}else i instanceof t.file.Blob?(a(i.getSource()),i.destroy()):-1!==e.inArray(u,["file","blob"])?a(new t.file.File(null,i)):"node"===u&&"filelist"===e.typeOf(i.files)?e.each(i.files,a):"array"===u&&(n=null,e.each(i,a))}var l,p=this,c=[],d=[];l=u(),a(i),c.length&&e.inParallel(c,function(){d.length&&p.trigger("FilesAdded",d)})},removeFile:function(t){var e=this.extractItem("string"==typeof t?t:t.uid);e&&(this.trigger("FilesRemoved",[e]),e.destroy())},splice:function(){var t=0,i=e.STARTED==this.state,r=n.prototype.splice.apply(this,arguments);if(r.length){for(this.trigger("FilesRemoved",r),i&&this.stop(),t=0;t0&&(r.slice_blob=!0),e.isEmptyObj(t.resize)&&t.multipart!==!1||(r.send_binary_string=!0),t.http_method&&(r.use_http_method=t.http_method),e.each(t,function(t,e){i(e,!!t,!0)})),r}function l(t){return e.each(t,function(e,i){t[i]=p(i,e,t)}),t}function p(t,i,n){switch(t){case"chunk_size":(i=e.parseSize(i))&&(n.send_file_name=!0);break;case"headers":var r={};return"object"==typeof i&&e.each(i,function(t,e){r[e.toLowerCase()]=t}),r;case"http_method":return"PUT"===i.toUpperCase()?"PUT":"POST";case"filters":return"array"===e.typeOf(i)&&(i={mime_types:i}),i.mime_types&&("string"===e.typeOf(i.mime_types)&&(i.mime_types=e.mimes2extList(i.mime_types)),n.re_ext_filter=function(t){var i=[];return e.each(t,function(t){e.each(t.extensions.split(/,/),function(t){/^\s*\*\s*$/.test(t)?i.push("\\.*"):i.push("\\."+t.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+i.join("|")+")$","i")}(i.mime_types)),i;case"max_file_size":n&&!n.filters&&(n.filters={}),n.filters.max_file_size=i;break;case"multipart":i||(n.send_file_name=!0);break;case"multipart_params":n.params=n.multipart_params=i;break;case"resize":return i?e.extend({preserve_headers:!0,crop:!1},i):!1;case"prevent_duplicates":n&&!n.filters&&(n.filters={}),n.filters.prevent_duplicates=!!i;break;case"unique_names":i&&(n.send_file_name=!0);break;case"required_features":return u(e.extend({},n));case"preferred_caps":return u(e.extend({},n,{required_features:!0}));case"container":case"browse_button":case"drop_element":return"container"===t?e.get(i):e.getAll(i)}return i}function c(t,e){f[t]=e}function d(t,i){var n,r;return n=new a(t),r=e.Runtime.thatCan(n.getOption("required_features"),i||t.runtimes),n.destroy(),r}var h,f={};return c("mime_types",function(t,i,n){t.length&&!this.getOption("re_ext_filter").test(i.name)?(this.trigger("Error",{code:e.FILE_EXTENSION_ERROR,message:e.translate("File extension error."),file:i}),n(!1)):n(!0)}),c("max_file_size",function(t,i,n){var r;t=e.parseSize(t),i.size!==r&&t&&i.size>t?(this.trigger("Error",{code:e.FILE_SIZE_ERROR,message:e.translate("File size error."),file:i}),n(!1)):n(!0)}),c("prevent_duplicates",function(t,i,n){var r=this;t&&this.forEachItem(function(t){return i.name===t.name&&i.size===t.size?(r.trigger("Error",{code:e.FILE_DUPLICATE_ERROR,message:e.translate("Duplicate file error."),file:i}),n(!1),void 0):void 0}),n(!0)}),c("prevent_empty",function(t,i,n){t&&!i.size&&i.size!==h?(this.trigger("Error",{code:e.FILE_SIZE_ERROR,message:e.translate("File size error."),file:i}),n(!1)):n(!0)}),a.addFileFilter=c,e.inherit(a,n),e.addFileFilter=c,e.predictRuntime=d,a}),o(["plupload","plupload/core/Collection","plupload/core/ArrCollection","plupload/core/Optionable","plupload/core/Queueable","plupload/core/Stats","plupload/core/Queue","plupload/QueueUpload","plupload/QueueResize","plupload/ChunkUploader","plupload/FileUploader","plupload/ImageResizer","plupload/File","plupload/Uploader"])}(this)}); \ No newline at end of file diff --git a/source/plugin/replyfloor/table/table_replyfloor_attachment.php b/source/plugin/replyfloor/table/table_replyfloor_attachment.php new file mode 100644 index 0000000..01bd906 --- /dev/null +++ b/source/plugin/replyfloor/table/table_replyfloor_attachment.php @@ -0,0 +1,119 @@ +_table = 'plugin_replyfloor_attachment'; + $this->_pk = 'id'; + + parent::__construct(); + } + + public function count_by_search_where($wherearr) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::result_first('SELECT COUNT(*) FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '')); + } + + public function fetch_all_by_search_where($wherearr, $ordersql = '', $start = 0, $limit = 0) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '').' '.$ordersql.DB::limit($start, $limit), null, 'id'); + } + + public function fetch_by_id($id) { + return DB::fetch_first('SELECT * FROM %t WHERE id=%d', array($this->_table, $id)); + } + + public function fetch_all_by_id($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE id IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function fetch_all_by_msgid($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE msgid IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function fetch_all_by_tid($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE tid IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function fetch_all_by_pid($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE pid IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function fetch_all_by_authorid($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE uid IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function update_by_ids($ids, $data) { + if(($id = dintval((array)$id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function update_by_id($id, $data) { + if(($id = dintval($id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function delete_by_id($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE id IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_msgid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE msgid IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_pid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE pid IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_tid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE tid IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_authorid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE uid IN(%n)', array($this->_table, $ids), false, true); + } + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/table/table_replyfloor_attachment_unused.php b/source/plugin/replyfloor/table/table_replyfloor_attachment_unused.php new file mode 100644 index 0000000..b4de5f9 --- /dev/null +++ b/source/plugin/replyfloor/table/table_replyfloor_attachment_unused.php @@ -0,0 +1,77 @@ +_table = 'plugin_replyfloor_attachment_unused'; + $this->_pk = 'id'; + + parent::__construct(); + } + + public function count_by_search_where($wherearr) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::result_first('SELECT COUNT(*) FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '')); + } + + public function fetch_all_by_search_where($wherearr, $ordersql = '', $start = 0, $limit = 0) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '').' '.$ordersql.DB::limit($start, $limit), null, 'id'); + } + + public function fetch_by_id($id) { + return DB::fetch_first('SELECT * FROM %t WHERE id=%d', array($this->_table, $id)); + } + + public function fetch_all_by_id($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE id IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function update_by_ids($ids, $data) { + if(($id = dintval((array)$id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function update_by_id($id, $data) { + if(($id = dintval($id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function delete_by_id($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE id IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_authorid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE uid IN(%n)', array($this->_table, $ids), false, true); + } + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/table/table_replyfloor_message.php b/source/plugin/replyfloor/table/table_replyfloor_message.php new file mode 100644 index 0000000..904b6d1 --- /dev/null +++ b/source/plugin/replyfloor/table/table_replyfloor_message.php @@ -0,0 +1,179 @@ +_table = 'plugin_replyfloor_message'; + $this->_pk = 'id'; + + parent::__construct(); + } + + public function count_by_search_where($wherearr) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::result_first('SELECT COUNT(*) FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '')); + } + + public function count_by_authorid($authorid) { + return DB::result_first('SELECT COUNT(*) FROM %t WHERE uid=%d', array($this->_table, $authorid)); + } + + public function fetch_all_by_search_where($wherearr, $ordersql = '', $start = 0, $limit = 0) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '').' '.$ordersql.DB::limit($start, $limit), null, 'id'); + } + + public function fetch_by_id($id) { + return DB::fetch_first('SELECT * FROM %t WHERE id=%d', array($this->_table, $id)); + } + + public function fetch_all_by_id($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE id IN(%n) '.$ordersql, array($this->_table, $ids), false, true); + } + } + + public function fetch_message_by_pid($pids, $perpage, $ordersql = '', $setconfig = array()) { + global $_G; + $date_convert = $_G['setting']['dateconvert']; + $_G['setting']['dateconvert'] = $setconfig['date_convert']; + $wherearr = array(); + if($_G['uid']){ + $wherearr[] = "(status = '0' or (status = '-1' and uid = '".$_G['uid']."'))"; + }else{ + $wherearr[] = "status = '0'"; + } + $wherearr[] = DB::field('pid', $pids, 'in'); + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + $query = DB::query("SELECT * FROM ".DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '').' '.$ordersql); + $messageinfo = $messagecount = $messagelist = array(); + require_once libfile('function/common', 'plugin/replyfloor'); + $uids = array(); + while($message = DB::fetch($query)) { + $messagecount[$message['pid']]++; + if(!isset($messagelist[$message['pid']])) { + $messagelist[$message['pid']] = array(); + } + if(count($messagelist[$message['pid']]) < $perpage) { + $message['avatar'] = avatar($message['uid'], 'small'); + $message['message'] = replyfloor_discuzcode($message['message']); + if(file_exists(DISCUZ_ROOT.'./source/plugin/replyfloor/extend/extend_hidenum.php')){ + require_once libfile('extend/hidenum', 'plugin/replyfloor'); + $message['message'] = replyfloor_extend_hidenum($message['message']); + } + if($setconfig['show_br']) { + $message['message'] = nl2br($message['message']); + } + if($setconfig['show_location']) { + $message['location'] = replyfloor_location($message['postip']); + }else{ + $message['location'] = ''; + } + $message['createtime'] = $setconfig['date_convert'] ? dgmdate($message['createtime'], 'u', 9999, $setconfig['time_format']) : dgmdate($message['createtime'], $setconfig['time_format']); + $messagelist[$message['pid']][] = $message; + $uids[] = $message['uid']; + if($message['ruid']){ + $uids[] = $message['ruid']; + } + } + $messageinfo[$message['pid']]['count'] = $messagecount[$message['pid']]; + $messageinfo[$message['pid']]['list'] = $messagelist[$message['pid']]; + } + if($uids) { + loadcache('usergroups'); + foreach(C::t('common_member')->fetch_all($uids) as $uid => $postuser) { + foreach ($messageinfo as $key => $value) { + foreach ($value['list'] as $k => $val) { + if($val['uid'] == $uid) { + $val['groupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + if($val['ruid'] == $uid) { + $val['rgroupcolor'] = $_G['cache']['usergroups'][$postuser['groupid']]['color']; + } + $messageinfo[$key]['list'][$k] = $val; + } + } + } + } + $_G['setting']['dateconvert'] = $date_convert; + return $messageinfo; + } + + public function update_by_id($id, $data) { + if(($id = dintval($id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function update_reportnum($id, $num = 1) { + return DB::query('UPDATE %t SET reportnum = reportnum + \'%d\' WHERE id = %d', array($this->_table, $num, $id)); + } + + public function restore_by_id($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::update($this->_table, array('status'=>0), DB::field('id', $ids, 'in'), true); + } + } + + public function delete_by_id($ids, $recycle = 0) { + if(($ids = dintval((array)$ids, true))) { + if($recycle) { + DB::update($this->_table, array('status'=>1), DB::field('id', $ids, 'in'), true); + }else{ + DB::query('DELETE FROM %t WHERE id IN(%n)', array($this->_table, $ids), false, true); + } + } + } + + public function delete_by_pid($ids, $recycle = 0) { + if(($ids = dintval((array)$ids, true))) { + if($recycle) { + DB::update($this->_table, array('status'=>1), DB::field('pid', $ids, 'in'), true); + }else{ + DB::query('DELETE FROM %t WHERE pid IN(%n)', array($this->_table, $ids), false, true); + } + } + } + + public function delete_by_tid($ids, $recycle = 0) { + if(($ids = dintval((array)$ids, true))) { + if($recycle) { + DB::update($this->_table, array('status'=>1), DB::field('tid', $ids, 'in'), true); + }else{ + DB::query('DELETE FROM %t WHERE tid IN(%n)', array($this->_table, $ids), false, true); + } + } + } + + public function delete_by_authorid($ids, $recycle = 0) { + if(($ids = dintval((array)$ids, true))) { + if($recycle) { + DB::update($this->_table, array('status'=>1), DB::field('uid', $ids, 'in'), true); + }else{ + DB::query('DELETE FROM %t WHERE uid IN(%n)', array($this->_table, $ids), false, true); + } + } + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/table/table_replyfloor_report.php b/source/plugin/replyfloor/table/table_replyfloor_report.php new file mode 100644 index 0000000..00871fc --- /dev/null +++ b/source/plugin/replyfloor/table/table_replyfloor_report.php @@ -0,0 +1,83 @@ +_table = 'plugin_replyfloor_report'; + $this->_pk = 'id'; + + parent::__construct(); + } + + public function count_by_search_where($wherearr) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::result_first('SELECT COUNT(*) FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '')); + } + + public function fetch_all_by_search_where($wherearr, $ordersql = '', $start = 0, $limit = 0) { + $wheresql = empty($wherearr) ? '' : implode(' AND ', $wherearr); + return DB::fetch_all('SELECT * FROM '.DB::table($this->_table).($wheresql ? ' WHERE '.$wheresql : '').' '.$ordersql.DB::limit($start, $limit), null, 'id'); + } + + public function fetch_by_id($id) { + return DB::fetch_first('SELECT * FROM %t WHERE id=%d', array($this->_table, $id)); + } + + public function fetch_all_by_id($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE id IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function fetch_all_by_msgid($ids, $ordersql = '') { + if(($ids = dintval((array)$ids, true))) { + return DB::fetch_all('SELECT * FROM %t WHERE msgid IN(%n) '.$ordersql, array($this->_table, $ids), 'id'); + } + } + + public function update_by_ids($ids, $data) { + if(($id = dintval((array)$id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function update_by_id($id, $data) { + if(($id = dintval($id, true)) && $data && is_array($data)) { + DB::update($this->_table, $data, DB::field($this->_pk, $id), true); + } + } + + public function delete_by_id($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE id IN(%n)', array($this->_table, $ids), false, true); + } + } + + public function delete_by_msgid($ids) { + if(($ids = dintval((array)$ids, true))) { + DB::query('DELETE FROM %t WHERE msgid IN(%n)', array($this->_table, $ids), false, true); + } + } + +} \ No newline at end of file diff --git a/source/plugin/replyfloor/template/delete.htm b/source/plugin/replyfloor/template/delete.htm new file mode 100644 index 0000000..b7f5249 --- /dev/null +++ b/source/plugin/replyfloor/template/delete.htm @@ -0,0 +1,36 @@ + + +
    +
    $_G[setting][bbname] $navigation
    +
    +
    +
    +
    + + +
    +

    + {lang replyfloor:title_tip} + + {lang close} + +

    +
    + + + + + +

    {lang replyfloor:admin_delpost_confirm}

    +
    + + +
    + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/js.htm b/source/plugin/replyfloor/template/js.htm new file mode 100644 index 0000000..762146d --- /dev/null +++ b/source/plugin/replyfloor/template/js.htm @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/message.htm b/source/plugin/replyfloor/template/message.htm new file mode 100644 index 0000000..25863f3 --- /dev/null +++ b/source/plugin/replyfloor/template/message.htm @@ -0,0 +1,160 @@ + + + +
    + + +
    +
    +
    + $msginfo[username]{lang replyfloor:post_reply}$msginfo[rusername] + {lang replyfloor:moderating} + $msginfo['createtime'] + {lang replyfloor:location}{$msginfo[location]} +
    +
    + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + +
    +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $msginfo['message']
    + + + +
    + +
    + +
    + + +
    +
    +
    + + + + +
    + +
    + + +
    +
    +
    + $value[username]{lang replyfloor:post_reply}$value[rusername] + {lang replyfloor:moderating} + $value['createtime'] + {lang replyfloor:location}{$value[location]} + + {$setconfig['mobile_comefrom']} + +
    +
    + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + +
    +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $value[message]
    + + + +
    + +
    + +
    + + +
    +
    +
    +
    + +
    + + +
    + +
    + +
    + + +
    + + + + + + + + + {lang replyfloor:leftshowtip} {lang replyfloor:leftshowview} + +
    +
    + + + + + + + +
    + + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/delete.htm b/source/plugin/replyfloor/template/mobile/delete.htm new file mode 100644 index 0000000..60b6b62 --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/delete.htm @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/js.htm b/source/plugin/replyfloor/template/mobile/js.htm new file mode 100644 index 0000000..f4e9bac --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/js.htm @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/message.htm b/source/plugin/replyfloor/template/mobile/message.htm new file mode 100644 index 0000000..2d17300 --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/message.htm @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/post.htm b/source/plugin/replyfloor/template/mobile/post.htm new file mode 100644 index 0000000..aebc120 --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/post.htm @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/report.htm b/source/plugin/replyfloor/template/mobile/report.htm new file mode 100644 index 0000000..8a77270 --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/report.htm @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/style.htm b/source/plugin/replyfloor/template/mobile/style.htm new file mode 100644 index 0000000..f4e9bac --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/style.htm @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/mobile/viewthread.htm b/source/plugin/replyfloor/template/mobile/viewthread.htm new file mode 100644 index 0000000..f4e9bac --- /dev/null +++ b/source/plugin/replyfloor/template/mobile/viewthread.htm @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/post.htm b/source/plugin/replyfloor/template/post.htm new file mode 100644 index 0000000..ad67d4a --- /dev/null +++ b/source/plugin/replyfloor/template/post.htm @@ -0,0 +1,83 @@ + + +
    +
    +
    + +
    +
    +

    + {lang replyfloor:link_unfold} + + {lang close} + +

    + + + + +
    +
    {lang replyfloor:post_reply} $rusername :
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + +
    +
    + + + + +
    +
    + +
    +
    + + + + + {lang replyfloor:message_tip1} $setconfig['message_maxsize'] {lang replyfloor:message_tip2} +
    + + + + + + + +
    +
    +
    + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/report.htm b/source/plugin/replyfloor/template/report.htm new file mode 100644 index 0000000..ea74128 --- /dev/null +++ b/source/plugin/replyfloor/template/report.htm @@ -0,0 +1,59 @@ + + +
    +
    $_G[setting][bbname] {lang replyfloor:report_title}
    +
    +
    +
    +
    +

    {lang replyfloor:report_title}

    +
    +
    + +
    +
    + +

    + {lang replyfloor:report_title} + + {lang close} + +

    + + + + + + + +
    + +
    +
    + +
    +
    +
    + {lang replyfloor:report_image} +
    +
    +
    +
    + +
    + + +
    +
    +
    + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/style.htm b/source/plugin/replyfloor/template/style.htm new file mode 100644 index 0000000..cd4518a --- /dev/null +++ b/source/plugin/replyfloor/template/style.htm @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/delete.htm b/source/plugin/replyfloor/template/touch/delete.htm new file mode 100644 index 0000000..b8862bd --- /dev/null +++ b/source/plugin/replyfloor/template/touch/delete.htm @@ -0,0 +1,18 @@ + +
    +
    + + + + + +
    {lang replyfloor:admin_delpost_confirm}
    +
    + + +
    +
    + +
    + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/js.htm b/source/plugin/replyfloor/template/touch/js.htm new file mode 100644 index 0000000..8fbde63 --- /dev/null +++ b/source/plugin/replyfloor/template/touch/js.htm @@ -0,0 +1,438 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/message.htm b/source/plugin/replyfloor/template/touch/message.htm new file mode 100644 index 0000000..43dea7d --- /dev/null +++ b/source/plugin/replyfloor/template/touch/message.htm @@ -0,0 +1,154 @@ + + + + +
    + + +
    +
    + $msginfo[username]{lang replyfloor:post_reply}$msginfo[rusername] + {lang replyfloor:moderating} + {lang replyfloor:location}{$msginfo[location]} + + {$setconfig['mobile_comefrom']} + +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $msginfo[message]
    + + + +
    + +
    + +
    + + +
    +
    + + $msginfo['createtime'] + + + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + + +
    +
    +
    + + + + +
    + +
    + + +
    +
    + $value[username]{lang replyfloor:post_reply}$value[rusername] + {lang replyfloor:moderating} + {lang replyfloor:location}{$value[location]} + + {$setconfig['mobile_comefrom']} + +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $value[message]
    + + + +
    + +
    + +
    + + +
    +
    + + $value['createtime'] + + + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + + +
    +
    +
    +
    + +
    + + +
    + +
    + +
    + + +
    + + + + + + + + + {lang replyfloor:leftshowtip} {lang replyfloor:leftshowview} + +
    +
    + + + + + + + +
    + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/post.htm b/source/plugin/replyfloor/template/touch/post.htm new file mode 100644 index 0000000..b668876 --- /dev/null +++ b/source/plugin/replyfloor/template/touch/post.htm @@ -0,0 +1,134 @@ + + +
    +
    +
    + + + + +
    +
    +
    {lang replyfloor:link_unfold}
    +
    + {lang replyfloor:post_reply} $rusername : + + + +
    + +
    +
    + +
    +
    + +
    +
    + + + +
    +
    + + + + +
    +
    + +
    +
    +
    +
    + B + Color + Smilies + + uploadImage + +
    +
    +
    {lang replyfloor:message_tip1} $setconfig['message_maxsize'] {lang replyfloor:message_tip2}
    +
    +
    +
    + +
    + +
    +
    +
    + + + + +
    +
    +
    {lang replyfloor:link_unfold}
    +
    {lang replyfloor:post_reply} $rusername :
    + +
    +
    + +
    +
    +
    + B + Color + Smilies + + uploadImage + +
    +
    +
    +
    +
    + + + +
    +
    + + + + +
    +
    + +
    + + + + {lang replyfloor:message_tip1} $setconfig['message_maxsize'] {lang replyfloor:message_tip2} +
    +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/report.htm b/source/plugin/replyfloor/template/touch/report.htm new file mode 100644 index 0000000..5aab4be --- /dev/null +++ b/source/plugin/replyfloor/template/touch/report.htm @@ -0,0 +1,106 @@ + + +
    +
    +
    + + + + + + + +
    +
    +
    {lang replyfloor:report_title}
    +
    + +
    +
    + +
    +
    +
    + {lang replyfloor:report_image} +
    +
    +
    +
    + +
    + +
    + + + +
    +
    + + {lang replyfloor:report_title} +
    +
    + +
    +
    + + + + + + +
    + +
    +
    + +
    +
    +
    + {lang replyfloor:report_image} +
    +
    +
    +
    + +
    + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/style.htm b/source/plugin/replyfloor/template/touch/style.htm new file mode 100644 index 0000000..987d938 --- /dev/null +++ b/source/plugin/replyfloor/template/touch/style.htm @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/touch/viewthread.htm b/source/plugin/replyfloor/template/touch/viewthread.htm new file mode 100644 index 0000000..c40ec26 --- /dev/null +++ b/source/plugin/replyfloor/template/touch/viewthread.htm @@ -0,0 +1,158 @@ + +
    + +
    + + {lang replyfloor:link_fold} +
    + +
    + + {$_G['setting']['mobile']['mobilecomefrom']}{lang from_mobile} + + + + {lang replyfloor:from} {$post[number]}{$postnostick} + + {lang replyfloor:recommend} + + + $postno[$post[number]] + + {$post[number]}{$postno[0]} + + + + $post[dateline] + + {lang replyfloor:link_fold} +
    + +
    + {lang replyfloor:post_reply} +
    + +
    + $post[dateline] + {lang replyfloor:post_reply} +
    + +
    + $post[dateline] + {lang replyfloor:post_reply} +
    + +
    +
    + + +
    + +
    + + +
    +
    + $value[username]{lang replyfloor:post_reply}$value[rusername] + {lang replyfloor:moderating} + {lang replyfloor:location}{$value[location]} + + {$setconfig['mobile_comefrom']} + +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $value[message]
    + + + +
    + +
    + +
    + + +
    +
    + + $value['createtime'] + + + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + + +
    +
    +
    + + +
    + + +
    + +
    + +
    + + +
    + + + {lang replyfloor:leftshowtip} {lang replyfloor:leftshowview} + +
    + + + + + + + +
    + + + +
    + +
    + +
    + +
    + {lang replyfloor:post_reply} +
    + +
    + {lang replyfloor:post_reply} +
    + +
    + {lang replyfloor:post_reply} +
    + +
    + \ No newline at end of file diff --git a/source/plugin/replyfloor/template/viewthread.htm b/source/plugin/replyfloor/template/viewthread.htm new file mode 100644 index 0000000..45bd46e --- /dev/null +++ b/source/plugin/replyfloor/template/viewthread.htm @@ -0,0 +1,133 @@ + +
    + +
    + + {lang replyfloor:link_fold} +
    + +
    + + {$_G['setting']['mobile']['mobilecomefrom']}{lang from_mobile} + + + + {lang replyfloor:from} {$post[number]}{$postnostick} + + {lang replyfloor:recommend} + + + $postno[$post[number]] + + {$post[number]}{$postno[0]} + + + + $post[dateline] + + {lang replyfloor:link_fold} +
    + +
    + {lang replyfloor:post_reply} +
    + +
    +
    + + +
    + +
    + + +
    +
    +
    + $value[username]{lang replyfloor:post_reply}$value[rusername] + {lang replyfloor:moderating} + $value['createtime'] + {lang replyfloor:location}{$value[location]} + + {$setconfig['mobile_comefrom']} + +
    +
    + {lang replyfloor:post_reply} + + {lang replyfloor:post_report} + + + {lang replyfloor:post_delete} + +
    +
    +
    + +
    {lang replyfloor:message_ishidden_hiddenreplies}
    + +
    $value[message]
    + + + +
    + +
    + +
    + + +
    +
    +
    + + +
    + + +
    + +
    + +
    + + +
    + + + {lang replyfloor:leftshowtip} {lang replyfloor:leftshowview} + +
    + + + + + + + + +
    + + + +
    + +
    + +
    +
    + \ No newline at end of file diff --git a/source/plugin/replyfloor/uninstall.php b/source/plugin/replyfloor/uninstall.php new file mode 100644 index 0000000..1f3761e --- /dev/null +++ b/source/plugin/replyfloor/uninstall.php @@ -0,0 +1,60 @@ +update( $_GET['tid'], array( + 'across_fids' => '' + ) ); + + cpmsg('操作成功',$purl,'succeed'); + + break; + + default : + loadcache('forums'); + $page = max(1, intval($_GET['page'])); + + $limit = 20; + $start = ($page - 1) * $limit; + + $count = DB::result_first("select count(*) from %t where across_fids != ''", array('forum_thread')); + $lists = array(); + if($count){ + $lists = DB::fetch_all("select tid,fid,subject,authorid,author,across_fids,dateline from %t where across_fids != '' order by tid desc %i", array('forum_thread', DB::limit($start, $limit))); + } + + $multipage = multi($count, $limit, $page , $curl); + + include template('thread_across:admin_across'); + + break; + +} + +?> \ No newline at end of file diff --git a/source/plugin/thread_across/ajax.inc.php b/source/plugin/thread_across/ajax.inc.php new file mode 100755 index 0000000..14c69db --- /dev/null +++ b/source/plugin/thread_across/ajax.inc.php @@ -0,0 +1,59 @@ +fetch_by_uid( $_G['uid'] ); + + $fids = array_diff( $pbforums['fids'], array($fid) ); + + C::t('#thread_across#across_pbforums')->update( $_G['uid'], array( + 'fids' => implode(',', $fids) + ) ); + + include template('common/header_ajax'); + + include template('common/footer_ajax'); + exit; + break; + + case 'pbforum_add' : + $fid = trim($_GET['fid']); + + $pbforums = C::t('#thread_across#across_pbforums')->fetch_by_uid( $_G['uid'] ); + + if( $pbforums ){ + $fids = (array) $pbforums['fids']; + $fids[] = $fid; + $pbforums['fids'] = array_unique($fids); + + C::t('#thread_across#across_pbforums')->update( $_G['uid'], array( + 'fids' => implode(',', $pbforums['fids']) + ) ); + }else{ + C::t('#thread_across#across_pbforums')->insert(array( + 'uid' => $_G['uid'], + 'fids' => $fid + ) ); + } + + if( $_G['mobile'] ){ + $extrajs = ''; + + }else{ + $extrajs = ''; + } + showmessage('已屏蔽此版块', dreferer(), array('fid' => $fid), array('showdialog' => true, 'closetime' => true, 'extrajs' => $extrajs)); + + break; +} + + +?> \ No newline at end of file diff --git a/source/plugin/thread_across/discuz_plugin_thread_across.xml b/source/plugin/thread_across/discuz_plugin_thread_across.xml new file mode 100755 index 0000000..d64c945 --- /dev/null +++ b/source/plugin/thread_across/discuz_plugin_thread_across.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/plugin/thread_across/hook.class.php b/source/plugin/thread_across/hook.class.php new file mode 100755 index 0000000..3a4068f --- /dev/null +++ b/source/plugin/thread_across/hook.class.php @@ -0,0 +1,378 @@ +屏蔽版块'; + } + + function deletemember($p){ + global $_G; + + if( !empty($p['param'][0]) ){ + C::t('#thread_across#across_pbforums')->delete( $p['param'][0] ); + } + + } + + protected function __thread_edit(){ + global $_G, $thread, $isfirstpost; + if( !$_G['cache']['plugin']['thread_across']['open'] || !$_G['uid'] ) return; + + $_G['cache']['plugin']['thread_across']['groupids'] = dunserialize($_G['cache']['plugin']['thread_across']['groupids']); + if( ! in_array($_G['groupid'], $_G['cache']['plugin']['thread_across']['groupids']) ) return; + if( $_GET['action'] == 'reply' ) return; + if( $_GET['action'] == 'edit' && !$isfirstpost ) return; + + include_once libfile('function/forumlist'); + $thread['across_fids'] = array_filter(explode(',', $thread['across_fids'])); + $forums = forumselect(false, 0, $thread['across_fids']); + + include template('thread_across:block_thread_edit'); + return $return; + } + + protected function __thread_save($param){ + global $_G , $isfirstpost; + $pvars = $_G['cache']['plugin']['thread_across']; + + $isfirstpost = in_array($param['param'][0] , array('post_newthread_succeed','post_newthread_mod_succeed')) ? 1 : $isfirstpost; + if( !$isfirstpost || !$pvars['open'] ) return; + + if(!empty($param['param'][2]['tid'])){ + C::t('forum_thread')->update($param['param'][2]['tid'], array( + 'across_fids' => $_GET['across_fids'] ? (','. implode(',', $_GET['across_fids']) . ',') : '' + )); + } + } + + protected function __forumdisplay_lists(){ + global $_G; + if( !$_G['cache']['plugin']['thread_across']['open'] || !$_G['uid'] ) return; + + $this->__pbforums = $pbforums = C::t('#thread_across#across_pbforums')->fetch_by_uid( $_G['uid'] ); + + if($_G['forum_threadlist']){ + $dblastposts = array_column($_G['forum_threadlist'], 'dblastpost'); + $lastpost_end = current($dblastposts); + $lastpost_start = end($dblastposts); + } + + foreach($_G['forum_threadlist'] as $key => $thread){ + if( !empty($thread['across_fids']) ){ + $thread['across_fids'] = array_filter(explode(',', $thread['across_fids'])); + + if( in_array($thread['fid'], $pbforums['fids']) ){//帖子发布的原版块也在屏蔽板块中时也不显示 + unset($_G['forum_threadlist'][$key]); + $_G['forum_threadcount']--; + + $this->__pbthreads++; + } + + if( array_intersect($thread['across_fids'], $pbforums['fids']) ){//帖子的跨越版块也在屏蔽板块中时也不显示 + unset($_G['forum_threadlist'][$key]); + $_G['forum_threadcount']--; + + $this->__pbthreads++; + } + } + } + + if( empty($_G['forum_threadlist']) && $_GET['page'] <= 1 ){ + $lastpost_end = TIMESTAMP; + $lastpost_start = 0; + } + + /* + if($_GET['orderby'] == 'lastpost'){//最新回复 + + }else if($_GET['orderby'] == 'dateline'){//最新发帖 + + }else if($_GET['orderby'] == 'heats'){//热门 + + }else if($_GET['filter'] == 'hot'){//热帖 + + }else if($_GET['filter'] == 'digest'){//精华 + + }*/ + + if( $_GET['page'] <= 1 ){ + $sql = 'select * from %t where displayorder=0 and fid!=%d and across_fids like %s and lastpost>=%d order by lastpost desc'; + $arg = array('forum_thread', $_G['fid'], "%,{$_G['fid']},%", $lastpost_start); + $across_threads = DB::fetch_all($sql, $arg); + }else{ + if($_G['forum_threadlist']){ + $sql = 'select * from %t where displayorder=0 and fid!=%d and across_fids like %s and lastpost>=%d and lastpost<%d order by lastpost desc'; + $arg = array('forum_thread', $_G['fid'], "%,{$_G['fid']},%", $lastpost_start, $lastpost_end); + $across_threads = DB::fetch_all($sql, $arg); + } + } + + $_G['forum']['threads'] += DB::result_first('select count(*) from %t where displayorder=0 and fid!=%d and across_fids like %s limit 1', array('forum_thread', $_G['fid'], "%,{$_G['fid']},%")); + + $todaytime = strtotime(dgmdate(TIMESTAMP, 'Ymd')); + foreach($across_threads as $key => $thread){ + $thread['across_fids'] = array_filter(explode(',', $thread['across_fids'])); + + if( in_array($thread['fid'], $pbforums['fids']) ){//帖子发布的原版块也在屏蔽板块中时也不显示 + $this->__pbthreads++; + continue; + } + + if( array_intersect($thread['across_fids'], $pbforums['fids']) ){//帖子的跨越版块也在屏蔽板块中时也不显示 + $this->__pbthreads++; + continue; + } + + $thread['allreplies'] = $thread['replies'] + $thread['comments']; + $thread['ordertype'] = getstatus($thread['status'], 4); + if($_G['forum']['picstyle'] && empty($_G['cookie']['forumdefstyle'])) { + $thread['coverpath'] = getthreadcover($thread['tid'], $thread['cover']); + $thread['cover'] = abs($thread['cover']); + } + //$thread['forumstick'] = in_array($thread['tid'], $forumstickytids); + $thread['related_group'] = 0; + $thread['lastposterenc'] = rawurlencode($thread['lastposter']); + if($thread['typeid'] && !empty($_G['forum']['threadtypes']['prefix']) && isset($_G['forum']['threadtypes']['types'][$thread['typeid']])) { + if($_G['forum']['threadtypes']['prefix'] == 1) { + $thread['typehtml'] = '['.$_G['forum']['threadtypes']['types'][$thread['typeid']].']'; + } elseif($_G['forum']['threadtypes']['icons'][$thread['typeid']] && $_G['forum']['threadtypes']['prefix'] == 2) { + $thread['typehtml'] = ''.''.strip_tags($_G['forum']['threadtypes']['types'][$thread['typeid']]).''; + } + $thread['typename'] = $_G['forum']['threadtypes']['types'][$thread['typeid']]; + } else { + $thread['typename'] = $thread['typehtml'] = ''; + } + + $thread['sorthtml'] = $thread['sortid'] && !empty($_G['forum']['threadsorts']['prefix']) && isset($_G['forum']['threadsorts']['types'][$thread['sortid']]) ? + '['.$_G['forum']['threadsorts']['types'][$thread['sortid']].']' : ''; + $thread['multipage'] = ''; + //$topicposts = $thread['special'] ? $thread['replies'] : $thread['replies'] + 1; + //$multipate_archive = $_GET['archiveid'] && in_array($_GET['archiveid'], $threadtableids) ? "archiveid={$_GET['archiveid']}" : ''; + // if($topicposts > $_G['ppp']) { + // $pagelinks = ''; + // $thread['pages'] = ceil($topicposts / $_G['ppp']); + // $realtid = $_G['forum']['status'] != 3 && $thread['isgroup'] == 1 ? $thread['closed'] : $thread['tid']; + // for($i = 2; $i <= 6 && $i <= $thread['pages']; $i++) { + // $pagelinks .= "$i"; + // } + // if($thread['pages'] > 6) { + // $pagelinks .= "..$thread[pages]"; + // } + // $thread['multipage'] = ' ...'.$pagelinks; + // } + + if($thread['highlight']) { + $string = sprintf('%02d', $thread['highlight']); + $stylestr = sprintf('%03b', $string[0]); + + $thread['highlight'] = ' style="'; + $thread['highlight'] .= $stylestr[0] ? 'font-weight: bold;' : ''; + $thread['highlight'] .= $stylestr[1] ? 'font-style: italic;' : ''; + $thread['highlight'] .= $stylestr[2] ? 'text-decoration: underline;' : ''; + $thread['highlight'] .= $string[1] ? 'color: '.$_G['forum_colorarray'][$string[1]].';' : ''; + if($thread['bgcolor']) { + $thread['highlight'] .= "background-color: {$thread['bgcolor']};"; + } + $thread['highlight'] .= '"'; + } else { + $thread['highlight'] = ''; + } + + $thread['recommendicon'] = ''; + if(!empty($_G['setting']['recommendthread']['status']) && $thread['recommends']) { + foreach($_G['setting']['recommendthread']['iconlevels'] as $k => $i) { + if($thread['recommends'] > $i) { + $thread['recommendicon'] = $k+1; + break; + } + } + } + + $thread['moved'] = $thread['heatlevel'] = $thread['new'] = 0; + if($_G['forum']['status'] != 3 && ($thread['closed'] || ($_G['forum']['autoclose'] && $thread['fid'] == $_G['fid'] && TIMESTAMP - $thread[$closedby] > $_G['forum']['autoclose']))) { + if($thread['isgroup'] == 1) { + $thread['folder'] = 'common'; + $grouptids[] = $thread['closed']; + } else { + if($thread['closed'] > 1) { + $thread['moved'] = $thread['tid']; + $thread['allreplies'] = $thread['replies'] = '-'; + $thread['views'] = '-'; + } + $thread['folder'] = 'lock'; + } + } elseif($_G['forum']['status'] == 3 && $thread['closed'] == 1) { + $thread['folder'] = 'lock'; + } else { + $thread['folder'] = 'common'; + $thread['weeknew'] = TIMESTAMP - 604800 <= $thread['dateline']; + if($thread['allreplies'] > $thread['views']) { + $thread['views'] = $thread['allreplies']; + } + if($_G['setting']['heatthread']['iconlevels']) { + foreach($_G['setting']['heatthread']['iconlevels'] as $k => $i) { + if($thread['heats'] > $i) { + $thread['heatlevel'] = $k + 1; + break; + } + } + } + } + $thread['icontid'] = $thread['forumstick'] || !$thread['moved'] && $thread['isgroup'] != 1 ? $thread['tid'] : $thread['closed']; + if(!$thread['forumstick'] && ($thread['isgroup'] == 1 || $thread['fid'] != $_G['fid'])) { + $thread['icontid'] = $thread['closed'] > 1 ? $thread['closed'] : $thread['tid']; + } + + $thread['istoday'] = $thread['dateline'] > $todaytime ? 1 : 0; + $thread['dbdateline'] = $thread['dateline']; + $thread['dateline'] = dgmdate($thread['dateline'], 'u', '9999', getglobal('setting/dateformat')); + $thread['dblastpost'] = $thread['lastpost']; + $thread['lastpost'] = dgmdate($thread['lastpost'], 'u'); + $thread['hidden'] = $_G['setting']['threadhidethreshold'] && $thread['hidden'] >= $_G['setting']['threadhidethreshold'] || in_array($thread['tid'], $thide); + $_G['forum_threadlist'][] = $thread; + + $_G['forum_threadcount'] ++; + } + + if( $across_threads ){ + array_multisort(array_column($_G['forum_threadlist'], 'dblastpost'), SORT_DESC, $_G['forum_threadlist']); + } + } + + public function __forumdisplay_bottom_showtip(){ + global $_G; + + $html = ''; + if( $this->__pbthreads > 0 ) { + + if( $_G['mobile'] ){ + $html = '
    某些帖子因您的隐私设置无法显示
    '; + }else{ + $html = '
    某些帖子因您的隐私设置无法显示
    '; + } + } + + return $html; + } +} + +class plugin_thread_across_forum extends plugin_thread_across { + public function forumdisplay_forumaction(){ + global $_G; + if( !$_G['cache']['plugin']['thread_across']['open'] || !$_G['uid'] ) return; + + $pbforums = C::t('#thread_across#across_pbforums')->fetch_by_uid( $_G['uid'] ); + + $html = '|'; + if( in_array($_G['fid'], $pbforums['fids']) ){ + $html.= '已屏蔽此版块'; + }else{ + $html.= ''; + $html.= '屏蔽此版块'; + } + + return $html; + } + + public function post_middle_output(){ + return $this->__thread_edit(); + } + + public function forumdisplay_top_output(){ + $this->__forumdisplay_lists(); + } + + public function forumdisplay_postbutton_bottom_output(){ + return $this->__forumdisplay_bottom_showtip(); + } + + public function forumdisplay_bottom_output(){ + } + + public function post_checkreply_message($param){ + $this->__thread_save($param); + } + + public function index_top_output(){ + global $forumlist; + foreach($forumlist as $fid => $forum){ + $forumlist[$fid]['threads'] += DB::result_first('select count(*) from %t where displayorder=0 and fid!=%d and across_fids like %s limit 1', array('forum_thread', $forum['fid'], "%,{$forum['fid']},%")); + } + } +} + +class mobileplugin_thread_across extends plugin_thread_across { + +} + +class mobileplugin_thread_across_home extends plugin_thread_across { + public function space_profile_nav_extra_mobile(){ + global $_G; + if( !$_G['cache']['plugin']['thread_across']['open'] || !$_G['uid'] ) return; + + //return '
  • 屏蔽版块
  • '; + return '
  • + + 广播 + 屏蔽版块 + 进入 + +
  • '; + } +} + +class mobileplugin_thread_across_forum extends plugin_thread_across { + public function forumdisplay_nav_mobile(){ + global $_G; + if( !$_G['cache']['plugin']['thread_across']['open'] || !$_G['uid'] ) return; + + $pbforums = C::t('#thread_across#across_pbforums')->fetch_by_uid( $_G['uid'] ); + + $html = ''; + if( in_array($_G['fid'], $pbforums['fids']) ){ + $html .= ''; + }else{ + + $html .= ''; + } + + return $html; + } + + public function post_middle_mobile_output(){ + return $this->__thread_edit(); + } + + public function forumdisplay_top_mobile_output(){ + $this->__forumdisplay_lists(); + } + + public function forumdisplay_bottom_mobile_output(){ + return $this->__forumdisplay_bottom_showtip(); + } + + public function post_checkreply_message($param){ + $this->__thread_save($param); + } + + public function index_top_mobile_output(){ + global $forumlist; + foreach($forumlist as $fid => $forum){ + $forumlist[$fid]['threads'] += DB::result_first('select count(*) from %t where displayorder=0 and fid!=%d and across_fids like %s limit 1', array('forum_thread', $forum['fid'], "%,{$forum['fid']},%")); + } + } + + +} +?> \ No newline at end of file diff --git a/source/plugin/thread_across/index.html b/source/plugin/thread_across/index.html new file mode 100755 index 0000000..e69de29 diff --git a/source/plugin/thread_across/install.php b/source/plugin/thread_across/install.php new file mode 100755 index 0000000..472ddf9 --- /dev/null +++ b/source/plugin/thread_across/install.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/source/plugin/thread_across/static/icon_pingbi.svg b/source/plugin/thread_across/static/icon_pingbi.svg new file mode 100755 index 0000000..d761224 --- /dev/null +++ b/source/plugin/thread_across/static/icon_pingbi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/source/plugin/thread_across/table/table_across_pbforums.php b/source/plugin/thread_across/table/table_across_pbforums.php new file mode 100755 index 0000000..e02caca --- /dev/null +++ b/source/plugin/thread_across/table/table_across_pbforums.php @@ -0,0 +1,37 @@ +_table = 'across_pbforums'; + $this->_pk = 'uid'; + + parent::__construct(); + } + + + public function fetch_by_uid ($uid = null ){ + if( empty($uid) ) return array(); + + $sql = 'select * from %t where %i limit 1'; + $arg = array( + $this->_table , + DB::field('uid', $uid) + ); + $data = DB::fetch_first($sql , $arg); + if($data['fids']){ + $data['fids'] = array_filter(explode(',', $data['fids'])); + } + + return $data; + } + + + +} + +?> \ No newline at end of file diff --git a/source/plugin/thread_across/template/admin_across.htm b/source/plugin/thread_across/template/admin_across.htm new file mode 100755 index 0000000..a60dcfe --- /dev/null +++ b/source/plugin/thread_across/template/admin_across.htm @@ -0,0 +1,61 @@ + + +
    +
    + + + + + + + + + + + + + + + + + + + + +
    主题发帖者原版块跨越fids发布时间
    + + $thread['subject'] + + + + {$thread['author']} + + + + {$_G['cache']['forums'][$thread['fid']]['name']} + + + {eval $across_fids = array_filter(explode(',', $thread['across_fids']));} + + + {$_G['cache']['forums'][$across_fid]['name']} + + + + {eval echo dgmdate($thread['dateline'])} + + +
    + + + +{$multipage} + + diff --git a/source/plugin/thread_across/template/block_thread_edit.htm b/source/plugin/thread_across/template/block_thread_edit.htm new file mode 100755 index 0000000..452bd96 --- /dev/null +++ b/source/plugin/thread_across/template/block_thread_edit.htm @@ -0,0 +1,17 @@ + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + \ No newline at end of file diff --git a/source/plugin/thread_across/template/touch/block_thread_edit.htm b/source/plugin/thread_across/template/touch/block_thread_edit.htm new file mode 100755 index 0000000..9957ccb --- /dev/null +++ b/source/plugin/thread_across/template/touch/block_thread_edit.htm @@ -0,0 +1,10 @@ + +
    +

    选择其它跨越版块:

    +
    + +
    +
    + \ No newline at end of file diff --git a/source/plugin/thread_across/template/touch/userpb.htm b/source/plugin/thread_across/template/touch/userpb.htm new file mode 100755 index 0000000..498520a --- /dev/null +++ b/source/plugin/thread_across/template/touch/userpb.htm @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/source/plugin/thread_across/template/userpb.htm b/source/plugin/thread_across/template/userpb.htm new file mode 100755 index 0000000..89cf6d2 --- /dev/null +++ b/source/plugin/thread_across/template/userpb.htm @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + +
    屏蔽版块操作
    + + + + + + + {$forum['name']} + (Fid:{$forum['fid']}) + + + + 删除 + +
    + + \ No newline at end of file diff --git a/source/plugin/thread_across/userpb.inc.php b/source/plugin/thread_across/userpb.inc.php new file mode 100755 index 0000000..f43bff1 --- /dev/null +++ b/source/plugin/thread_across/userpb.inc.php @@ -0,0 +1,12 @@ +fetch_by_uid( $_G['uid'] ); + +$forums = DB::fetch_all('select f.fid,name,icon from %t as f join %t as ff on f.fid=ff.fid where f.fid in(%n)', array('forum_forum', 'forum_forumfield', $pbforums['fids']), 'fid'); + +?> \ No newline at end of file diff --git a/source/plugin/witframe_api/api.inc.php b/source/plugin/witframe_api/api.inc.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/class/remote.class.php b/source/plugin/witframe_api/class/remote.class.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/core.php b/source/plugin/witframe_api/core.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/discuz_plugin_witframe_api.xml b/source/plugin/witframe_api/discuz_plugin_witframe_api.xml old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/install.php b/source/plugin/witframe_api/install.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/lib/api.php b/source/plugin/witframe_api/lib/api.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/lib/apis.php b/source/plugin/witframe_api/lib/apis.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/lib/crypt.php b/source/plugin/witframe_api/lib/crypt.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/lib/remote.php b/source/plugin/witframe_api/lib/remote.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/lib/site.php b/source/plugin/witframe_api/lib/site.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/location.inc.php b/source/plugin/witframe_api/location.inc.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/page.remote.php b/source/plugin/witframe_api/page.remote.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/remote.class.php b/source/plugin/witframe_api/remote.class.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/setting.inc.php b/source/plugin/witframe_api/setting.inc.php old mode 100644 new mode 100755 diff --git a/source/plugin/witframe_api/test.inc.php b/source/plugin/witframe_api/test.inc.php old mode 100644 new mode 100755 diff --git a/static/avatar/arrow_down_big.gif b/static/avatar/arrow_down_big.gif old mode 100644 new mode 100755 diff --git a/static/avatar/avatar.css b/static/avatar/avatar.css old mode 100644 new mode 100755 diff --git a/static/avatar/avatar.js b/static/avatar/avatar.js old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_back.gif b/static/avatar/avatar_back.gif old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_blank.gif b/static/avatar/avatar_blank.gif old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_finishback.png b/static/avatar/avatar_finishback.png old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_finishbutton.gif b/static/avatar/avatar_finishbutton.gif old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_lattice.png b/static/avatar/avatar_lattice.png old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_mobile.js b/static/avatar/avatar_mobile.js old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_save.gif b/static/avatar/avatar_save.gif old mode 100644 new mode 100755 diff --git a/static/avatar/avatar_upload.gif b/static/avatar/avatar_upload.gif old mode 100644 new mode 100755 diff --git a/static/avatar/hammer.min.js b/static/avatar/hammer.min.js old mode 100644 new mode 100755 diff --git a/static/avatar/index.htm b/static/avatar/index.htm old mode 100644 new mode 100755 diff --git a/static/avatar/iscroll-zoom.min.js b/static/avatar/iscroll-zoom.min.js old mode 100644 new mode 100755 diff --git a/static/avatar/jquery-ui.min.js b/static/avatar/jquery-ui.min.js old mode 100644 new mode 100755 diff --git a/static/avatar/jquery.photoClip.min.js b/static/avatar/jquery.photoClip.min.js old mode 100644 new mode 100755 diff --git a/static/avatar/lrz.all.bundle.js b/static/avatar/lrz.all.bundle.js old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_flat_0_aaaaaa_40x100.png b/static/avatar/ui-bg_flat_0_aaaaaa_40x100.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_flat_75_ffffff_40x100.png b/static/avatar/ui-bg_flat_75_ffffff_40x100.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_glass_55_fbf9ee_1x400.png b/static/avatar/ui-bg_glass_55_fbf9ee_1x400.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_glass_65_ffffff_1x400.png b/static/avatar/ui-bg_glass_65_ffffff_1x400.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_glass_75_dadada_1x400.png b/static/avatar/ui-bg_glass_75_dadada_1x400.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_glass_75_e6e6e6_1x400.png b/static/avatar/ui-bg_glass_75_e6e6e6_1x400.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_glass_95_fef1ec_1x400.png b/static/avatar/ui-bg_glass_95_fef1ec_1x400.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-bg_highlight-soft_75_cccccc_1x100.png b/static/avatar/ui-bg_highlight-soft_75_cccccc_1x100.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-icons_222222_256x240.png b/static/avatar/ui-icons_222222_256x240.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-icons_2e83ff_256x240.png b/static/avatar/ui-icons_2e83ff_256x240.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-icons_454545_256x240.png b/static/avatar/ui-icons_454545_256x240.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-icons_888888_256x240.png b/static/avatar/ui-icons_888888_256x240.png old mode 100644 new mode 100755 diff --git a/static/avatar/ui-icons_cd0a0a_256x240.png b/static/avatar/ui-icons_cd0a0a_256x240.png old mode 100644 new mode 100755 diff --git a/static/image/admincp/add.gif b/static/image/admincp/add.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/admincp.css b/static/image/admincp/admincp.css old mode 100644 new mode 100755 diff --git a/static/image/admincp/admincpframe.css b/static/image/admincp/admincpframe.css old mode 100644 new mode 100755 diff --git a/static/image/admincp/admincplogin.css b/static/image/admincp/admincplogin.css old mode 100644 new mode 100755 diff --git a/static/image/admincp/admincppage.css b/static/image/admincp/admincppage.css old mode 100644 new mode 100755 diff --git a/static/image/admincp/ajax_loader.gif b/static/image/admincp/ajax_loader.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/article.gif b/static/image/admincp/article.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/articlelist.gif b/static/image/admincp/articlelist.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_button.gif b/static/image/admincp/bg_button.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_custom.gif b/static/image/admincp/bg_custom.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_custom_t.gif b/static/image/admincp/bg_custom_t.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_header.gif b/static/image/admincp/bg_header.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_input.gif b/static/image/admincp/bg_input.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_list.gif b/static/image/admincp/bg_list.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_login.gif b/static/image/admincp/bg_login.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_menu.gif b/static/image/admincp/bg_menu.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_menu2.gif b/static/image/admincp/bg_menu2.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_progressbar.png b/static/image/admincp/bg_progressbar.png old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repno.gif b/static/image/admincp/bg_repno.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repx.gif b/static/image/admincp/bg_repx.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repx_h.gif b/static/image/admincp/bg_repx_h.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repx_hb.gif b/static/image/admincp/bg_repx_hb.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repx_hc.gif b/static/image/admincp/bg_repx_hc.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/bg_repx_hd.gif b/static/image/admincp/bg_repx_hd.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/blog.gif b/static/image/admincp/blog.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_add2menu.gif b/static/image/admincp/btn_add2menu.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_big.png b/static/image/admincp/btn_big.png old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_block.gif b/static/image/admincp/btn_block.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_block_2.gif b/static/image/admincp/btn_block_2.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_block_3.gif b/static/image/admincp/btn_block_3.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/btn_map.gif b/static/image/admincp/btn_map.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/close.gif b/static/image/admincp/close.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/cls.gif b/static/image/admincp/cls.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/color.jpg b/static/image/admincp/color.jpg old mode 100644 new mode 100755 diff --git a/static/image/admincp/cornerbanner.gif b/static/image/admincp/cornerbanner.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/couplebanner.gif b/static/image/admincp/couplebanner.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/custom.gif b/static/image/admincp/custom.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/desc.gif b/static/image/admincp/desc.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/discuz_qr.jpg b/static/image/admincp/discuz_qr.jpg old mode 100644 new mode 100755 diff --git a/static/image/admincp/faq.gif b/static/image/admincp/faq.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/feed.gif b/static/image/admincp/feed.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/float.gif b/static/image/admincp/float.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/footerbanner.gif b/static/image/admincp/footerbanner.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/getcolor.htm b/static/image/admincp/getcolor.htm old mode 100644 new mode 100755 diff --git a/static/image/admincp/headerbanner.gif b/static/image/admincp/headerbanner.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/index.htm b/static/image/admincp/index.htm old mode 100644 new mode 100755 diff --git a/static/image/admincp/intercat.gif b/static/image/admincp/intercat.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/interthread.gif b/static/image/admincp/interthread.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/login_header.gif b/static/image/admincp/login_header.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/login_title.gif b/static/image/admincp/login_title.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/loginbg.svg b/static/image/admincp/loginbg.svg old mode 100644 new mode 100755 diff --git a/static/image/admincp/logo.gif b/static/image/admincp/logo.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/logo.svg b/static/image/admincp/logo.svg old mode 100644 new mode 100755 diff --git a/static/image/admincp/logo_hover.gif b/static/image/admincp/logo_hover.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/minireset.css b/static/image/admincp/minireset.css old mode 100644 new mode 100755 diff --git a/static/image/admincp/newwin.gif b/static/image/admincp/newwin.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/plugin_logo.png b/static/image/admincp/plugin_logo.png old mode 100644 new mode 100755 diff --git a/static/image/admincp/pm_ntc.gif b/static/image/admincp/pm_ntc.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/process.gif b/static/image/admincp/process.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/processbg.gif b/static/image/admincp/processbg.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/scrolld.gif b/static/image/admincp/scrolld.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/scrollu.gif b/static/image/admincp/scrollu.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/search.gif b/static/image/admincp/search.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/stylepreview.gif b/static/image/admincp/stylepreview.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/subnavbanner.gif b/static/image/admincp/subnavbanner.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/text.gif b/static/image/admincp/text.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/thread.gif b/static/image/admincp/thread.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/threadlist.gif b/static/image/admincp/threadlist.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/transcolor.gif b/static/image/admincp/transcolor.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/transparent.gif b/static/image/admincp/transparent.gif old mode 100644 new mode 100755 diff --git a/static/image/admincp/watermarkpreview.jpg b/static/image/admincp/watermarkpreview.jpg old mode 100644 new mode 100755 diff --git a/static/image/click/gaoxiao.gif b/static/image/click/gaoxiao.gif old mode 100644 new mode 100755 diff --git a/static/image/click/index.htm b/static/image/click/index.htm old mode 100644 new mode 100755 diff --git a/static/image/click/jidan.gif b/static/image/click/jidan.gif old mode 100644 new mode 100755 diff --git a/static/image/click/kubi.gif b/static/image/click/kubi.gif old mode 100644 new mode 100755 diff --git a/static/image/click/leiren.gif b/static/image/click/leiren.gif old mode 100644 new mode 100755 diff --git a/static/image/click/luguo.gif b/static/image/click/luguo.gif old mode 100644 new mode 100755 diff --git a/static/image/click/mihuo.gif b/static/image/click/mihuo.gif old mode 100644 new mode 100755 diff --git a/static/image/click/piaoliang.gif b/static/image/click/piaoliang.gif old mode 100644 new mode 100755 diff --git a/static/image/click/woshou.gif b/static/image/click/woshou.gif old mode 100644 new mode 100755 diff --git a/static/image/click/xianhua.gif b/static/image/click/xianhua.gif old mode 100644 new mode 100755 diff --git a/static/image/common/Google_small.png b/static/image/common/Google_small.png old mode 100644 new mode 100755 diff --git a/static/image/common/access_allow.gif b/static/image/common/access_allow.gif old mode 100644 new mode 100755 diff --git a/static/image/common/access_disallow.gif b/static/image/common/access_disallow.gif old mode 100644 new mode 100755 diff --git a/static/image/common/access_normal.gif b/static/image/common/access_normal.gif old mode 100644 new mode 100755 diff --git a/static/image/common/activitysmall.gif b/static/image/common/activitysmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/ad.gif b/static/image/common/ad.gif old mode 100644 new mode 100755 diff --git a/static/image/common/ad_close.gif b/static/image/common/ad_close.gif old mode 100644 new mode 100755 diff --git a/static/image/common/addbuddy.gif b/static/image/common/addbuddy.gif old mode 100644 new mode 100755 diff --git a/static/image/common/addicn.gif b/static/image/common/addicn.gif old mode 100644 new mode 100755 diff --git a/static/image/common/agree.gif b/static/image/common/agree.gif old mode 100644 new mode 100755 diff --git a/static/image/common/alipay_logo.svg b/static/image/common/alipay_logo.svg old mode 100644 new mode 100755 diff --git a/static/image/common/andriod.png b/static/image/common/andriod.png old mode 100644 new mode 100755 diff --git a/static/image/common/ann_icon.gif b/static/image/common/ann_icon.gif old mode 100644 new mode 100755 diff --git a/static/image/common/annpm.png b/static/image/common/annpm.png old mode 100644 new mode 100755 diff --git a/static/image/common/app.png b/static/image/common/app.png old mode 100644 new mode 100755 diff --git a/static/image/common/app_add.gif b/static/image/common/app_add.gif old mode 100644 new mode 100755 diff --git a/static/image/common/app_set.gif b/static/image/common/app_set.gif old mode 100644 new mode 100755 diff --git a/static/image/common/apphot.png b/static/image/common/apphot.png old mode 100644 new mode 100755 diff --git a/static/image/common/appnew.png b/static/image/common/appnew.png old mode 100644 new mode 100755 diff --git a/static/image/common/appsetting.gif b/static/image/common/appsetting.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arr_w.gif b/static/image/common/arr_w.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow.gif b/static/image/common/arrow.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_down.gif b/static/image/common/arrow_down.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_down_big.gif b/static/image/common/arrow_down_big.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_left.gif b/static/image/common/arrow_left.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_right.gif b/static/image/common/arrow_right.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_right_big.gif b/static/image/common/arrow_right_big.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_top.gif b/static/image/common/arrow_top.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_up.png b/static/image/common/arrow_up.png old mode 100644 new mode 100755 diff --git a/static/image/common/arrow_up_hover.png b/static/image/common/arrow_up_hover.png old mode 100644 new mode 100755 diff --git a/static/image/common/arrwd.gif b/static/image/common/arrwd.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arw.gif b/static/image/common/arw.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arw_d.gif b/static/image/common/arw_d.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arw_d2.gif b/static/image/common/arw_d2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arw_l.gif b/static/image/common/arw_l.gif old mode 100644 new mode 100755 diff --git a/static/image/common/arw_r.gif b/static/image/common/arw_r.gif old mode 100644 new mode 100755 diff --git a/static/image/common/atarget.png b/static/image/common/atarget.png old mode 100644 new mode 100755 diff --git a/static/image/common/attach_nopermission.png b/static/image/common/attach_nopermission.png old mode 100644 new mode 100755 diff --git a/static/image/common/attach_nopermission.svg b/static/image/common/attach_nopermission.svg old mode 100644 new mode 100755 diff --git a/static/image/common/attach_nopermission_bg.png b/static/image/common/attach_nopermission_bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/attach_nopermission_bg.svg b/static/image/common/attach_nopermission_bg.svg old mode 100644 new mode 100755 diff --git a/static/image/common/attachimg.gif b/static/image/common/attachimg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attachimg_2.png b/static/image/common/attachimg_2.png old mode 100644 new mode 100755 diff --git a/static/image/common/attachinfobg.gif b/static/image/common/attachinfobg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attachmediacode.gif b/static/image/common/attachmediacode.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attachurl.gif b/static/image/common/attachurl.gif old mode 100644 new mode 100755 diff --git a/static/image/common/atten.gif b/static/image/common/atten.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attention.gif b/static/image/common/attention.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attinbg.gif b/static/image/common/attinbg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/attl_icon.png b/static/image/common/attl_icon.png old mode 100644 new mode 100755 diff --git a/static/image/common/avatar_blank.gif b/static/image/common/avatar_blank.gif old mode 100644 new mode 100755 diff --git a/static/image/common/back.gif b/static/image/common/back.gif old mode 100644 new mode 100755 diff --git a/static/image/common/background.png b/static/image/common/background.png old mode 100644 new mode 100755 diff --git a/static/image/common/bb_fly.gif b/static/image/common/bb_fly.gif old mode 100644 new mode 100755 diff --git a/static/image/common/bb_qq.gif b/static/image/common/bb_qq.gif old mode 100644 new mode 100755 diff --git a/static/image/common/bb_sub.gif b/static/image/common/bb_sub.gif old mode 100644 new mode 100755 diff --git a/static/image/common/bb_sup.gif b/static/image/common/bb_sup.gif old mode 100644 new mode 100755 diff --git a/static/image/common/bbs.ico b/static/image/common/bbs.ico old mode 100644 new mode 100755 diff --git a/static/image/common/bg.jpg b/static/image/common/bg.jpg new file mode 100755 index 0000000..0832af1 Binary files /dev/null and b/static/image/common/bg.jpg differ diff --git a/static/image/common/bg.png b/static/image/common/bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/bg_doing.png b/static/image/common/bg_doing.png old mode 100644 new mode 100755 diff --git a/static/image/common/bg_doing_ico.jpg b/static/image/common/bg_doing_ico.jpg old mode 100644 new mode 100755 diff --git a/static/image/common/bg_home.png b/static/image/common/bg_home.png old mode 100644 new mode 100755 diff --git a/static/image/common/bg_share.png b/static/image/common/bg_share.png old mode 100644 new mode 100755 diff --git a/static/image/common/bg_usergroup.png b/static/image/common/bg_usergroup.png old mode 100644 new mode 100755 diff --git a/static/image/common/bg_waterfall.png b/static/image/common/bg_waterfall.png old mode 100644 new mode 100755 diff --git a/static/image/common/bigimg.png b/static/image/common/bigimg.png old mode 100644 new mode 100755 diff --git a/static/image/common/bodybg.gif b/static/image/common/bodybg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/btnS.png b/static/image/common/btnS.png old mode 100644 new mode 100755 diff --git a/static/image/common/cancelbutton.gif b/static/image/common/cancelbutton.gif old mode 100644 new mode 100755 diff --git a/static/image/common/card.png b/static/image/common/card.png old mode 100644 new mode 100755 diff --git a/static/image/common/card_btn.png b/static/image/common/card_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/category_lbg.png b/static/image/common/category_lbg.png old mode 100644 new mode 100755 diff --git a/static/image/common/chart.png b/static/image/common/chart.png old mode 100644 new mode 100755 diff --git a/static/image/common/check_error.gif b/static/image/common/check_error.gif old mode 100644 new mode 100755 diff --git a/static/image/common/check_right.gif b/static/image/common/check_right.gif old mode 100644 new mode 100755 diff --git a/static/image/common/clck.gif b/static/image/common/clck.gif old mode 100644 new mode 100755 diff --git a/static/image/common/clock.gif b/static/image/common/clock.gif old mode 100644 new mode 100755 diff --git a/static/image/common/close-s.png b/static/image/common/close-s.png old mode 100644 new mode 100755 diff --git a/static/image/common/close.gif b/static/image/common/close.gif old mode 100644 new mode 100755 diff --git a/static/image/common/closed.png b/static/image/common/closed.png old mode 100644 new mode 100755 diff --git a/static/image/common/cls.gif b/static/image/common/cls.gif old mode 100644 new mode 100755 diff --git a/static/image/common/cmmnt.gif b/static/image/common/cmmnt.gif old mode 100644 new mode 100755 diff --git a/static/image/common/cmt_ico.png b/static/image/common/cmt_ico.png old mode 100644 new mode 100755 diff --git a/static/image/common/code_bg.png b/static/image/common/code_bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/codebg.gif b/static/image/common/codebg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/collapsed_no.gif b/static/image/common/collapsed_no.gif old mode 100644 new mode 100755 diff --git a/static/image/common/collapsed_yes.gif b/static/image/common/collapsed_yes.gif old mode 100644 new mode 100755 diff --git a/static/image/common/collection.png b/static/image/common/collection.png old mode 100644 new mode 100755 diff --git a/static/image/common/connect_avatar.png b/static/image/common/connect_avatar.png old mode 100644 new mode 100755 diff --git a/static/image/common/connect_config_mark.png b/static/image/common/connect_config_mark.png old mode 100644 new mode 100755 diff --git a/static/image/common/connect_post_syn.png b/static/image/common/connect_post_syn.png old mode 100644 new mode 100755 diff --git a/static/image/common/connect_qq.gif b/static/image/common/connect_qq.gif old mode 100644 new mode 100755 diff --git a/static/image/common/control_l.png b/static/image/common/control_l.png old mode 100644 new mode 100755 diff --git a/static/image/common/control_r.png b/static/image/common/control_r.png old mode 100644 new mode 100755 diff --git a/static/image/common/copy.png b/static/image/common/copy.png old mode 100644 new mode 100755 diff --git a/static/image/common/create_group.png b/static/image/common/create_group.png old mode 100644 new mode 100755 diff --git a/static/image/common/dash.gif b/static/image/common/dash.gif old mode 100644 new mode 100755 diff --git a/static/image/common/data_invalid.gif b/static/image/common/data_invalid.gif old mode 100644 new mode 100755 diff --git a/static/image/common/data_valid.gif b/static/image/common/data_valid.gif old mode 100644 new mode 100755 diff --git a/static/image/common/date_magnify.png b/static/image/common/date_magnify.png old mode 100644 new mode 100755 diff --git a/static/image/common/debate_bg.gif b/static/image/common/debate_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/debate_chart.gif b/static/image/common/debate_chart.gif old mode 100644 new mode 100755 diff --git a/static/image/common/debate_dr.jpg b/static/image/common/debate_dr.jpg old mode 100644 new mode 100755 diff --git a/static/image/common/debate_vs.gif b/static/image/common/debate_vs.gif old mode 100644 new mode 100755 diff --git a/static/image/common/debatesmall.gif b/static/image/common/debatesmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/digest_1.gif b/static/image/common/digest_1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/digest_2.gif b/static/image/common/digest_2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/digest_3.gif b/static/image/common/digest_3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/disagree.gif b/static/image/common/disagree.gif old mode 100644 new mode 100755 diff --git a/static/image/common/dot.gif b/static/image/common/dot.gif old mode 100644 new mode 100755 diff --git a/static/image/common/dot_c.gif b/static/image/common/dot_c.gif old mode 100644 new mode 100755 diff --git a/static/image/common/drag.gif b/static/image/common/drag.gif old mode 100644 new mode 100755 diff --git a/static/image/common/dzicon.eot b/static/image/common/dzicon.eot old mode 100644 new mode 100755 diff --git a/static/image/common/dzicon.woff b/static/image/common/dzicon.woff old mode 100644 new mode 100755 diff --git a/static/image/common/dzicon.woff2 b/static/image/common/dzicon.woff2 old mode 100644 new mode 100755 diff --git a/static/image/common/edit.gif b/static/image/common/edit.gif old mode 100644 new mode 100755 diff --git a/static/image/common/emp.gif b/static/image/common/emp.gif old mode 100644 new mode 100755 diff --git a/static/image/common/error.gif b/static/image/common/error.gif old mode 100644 new mode 100755 diff --git a/static/image/common/extstyle_none.css b/static/image/common/extstyle_none.css old mode 100644 new mode 100755 diff --git a/static/image/common/facelist.gif b/static/image/common/facelist.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fach.gif b/static/image/common/fach.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fall.png b/static/image/common/fall.png old mode 100644 new mode 100755 diff --git a/static/image/common/faq.gif b/static/image/common/faq.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fastreply.gif b/static/image/common/fastreply.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fav.gif b/static/image/common/fav.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fav_grey.gif b/static/image/common/fav_grey.gif old mode 100644 new mode 100755 diff --git a/static/image/common/feed.gif b/static/image/common/feed.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fj_btn.png b/static/image/common/fj_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/fl_collapsed_no.gif b/static/image/common/fl_collapsed_no.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fl_collapsed_yes.gif b/static/image/common/fl_collapsed_yes.gif old mode 100644 new mode 100755 diff --git a/static/image/common/fl_ft.png b/static/image/common/fl_ft.png old mode 100644 new mode 100755 diff --git a/static/image/common/fl_ft_r.png b/static/image/common/fl_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/common/fl_hd.png b/static/image/common/fl_hd.png old mode 100644 new mode 100755 diff --git a/static/image/common/flag.gif b/static/image/common/flag.gif old mode 100644 new mode 100755 diff --git a/static/image/common/flash.gif b/static/image/common/flash.gif old mode 100644 new mode 100755 diff --git a/static/image/common/flw_allfeed.png b/static/image/common/flw_allfeed.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_attach_bg.png b/static/image/common/flw_attach_bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_btn.png b/static/image/common/flw_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_btn_s.png b/static/image/common/flw_btn_s.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_btn_specialfo.png b/static/image/common/flw_btn_specialfo.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_btn_unfo.png b/static/image/common/flw_btn_unfo.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_btn_unfo_s.png b/static/image/common/flw_btn_unfo_s.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_cnr_l.png b/static/image/common/flw_cnr_l.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_cnr_t.png b/static/image/common/flw_cnr_t.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_feed.png b/static/image/common/flw_feed.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_following.png b/static/image/common/flw_following.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_guide.png b/static/image/common/flw_guide.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_ico.png b/static/image/common/flw_ico.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_post.jpg b/static/image/common/flw_post.jpg old mode 100644 new mode 100755 diff --git a/static/image/common/flw_post.png b/static/image/common/flw_post.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_post_attach.png b/static/image/common/flw_post_attach.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_post_w.jpg b/static/image/common/flw_post_w.jpg old mode 100644 new mode 100755 diff --git a/static/image/common/flw_side_tab.png b/static/image/common/flw_side_tab.png old mode 100644 new mode 100755 diff --git a/static/image/common/flw_statusico.png b/static/image/common/flw_statusico.png old mode 100644 new mode 100755 diff --git a/static/image/common/folder_common.gif b/static/image/common/folder_common.gif old mode 100644 new mode 100755 diff --git a/static/image/common/folder_lock.gif b/static/image/common/folder_lock.gif old mode 100644 new mode 100755 diff --git a/static/image/common/folder_new.gif b/static/image/common/folder_new.gif old mode 100644 new mode 100755 diff --git a/static/image/common/folder_s.gif b/static/image/common/folder_s.gif old mode 100644 new mode 100755 diff --git a/static/image/common/forum.gif b/static/image/common/forum.gif old mode 100644 new mode 100755 diff --git a/static/image/common/forum_new.gif b/static/image/common/forum_new.gif old mode 100644 new mode 100755 diff --git a/static/image/common/forumlink.gif b/static/image/common/forumlink.gif old mode 100644 new mode 100755 diff --git a/static/image/common/g_guide.png b/static/image/common/g_guide.png old mode 100644 new mode 100755 diff --git a/static/image/common/g_guide.svg b/static/image/common/g_guide.svg old mode 100644 new mode 100755 diff --git a/static/image/common/gb.gif b/static/image/common/gb.gif old mode 100644 new mode 100755 diff --git a/static/image/common/gentlemanbg.png b/static/image/common/gentlemanbg.png old mode 100644 new mode 100755 diff --git a/static/image/common/grid.png b/static/image/common/grid.png old mode 100644 new mode 100755 diff --git a/static/image/common/group.ico b/static/image/common/group.ico old mode 100644 new mode 100755 diff --git a/static/image/common/groupicon.gif b/static/image/common/groupicon.gif old mode 100644 new mode 100755 diff --git a/static/image/common/grouppm.png b/static/image/common/grouppm.png old mode 100644 new mode 100755 diff --git a/static/image/common/gst.gif b/static/image/common/gst.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hd_shadow.png b/static/image/common/hd_shadow.png old mode 100644 new mode 100755 diff --git a/static/image/common/home.gif b/static/image/common/home.gif old mode 100644 new mode 100755 diff --git a/static/image/common/home.ico b/static/image/common/home.ico old mode 100644 new mode 100755 diff --git a/static/image/common/homelink.gif b/static/image/common/homelink.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hot.png b/static/image/common/hot.png old mode 100644 new mode 100755 diff --git a/static/image/common/hot_1.gif b/static/image/common/hot_1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hot_2.gif b/static/image/common/hot_2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hot_3.gif b/static/image/common/hot_3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hotspot.gif b/static/image/common/hotspot.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hs_cs.gif b/static/image/common/hs_cs.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hs_cz.gif b/static/image/common/hs_cz.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hs_qg.gif b/static/image/common/hs_qg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/hs_qz.gif b/static/image/common/hs_qz.gif old mode 100644 new mode 100755 diff --git a/static/image/common/ico_jdt.png b/static/image/common/ico_jdt.png old mode 100644 new mode 100755 diff --git a/static/image/common/ico_lz.png b/static/image/common/ico_lz.png old mode 100644 new mode 100755 diff --git a/static/image/common/ico_mps.png b/static/image/common/ico_mps.png old mode 100644 new mode 100755 diff --git a/static/image/common/ico_mulu.png b/static/image/common/ico_mulu.png old mode 100644 new mode 100755 diff --git a/static/image/common/ico_notice.png b/static/image/common/ico_notice.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_ad.gif b/static/image/common/icon_ad.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_append.png b/static/image/common/icon_append.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_collection.png b/static/image/common/icon_collection.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_down.gif b/static/image/common/icon_down.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_fav.png b/static/image/common/icon_fav.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_feed.png b/static/image/common/icon_feed.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_manage.gif b/static/image/common/icon_manage.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_preview.png b/static/image/common/icon_preview.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_quote_e.gif b/static/image/common/icon_quote_e.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_quote_m_e.gif b/static/image/common/icon_quote_m_e.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_quote_m_s.gif b/static/image/common/icon_quote_m_s.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_quote_s.gif b/static/image/common/icon_quote_s.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_search.png b/static/image/common/icon_search.png old mode 100644 new mode 100755 diff --git a/static/image/common/icon_task.gif b/static/image/common/icon_task.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icon_top.gif b/static/image/common/icon_top.gif old mode 100644 new mode 100755 diff --git a/static/image/common/icq.gif b/static/image/common/icq.gif old mode 100644 new mode 100755 diff --git a/static/image/common/imagelist_nav.png b/static/image/common/imagelist_nav.png old mode 100644 new mode 100755 diff --git a/static/image/common/imageloading.gif b/static/image/common/imageloading.gif old mode 100644 new mode 100755 diff --git a/static/image/common/img_loader.gif b/static/image/common/img_loader.gif old mode 100644 new mode 100755 diff --git a/static/image/common/img_nopermission.png b/static/image/common/img_nopermission.png old mode 100644 new mode 100755 diff --git a/static/image/common/imgzoom_tb.gif b/static/image/common/imgzoom_tb.gif old mode 100644 new mode 100755 diff --git a/static/image/common/increase.png b/static/image/common/increase.png old mode 100644 new mode 100755 diff --git a/static/image/common/index.htm b/static/image/common/index.htm old mode 100644 new mode 100755 diff --git a/static/image/common/info.gif b/static/image/common/info.gif old mode 100644 new mode 100755 diff --git a/static/image/common/info_small.gif b/static/image/common/info_small.gif old mode 100644 new mode 100755 diff --git a/static/image/common/input_shadow.png b/static/image/common/input_shadow.png old mode 100644 new mode 100755 diff --git a/static/image/common/ios.png b/static/image/common/ios.png old mode 100644 new mode 100755 diff --git a/static/image/common/ladybg.png b/static/image/common/ladybg.png old mode 100644 new mode 100755 diff --git a/static/image/common/legend_reward.gif b/static/image/common/legend_reward.gif old mode 100644 new mode 100755 diff --git a/static/image/common/livethreadtitle.png b/static/image/common/livethreadtitle.png old mode 100644 new mode 100755 diff --git a/static/image/common/loading.gif b/static/image/common/loading.gif old mode 100644 new mode 100755 diff --git a/static/image/common/locked.gif b/static/image/common/locked.gif old mode 100644 new mode 100755 diff --git a/static/image/common/logo.png b/static/image/common/logo.png old mode 100644 new mode 100755 diff --git a/static/image/common/logo.svg b/static/image/common/logo.svg old mode 100644 new mode 100755 diff --git a/static/image/common/logo_88_31.gif b/static/image/common/logo_88_31.gif old mode 100644 new mode 100755 diff --git a/static/image/common/logo_m.svg b/static/image/common/logo_m.svg old mode 100644 new mode 100755 diff --git a/static/image/common/logo_sc.png b/static/image/common/logo_sc.png old mode 100644 new mode 100755 diff --git a/static/image/common/logo_sc.svg b/static/image/common/logo_sc.svg old mode 100644 new mode 100755 diff --git a/static/image/common/logo_sc_s.png b/static/image/common/logo_sc_s.png old mode 100644 new mode 100755 diff --git a/static/image/common/logom.png b/static/image/common/logom.png old mode 100644 new mode 100755 diff --git a/static/image/common/magic_imgbg.gif b/static/image/common/magic_imgbg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/mail_active.png b/static/image/common/mail_active.png old mode 100644 new mode 100755 diff --git a/static/image/common/mail_inactive.png b/static/image/common/mail_inactive.png old mode 100644 new mode 100755 diff --git a/static/image/common/mark.png b/static/image/common/mark.png old mode 100644 new mode 100755 diff --git a/static/image/common/mdly.png b/static/image/common/mdly.png old mode 100644 new mode 100755 diff --git a/static/image/common/medal1.gif b/static/image/common/medal1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal10.gif b/static/image/common/medal10.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal2.gif b/static/image/common/medal2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal3.gif b/static/image/common/medal3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal4.gif b/static/image/common/medal4.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal5.gif b/static/image/common/medal5.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal6.gif b/static/image/common/medal6.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal7.gif b/static/image/common/medal7.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal8.gif b/static/image/common/medal8.gif old mode 100644 new mode 100755 diff --git a/static/image/common/medal9.gif b/static/image/common/medal9.gif old mode 100644 new mode 100755 diff --git a/static/image/common/midavt_shadow.gif b/static/image/common/midavt_shadow.gif old mode 100644 new mode 100755 diff --git a/static/image/common/mifm.png b/static/image/common/mifm.png old mode 100644 new mode 100755 diff --git a/static/image/common/mine_icn.png b/static/image/common/mine_icn.png old mode 100644 new mode 100755 diff --git a/static/image/common/minus.gif b/static/image/common/minus.gif old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-attach-1.png b/static/image/common/mobile-attach-1.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-attach-2.png b/static/image/common/mobile-attach-2.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-attach-3.png b/static/image/common/mobile-attach-3.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-attach-4.png b/static/image/common/mobile-attach-4.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-type-ie6.png b/static/image/common/mobile-type-ie6.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile-type.png b/static/image/common/mobile-type.png old mode 100644 new mode 100755 diff --git a/static/image/common/mobile.png b/static/image/common/mobile.png old mode 100644 new mode 100755 diff --git a/static/image/common/mood_input.png b/static/image/common/mood_input.png old mode 100644 new mode 100755 diff --git a/static/image/common/mood_input_btn.png b/static/image/common/mood_input_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/more1.png b/static/image/common/more1.png old mode 100644 new mode 100755 diff --git a/static/image/common/msnadd.gif b/static/image/common/msnadd.gif old mode 100644 new mode 100755 diff --git a/static/image/common/msnchat.gif b/static/image/common/msnchat.gif old mode 100644 new mode 100755 diff --git a/static/image/common/mu.png b/static/image/common/mu.png old mode 100644 new mode 100755 diff --git a/static/image/common/mu_bg.png b/static/image/common/mu_bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/music.gif b/static/image/common/music.gif old mode 100644 new mode 100755 diff --git a/static/image/common/n_rate.png b/static/image/common/n_rate.png old mode 100644 new mode 100755 diff --git a/static/image/common/new_pm.gif b/static/image/common/new_pm.gif old mode 100644 new mode 100755 diff --git a/static/image/common/new_pm_2.png b/static/image/common/new_pm_2.png old mode 100644 new mode 100755 diff --git a/static/image/common/newarow.gif b/static/image/common/newarow.gif old mode 100644 new mode 100755 diff --git a/static/image/common/newarow_big.gif b/static/image/common/newarow_big.gif old mode 100644 new mode 100755 diff --git a/static/image/common/newclose.gif b/static/image/common/newclose.gif old mode 100644 new mode 100755 diff --git a/static/image/common/newnotice.gif b/static/image/common/newnotice.gif old mode 100644 new mode 100755 diff --git a/static/image/common/noicon.gif b/static/image/common/noicon.gif old mode 100644 new mode 100755 diff --git a/static/image/common/none.gif b/static/image/common/none.gif old mode 100644 new mode 100755 diff --git a/static/image/common/nophoto.gif b/static/image/common/nophoto.gif old mode 100644 new mode 100755 diff --git a/static/image/common/nophotosmall.gif b/static/image/common/nophotosmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/nophototiny.png b/static/image/common/nophototiny.png old mode 100644 new mode 100755 diff --git a/static/image/common/nopublish.gif b/static/image/common/nopublish.gif old mode 100644 new mode 100755 diff --git a/static/image/common/nopublish.svg b/static/image/common/nopublish.svg old mode 100644 new mode 100755 diff --git a/static/image/common/nosexbg.png b/static/image/common/nosexbg.png old mode 100644 new mode 100755 diff --git a/static/image/common/notice.gif b/static/image/common/notice.gif old mode 100644 new mode 100755 diff --git a/static/image/common/numbg.gif b/static/image/common/numbg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/nv.png b/static/image/common/nv.png old mode 100644 new mode 100755 diff --git a/static/image/common/nv_a.png b/static/image/common/nv_a.png old mode 100644 new mode 100755 diff --git a/static/image/common/ol.gif b/static/image/common/ol.gif old mode 100644 new mode 100755 diff --git a/static/image/common/online_admin.gif b/static/image/common/online_admin.gif old mode 100644 new mode 100755 diff --git a/static/image/common/online_guest.gif b/static/image/common/online_guest.gif old mode 100644 new mode 100755 diff --git a/static/image/common/online_member.gif b/static/image/common/online_member.gif old mode 100644 new mode 100755 diff --git a/static/image/common/online_moderator.gif b/static/image/common/online_moderator.gif old mode 100644 new mode 100755 diff --git a/static/image/common/online_supermod.gif b/static/image/common/online_supermod.gif old mode 100644 new mode 100755 diff --git a/static/image/common/op.png b/static/image/common/op.png old mode 100644 new mode 100755 diff --git a/static/image/common/oshr.png b/static/image/common/oshr.png old mode 100644 new mode 100755 diff --git a/static/image/common/p_debate_chart.png b/static/image/common/p_debate_chart.png old mode 100644 new mode 100755 diff --git a/static/image/common/p_reward_btn.png b/static/image/common/p_reward_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/p_topusr_btn.png b/static/image/common/p_topusr_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/p_trade_btn.png b/static/image/common/p_trade_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/passlevel.png b/static/image/common/passlevel.png old mode 100644 new mode 100755 diff --git a/static/image/common/pdbt.gif b/static/image/common/pdbt.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pdbtm.gif b/static/image/common/pdbtm.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pengyou.png b/static/image/common/pengyou.png old mode 100644 new mode 100755 diff --git a/static/image/common/pg_arw.png b/static/image/common/pg_arw.png old mode 100644 new mode 100755 diff --git a/static/image/common/pg_bg.png b/static/image/common/pg_bg.png old mode 100644 new mode 100755 diff --git a/static/image/common/pic-next.png b/static/image/common/pic-next.png old mode 100644 new mode 100755 diff --git a/static/image/common/pic-prev.png b/static/image/common/pic-prev.png old mode 100644 new mode 100755 diff --git a/static/image/common/pic_nv_next.gif b/static/image/common/pic_nv_next.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pic_nv_prev.gif b/static/image/common/pic_nv_prev.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pin.gif b/static/image/common/pin.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pin_1.gif b/static/image/common/pin_1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pin_2.gif b/static/image/common/pin_2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pin_3.gif b/static/image/common/pin_3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pin_4.gif b/static/image/common/pin_4.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pllb.png b/static/image/common/pllb.png old mode 100644 new mode 100755 diff --git a/static/image/common/plus.gif b/static/image/common/plus.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pm-bg1.png b/static/image/common/pm-bg1.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm-bg2.png b/static/image/common/pm-bg2.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm-bg3.png b/static/image/common/pm-bg3.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm-ico5.png b/static/image/common/pm-ico5.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm.png b/static/image/common/pm.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm_member.png b/static/image/common/pm_member.png old mode 100644 new mode 100755 diff --git a/static/image/common/pm_ntc.gif b/static/image/common/pm_ntc.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pmto.gif b/static/image/common/pmto.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pn.png b/static/image/common/pn.png old mode 100644 new mode 100755 diff --git a/static/image/common/pn_color.png b/static/image/common/pn_color.png old mode 100644 new mode 100755 diff --git a/static/image/common/pn_post.png b/static/image/common/pn_post.png old mode 100644 new mode 100755 diff --git a/static/image/common/pn_reply.png b/static/image/common/pn_reply.png old mode 100644 new mode 100755 diff --git a/static/image/common/pn_rt.png b/static/image/common/pn_rt.png old mode 100644 new mode 100755 diff --git a/static/image/common/pnp2.png b/static/image/common/pnp2.png old mode 100644 new mode 100755 diff --git a/static/image/common/polljoins.gif b/static/image/common/polljoins.gif old mode 100644 new mode 100755 diff --git a/static/image/common/pollsmall.gif b/static/image/common/pollsmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/popupcredit_bg.gif b/static/image/common/popupcredit_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/popupcredit_btn.gif b/static/image/common/popupcredit_btn.gif old mode 100644 new mode 100755 diff --git a/static/image/common/popuptext_bg.gif b/static/image/common/popuptext_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/portal.ico b/static/image/common/portal.ico old mode 100644 new mode 100755 diff --git a/static/image/common/portalbox_bg.gif b/static/image/common/portalbox_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/preview.png b/static/image/common/preview.png old mode 100644 new mode 100755 diff --git a/static/image/common/print.png b/static/image/common/print.png old mode 100644 new mode 100755 diff --git a/static/image/common/pt_icn.png b/static/image/common/pt_icn.png old mode 100644 new mode 100755 diff --git a/static/image/common/pt_item.png b/static/image/common/pt_item.png old mode 100644 new mode 100755 diff --git a/static/image/common/pt_z.png b/static/image/common/pt_z.png old mode 100644 new mode 100755 diff --git a/static/image/common/pubsave.gif b/static/image/common/pubsave.gif old mode 100644 new mode 100755 diff --git a/static/image/common/push.png b/static/image/common/push.png old mode 100644 new mode 100755 diff --git a/static/image/common/px.png b/static/image/common/px.png old mode 100644 new mode 100755 diff --git a/static/image/common/px_e.png b/static/image/common/px_e.png old mode 100644 new mode 100755 diff --git a/static/image/common/qa.gif b/static/image/common/qa.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qmenu.png b/static/image/common/qmenu.png old mode 100644 new mode 100755 diff --git a/static/image/common/qpay_logo.svg b/static/image/common/qpay_logo.svg old mode 100644 new mode 100755 diff --git a/static/image/common/qq.gif b/static/image/common/qq.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qq_big.gif b/static/image/common/qq_big.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qq_bind.gif b/static/image/common/qq_bind.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qq_bind_small.gif b/static/image/common/qq_bind_small.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qq_login.gif b/static/image/common/qq_login.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qq_share.png b/static/image/common/qq_share.png old mode 100644 new mode 100755 diff --git a/static/image/common/quote.gif b/static/image/common/quote.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qz.gif b/static/image/common/qz.gif old mode 100644 new mode 100755 diff --git a/static/image/common/qzone.gif b/static/image/common/qzone.gif old mode 100644 new mode 100755 diff --git a/static/image/common/r_b_resize.png b/static/image/common/r_b_resize.png old mode 100644 new mode 100755 diff --git a/static/image/common/rank_1.gif b/static/image/common/rank_1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rank_2.gif b/static/image/common/rank_2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rank_3.gif b/static/image/common/rank_3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/ratbg.gif b/static/image/common/ratbg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/ratesrcorebg.gif b/static/image/common/ratesrcorebg.gif old mode 100644 new mode 100755 diff --git a/static/image/common/re_unsolved.gif b/static/image/common/re_unsolved.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rec_add.gif b/static/image/common/rec_add.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rec_subtract.gif b/static/image/common/rec_subtract.gif old mode 100644 new mode 100755 diff --git a/static/image/common/recommend_1.gif b/static/image/common/recommend_1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/recommend_2.gif b/static/image/common/recommend_2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/recommend_3.gif b/static/image/common/recommend_3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/recyclebin.gif b/static/image/common/recyclebin.gif old mode 100644 new mode 100755 diff --git a/static/image/common/refresh.png b/static/image/common/refresh.png old mode 100644 new mode 100755 diff --git a/static/image/common/repquote.gif b/static/image/common/repquote.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rewardsmall.gif b/static/image/common/rewardsmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/right.gif b/static/image/common/right.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rleft.gif b/static/image/common/rleft.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rright.gif b/static/image/common/rright.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rss.gif b/static/image/common/rss.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rt.png b/static/image/common/rt.png old mode 100644 new mode 100755 diff --git a/static/image/common/rushreply_s.png b/static/image/common/rushreply_s.png old mode 100644 new mode 100755 diff --git a/static/image/common/rwd.gif b/static/image/common/rwd.gif old mode 100644 new mode 100755 diff --git a/static/image/common/rwd2.gif b/static/image/common/rwd2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/scf.gif b/static/image/common/scf.gif old mode 100644 new mode 100755 diff --git a/static/image/common/scrolltop.png b/static/image/common/scrolltop.png old mode 100644 new mode 100755 diff --git a/static/image/common/se.gif b/static/image/common/se.gif old mode 100644 new mode 100755 diff --git a/static/image/common/search.gif b/static/image/common/search.gif old mode 100644 new mode 100755 diff --git a/static/image/common/search.png b/static/image/common/search.png old mode 100644 new mode 100755 diff --git a/static/image/common/searchbar.png b/static/image/common/searchbar.png old mode 100644 new mode 100755 diff --git a/static/image/common/seccodeplayer.gif b/static/image/common/seccodeplayer.gif old mode 100644 new mode 100755 diff --git a/static/image/common/security.gif b/static/image/common/security.gif old mode 100644 new mode 100755 diff --git a/static/image/common/security.png b/static/image/common/security.png old mode 100644 new mode 100755 diff --git a/static/image/common/settop.png b/static/image/common/settop.png old mode 100644 new mode 100755 diff --git a/static/image/common/share_btn.png b/static/image/common/share_btn.png old mode 100644 new mode 100755 diff --git a/static/image/common/share_img.png b/static/image/common/share_img.png old mode 100644 new mode 100755 diff --git a/static/image/common/side.png b/static/image/common/side.png old mode 100644 new mode 100755 diff --git a/static/image/common/sidecontrol.png b/static/image/common/sidecontrol.png old mode 100644 new mode 100755 diff --git a/static/image/common/sigline.gif b/static/image/common/sigline.gif old mode 100644 new mode 100755 diff --git a/static/image/common/site_qq.jpg b/static/image/common/site_qq.jpg old mode 100644 new mode 100755 diff --git a/static/image/common/slide.png b/static/image/common/slide.png old mode 100644 new mode 100755 diff --git a/static/image/common/slisticon.gif b/static/image/common/slisticon.gif old mode 100644 new mode 100755 diff --git a/static/image/common/sortnum.png b/static/image/common/sortnum.png old mode 100644 new mode 100755 diff --git a/static/image/common/spacer.gif b/static/image/common/spacer.gif old mode 100644 new mode 100755 diff --git a/static/image/common/stand_label.gif b/static/image/common/stand_label.gif old mode 100644 new mode 100755 diff --git a/static/image/common/star_level1.gif b/static/image/common/star_level1.gif old mode 100644 new mode 100755 diff --git a/static/image/common/star_level2.gif b/static/image/common/star_level2.gif old mode 100644 new mode 100755 diff --git a/static/image/common/star_level3.gif b/static/image/common/star_level3.gif old mode 100644 new mode 100755 diff --git a/static/image/common/starlevel.gif b/static/image/common/starlevel.gif old mode 100644 new mode 100755 diff --git a/static/image/common/status_setting.xml b/static/image/common/status_setting.xml old mode 100644 new mode 100755 diff --git a/static/image/common/switch_style.png b/static/image/common/switch_style.png old mode 100644 new mode 100755 diff --git a/static/image/common/switch_width.png b/static/image/common/switch_width.png old mode 100644 new mode 100755 diff --git a/static/image/common/systempm.png b/static/image/common/systempm.png old mode 100644 new mode 100755 diff --git a/static/image/common/tag.gif b/static/image/common/tag.gif old mode 100644 new mode 100755 diff --git a/static/image/common/taobao.gif b/static/image/common/taobao.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tavatar.gif b/static/image/common/tavatar.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tb.png b/static/image/common/tb.png old mode 100644 new mode 100755 diff --git a/static/image/common/thead.png b/static/image/common/thead.png old mode 100644 new mode 100755 diff --git a/static/image/common/thread-next.png b/static/image/common/thread-next.png old mode 100644 new mode 100755 diff --git a/static/image/common/thread-prev.png b/static/image/common/thread-prev.png old mode 100644 new mode 100755 diff --git a/static/image/common/thread_prize_s.png b/static/image/common/thread_prize_s.png old mode 100644 new mode 100755 diff --git a/static/image/common/tip_bottom.png b/static/image/common/tip_bottom.png old mode 100644 new mode 100755 diff --git a/static/image/common/tip_top.png b/static/image/common/tip_top.png old mode 100644 new mode 100755 diff --git a/static/image/common/tip_up.gif b/static/image/common/tip_up.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tip_up_grey.gif b/static/image/common/tip_up_grey.gif old mode 100644 new mode 100755 diff --git a/static/image/common/title.png b/static/image/common/title.png old mode 100644 new mode 100755 diff --git a/static/image/common/titlebg.png b/static/image/common/titlebg.png old mode 100644 new mode 100755 diff --git a/static/image/common/titlebg_sd.png b/static/image/common/titlebg_sd.png old mode 100644 new mode 100755 diff --git a/static/image/common/topnav.png b/static/image/common/topnav.png old mode 100644 new mode 100755 diff --git a/static/image/common/tradesmall.gif b/static/image/common/tradesmall.gif old mode 100644 new mode 100755 diff --git a/static/image/common/transparent.gif b/static/image/common/transparent.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_empty.gif b/static/image/common/tree_empty.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_file.gif b/static/image/common/tree_file.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_folder.gif b/static/image/common/tree_folder.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_folderopen.gif b/static/image/common/tree_folderopen.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_line.gif b/static/image/common/tree_line.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_linebottom.gif b/static/image/common/tree_linebottom.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_linemiddle.gif b/static/image/common/tree_linemiddle.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_minus.gif b/static/image/common/tree_minus.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_minusbottom.gif b/static/image/common/tree_minusbottom.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_minusmiddle.gif b/static/image/common/tree_minusmiddle.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_plus.gif b/static/image/common/tree_plus.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_plusbottom.gif b/static/image/common/tree_plusbottom.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_plusmiddle.gif b/static/image/common/tree_plusmiddle.gif old mode 100644 new mode 100755 diff --git a/static/image/common/tree_root.gif b/static/image/common/tree_root.gif old mode 100644 new mode 100755 diff --git a/static/image/common/treeline_long.gif b/static/image/common/treeline_long.gif old mode 100644 new mode 100755 diff --git a/static/image/common/treeline_short.gif b/static/image/common/treeline_short.gif old mode 100644 new mode 100755 diff --git a/static/image/common/un_selector.png b/static/image/common/un_selector.png old mode 100644 new mode 100755 diff --git a/static/image/common/uploadbutton.png b/static/image/common/uploadbutton.png old mode 100644 new mode 100755 diff --git a/static/image/common/uploadbutton_small.png b/static/image/common/uploadbutton_small.png old mode 100644 new mode 100755 diff --git a/static/image/common/uploadbutton_small_pic.png b/static/image/common/uploadbutton_small_pic.png old mode 100644 new mode 100755 diff --git a/static/image/common/uploading.gif b/static/image/common/uploading.gif old mode 100644 new mode 100755 diff --git a/static/image/common/user_add.gif b/static/image/common/user_add.gif old mode 100644 new mode 100755 diff --git a/static/image/common/user_link.gif b/static/image/common/user_link.gif old mode 100644 new mode 100755 diff --git a/static/image/common/user_offline.gif b/static/image/common/user_offline.gif old mode 100644 new mode 100755 diff --git a/static/image/common/user_online.gif b/static/image/common/user_online.gif old mode 100644 new mode 100755 diff --git a/static/image/common/userinfo.gif b/static/image/common/userinfo.gif old mode 100644 new mode 100755 diff --git a/static/image/common/v.png b/static/image/common/v.png old mode 100644 new mode 100755 diff --git a/static/image/common/vd.gif b/static/image/common/vd.gif old mode 100644 new mode 100755 diff --git a/static/image/common/vds.png b/static/image/common/vds.png old mode 100644 new mode 100755 diff --git a/static/image/common/viewpay.gif b/static/image/common/viewpay.gif old mode 100644 new mode 100755 diff --git a/static/image/common/vline.png b/static/image/common/vline.png old mode 100644 new mode 100755 diff --git a/static/image/common/vline2.png b/static/image/common/vline2.png old mode 100644 new mode 100755 diff --git a/static/image/common/vlineb.png b/static/image/common/vlineb.png old mode 100644 new mode 100755 diff --git a/static/image/common/warning.gif b/static/image/common/warning.gif old mode 100644 new mode 100755 diff --git a/static/image/common/watermark.gif b/static/image/common/watermark.gif old mode 100644 new mode 100755 diff --git a/static/image/common/watermark.png b/static/image/common/watermark.png old mode 100644 new mode 100755 index 7d7f3a5..1e75808 Binary files a/static/image/common/watermark.png and b/static/image/common/watermark.png differ diff --git a/static/image/common/wechatpay_logo.svg b/static/image/common/wechatpay_logo.svg old mode 100644 new mode 100755 diff --git a/static/image/common/weibo.png b/static/image/common/weibo.png old mode 100644 new mode 100755 diff --git a/static/image/common/winner_flag.gif b/static/image/common/winner_flag.gif old mode 100644 new mode 100755 diff --git a/static/image/common/yahoo.gif b/static/image/common/yahoo.gif old mode 100644 new mode 100755 diff --git a/static/image/common/zslt_andriod.png b/static/image/common/zslt_andriod.png old mode 100644 new mode 100755 diff --git a/static/image/common/zslt_ios.png b/static/image/common/zslt_ios.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_2_ft.png b/static/image/diy/bs_2_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_2_ft_r.png b/static/image/diy/bs_2_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_2_hd.png b/static/image/diy/bs_2_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_3_ft.png b/static/image/diy/bs_3_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_3_ft_r.png b/static/image/diy/bs_3_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_3_hd.png b/static/image/diy/bs_3_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_4_ft.png b/static/image/diy/bs_4_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_4_ft_r.png b/static/image/diy/bs_4_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_4_hd.png b/static/image/diy/bs_4_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_5_ft.png b/static/image/diy/bs_5_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_5_ft_r.png b/static/image/diy/bs_5_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_5_hd.png b/static/image/diy/bs_5_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_6_ft.png b/static/image/diy/bs_6_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_6_ft_r.png b/static/image/diy/bs_6_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_6_hd.png b/static/image/diy/bs_6_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_6_hd_r.png b/static/image/diy/bs_6_hd_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_7_ft.png b/static/image/diy/bs_7_ft.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_7_ft_r.png b/static/image/diy/bs_7_ft_r.png old mode 100644 new mode 100755 diff --git a/static/image/diy/bs_7_hd.png b/static/image/diy/bs_7_hd.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-bg.png b/static/image/diy/cp-bg.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-close.png b/static/image/diy/cp-close.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-item-mini.png b/static/image/diy/cp-item-mini.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-item-selected.png b/static/image/diy/cp-item-selected.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-more.png b/static/image/diy/cp-more.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-nav-active.png b/static/image/diy/cp-nav-active.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-nav-corner-bl.png b/static/image/diy/cp-nav-corner-bl.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-nav-corner-br.png b/static/image/diy/cp-nav-corner-br.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-nav-corner-tr.png b/static/image/diy/cp-nav-corner-tr.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-nav.png b/static/image/diy/cp-nav.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-preview.png b/static/image/diy/cp-preview.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-save.png b/static/image/diy/cp-save.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-savecache.png b/static/image/diy/cp-savecache.png old mode 100644 new mode 100755 diff --git a/static/image/diy/cp-step.png b/static/image/diy/cp-step.png old mode 100644 new mode 100755 diff --git a/static/image/diy/diy.png b/static/image/diy/diy.png old mode 100644 new mode 100755 diff --git a/static/image/diy/index.htm b/static/image/diy/index.htm old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-1-1-1.png b/static/image/diy/layout-1-1-1.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-1-1.png b/static/image/diy/layout-1-1.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-1-2.png b/static/image/diy/layout-1-2.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-1-3.png b/static/image/diy/layout-1-3.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-1.png b/static/image/diy/layout-1.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-2-1.png b/static/image/diy/layout-2-1.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-3-1.png b/static/image/diy/layout-3-1.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout-tab.png b/static/image/diy/layout-tab.png old mode 100644 new mode 100755 diff --git a/static/image/diy/layout.png b/static/image/diy/layout.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-article.png b/static/image/diy/module-article.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-forum.png b/static/image/diy/module-forum.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-group.png b/static/image/diy/module-group.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-html.png b/static/image/diy/module-html.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-member.png b/static/image/diy/module-member.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module-space.png b/static/image/diy/module-space.png old mode 100644 new mode 100755 diff --git a/static/image/diy/module.png b/static/image/diy/module.png old mode 100644 new mode 100755 diff --git a/static/image/diy/panel-toggle-drop.png b/static/image/diy/panel-toggle-drop.png old mode 100644 new mode 100755 diff --git a/static/image/diy/panel-toggle-space.png b/static/image/diy/panel-toggle-space.png old mode 100644 new mode 100755 diff --git a/static/image/diy/panel-toggle.png b/static/image/diy/panel-toggle.png old mode 100644 new mode 100755 diff --git a/static/image/diy/style.png b/static/image/diy/style.png old mode 100644 new mode 100755 diff --git a/static/image/diy/t-diy.png b/static/image/diy/t-diy.png old mode 100644 new mode 100755 diff --git a/static/image/diy/vline.png b/static/image/diy/vline.png old mode 100644 new mode 100755 diff --git a/static/image/diy/vline2.png b/static/image/diy/vline2.png old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/001.jpg b/static/image/doodle/big/001.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/002.jpg b/static/image/doodle/big/002.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/003.jpg b/static/image/doodle/big/003.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/004.jpg b/static/image/doodle/big/004.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/005.jpg b/static/image/doodle/big/005.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/006.jpg b/static/image/doodle/big/006.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/007.jpg b/static/image/doodle/big/007.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/008.jpg b/static/image/doodle/big/008.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/009.jpg b/static/image/doodle/big/009.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/010.jpg b/static/image/doodle/big/010.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/big/index.htm b/static/image/doodle/big/index.htm old mode 100644 new mode 100755 diff --git a/static/image/doodle/index.htm b/static/image/doodle/index.htm old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/001.jpg b/static/image/doodle/thumb/001.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/002.jpg b/static/image/doodle/thumb/002.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/003.jpg b/static/image/doodle/thumb/003.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/004.jpg b/static/image/doodle/thumb/004.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/005.jpg b/static/image/doodle/thumb/005.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/006.jpg b/static/image/doodle/thumb/006.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/007.jpg b/static/image/doodle/thumb/007.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/008.jpg b/static/image/doodle/thumb/008.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/009.jpg b/static/image/doodle/thumb/009.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/010.jpg b/static/image/doodle/thumb/010.jpg old mode 100644 new mode 100755 diff --git a/static/image/doodle/thumb/index.htm b/static/image/doodle/thumb/index.htm old mode 100644 new mode 100755 diff --git a/static/image/editor/editor.gif b/static/image/editor/editor.gif old mode 100644 new mode 100755 diff --git a/static/image/editor/editor_base.js b/static/image/editor/editor_base.js old mode 100644 new mode 100755 diff --git a/static/image/editor/editor_boolbar.gif b/static/image/editor/editor_boolbar.gif old mode 100644 new mode 100755 diff --git a/static/image/editor/editor_file_thumb.png b/static/image/editor/editor_file_thumb.png old mode 100644 new mode 100755 diff --git a/static/image/editor/editor_function.js b/static/image/editor/editor_function.js old mode 100644 new mode 100755 diff --git a/static/image/editor/editor_none.gif b/static/image/editor/editor_none.gif old mode 100644 new mode 100755 diff --git a/static/image/editor/index.htm b/static/image/editor/index.htm old mode 100644 new mode 100755 diff --git a/static/image/editor/resize.gif b/static/image/editor/resize.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/activity.gif b/static/image/feed/activity.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/album.gif b/static/image/feed/album.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/album_b.png b/static/image/feed/album_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/article.gif b/static/image/feed/article.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/blog.gif b/static/image/feed/blog.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/blog_b.png b/static/image/feed/blog_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/click.gif b/static/image/feed/click.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/collection_b.png b/static/image/feed/collection_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/comment.gif b/static/image/feed/comment.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/credit.gif b/static/image/feed/credit.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/debate.gif b/static/image/feed/debate.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/discuz.gif b/static/image/feed/discuz.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/doing.gif b/static/image/feed/doing.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/doing_b.png b/static/image/feed/doing_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/dzwap_b.png b/static/image/feed/dzwap_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/event.gif b/static/image/feed/event.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/favorite.gif b/static/image/feed/favorite.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/favorite_b.png b/static/image/feed/favorite_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/feed_announce.gif b/static/image/feed/feed_announce.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/feed_b.png b/static/image/feed/feed_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/file.gif b/static/image/feed/file.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/follow.gif b/static/image/feed/follow.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/follow_b.png b/static/image/feed/follow_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/friend.gif b/static/image/feed/friend.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/friend_b.png b/static/image/feed/friend_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/goods.gif b/static/image/feed/goods.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/group.gif b/static/image/feed/group.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/group_b.png b/static/image/feed/group_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/guide_b.png b/static/image/feed/guide_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/impression.gif b/static/image/feed/impression.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/index.htm b/static/image/feed/index.htm old mode 100644 new mode 100755 diff --git a/static/image/feed/magic.gif b/static/image/feed/magic.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/magic_b.png b/static/image/feed/magic_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/medal.gif b/static/image/feed/medal.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/medal_b.png b/static/image/feed/medal_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/mood.gif b/static/image/feed/mood.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/mtag.gif b/static/image/feed/mtag.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/network.gif b/static/image/feed/network.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/notice.gif b/static/image/feed/notice.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/nts.gif b/static/image/feed/nts.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/pm.gif b/static/image/feed/pm.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/poke.gif b/static/image/feed/poke.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/poll.gif b/static/image/feed/poll.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/portal_b.png b/static/image/feed/portal_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/post.gif b/static/image/feed/post.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/post_magic.gif b/static/image/feed/post_magic.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/post_rate.gif b/static/image/feed/post_rate.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/profile.gif b/static/image/feed/profile.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/ranklist_b.png b/static/image/feed/ranklist_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/report.gif b/static/image/feed/report.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/reward.gif b/static/image/feed/reward.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/share.gif b/static/image/feed/share.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/share_b.png b/static/image/feed/share_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/show.gif b/static/image/feed/show.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/sitefeed.gif b/static/image/feed/sitefeed.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/task.gif b/static/image/feed/task.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/task_b.png b/static/image/feed/task_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/thread.gif b/static/image/feed/thread.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_b.png b/static/image/feed/thread_b.png old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_del.gif b/static/image/feed/thread_del.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_digest.gif b/static/image/feed/thread_digest.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_highlight.gif b/static/image/feed/thread_highlight.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_magic.gif b/static/image/feed/thread_magic.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_move.gif b/static/image/feed/thread_move.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_pin.gif b/static/image/feed/thread_pin.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_rate.gif b/static/image/feed/thread_rate.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_recommend.gif b/static/image/feed/thread_recommend.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_replies.gif b/static/image/feed/thread_replies.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thread_views.gif b/static/image/feed/thread_views.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/thunder.gif b/static/image/feed/thunder.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/trace.gif b/static/image/feed/trace.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_credit.gif b/static/image/feed/user_credit.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_digest.gif b/static/image/feed/user_digest.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_medal.gif b/static/image/feed/user_medal.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_posts.gif b/static/image/feed/user_posts.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_profile.gif b/static/image/feed/user_profile.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_threads.gif b/static/image/feed/user_threads.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/user_usergroup.gif b/static/image/feed/user_usergroup.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/video.gif b/static/image/feed/video.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/wall.gif b/static/image/feed/wall.gif old mode 100644 new mode 100755 diff --git a/static/image/feed/wall_b.png b/static/image/feed/wall_b.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/av.gif b/static/image/filetype/av.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/binary.gif b/static/image/filetype/binary.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/common.gif b/static/image/filetype/common.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/common_new.gif b/static/image/filetype/common_new.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-excel.png b/static/image/filetype/file-excel.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-image.png b/static/image/filetype/file-image.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-music.png b/static/image/filetype/file-music.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-video.png b/static/image/filetype/file-video.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-word.png b/static/image/filetype/file-word.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/file-zip.png b/static/image/filetype/file-zip.png old mode 100644 new mode 100755 diff --git a/static/image/filetype/flash.gif b/static/image/filetype/flash.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/html.gif b/static/image/filetype/html.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/image.gif b/static/image/filetype/image.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/image_s.gif b/static/image/filetype/image_s.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/index.htm b/static/image/filetype/index.htm old mode 100644 new mode 100755 diff --git a/static/image/filetype/msoffice.gif b/static/image/filetype/msoffice.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/pdf.gif b/static/image/filetype/pdf.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/rar.gif b/static/image/filetype/rar.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/real.gif b/static/image/filetype/real.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/text.gif b/static/image/filetype/text.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/torrent.gif b/static/image/filetype/torrent.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/unknown.gif b/static/image/filetype/unknown.gif old mode 100644 new mode 100755 diff --git a/static/image/filetype/zip.gif b/static/image/filetype/zip.gif old mode 100644 new mode 100755 diff --git a/static/image/foreground/default/categories.txt b/static/image/foreground/default/categories.txt old mode 100644 new mode 100755 diff --git a/static/image/foreground/default/img001.png b/static/image/foreground/default/img001.png old mode 100644 new mode 100755 diff --git a/static/image/foreground/default/index.htm b/static/image/foreground/default/index.htm old mode 100644 new mode 100755 diff --git a/static/image/foreground/index.htm b/static/image/foreground/index.htm old mode 100644 new mode 100755 diff --git a/static/image/foreground/nature/categories.txt b/static/image/foreground/nature/categories.txt old mode 100644 new mode 100755 diff --git a/static/image/foreground/nature/img101.png b/static/image/foreground/nature/img101.png old mode 100644 new mode 100755 diff --git a/static/image/foreground/nature/index.htm b/static/image/foreground/nature/index.htm old mode 100644 new mode 100755 diff --git a/static/image/help/album.gif b/static/image/help/album.gif old mode 100644 new mode 100755 diff --git a/static/image/help/blog.gif b/static/image/help/blog.gif old mode 100644 new mode 100755 diff --git a/static/image/help/cp.gif b/static/image/help/cp.gif old mode 100644 new mode 100755 diff --git a/static/image/help/cp2.gif b/static/image/help/cp2.gif old mode 100644 new mode 100755 diff --git a/static/image/help/doing.gif b/static/image/help/doing.gif old mode 100644 new mode 100755 diff --git a/static/image/help/home.gif b/static/image/help/home.gif old mode 100644 new mode 100755 diff --git a/static/image/help/home2.gif b/static/image/help/home2.gif old mode 100644 new mode 100755 diff --git a/static/image/help/index.htm b/static/image/help/index.htm old mode 100644 new mode 100755 diff --git a/static/image/help/mtag1.gif b/static/image/help/mtag1.gif old mode 100644 new mode 100755 diff --git a/static/image/help/mtag2.gif b/static/image/help/mtag2.gif old mode 100644 new mode 100755 diff --git a/static/image/help/mtag3.gif b/static/image/help/mtag3.gif old mode 100644 new mode 100755 diff --git a/static/image/help/register.gif b/static/image/help/register.gif old mode 100644 new mode 100755 diff --git a/static/image/help/share1.gif b/static/image/help/share1.gif old mode 100644 new mode 100755 diff --git a/static/image/help/share2.gif b/static/image/help/share2.gif old mode 100644 new mode 100755 diff --git a/static/image/help/space.gif b/static/image/help/space.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/0.gif b/static/image/hrline/0.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/1.gif b/static/image/hrline/1.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/2.gif b/static/image/hrline/2.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/3.gif b/static/image/hrline/3.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/4.gif b/static/image/hrline/4.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/5.gif b/static/image/hrline/5.gif old mode 100644 new mode 100755 diff --git a/static/image/hrline/index.htm b/static/image/hrline/index.htm old mode 100644 new mode 100755 diff --git a/static/image/hrline/line1.png b/static/image/hrline/line1.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line2.png b/static/image/hrline/line2.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line3.png b/static/image/hrline/line3.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line4.png b/static/image/hrline/line4.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line5.png b/static/image/hrline/line5.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line6.png b/static/image/hrline/line6.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line7.png b/static/image/hrline/line7.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line8.png b/static/image/hrline/line8.png old mode 100644 new mode 100755 diff --git a/static/image/hrline/line9.png b/static/image/hrline/line9.png old mode 100644 new mode 100755 diff --git a/static/image/index.htm b/static/image/index.htm old mode 100644 new mode 100755 diff --git a/static/image/magic/anonymous.gif b/static/image/magic/anonymous.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/anonymous.small.gif b/static/image/magic/anonymous.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/anonymouspost.gif b/static/image/magic/anonymouspost.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/anonymouspost.small.gif b/static/image/magic/anonymouspost.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/attachsize.gif b/static/image/magic/attachsize.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/attachsize.small.gif b/static/image/magic/attachsize.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/bgimage.gif b/static/image/magic/bgimage.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/bgimage.small.gif b/static/image/magic/bgimage.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/bump.gif b/static/image/magic/bump.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/bump.small.gif b/static/image/magic/bump.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/call.gif b/static/image/magic/call.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/call.small.gif b/static/image/magic/call.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/cbk.gif b/static/image/magic/cbk.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/checkonline.gif b/static/image/magic/checkonline.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/checkonline.small.gif b/static/image/magic/checkonline.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/chgusername.gif b/static/image/magic/chgusername.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/chgusername.small.gif b/static/image/magic/chgusername.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/close.gif b/static/image/magic/close.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/close.small.gif b/static/image/magic/close.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/coupon.gif b/static/image/magic/coupon.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/coupon.small.gif b/static/image/magic/coupon.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/detector.gif b/static/image/magic/detector.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/detector.small.gif b/static/image/magic/detector.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/doodle.gif b/static/image/magic/doodle.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/doodle.small.gif b/static/image/magic/doodle.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/downdateline.gif b/static/image/magic/downdateline.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/downdateline.small.gif b/static/image/magic/downdateline.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/flicker.gif b/static/image/magic/flicker.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/flicker.small.gif b/static/image/magic/flicker.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/friendnum.gif b/static/image/magic/friendnum.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/friendnum.small.gif b/static/image/magic/friendnum.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/gift.gif b/static/image/magic/gift.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/gift.small.gif b/static/image/magic/gift.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/hidden.gif b/static/image/magic/hidden.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/highlight.gif b/static/image/magic/highlight.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/highlight.small.gif b/static/image/magic/highlight.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/hot.gif b/static/image/magic/hot.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/hot.small.gif b/static/image/magic/hot.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/index.htm b/static/image/magic/index.htm old mode 100644 new mode 100755 diff --git a/static/image/magic/jack.gif b/static/image/magic/jack.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/jack.small.gif b/static/image/magic/jack.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/money.gif b/static/image/magic/money.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/money.small.gif b/static/image/magic/money.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/mvk.gif b/static/image/magic/mvk.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/namepost.gif b/static/image/magic/namepost.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/namepost.small.gif b/static/image/magic/namepost.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/open.gif b/static/image/magic/open.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/open.small.gif b/static/image/magic/open.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/repent.gif b/static/image/magic/repent.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/repent.small.gif b/static/image/magic/repent.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/showip.gif b/static/image/magic/showip.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/showip.small.gif b/static/image/magic/showip.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/stick.gif b/static/image/magic/stick.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/stick.small.gif b/static/image/magic/stick.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/superstar.gif b/static/image/magic/superstar.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/superstar.small.gif b/static/image/magic/superstar.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/thunder.gif b/static/image/magic/thunder.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/thunder.small.gif b/static/image/magic/thunder.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/tok.gif b/static/image/magic/tok.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/updateline.gif b/static/image/magic/updateline.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/updateline.small.gif b/static/image/magic/updateline.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/visit.gif b/static/image/magic/visit.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/visit.small.gif b/static/image/magic/visit.small.gif old mode 100644 new mode 100755 diff --git a/static/image/magic/ysk.gif b/static/image/magic/ysk.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/browser.jpg b/static/image/mobile/browser.jpg old mode 100644 new mode 100755 diff --git a/static/image/mobile/browser_big.jpg b/static/image/mobile/browser_big.jpg old mode 100644 new mode 100755 diff --git a/static/image/mobile/font/dzmicon.css b/static/image/mobile/font/dzmicon.css old mode 100644 new mode 100755 diff --git a/static/image/mobile/font/dzmicon.ttf b/static/image/mobile/font/dzmicon.ttf old mode 100644 new mode 100755 diff --git a/static/image/mobile/font/dzmicon.woff b/static/image/mobile/font/dzmicon.woff old mode 100644 new mode 100755 diff --git a/static/image/mobile/font/dzmicon.woff2 b/static/image/mobile/font/dzmicon.woff2 old mode 100644 new mode 100755 diff --git a/static/image/mobile/font/index.htm b/static/image/mobile/font/index.htm old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/arrow_top.png b/static/image/mobile/images/arrow_top.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/avatar_m_bg.png b/static/image/mobile/images/avatar_m_bg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/btn_s_bg.png b/static/image/mobile/images/btn_s_bg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/button_bg.gif b/static/image/mobile/images/button_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/button_bg.png b/static/image/mobile/images/button_bg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/button_bg2.png b/static/image/mobile/images/button_bg2.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/collapsed_no.png b/static/image/mobile/images/collapsed_no.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/collapsed_yes.png b/static/image/mobile/images/collapsed_yes.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/collect.png b/static/image/mobile/images/collect.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/dialog_b.png b/static/image/mobile/images/dialog_b.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/dialog_bg.png b/static/image/mobile/images/dialog_bg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/dialog_t.png b/static/image/mobile/images/dialog_t.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/exit.png b/static/image/mobile/images/exit.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/exit_on.png b/static/image/mobile/images/exit_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/header_bg.jpg b/static/image/mobile/images/header_bg.jpg old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon.png b/static/image/mobile/images/icon.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_arrow.gif b/static/image/mobile/images/icon_arrow.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_arrow.png b/static/image/mobile/images/icon_arrow.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_arrow_down.png b/static/image/mobile/images/icon_arrow_down.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_back.png b/static/image/mobile/images/icon_back.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_close.png b/static/image/mobile/images/icon_close.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_close_g.png b/static/image/mobile/images/icon_close_g.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_del.png b/static/image/mobile/images/icon_del.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_digest.png b/static/image/mobile/images/icon_digest.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_img.png b/static/image/mobile/images/icon_img.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_load.gif b/static/image/mobile/images/icon_load.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_more.png b/static/image/mobile/images/icon_more.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_msg.png b/static/image/mobile/images/icon_msg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_num.png b/static/image/mobile/images/icon_num.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_photo.png b/static/image/mobile/images/icon_photo.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_reply.png b/static/image/mobile/images/icon_reply.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_top.png b/static/image/mobile/images/icon_top.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/icon_tu.png b/static/image/mobile/images/icon_tu.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/img_loader.gif b/static/image/mobile/images/img_loader.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/index.htm b/static/image/mobile/images/index.htm old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/login.png b/static/image/mobile/images/login.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/login_on.png b/static/image/mobile/images/login_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/logo.png b/static/image/mobile/images/logo.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/my_subject_bg.png b/static/image/mobile/images/my_subject_bg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/my_subject_bg151.png b/static/image/mobile/images/my_subject_bg151.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/nav_b_line.png b/static/image/mobile/images/nav_b_line.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/pic_bg.jpg b/static/image/mobile/images/pic_bg.jpg old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/pic_select.png b/static/image/mobile/images/pic_select.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/qqlogin.png b/static/image/mobile/images/qqlogin.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/qqlogin_on.png b/static/image/mobile/images/qqlogin_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/qqlogintext.png b/static/image/mobile/images/qqlogintext.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/reply.png b/static/image/mobile/images/reply.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/images/titlebg.png b/static/image/mobile/images/titlebg.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/index.htm b/static/image/mobile/index.htm old mode 100644 new mode 100755 diff --git a/static/image/mobile/input_bg.gif b/static/image/mobile/input_bg.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/logo.gif b/static/image/mobile/logo.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/preview.png b/static/image/mobile/preview.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/style.css b/static/image/mobile/style.css old mode 100644 new mode 100755 index e4eaa8d..a9ed974 --- a/static/image/mobile/style.css +++ b/static/image/mobile/style.css @@ -738,7 +738,7 @@ a.flw_readfull {color: var(--dz-BG-2);} #subnavs_btn a {display:inline-block;font-size:14px;height:24px;line-height:24px;padding:0 5px;margin:0 5px;} #subnavs_btn a.mon {color:var(--dz-FC-color)} -/*----- 通用文章列表 -----*/ +/*----- 通用帖子列表 -----*/ .threadlist_box {overflow:hidden} .threadlist_box h2 {padding:0 15px;background-color:var(--dz-BG-0);border-top:1px solid var(--dz-BOR-ed);line-height:40px;font-size:14px} .threadlist_box h2 .emfont {color:var(--dz-BG-2)} @@ -950,7 +950,7 @@ body.pg_logging, body.pg_register {background-color:var(--dz-BG-0)} .post_attlist li .minput .input {padding:0 6px;height:24px;line-height:24px;font-size:13px;border-radius:4px;display:block;} .post_attlist li .minput .price {width: inherit;} -/*----- 文章内容页 -----*/ +/*----- 帖子内容页 -----*/ .quote, .showhide, .locked {padding:8px 10px;margin:8px 0;background-color:var(--dz-BG-5);font-size:14px;border-radius:4px} .quote a, .showhide a, .locked a {color:var(--dz-BG-3)} .viewthread {background-color:var(--dz-BG-0);overflow:hidden} @@ -1069,7 +1069,7 @@ body.pg_logging, body.pg_register {background-color:var(--dz-BG-0)} .trade_box {margin:10px auto;padding:10px 15px;background-color:var(--dz-BG-5);font-size:14px;border-radius:6px} .trade_box .my {float:right;color:var(--dz-BG-3)} -/*----- 文章内容页-返回顶部 -----*/ +/*----- 帖子内容页-返回顶部 -----*/ .scrolltop {display:block;position:fixed;right:15px;bottom:8px;margin-bottom:50px;height:38px;width:38px;z-index:99999;background:rgba(0, 0, 0, .8);opacity:.618;box-shadow:0 0 2px rgba(0,0,0,.2);border-radius:6px} .scrolltop:after {content:"";position:absolute;top:12px;left:11px;width:16px;height:2px;border-radius:1px;background:var(--dz-BG-0);border-radius:1px} .scrolltop:before {content:"";position:absolute;top:17px;left:11px;display:inline-block;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #fff;border-top:0;-webkit-transform:scale(1,1.2222);-webkit-transform:translate(0,1px);transform:scale(1,1.2222);transform:translate(0,1px)} diff --git a/static/image/mobile/touch/arrow.png b/static/image/mobile/touch/arrow.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/arrow.svg b/static/image/mobile/touch/arrow.svg old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/avatar_blank.gif b/static/image/mobile/touch/avatar_blank.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/explore.svg b/static/image/mobile/touch/explore.svg old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/find.png b/static/image/mobile/touch/find.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/find_on.png b/static/image/mobile/touch/find_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/foot_post.png b/static/image/mobile/touch/foot_post.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/forum.png b/static/image/mobile/touch/forum.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/forum.svg b/static/image/mobile/touch/forum.svg old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/forum_new.png b/static/image/mobile/touch/forum_new.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/home.png b/static/image/mobile/touch/home.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/home.svg b/static/image/mobile/touch/home.svg old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/home_on.png b/static/image/mobile/touch/home_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/index.htm b/static/image/mobile/touch/index.htm old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/logo.png b/static/image/mobile/touch/logo.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/my.png b/static/image/mobile/touch/my.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/my_on.png b/static/image/mobile/touch/my_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/nophoto.gif b/static/image/mobile/touch/nophoto.gif old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/plus_btn.svg b/static/image/mobile/touch/plus_btn.svg old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/shequ.png b/static/image/mobile/touch/shequ.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/shequ_on.png b/static/image/mobile/touch/shequ_on.png old mode 100644 new mode 100755 diff --git a/static/image/mobile/touch/space.svg b/static/image/mobile/touch/space.svg old mode 100644 new mode 100755 diff --git a/static/image/poke/cyx.gif b/static/image/poke/cyx.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/dyx.gif b/static/image/poke/dyx.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/fw.gif b/static/image/poke/fw.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/gyq.gif b/static/image/poke/gyq.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/index.htm b/static/image/poke/index.htm old mode 100644 new mode 100755 diff --git a/static/image/poke/jy.gif b/static/image/poke/jy.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/nyy.gif b/static/image/poke/nyy.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/pmy.gif b/static/image/poke/pmy.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/ppjb.gif b/static/image/poke/ppjb.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/wgs.gif b/static/image/poke/wgs.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/wx.gif b/static/image/poke/wx.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/yb.gif b/static/image/poke/yb.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/yw.gif b/static/image/poke/yw.gif old mode 100644 new mode 100755 diff --git a/static/image/poke/yyk.gif b/static/image/poke/yyk.gif old mode 100644 new mode 100755 diff --git a/static/image/postbg/0.gif b/static/image/postbg/0.gif old mode 100644 new mode 100755 diff --git a/static/image/postbg/1.jpg b/static/image/postbg/1.jpg old mode 100644 new mode 100755 diff --git a/static/image/postbg/2.jpg b/static/image/postbg/2.jpg old mode 100644 new mode 100755 diff --git a/static/image/postbg/3.jpg b/static/image/postbg/3.jpg old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg1.png b/static/image/postbg/bg1.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg10.png b/static/image/postbg/bg10.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg2.png b/static/image/postbg/bg2.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg3.png b/static/image/postbg/bg3.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg4.png b/static/image/postbg/bg4.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg5.png b/static/image/postbg/bg5.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg6.png b/static/image/postbg/bg6.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg7.png b/static/image/postbg/bg7.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg8.png b/static/image/postbg/bg8.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/bg9.png b/static/image/postbg/bg9.png old mode 100644 new mode 100755 diff --git a/static/image/postbg/index.htm b/static/image/postbg/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background1.jpg b/static/image/seccode/background/background1.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background2.jpg b/static/image/seccode/background/background2.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background3.jpg b/static/image/seccode/background/background3.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background4.jpg b/static/image/seccode/background/background4.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background5.jpg b/static/image/seccode/background/background5.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background6.jpg b/static/image/seccode/background/background6.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background7.jpg b/static/image/seccode/background/background7.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/background8.jpg b/static/image/seccode/background/background8.jpg old mode 100644 new mode 100755 diff --git a/static/image/seccode/background/index.htm b/static/image/seccode/background/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/flash/index.htm b/static/image/seccode/flash/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/font/ch/index.htm b/static/image/seccode/font/ch/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/font/en/FetteSteinschrift.ttf b/static/image/seccode/font/en/FetteSteinschrift.ttf old mode 100644 new mode 100755 diff --git a/static/image/seccode/font/en/PilsenPlakat.ttf b/static/image/seccode/font/en/PilsenPlakat.ttf old mode 100644 new mode 100755 diff --git a/static/image/seccode/font/en/index.htm b/static/image/seccode/font/en/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/font/index.htm b/static/image/seccode/font/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/2.gif b/static/image/seccode/gif/OCR_A_Extended/2.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/3.gif b/static/image/seccode/gif/OCR_A_Extended/3.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/4.gif b/static/image/seccode/gif/OCR_A_Extended/4.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/6.gif b/static/image/seccode/gif/OCR_A_Extended/6.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/7.gif b/static/image/seccode/gif/OCR_A_Extended/7.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/8.gif b/static/image/seccode/gif/OCR_A_Extended/8.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/9.gif b/static/image/seccode/gif/OCR_A_Extended/9.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/b.gif b/static/image/seccode/gif/OCR_A_Extended/b.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/c.gif b/static/image/seccode/gif/OCR_A_Extended/c.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/e.gif b/static/image/seccode/gif/OCR_A_Extended/e.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/f.gif b/static/image/seccode/gif/OCR_A_Extended/f.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/g.gif b/static/image/seccode/gif/OCR_A_Extended/g.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/h.gif b/static/image/seccode/gif/OCR_A_Extended/h.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/index.htm b/static/image/seccode/gif/OCR_A_Extended/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/j.gif b/static/image/seccode/gif/OCR_A_Extended/j.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/k.gif b/static/image/seccode/gif/OCR_A_Extended/k.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/m.gif b/static/image/seccode/gif/OCR_A_Extended/m.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/p.gif b/static/image/seccode/gif/OCR_A_Extended/p.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/q.gif b/static/image/seccode/gif/OCR_A_Extended/q.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/r.gif b/static/image/seccode/gif/OCR_A_Extended/r.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/t.gif b/static/image/seccode/gif/OCR_A_Extended/t.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/v.gif b/static/image/seccode/gif/OCR_A_Extended/v.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/w.gif b/static/image/seccode/gif/OCR_A_Extended/w.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/x.gif b/static/image/seccode/gif/OCR_A_Extended/x.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/OCR_A_Extended/y.gif b/static/image/seccode/gif/OCR_A_Extended/y.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/2.gif b/static/image/seccode/gif/Small_Fonts/2.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/3.gif b/static/image/seccode/gif/Small_Fonts/3.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/4.gif b/static/image/seccode/gif/Small_Fonts/4.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/6.gif b/static/image/seccode/gif/Small_Fonts/6.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/7.gif b/static/image/seccode/gif/Small_Fonts/7.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/8.gif b/static/image/seccode/gif/Small_Fonts/8.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/9.gif b/static/image/seccode/gif/Small_Fonts/9.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/b.gif b/static/image/seccode/gif/Small_Fonts/b.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/c.gif b/static/image/seccode/gif/Small_Fonts/c.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/e.gif b/static/image/seccode/gif/Small_Fonts/e.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/f.gif b/static/image/seccode/gif/Small_Fonts/f.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/g.gif b/static/image/seccode/gif/Small_Fonts/g.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/h.gif b/static/image/seccode/gif/Small_Fonts/h.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/index.htm b/static/image/seccode/gif/Small_Fonts/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/j.gif b/static/image/seccode/gif/Small_Fonts/j.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/k.gif b/static/image/seccode/gif/Small_Fonts/k.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/m.gif b/static/image/seccode/gif/Small_Fonts/m.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/p.gif b/static/image/seccode/gif/Small_Fonts/p.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/q.gif b/static/image/seccode/gif/Small_Fonts/q.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/r.gif b/static/image/seccode/gif/Small_Fonts/r.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/t.gif b/static/image/seccode/gif/Small_Fonts/t.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/v.gif b/static/image/seccode/gif/Small_Fonts/v.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/w.gif b/static/image/seccode/gif/Small_Fonts/w.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/x.gif b/static/image/seccode/gif/Small_Fonts/x.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/Small_Fonts/y.gif b/static/image/seccode/gif/Small_Fonts/y.gif old mode 100644 new mode 100755 diff --git a/static/image/seccode/gif/index.htm b/static/image/seccode/gif/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/index.htm b/static/image/seccode/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/c.mp3 b/static/image/seccode/sound/c.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/e.mp3 b/static/image/seccode/sound/e.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/f.mp3 b/static/image/seccode/sound/f.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/h.mp3 b/static/image/seccode/sound/h.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/index.htm b/static/image/seccode/sound/index.htm old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/k.mp3 b/static/image/seccode/sound/k.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/l.mp3 b/static/image/seccode/sound/l.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/m.mp3 b/static/image/seccode/sound/m.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/n.mp3 b/static/image/seccode/sound/n.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/o.mp3 b/static/image/seccode/sound/o.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/p.mp3 b/static/image/seccode/sound/p.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/q.mp3 b/static/image/seccode/sound/q.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/r.mp3 b/static/image/seccode/sound/r.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/s.mp3 b/static/image/seccode/sound/s.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/t.mp3 b/static/image/seccode/sound/t.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/u.mp3 b/static/image/seccode/sound/u.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/v.mp3 b/static/image/seccode/sound/v.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/w.mp3 b/static/image/seccode/sound/w.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/x.mp3 b/static/image/seccode/sound/x.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/y.mp3 b/static/image/seccode/sound/y.mp3 old mode 100644 new mode 100755 diff --git a/static/image/seccode/sound/z.mp3 b/static/image/seccode/sound/z.mp3 old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/1.gif b/static/image/smiley/comcom/1.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/10.gif b/static/image/smiley/comcom/10.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/11.gif b/static/image/smiley/comcom/11.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/12.gif b/static/image/smiley/comcom/12.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/13.gif b/static/image/smiley/comcom/13.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/14.gif b/static/image/smiley/comcom/14.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/15.gif b/static/image/smiley/comcom/15.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/16.gif b/static/image/smiley/comcom/16.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/17.gif b/static/image/smiley/comcom/17.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/18.gif b/static/image/smiley/comcom/18.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/19.gif b/static/image/smiley/comcom/19.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/2.gif b/static/image/smiley/comcom/2.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/20.gif b/static/image/smiley/comcom/20.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/21.gif b/static/image/smiley/comcom/21.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/22.gif b/static/image/smiley/comcom/22.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/23.gif b/static/image/smiley/comcom/23.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/24.gif b/static/image/smiley/comcom/24.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/25.gif b/static/image/smiley/comcom/25.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/26.gif b/static/image/smiley/comcom/26.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/27.gif b/static/image/smiley/comcom/27.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/28.gif b/static/image/smiley/comcom/28.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/29.gif b/static/image/smiley/comcom/29.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/3.gif b/static/image/smiley/comcom/3.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/30.gif b/static/image/smiley/comcom/30.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/4.gif b/static/image/smiley/comcom/4.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/5.gif b/static/image/smiley/comcom/5.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/6.gif b/static/image/smiley/comcom/6.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/7.gif b/static/image/smiley/comcom/7.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/8.gif b/static/image/smiley/comcom/8.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/9.gif b/static/image/smiley/comcom/9.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/comcom/index.htm b/static/image/smiley/comcom/index.htm old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/01.gif b/static/image/smiley/coolmonkey/01.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/02.gif b/static/image/smiley/coolmonkey/02.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/03.gif b/static/image/smiley/coolmonkey/03.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/04.gif b/static/image/smiley/coolmonkey/04.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/05.gif b/static/image/smiley/coolmonkey/05.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/06.gif b/static/image/smiley/coolmonkey/06.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/07.gif b/static/image/smiley/coolmonkey/07.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/08.gif b/static/image/smiley/coolmonkey/08.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/09.gif b/static/image/smiley/coolmonkey/09.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/10.gif b/static/image/smiley/coolmonkey/10.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/11.gif b/static/image/smiley/coolmonkey/11.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/12.gif b/static/image/smiley/coolmonkey/12.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/13.gif b/static/image/smiley/coolmonkey/13.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/14.gif b/static/image/smiley/coolmonkey/14.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/15.gif b/static/image/smiley/coolmonkey/15.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/16.gif b/static/image/smiley/coolmonkey/16.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/coolmonkey/index.htm b/static/image/smiley/coolmonkey/index.htm old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/biggrin.gif b/static/image/smiley/default/biggrin.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/call.gif b/static/image/smiley/default/call.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/cry.gif b/static/image/smiley/default/cry.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/curse.gif b/static/image/smiley/default/curse.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/dizzy.gif b/static/image/smiley/default/dizzy.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/funk.gif b/static/image/smiley/default/funk.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/handshake.gif b/static/image/smiley/default/handshake.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/huffy.gif b/static/image/smiley/default/huffy.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/hug.gif b/static/image/smiley/default/hug.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/index.htm b/static/image/smiley/default/index.htm old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/kiss.gif b/static/image/smiley/default/kiss.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/lol.gif b/static/image/smiley/default/lol.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/loveliness.gif b/static/image/smiley/default/loveliness.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/mad.gif b/static/image/smiley/default/mad.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/sad.gif b/static/image/smiley/default/sad.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/shocked.gif b/static/image/smiley/default/shocked.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/shutup.gif b/static/image/smiley/default/shutup.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/shy.gif b/static/image/smiley/default/shy.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/sleepy.gif b/static/image/smiley/default/sleepy.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/smile.gif b/static/image/smiley/default/smile.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/sweat.gif b/static/image/smiley/default/sweat.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/time.gif b/static/image/smiley/default/time.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/titter.gif b/static/image/smiley/default/titter.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/tongue.gif b/static/image/smiley/default/tongue.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/default/victory.gif b/static/image/smiley/default/victory.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/01.gif b/static/image/smiley/grapeman/01.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/02.gif b/static/image/smiley/grapeman/02.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/03.gif b/static/image/smiley/grapeman/03.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/04.gif b/static/image/smiley/grapeman/04.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/05.gif b/static/image/smiley/grapeman/05.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/06.gif b/static/image/smiley/grapeman/06.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/07.gif b/static/image/smiley/grapeman/07.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/08.gif b/static/image/smiley/grapeman/08.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/09.gif b/static/image/smiley/grapeman/09.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/10.gif b/static/image/smiley/grapeman/10.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/11.gif b/static/image/smiley/grapeman/11.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/12.gif b/static/image/smiley/grapeman/12.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/13.gif b/static/image/smiley/grapeman/13.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/14.gif b/static/image/smiley/grapeman/14.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/15.gif b/static/image/smiley/grapeman/15.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/16.gif b/static/image/smiley/grapeman/16.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/17.gif b/static/image/smiley/grapeman/17.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/18.gif b/static/image/smiley/grapeman/18.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/19.gif b/static/image/smiley/grapeman/19.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/20.gif b/static/image/smiley/grapeman/20.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/21.gif b/static/image/smiley/grapeman/21.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/22.gif b/static/image/smiley/grapeman/22.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/23.gif b/static/image/smiley/grapeman/23.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/24.gif b/static/image/smiley/grapeman/24.gif old mode 100644 new mode 100755 diff --git a/static/image/smiley/grapeman/index.htm b/static/image/smiley/grapeman/index.htm old mode 100644 new mode 100755 diff --git a/static/image/smiley/index.htm b/static/image/smiley/index.htm old mode 100644 new mode 100755 diff --git a/static/image/sound/index.htm b/static/image/sound/index.htm old mode 100644 new mode 100755 diff --git a/static/image/sound/pm_1.mp3 b/static/image/sound/pm_1.mp3 old mode 100644 new mode 100755 diff --git a/static/image/sound/pm_2.mp3 b/static/image/sound/pm_2.mp3 old mode 100644 new mode 100755 diff --git a/static/image/sound/pm_3.mp3 b/static/image/sound/pm_3.mp3 old mode 100644 new mode 100755 diff --git a/static/image/stamp/001.gif b/static/image/stamp/001.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/001.small.gif b/static/image/stamp/001.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/002.gif b/static/image/stamp/002.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/002.small.gif b/static/image/stamp/002.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/003.gif b/static/image/stamp/003.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/003.small.gif b/static/image/stamp/003.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/004.gif b/static/image/stamp/004.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/004.small.gif b/static/image/stamp/004.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/005.gif b/static/image/stamp/005.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/005.small.gif b/static/image/stamp/005.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/006.gif b/static/image/stamp/006.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/006.small.gif b/static/image/stamp/006.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/007.gif b/static/image/stamp/007.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/007.small.gif b/static/image/stamp/007.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/008.gif b/static/image/stamp/008.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/008.small.gif b/static/image/stamp/008.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/009.gif b/static/image/stamp/009.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/009.small.gif b/static/image/stamp/009.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/010.gif b/static/image/stamp/010.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/010.small.gif b/static/image/stamp/010.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/011.small.gif b/static/image/stamp/011.small.gif old mode 100644 new mode 100755 diff --git a/static/image/stamp/index.htm b/static/image/stamp/index.htm old mode 100644 new mode 100755 diff --git a/static/image/stat/aix.gif b/static/image/stat/aix.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/comments.gif b/static/image/stat/comments.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/firefox.gif b/static/image/stat/firefox.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/freebsd.gif b/static/image/stat/freebsd.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/index.htm b/static/image/stat/index.htm old mode 100644 new mode 100755 diff --git a/static/image/stat/konqueror.gif b/static/image/stat/konqueror.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/linux.gif b/static/image/stat/linux.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/lynx.gif b/static/image/stat/lynx.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/mac.gif b/static/image/stat/mac.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/mozilla.gif b/static/image/stat/mozilla.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/msie.gif b/static/image/stat/msie.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/netscape.gif b/static/image/stat/netscape.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/opera.gif b/static/image/stat/opera.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/os2.gif b/static/image/stat/os2.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/other.gif b/static/image/stat/other.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/safari.gif b/static/image/stat/safari.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/space.gif b/static/image/stat/space.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/spiders.gif b/static/image/stat/spiders.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/sunos.gif b/static/image/stat/sunos.gif old mode 100644 new mode 100755 diff --git a/static/image/stat/windows.gif b/static/image/stat/windows.gif old mode 100644 new mode 100755 diff --git a/static/image/task/apply.gif b/static/image/task/apply.gif old mode 100644 new mode 100755 diff --git a/static/image/task/avatar.gif b/static/image/task/avatar.gif old mode 100644 new mode 100755 diff --git a/static/image/task/blog.gif b/static/image/task/blog.gif old mode 100644 new mode 100755 diff --git a/static/image/task/cancel.gif b/static/image/task/cancel.gif old mode 100644 new mode 100755 diff --git a/static/image/task/coming.gif b/static/image/task/coming.gif old mode 100644 new mode 100755 diff --git a/static/image/task/disallow.gif b/static/image/task/disallow.gif old mode 100644 new mode 100755 diff --git a/static/image/task/email.gif b/static/image/task/email.gif old mode 100644 new mode 100755 diff --git a/static/image/task/friend.gif b/static/image/task/friend.gif old mode 100644 new mode 100755 diff --git a/static/image/task/gift.gif b/static/image/task/gift.gif old mode 100644 new mode 100755 diff --git a/static/image/task/gold.gif b/static/image/task/gold.gif old mode 100644 new mode 100755 diff --git a/static/image/task/index.htm b/static/image/task/index.htm old mode 100644 new mode 100755 diff --git a/static/image/task/profile.gif b/static/image/task/profile.gif old mode 100644 new mode 100755 diff --git a/static/image/task/reward.gif b/static/image/task/reward.gif old mode 100644 new mode 100755 diff --git a/static/image/task/rewardless.gif b/static/image/task/rewardless.gif old mode 100644 new mode 100755 diff --git a/static/image/task/start.gif b/static/image/task/start.gif old mode 100644 new mode 100755 diff --git a/static/image/task/task.gif b/static/image/task/task.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/bad.gif b/static/image/traderank/bad.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/0.gif b/static/image/traderank/buyer/0.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/1.gif b/static/image/traderank/buyer/1.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/10.gif b/static/image/traderank/buyer/10.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/11.gif b/static/image/traderank/buyer/11.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/12.gif b/static/image/traderank/buyer/12.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/13.gif b/static/image/traderank/buyer/13.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/14.gif b/static/image/traderank/buyer/14.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/15.gif b/static/image/traderank/buyer/15.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/2.gif b/static/image/traderank/buyer/2.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/3.gif b/static/image/traderank/buyer/3.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/4.gif b/static/image/traderank/buyer/4.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/5.gif b/static/image/traderank/buyer/5.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/6.gif b/static/image/traderank/buyer/6.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/7.gif b/static/image/traderank/buyer/7.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/8.gif b/static/image/traderank/buyer/8.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/9.gif b/static/image/traderank/buyer/9.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/buyer/index.htm b/static/image/traderank/buyer/index.htm old mode 100644 new mode 100755 diff --git a/static/image/traderank/good.gif b/static/image/traderank/good.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/index.htm b/static/image/traderank/index.htm old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/0.gif b/static/image/traderank/seller/0.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/1.gif b/static/image/traderank/seller/1.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/10.gif b/static/image/traderank/seller/10.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/11.gif b/static/image/traderank/seller/11.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/12.gif b/static/image/traderank/seller/12.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/13.gif b/static/image/traderank/seller/13.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/14.gif b/static/image/traderank/seller/14.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/15.gif b/static/image/traderank/seller/15.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/2.gif b/static/image/traderank/seller/2.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/3.gif b/static/image/traderank/seller/3.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/4.gif b/static/image/traderank/seller/4.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/5.gif b/static/image/traderank/seller/5.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/6.gif b/static/image/traderank/seller/6.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/7.gif b/static/image/traderank/seller/7.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/8.gif b/static/image/traderank/seller/8.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/9.gif b/static/image/traderank/seller/9.gif old mode 100644 new mode 100755 diff --git a/static/image/traderank/seller/index.htm b/static/image/traderank/seller/index.htm old mode 100644 new mode 100755 diff --git a/static/image/traderank/soso.gif b/static/image/traderank/soso.gif old mode 100644 new mode 100755 diff --git a/static/image/upgrade/bg_footer.gif b/static/image/upgrade/bg_footer.gif old mode 100644 new mode 100755 diff --git a/static/image/upgrade/bg_repno.gif b/static/image/upgrade/bg_repno.gif old mode 100644 new mode 100755 diff --git a/static/image/upgrade/bg_repx.gif b/static/image/upgrade/bg_repx.gif old mode 100644 new mode 100755 diff --git a/static/image/upgrade/close.gif b/static/image/upgrade/close.gif old mode 100644 new mode 100755 diff --git a/static/image/upgrade/index.htm b/static/image/upgrade/index.htm old mode 100644 new mode 100755 diff --git a/static/index.htm b/static/index.htm old mode 100644 new mode 100755 diff --git a/static/js/admincp.js b/static/js/admincp.js old mode 100644 new mode 100755 diff --git a/static/js/admincp_base.js b/static/js/admincp_base.js old mode 100644 new mode 100755 diff --git a/static/js/admincp_frame.js b/static/js/admincp_frame.js old mode 100644 new mode 100755 diff --git a/static/js/admincp_login.js b/static/js/admincp_login.js old mode 100644 new mode 100755 diff --git a/static/js/ajax.js b/static/js/ajax.js old mode 100644 new mode 100755 diff --git a/static/js/at.js b/static/js/at.js old mode 100644 new mode 100755 index 7530996..47331d0 --- a/static/js/at.js +++ b/static/js/at.js @@ -61,7 +61,7 @@ function extrafunc_atListMenu(tag, op) { } curatli = 0; setTimeout(function() {atFilter('', 'at_list','atListSet');$('atkeyword').focus();}, 100); - return '请输用户名:
    • @朋友账号,就能提醒他来看文章
    '; + return '请输用户名:
    • @朋友账号,就能提醒他来看帖子
    '; } else { if($('atkeyword').value) { str = '@' + $('atkeyword').value + (wysiwyg ? ' ' : ' '); @@ -158,7 +158,7 @@ function atFilter(kw, id, call, e, nae) { var atclass = i == curatli ? ' class="a"' : ''; newlist += '
  • ' + atResult[i] + '
  • '; } - $(id).innerHTML = '
      ' + newlist + '
    • @朋友账号,就能提醒他来看文章
    '; + $(id).innerHTML = '
      ' + newlist + '
    • @朋友账号,就能提醒他来看帖子
    '; } else { $(id).style.visibility = 'hidden'; } diff --git a/static/js/autoloadpage.js b/static/js/autoloadpage.js old mode 100644 new mode 100755 diff --git a/static/js/bbcode.js b/static/js/bbcode.js old mode 100644 new mode 100755 diff --git a/static/js/calendar.js b/static/js/calendar.js old mode 100644 new mode 100755 diff --git a/static/js/common.js b/static/js/common.js old mode 100644 new mode 100755 diff --git a/static/js/common_diy.js b/static/js/common_diy.js old mode 100644 new mode 100755 diff --git a/static/js/common_extra.js b/static/js/common_extra.js old mode 100644 new mode 100755 diff --git a/static/js/echarts/echarts.common.min.js b/static/js/echarts/echarts.common.min.js old mode 100644 new mode 100755 diff --git a/static/js/echarts/index.htm b/static/js/echarts/index.htm old mode 100644 new mode 100755 diff --git a/static/js/editor.js b/static/js/editor.js old mode 100644 new mode 100755 index fdb83f0..c83816b --- a/static/js/editor.js +++ b/static/js/editor.js @@ -1047,7 +1047,7 @@ function showEditorMenu(tag, params) { showHrBox(ctrlid, 'postbg'); break; case 'password': - str = '

    请输入文章密码:

    '; + str = '

    请输入帖子密码:

    '; break; case 'code': if(wysiwyg) { @@ -1064,7 +1064,7 @@ function showEditorMenu(tag, params) { if(selection) { return insertText((opentag + selection + closetag), strlen(opentag), strlen(closetag), true, sel); } - var lang = {'quote' : '请输入要插入的引用', 'code' : '请输入要插入的代码', 'hide' : '请输入要隐藏的信息内容', 'free' : '如果您设置了文章售价,请输入购买前免费可见的信息内容'}; + var lang = {'quote' : '请输入要插入的引用', 'code' : '请输入要插入的代码', 'hide' : '请输入要隐藏的信息内容', 'free' : '如果您设置了帖子售价,请输入购买前免费可见的信息内容'}; str += lang[tag] + ':
    ' + (tag == 'hide' ? '

    时才显示


    距离发帖日期大于这个天数时标签自动失效' : ''); break; @@ -1097,14 +1097,14 @@ function showEditorMenu(tag, params) { menutype = 'win'; break; case 'index': - stitle = '创建文章目录'; + stitle = '创建帖子目录'; str = '

    [index]
    \n\ [#页码]标题   跳转到指定的页
    \n\ - *[#tid,pid]标题   跳转到指定的文章
    \n\ + *[#tid,pid]标题   跳转到指定的帖子
    \n\ [/index]
    \n\
    \n\ - 页码   用 [page] 对当前文章分页后的页码
    \n\ - tid,pid   文章的 TID 和 PID
    \n\ + 页码   用 [page] 对当前帖子分页后的页码
    \n\ + tid,pid   帖子的 TID 和 PID
    \n\ *   添加行首缩进

    '; break; default: diff --git a/static/js/fileprogress.js b/static/js/fileprogress.js old mode 100644 new mode 100755 diff --git a/static/js/forum.js b/static/js/forum.js old mode 100644 new mode 100755 index 5e7c9ea..49dba9e --- a/static/js/forum.js +++ b/static/js/forum.js @@ -248,7 +248,7 @@ function fastpostvalidate(theform, noajaxpost) { return false; } if(!disablepostctrl && ((postminchars != 0 && mb_strlen(theform.message.value) < postminchars) || (postmaxchars != 0 && mb_strlen(theform.message.value) > postmaxchars))) { - s = '您的文章长度不符合要求。\n\n当前长度: ' + mb_strlen(theform.message.value) + ' ' + '字节\n系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节'; + s = '您的帖子长度不符合要求。\n\n当前长度: ' + mb_strlen(theform.message.value) + ' ' + '字节\n系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节'; } if(s) { showError(s); @@ -320,7 +320,7 @@ function loadData(quiet, formobj) { return; } - if(!quiet && !confirm('此操作将覆盖当前文章内容,确定要恢复数据吗?')) { + if(!quiet && !confirm('此操作将覆盖当前帖子内容,确定要恢复数据吗?')) { return; } diff --git a/static/js/forum_moderate.js b/static/js/forum_moderate.js old mode 100644 new mode 100755 index 51065bc..8172b5e --- a/static/js/forum_moderate.js +++ b/static/js/forum_moderate.js @@ -24,7 +24,7 @@ function modaction(action, pid, extra, mod) { var checked = 1; } if(!checked) { - alert('请选择需要操作的文章'); + alert('请选择需要操作的帖子'); } else { $('modactions').action = mod + '&action='+ action +'&fid=' + fid + '&tid=' + tid + '&handlekey=mods&infloat=yes&nopost=yes' + (!pid ? '' : '&topiclist[]=' + pid) + extra + '&r' + Math.random(); showWindow('mods', 'modactions', 'post'); @@ -120,7 +120,7 @@ function tmodthreads(optgroup, operation) { } } if(!checked) { - alert('请选择需要操作的文章'); + alert('请选择需要操作的帖子'); } else { $('moderate').optgroup.value = optgroup; $('moderate').operation.value = operation; diff --git a/static/js/forum_post.js b/static/js/forum_post.js old mode 100644 new mode 100755 index 9e31f76..84d5053 --- a/static/js/forum_post.js +++ b/static/js/forum_post.js @@ -105,7 +105,7 @@ function validate(theform) { } if(!disablepostctrl && !sortid && !special && ((postminchars != 0 && mb_strlen(message) < postminchars) || (postmaxchars != 0 && mb_strlen(message) > postmaxchars))) { - showError('您的文章长度不符合要求。\n\n当前长度: ' + mb_strlen(message) + ' 字节\n系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节'); + showError('您的帖子长度不符合要求。\n\n当前长度: ' + mb_strlen(message) + ' 字节\n系统限制: ' + postminchars + ' 到 ' + postmaxchars + ' 字节'); return false; } if(UPLOADSTATUS == 0) { @@ -113,7 +113,7 @@ function validate(theform) { return false; } } else if(UPLOADSTATUS == 1) { - showDialog('您有正在上传的附件,请稍候,上传完成后文章将会自动发表...', 'notice'); + showDialog('您有正在上传的附件,请稍候,上传完成后帖子将会自动发表...', 'notice'); AUTOPOST = 1; return false; } @@ -860,7 +860,7 @@ function extraCheckall() { } function deleteThread() { - if(confirm('确定要删除该文章吗?') != 0){ + if(confirm('确定要删除该帖子吗?') != 0){ $('delete').value = '1'; $('postform').submit(); } diff --git a/static/js/forum_slide.js b/static/js/forum_slide.js old mode 100644 new mode 100755 diff --git a/static/js/forum_viewthread.js b/static/js/forum_viewthread.js old mode 100644 new mode 100755 index d26d854..1b46bb0 --- a/static/js/forum_viewthread.js +++ b/static/js/forum_viewthread.js @@ -245,7 +245,7 @@ function succeedhandle_fastpost(locationhref, message, param) { $('fastpostreturn').className = ''; } else { if(!message) { - message = '本版回帖需要审核,您的文章将在通过审核后显示'; + message = '本版回帖需要审核,您的帖子将在通过审核后显示'; } $('post_new').style.display = $('fastpostmessage').value = $('fastpostreturn').className = ''; $('fastpostreturn').innerHTML = message; @@ -389,7 +389,7 @@ function toggleRatelogCollapse(tarId, ctrlObj) { function copyThreadUrl(obj, bbname) { bbname = bbname || SITEURL; - setCopy($('thread_subject').innerHTML.replace(/&/g, '&') + '\n' + obj.href + '\n' + '(出处: '+bbname+')' + '\n', '文章地址已经复制到剪贴板'); + setCopy($('thread_subject').innerHTML.replace(/&/g, '&') + '\n' + obj.href + '\n' + '(出处: '+bbname+')' + '\n', '帖子地址已经复制到剪贴板'); return false; } diff --git a/static/js/google.js b/static/js/google.js old mode 100644 new mode 100755 diff --git a/static/js/handlers.js b/static/js/handlers.js old mode 100644 new mode 100755 diff --git a/static/js/home.js b/static/js/home.js old mode 100644 new mode 100755 diff --git a/static/js/home_drag.js b/static/js/home_drag.js old mode 100644 new mode 100755 diff --git a/static/js/home_friendselector.js b/static/js/home_friendselector.js old mode 100644 new mode 100755 diff --git a/static/js/home_uploadpic.js b/static/js/home_uploadpic.js old mode 100644 new mode 100755 diff --git a/static/js/html2dynamic.js b/static/js/html2dynamic.js old mode 100644 new mode 100755 diff --git a/static/js/html5notification.js b/static/js/html5notification.js old mode 100644 new mode 100755 diff --git a/static/js/imgcropper.js b/static/js/imgcropper.js old mode 100644 new mode 100755 diff --git a/static/js/index.htm b/static/js/index.htm old mode 100644 new mode 100755 diff --git a/static/js/jquery/index.htm b/static/js/jquery/index.htm old mode 100644 new mode 100755 diff --git a/static/js/jquery/jquery.min.js b/static/js/jquery/jquery.min.js old mode 100644 new mode 100755 diff --git a/static/js/logging.js b/static/js/logging.js old mode 100644 new mode 100755 diff --git a/static/js/makehtml.js b/static/js/makehtml.js old mode 100644 new mode 100755 diff --git a/static/js/md5.js b/static/js/md5.js old mode 100644 new mode 100755 diff --git a/static/js/mobile/ajaxfileupload.js b/static/js/mobile/ajaxfileupload.js old mode 100644 new mode 100755 diff --git a/static/js/mobile/buildfileupload.js b/static/js/mobile/buildfileupload.js old mode 100644 new mode 100755 diff --git a/static/js/mobile/common.js b/static/js/mobile/common.js old mode 100644 new mode 100755 diff --git a/static/js/mobile/index.htm b/static/js/mobile/index.htm old mode 100644 new mode 100755 diff --git a/static/js/mobile/jquery.min.js b/static/js/mobile/jquery.min.js old mode 100644 new mode 100755 diff --git a/static/js/player/aplayer.min.css b/static/js/player/aplayer.min.css old mode 100644 new mode 100755 diff --git a/static/js/player/aplayer.min.css.map b/static/js/player/aplayer.min.css.map old mode 100644 new mode 100755 diff --git a/static/js/player/aplayer.min.js b/static/js/player/aplayer.min.js old mode 100644 new mode 100755 diff --git a/static/js/player/aplayer.min.js.map b/static/js/player/aplayer.min.js.map old mode 100644 new mode 100755 diff --git a/static/js/player/dplayer.min.css b/static/js/player/dplayer.min.css old mode 100644 new mode 100755 diff --git a/static/js/player/dplayer.min.css.map b/static/js/player/dplayer.min.css.map old mode 100644 new mode 100755 diff --git a/static/js/player/dplayer.min.js b/static/js/player/dplayer.min.js old mode 100644 new mode 100755 diff --git a/static/js/player/dplayer.min.js.map b/static/js/player/dplayer.min.js.map old mode 100644 new mode 100755 diff --git a/static/js/player/flv.min.js b/static/js/player/flv.min.js old mode 100644 new mode 100755 diff --git a/static/js/player/flv.min.js.map b/static/js/player/flv.min.js.map old mode 100644 new mode 100755 diff --git a/static/js/player/index.htm b/static/js/player/index.htm old mode 100644 new mode 100755 diff --git a/static/js/portal.js b/static/js/portal.js old mode 100644 new mode 100755 diff --git a/static/js/portal_diy.js b/static/js/portal_diy.js old mode 100644 new mode 100755 diff --git a/static/js/portal_diy_data.js b/static/js/portal_diy_data.js old mode 100644 new mode 100755 diff --git a/static/js/portal_upload.js b/static/js/portal_upload.js old mode 100644 new mode 100755 diff --git a/static/js/qrcode/index.htm b/static/js/qrcode/index.htm old mode 100644 new mode 100755 diff --git a/static/js/qrcode/qrcode.min.js b/static/js/qrcode/qrcode.min.js old mode 100644 new mode 100755 diff --git a/static/js/redef.js b/static/js/redef.js old mode 100644 new mode 100755 diff --git a/static/js/register.js b/static/js/register.js old mode 100644 new mode 100755 diff --git a/static/js/seditor.js b/static/js/seditor.js old mode 100644 new mode 100755 index 4de4335..134b155 --- a/static/js/seditor.js +++ b/static/js/seditor.js @@ -40,7 +40,7 @@ function seditor_menu(seditorkey, tag) { curatli = 0; atsubmitid = ctrlid + '_submit'; setTimeout(function() {atFilter('', 'at_list','atListSet');$('atkeyword').focus();}, 100); - str = '请输用户名:
    • @朋友账号,就能提醒他来看文章
    '; + str = '请输用户名:
    • @朋友账号,就能提醒他来看帖子
    '; submitstr = 'seditor_insertunit(\'' + seditorkey + '\', \'@\' + $(\'atkeyword\').value.replace(/<\\/?b>/g, \'\')+\' \'); hideMenu();'; break; case 'url': diff --git a/static/js/smilies.js b/static/js/smilies.js old mode 100644 new mode 100755 diff --git a/static/js/space_diy.js b/static/js/space_diy.js old mode 100644 new mode 100755 diff --git a/static/js/stat.js b/static/js/stat.js old mode 100644 new mode 100755 diff --git a/static/js/swfupload.js b/static/js/swfupload.js old mode 100644 new mode 100755 diff --git a/static/js/swfupload.queue.js b/static/js/swfupload.queue.js old mode 100644 new mode 100755 diff --git a/static/js/swiper/index.htm b/static/js/swiper/index.htm old mode 100644 new mode 100755 diff --git a/static/js/swiper/swiper-bundle.min.js b/static/js/swiper/swiper-bundle.min.js old mode 100644 new mode 100755 diff --git a/static/js/threadsort.js b/static/js/threadsort.js old mode 100644 new mode 100755 diff --git a/static/js/tree.js b/static/js/tree.js old mode 100644 new mode 100755 diff --git a/static/js/upload.js b/static/js/upload.js old mode 100644 new mode 100755 diff --git a/static/js/webuploader.js b/static/js/webuploader.js old mode 100644 new mode 100755 diff --git a/static/js/webuploader/index.htm b/static/js/webuploader/index.htm old mode 100644 new mode 100755 diff --git a/static/js/webuploader/webuploader.css b/static/js/webuploader/webuploader.css old mode 100644 new mode 100755 diff --git a/static/js/webuploader/webuploader.min.js b/static/js/webuploader/webuploader.min.js old mode 100644 new mode 100755 diff --git a/static/space/index.htm b/static/space/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t1/images/header.jpg b/static/space/t1/images/header.jpg old mode 100644 new mode 100755 diff --git a/static/space/t1/images/index.htm b/static/space/t1/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t1/images/title.png b/static/space/t1/images/title.png old mode 100644 new mode 100755 diff --git a/static/space/t1/index.htm b/static/space/t1/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t1/preview.jpg b/static/space/t1/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t1/style.css b/static/space/t1/style.css old mode 100644 new mode 100755 diff --git a/static/space/t2/images/body_bg.png b/static/space/t2/images/body_bg.png old mode 100644 new mode 100755 diff --git a/static/space/t2/images/ct-bottom.png b/static/space/t2/images/ct-bottom.png old mode 100644 new mode 100755 diff --git a/static/space/t2/images/ct-top.png b/static/space/t2/images/ct-top.png old mode 100644 new mode 100755 diff --git a/static/space/t2/images/header.png b/static/space/t2/images/header.png old mode 100644 new mode 100755 diff --git a/static/space/t2/images/index.htm b/static/space/t2/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t2/images/title.png b/static/space/t2/images/title.png old mode 100644 new mode 100755 diff --git a/static/space/t2/index.htm b/static/space/t2/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t2/preview.jpg b/static/space/t2/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t2/style.css b/static/space/t2/style.css old mode 100644 new mode 100755 diff --git a/static/space/t3/images/body_bg.png b/static/space/t3/images/body_bg.png old mode 100644 new mode 100755 diff --git a/static/space/t3/images/ct-bottom.png b/static/space/t3/images/ct-bottom.png old mode 100644 new mode 100755 diff --git a/static/space/t3/images/ct-top.png b/static/space/t3/images/ct-top.png old mode 100644 new mode 100755 diff --git a/static/space/t3/images/header.jpg b/static/space/t3/images/header.jpg old mode 100644 new mode 100755 diff --git a/static/space/t3/images/index.htm b/static/space/t3/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t3/index.htm b/static/space/t3/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t3/preview.jpg b/static/space/t3/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t3/style.css b/static/space/t3/style.css old mode 100644 new mode 100755 diff --git a/static/space/t4/images/bg.png b/static/space/t4/images/bg.png old mode 100644 new mode 100755 diff --git a/static/space/t4/images/header.png b/static/space/t4/images/header.png old mode 100644 new mode 100755 diff --git a/static/space/t4/images/index.htm b/static/space/t4/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t4/index.htm b/static/space/t4/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t4/preview.jpg b/static/space/t4/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t4/style.css b/static/space/t4/style.css old mode 100644 new mode 100755 diff --git a/static/space/t5/images/bg.png b/static/space/t5/images/bg.png old mode 100644 new mode 100755 diff --git a/static/space/t5/images/index.htm b/static/space/t5/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t5/index.htm b/static/space/t5/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t5/preview.jpg b/static/space/t5/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t5/style.css b/static/space/t5/style.css old mode 100644 new mode 100755 diff --git a/static/space/t6/images/bg.png b/static/space/t6/images/bg.png old mode 100644 new mode 100755 diff --git a/static/space/t6/images/ct-top.png b/static/space/t6/images/ct-top.png old mode 100644 new mode 100755 diff --git a/static/space/t6/images/footer.png b/static/space/t6/images/footer.png old mode 100644 new mode 100755 diff --git a/static/space/t6/images/index.htm b/static/space/t6/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t6/index.htm b/static/space/t6/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t6/preview.jpg b/static/space/t6/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t6/style.css b/static/space/t6/style.css old mode 100644 new mode 100755 diff --git a/static/space/t7/images/bg.png b/static/space/t7/images/bg.png old mode 100644 new mode 100755 diff --git a/static/space/t7/images/ct.png b/static/space/t7/images/ct.png old mode 100644 new mode 100755 diff --git a/static/space/t7/images/header.png b/static/space/t7/images/header.png old mode 100644 new mode 100755 diff --git a/static/space/t7/images/index.htm b/static/space/t7/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t7/images/title.png b/static/space/t7/images/title.png old mode 100644 new mode 100755 diff --git a/static/space/t7/index.htm b/static/space/t7/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t7/preview.jpg b/static/space/t7/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t7/style.css b/static/space/t7/style.css old mode 100644 new mode 100755 diff --git a/static/space/t8/images/bg.png b/static/space/t8/images/bg.png old mode 100644 new mode 100755 diff --git a/static/space/t8/images/ct-top.png b/static/space/t8/images/ct-top.png old mode 100644 new mode 100755 diff --git a/static/space/t8/images/footer.png b/static/space/t8/images/footer.png old mode 100644 new mode 100755 diff --git a/static/space/t8/images/header.png b/static/space/t8/images/header.png old mode 100644 new mode 100755 diff --git a/static/space/t8/images/index.htm b/static/space/t8/images/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t8/index.htm b/static/space/t8/index.htm old mode 100644 new mode 100755 diff --git a/static/space/t8/preview.jpg b/static/space/t8/preview.jpg old mode 100644 new mode 100755 diff --git a/static/space/t8/style.css b/static/space/t8/style.css old mode 100644 new mode 100755 diff --git a/static/topic/index.htm b/static/topic/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/banner.jpg b/static/topic/t1/images/blue/banner.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/btn.png b/static/topic/t1/images/blue/btn.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/dot_1.png b/static/topic/t1/images/blue/dot_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/dot_2.png b/static/topic/t1/images/blue/dot_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/dot_3.png b/static/topic/t1/images/blue/dot_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/dot_4.png b/static/topic/t1/images/blue/dot_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/index.htm b/static/topic/t1/images/blue/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/nav.png b/static/topic/t1/images/blue/nav.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/style.css b/static/topic/t1/images/blue/style.css old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_1.png b/static/topic/t1/images/blue/title_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_2.png b/static/topic/t1/images/blue/title_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_3.png b/static/topic/t1/images/blue/title_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_4.png b/static/topic/t1/images/blue/title_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_5.png b/static/topic/t1/images/blue/title_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/blue/title_6.png b/static/topic/t1/images/blue/title_6.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/banner.jpg b/static/topic/t1/images/green/banner.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/btn.png b/static/topic/t1/images/green/btn.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/dot_1.png b/static/topic/t1/images/green/dot_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/dot_2.png b/static/topic/t1/images/green/dot_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/dot_3.png b/static/topic/t1/images/green/dot_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/dot_4.png b/static/topic/t1/images/green/dot_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/dot_5.png b/static/topic/t1/images/green/dot_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/index.htm b/static/topic/t1/images/green/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/nav.png b/static/topic/t1/images/green/nav.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/style.css b/static/topic/t1/images/green/style.css old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_1.png b/static/topic/t1/images/green/title_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_2.png b/static/topic/t1/images/green/title_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_3.png b/static/topic/t1/images/green/title_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_4.png b/static/topic/t1/images/green/title_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_5.png b/static/topic/t1/images/green/title_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/green/title_6.png b/static/topic/t1/images/green/title_6.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/banner.jpg b/static/topic/t1/images/grey/banner.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/btn.png b/static/topic/t1/images/grey/btn.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/dot_1.png b/static/topic/t1/images/grey/dot_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/dot_2.png b/static/topic/t1/images/grey/dot_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/dot_3.png b/static/topic/t1/images/grey/dot_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/dot_4.png b/static/topic/t1/images/grey/dot_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/index.htm b/static/topic/t1/images/grey/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/nav.png b/static/topic/t1/images/grey/nav.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/style.css b/static/topic/t1/images/grey/style.css old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_1.png b/static/topic/t1/images/grey/title_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_2.png b/static/topic/t1/images/grey/title_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_3.png b/static/topic/t1/images/grey/title_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_4.png b/static/topic/t1/images/grey/title_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_5.png b/static/topic/t1/images/grey/title_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/grey/title_6.png b/static/topic/t1/images/grey/title_6.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/index.htm b/static/topic/t1/images/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/banner.jpg b/static/topic/t1/images/red/banner.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/body.jpg b/static/topic/t1/images/red/body.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/btn.png b/static/topic/t1/images/red/btn.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/dot_1.png b/static/topic/t1/images/red/dot_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/dot_2.png b/static/topic/t1/images/red/dot_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/dot_3.png b/static/topic/t1/images/red/dot_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/dot_4.png b/static/topic/t1/images/red/dot_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/dot_5.png b/static/topic/t1/images/red/dot_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/index.htm b/static/topic/t1/images/red/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/nav.png b/static/topic/t1/images/red/nav.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/style.css b/static/topic/t1/images/red/style.css old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/title_1.png b/static/topic/t1/images/red/title_1.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/title_2.png b/static/topic/t1/images/red/title_2.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/title_3.png b/static/topic/t1/images/red/title_3.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/title_4.png b/static/topic/t1/images/red/title_4.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/images/red/title_5.png b/static/topic/t1/images/red/title_5.png old mode 100644 new mode 100755 diff --git a/static/topic/t1/index.htm b/static/topic/t1/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t1/preview.jpg b/static/topic/t1/preview.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t1/style.css b/static/topic/t1/style.css old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/bg.png b/static/topic/t2/images/bg.png old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/bnr-1.jpg b/static/topic/t2/images/bnr-1.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/bnr-2.png b/static/topic/t2/images/bnr-2.png old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/index.htm b/static/topic/t2/images/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/title-2.png b/static/topic/t2/images/title-2.png old mode 100644 new mode 100755 diff --git a/static/topic/t2/images/title.png b/static/topic/t2/images/title.png old mode 100644 new mode 100755 diff --git a/static/topic/t2/index.htm b/static/topic/t2/index.htm old mode 100644 new mode 100755 diff --git a/static/topic/t2/preview.jpg b/static/topic/t2/preview.jpg old mode 100644 new mode 100755 diff --git a/static/topic/t2/style.css b/static/topic/t2/style.css old mode 100644 new mode 100755 diff --git a/template/ahome_common/cache.inc.php b/template/ahome_common/cache.inc.php new file mode 100644 index 0000000..74311ca --- /dev/null +++ b/template/ahome_common/cache.inc.php @@ -0,0 +1,18 @@ + use { +animation: move-forever 25s cubic-bezier(.55,.5,.45,.5) infinite; +} + +.parallax > use:nth-child(1) { +animation-delay: -2s; +animation-duration: 7s; +} + +.parallax > use:nth-child(2) { +animation-delay: -3s; +animation-duration: 10s; +} + +.parallax > use:nth-child(3) { +animation-delay: -4s; +animation-duration: 13s; +} + +.parallax > use:nth-child(4) { +animation-delay: -5s; +animation-duration: 20s; +} + +@keyframes move-forever { +0% { +transform: translate3d(-90px,0,0); +} + +100% { +transform: translate3d(85px,0,0); +} +} + +@media (max-width: 768px) { + +.waves { +height: 40px; +min-height: 40px; +} + +.content { +height: 30vh; +} + +h1 { +font-size: 24px; +} +} \ No newline at end of file diff --git a/template/ahome_common/common/extend_module.css b/template/ahome_common/common/extend_module.css new file mode 100644 index 0000000..b1c49c9 --- /dev/null +++ b/template/ahome_common/common/extend_module.css @@ -0,0 +1,30 @@ + +/** forum **/ + +.pls {width: 180px; background: #F9F9F9;border-right: 1px solid #F5F5F5; padding-top:0px;} +.pls .avatar {margin: 15px 15px 5px; text-align: center;} +.vuimg { margin-top: -16px!important;} +.bui {padding: 15px 0 15px 24px; box-shadow: none;width: 440px !important;} +.pls .avatar img, .avtm img {background: #fff; padding: 5px;border: 1px solid #e3e3e3; border-radius:10px;} +.pls .pi {padding: 0 0 10px 0;text-align: center;border-bottom: none; margin: 10px;} +.pls .pi .authi a { color: #777; font-size: 16px;text-decoration: none;} +.pls .tns { background: #f1f1f1; padding: 8px 0; margin: 0 13px 10px; border-radius: 0} +.tns th, .tns td { text-align: center;font-size: 12px;} +.tns th { border-right: 1px solid #e3e3e3;} +.tns th, .tns td, .tns th a, .tns td a,.pls p em a, .pls dt em,.pls p, .pls .pil, .pls .o,.cp_pls a{ color:#888;} +.pls .plso { margin: 5px 0px 10px 16px;} +.pls .plso li {float: left; overflow: hidden; width: 72px; margin-right: 10px;} +.pls .plso li a { background: #ffa000; height: 24px; line-height: 24px; padding: 0 10px;text-indent: 0;text-align: center; display: block; width: 52px; color: #fff;} +.pls .plso li.addflw a:hover{background: #ffa000; text-decoration: none} +.pls .plso li.pm2 a { background: #F0BE21} +.pls .plso li.pm2 a:hover { background: #ffa000; text-decoration:none;} +.ptn {border-top-left-radius:10px;} + + +#fwin_mods *{font-size:12px;} +#fwin_mods input{border-radius:2px;padding:2px 2px;} +#fwin_mods .colorwd {border-radius:0px;padding:0px !important;background-repeat:no-repeat;min-height:20px;height:20px !important;width:20px !important;overflow:hidden;} + + + +/** end **/ \ No newline at end of file diff --git a/template/ahome_common/common/footer.htm b/template/ahome_common/common/footer.htm new file mode 100644 index 0000000..8ce535d --- /dev/null +++ b/template/ahome_common/common/footer.htm @@ -0,0 +1,180 @@ +
    +
    +
    + + + + + +
    +
    +
    + {lang close} +

    + {$_G['cache']['focus']['title']}{lang focus_hottopics} + {lang footer_previous} /$focusnum {lang footer_next} +

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + +
    +
    + {if $styleconfig['bottomtxt']} +
     
    + {/if} +

    + QQ| + $nav[code]| + $_G['setting']['sitename'] + ( $_G['setting']['icp'] ) + + $_G['setting']['statcode'] +

    +

    + {lang time_now} + + , Processed in $_G[debuginfo][time] second(s), $_G[debuginfo][queries] queries + , Gzip On, On. + + +

    +
    +
    + {if $styleconfig['bottomtxt']} +
    {$styleconfig['bottomtxt']}
    + {/if} +

    Powered by Discuz! $_G['setting']['version'] Licensed

    +

    Copyright © 2001-2020, Tencent Cloud.

    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/ahome_common/common/header.htm b/template/ahome_common/common/header.htm new file mode 100644 index 0000000..8a76a4e --- /dev/null +++ b/template/ahome_common/common/header.htm @@ -0,0 +1,279 @@ + + + + + + + + + + + $rsshead + + + + + + + + + + + + + + + + + + + + + + +{if $styleconfig['ifopen']} + + +{/if} + + + + + +
    + + + + + + + + + $diynav + +
    + + +
    + {lang your_mobile_browser}{lang go_to_mobile} | {lang to_be_continue} +
    + + +
    + {lang close} + {lang shortcut_notice} + {lang shortcut_add} + +
    + + +
    + +
    +
    + + $nav[code] + + +
    +
    +
    + +
    + {lang switch_blind} + + + $nav[code] + + + {lang switch_narrow}{lang switch_wide} + + {lang changestyle} + + $diynav + +
    +
    +
    + + + + + + + + + + + + + + +
    +
    +
    + + {if !$styleconfig['ifopen']} +

    $_G['setting']['navlogos'][$mnid]

    + {else} + {if !$styleconfig['hidelogo']} + {if $styleconfig['logo']} +

    + {else} +

    $_G['setting']['navlogos'][$mnid]

    + {/if} + {else} + + {/if} + {/if} +
    + +
    + +
    +
    +
    + {lang my_nav} +
      + +
    • + +
    + +
    + + + + + $_G[setting][menunavs] +
    + + + +
      + $subnav +
    + + + +
    + +
    +
    + + + +
    +{if !$styleconfig['ifopen']} + +{/if} +
    +
    + +
    + + + + + + + + + + + +
    + +
    + + + + + + +
    + + + +{if $styleconfig['ifopen'] && $styleconfig['waves']==1} + +{/if} + +
    \ No newline at end of file diff --git a/template/ahome_common/common/header_userstatus.htm b/template/ahome_common/common/header_userstatus.htm new file mode 100644 index 0000000..8b85137 --- /dev/null +++ b/template/ahome_common/common/header_userstatus.htm @@ -0,0 +1,81 @@ + + + + +

    + + |{lang activation} + |{lang logout} +

    + +
    + +
    +

    + {lang login}  + | + $_G['setting']['reglinkname'] +

    + +

    + {$_G[group][grouptitle]}您好!登录后享受更多精彩 +

    + {if $styleconfig['usercolor']} + + {/if} +
    + +
    +
    + +
    +
    +

    + {$_G[member][username]} + + |{lang logout} +

    +

    + {lang credits}: 0 + |{lang usergroup}: $_G[group][grouptitle] +

    +
    + \ No newline at end of file diff --git a/template/ahome_common/common/pluginsetting.htm b/template/ahome_common/common/pluginsetting.htm new file mode 100644 index 0000000..055ad54 --- /dev/null +++ b/template/ahome_common/common/pluginsetting.htm @@ -0,0 +1,139 @@ + \ No newline at end of file diff --git a/template/ahome_common/common/pubsearchform.htm b/template/ahome_common/common/pubsearchform.htm new file mode 100644 index 0000000..c85981e --- /dev/null +++ b/template/ahome_common/common/pubsearchform.htm @@ -0,0 +1,56 @@ + + +
  • {lang search_this_forum}
  • +
  • {lang article}
  • +
  • {lang thread}
  • +
  • {lang blog}
  • +
  • {lang album}
  • +
  • $_G['setting']['navs'][3]['navname']
  • +
  • {lang users}
  • + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + \ No newline at end of file diff --git a/template/ahome_common/common/widthauto.css b/template/ahome_common/common/widthauto.css new file mode 100644 index 0000000..5175d72 --- /dev/null +++ b/template/ahome_common/common/widthauto.css @@ -0,0 +1,50 @@ +/* ---------------------------------- +Self-adaption Width CSS file for Discuz! X +(C) Discuz Team. +http://www.comsenz.com +Created & Modified by Pony. +---------------------------------- */ + +.wp { width: 98%; } + #hd .wp, #wp { min-width: 960px; } + +.ct2 { margin-right: 335px !important; } + .ct2 .sd { margin-right: -335px !important; width:320px !important;} + .ie7 .ct2 .sd { margin-left: 15px; } + .ie6 .ct2 .sd { padding-left: 15px; position: relative; } + .ct2 .mn { width: 100%; } + +.ct2 #chart, .ct2 #an { margin-right: -235px; } + .ie6 .ct2 #chart, .ie6 .ct2 #an { position: relative; } + +.ct2_a { padding-left: 260px; } + .ct2_a .appl { margin-left: -260px; } + .ie6 .ct2_a .appl { position: relative; display: inline; } + .ct2_a .mn { width: 99%; } + #nv_userapp .ct2_a .mn, .ct2_a_r .mn { width: 99%; } + +.ct3_a { padding: 0 240px 0 160px; } + .ct3_a .appl { margin-left: -160px; } + .ie6 .ct3_a .appl, .ie6 .ct3_a .sd { display: inline; } + .ct3_a .sd { margin-right: -240px; } + .ct3_a .mn { margin: 0; width: 100%; } + +#nv, #mu { border-left: 1px solid {COMMONBORDER}; border-right: 1px solid {COMMONBORDER}; } + +#nv { background-repeat: repeat-x; background-position: 0 -33px; } + +#mu ul { border-bottom: 1px solid {COMMONBORDER}; background-image: none; background-color: {COMMONBG}; } + +.pg_post .ct2_a { margin-left: 0; padding-left: 0; } + .pg_post .ct2_a .appl { margin-left: 0; background: none; } +.pg_modcp .ct2_a, .pg_announcement .ct2_a { border: none; } + .pg_modcp .ct2_a .mn, .pg_announcement .ct2_a .mn { margin-right: 0; padding-top: 0; } + +.tdats .tdat { width: 20%; } +.tdats .tfxf { width: 79.5%; } +.tdats .tfx, .tdats .tb, .tscr { width: 39.5%; } + .tscr .tdat, .tscr .tdat th, .tscr .tdat td { width: 100%; } + +.widthauto #toptb #diy-tg_menu { margin: -7px 0 0 -1px; } +.widthauto .switchwidth { background-position: 100% -18px; } +.widthauto .switchwidth:hover { background: url({IMGDIR}/switch_width.png) no-repeat 100% -54px; } \ No newline at end of file diff --git a/template/ahome_common/discuz_style_Tsmini Common.xml b/template/ahome_common/discuz_style_Tsmini Common.xml new file mode 100644 index 0000000..ef3b394 --- /dev/null +++ b/template/ahome_common/discuz_style_Tsmini Common.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/ahome_common/forum/discuz.htm b/template/ahome_common/forum/discuz.htm new file mode 100644 index 0000000..f7b2380 --- /dev/null +++ b/template/ahome_common/forum/discuz.htm @@ -0,0 +1,611 @@ + + +
    + +
    +
    +
    +
    {lang announcements}: 
    +
    +
      $announcements
    +
    +
    +
    + +
    + + +
    +
    + + + + + + + + + +
    +
    +
    + + +
    + +
      + +
    • {echo date("n月j日",$_G['timestamp']);}

      {echo "星期".$weekarray[date("w",$_G['timestamp'])]}

    • +
    • $todayposts

      {lang index_today}

    • +
    • $postdata[0]

      {lang index_yesterday}

    • +
    • $posts

      {lang index_posts}

    • +
    • $_G['cache']['userstats']['totalmembers']

      {lang index_members}

    • +
    • $_G['cache']['userstats']['newsetuser']

      {lang welcome_new_members}

    • +
    + + +
    +
    +
    + + + +
    +
    +
    + + + + + + + + + + +
    +
    +

    {lang latest_images}

    +
    + + +
    +
    +
    +
    +

    {lang collection_lastthread}

    + +
    +
    +
    +

    {lang show_newthreads}

    + +
    +
    +
    +

    {lang hot_thread}

    + +
    +
    +
    +

    {lang post_digest_thread}

    + +
    +
    +
    +
    +
    + + + + +
    +
    +

    {lang hotthreads_forum}

    +
    +
    +
    + +
    +
    delete + $data[subject]
    +
    $data[message]
    +
    + +
    + +
    +
    + + + +
    + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + +
    +
    + $colletion[name] +
    +
    +
    $colletion[name]
    +
    {lang forum_threads}: , {lang collection_commentnum}:
    +
    + + + $colletion['lastposter']$_G[setting][anonymoustext] + + {lang forum_lastpost}: + + + {lang never} + +
    + +
    +
    + +
    +
    + + + + + + + + +
    +
    + + {lang spread} + +

    {lang forum_myfav}

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + $forum[icon] + + $forum[name] + +
    + +
    $forum[name] ($forum[todayposts])
    +
    {lang forum_threads}: , {lang forum_posts}:
    +
    + + {lang private_forum} + + + {lang url_link} + + + $forum[lastpost][dateline] $forum['lastpost']['author']$_G[setting][anonymoustext] + + {lang forum_lastpost}: $forum[lastpost][dateline] + + + {lang never} + + +
    + + +
    + + $forum[icon] + + $forum[name] + + +

    $forum[name] ($forum[todayposts])

    +

    $forum[description]

    +

    {lang forum_subforums}: $forum['subforums']

    +

    {lang forum_moderators}: $forum[moderators]

    + +
    + / + +
    + + {lang private_forum} + + + {lang url_link} + + $forum[lastpost][dateline] $forum['lastpost']['author']$_G[setting][anonymoustext] + + {lang never} + + +
    +
    + +
    +
    + + + + +
    +
    + + {lang spread} + + {lang forum_category_modedby}: $cat[moderators] + +

    $cat[name]

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + $cat['endrows'] + +
    +
    + + $forum[icon] + + $forum[name] + +
    + +
    $forum[name] ($forum[todayposts])
    +
    {lang forum_threads}: , {lang forum_posts}:
    +
    + + {lang private_forum} + + + {lang url_link} + + + $forum[lastpost][dateline] $forum['lastpost']['author']$_G[setting][anonymoustext] + + {lang forum_lastpost}: $forum[lastpost][dateline] + + + {lang never} + + +
    + + +
    + + $forum[icon] + + $forum[name] + + +

    $forum[name] ($forum[todayposts])

    +

    $forum[description]

    +

    {lang forum_subforums}: $forum['subforums']

    +

    {lang forum_moderators}: $forum[moderators]

    + +
    + / + +
    + + {lang private_forum} + + + {lang url_link} + + $forum[lastpost][dateline] $forum['lastpost']['author']$_G[setting][anonymoustext] + + {lang never} + + +
    +
    +
    +
    + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + +
    +
    + $colletion[name] +
    +
    +
    $colletion[name]
    +
    {lang forum_threads}: , {lang collection_commentnum}:
    +
    + + + $colletion['lastposter']$_G[setting][anonymoustext] + + {lang forum_lastpost}: + + + {lang never} + +
    + +
    +
    + +
    +
    + + + +
    + + +
    +
    +
    + + +
    +
    + + {lang spread} +

    + {lang onlinemember} + - $onlinenum {lang onlines} + - $membercount {lang index_members}($invisiblecount {lang index_invisibles}), + $guestcount {lang index_guests} + - {lang index_mostonlines} $onlineinfo[0] {lang on} $onlineinfo[1]. +

    + + + {lang spread} + +

    + + + {lang onlinemember} + + {lang onlinemember} + + + - {lang total} $onlinenum {lang onlines} + - $membercount {lang index_members},$guestcount {lang index_guests} + - {lang index_mostonlines} $onlineinfo[0] {lang on} $onlineinfo[1]. +

    + +
    + +
    +
    $_G[cache][onlinelist][legend]
    + +
    +
      + + +
    • + icon + + $online[username] + + $online[username] + +
    • + + +
    • {lang online_only_guests}
    • + +
    +
    + +
    + +
    + + + +
    +
    + +
      $_G['cache']['forumlinks'][0]
    + + +
    + $_G['cache']['forumlinks'][1] +
    + + +
      + $_G['cache']['forumlinks'][2] +
    + +
    +
    + + + +
    + + +
    + +
    +
    +
    + +
    + +
    + + + + + + \ No newline at end of file diff --git a/template/ahome_common/forum/forumdisplay.htm b/template/ahome_common/forum/forumdisplay.htm new file mode 100644 index 0000000..7f5650e --- /dev/null +++ b/template/ahome_common/forum/forumdisplay.htm @@ -0,0 +1,580 @@ + + + + + + +
    + + + +
    +
    +
    +
    +
    + +
    + +
    + +
    + +
    + +
    + +
    + + +
    +
    + $_G['forum'][name] +
    + {lang spread} + + {lang forum_favorite} + + + + + |$forumarchive[$_GET['archiveid']]['displayname']{lang forum_archive} + + + + + + |{lang forum_recyclebin} + + + | + + {lang modcp} + + {lang modcp} + + + + + + +

    + $_G['forum'][name] + {lang index_today}: $_G[forum][todayposts]  |{lang index_threads}: $_G[forum][threads]|{lang rank}: $_G[forum][rank]   +

    +
    + +
    + + + +
    {lang forum_modedby}: $moderatedby
    + +
    +
    $_G['forum'][rules]
    +
    + +
    + + + + +
    + + + + + +
    +
    +
    + + +
    +
    +

    {lang forum_recommend}

    +
    +
    + +
    +
    + + + + + + + +
    +
    + {lang spread} +

    {lang recommended_groups}

    +
    +
    + + + + + + + + + + + + + + + + + + + +
    +
    + $group[name] +
    +
    +
    $group[name] ($group[membernum] {lang activity_member_unit}) +
    {lang forum_threads}: $group[threads]
    +
    + + + $group[lastpost][dateline] {$group[lastpost][author]}$_G[setting][anonymoustext] + + $group[lastpost][dateline] + + {lang never} + +
    +
    +
    + $group[name] + +

    $group[name] ($group[membernum] {lang activity_member_unit})

    +

    +
    + $group[threads] {lang index_threads} + +
    + + $group[lastpost][dateline] {$group[lastpost][author]}$_G[setting][anonymoustext] + + {lang never} + +
    +
    +
    +
    + + +
    {lang forum_moderate_unhandled}
    + + +
    +
    + {lang reply} $livethread[replies] + $livethread[subject] +
    +
    $livemessage
    +
    +
    +
    +
    +
    {lang forum_live_newreply_refresh}
    +
    +
    +
    + + +
    + + {lang login_to_reply} {lang login} | $_G['setting']['reglinkname'] + + {lang no_permission_to_post}{lang click_to_show_reason} + +
    + +
    + + + +
    +
    + +
    + + + + + + + + + + + + + + +
    + + + + + +
    +
    + + +
    + + +
    +
    +

    {lang their}:

    +
    +
    + +
    +
    + + +
    +
    +

    {lang recommended_groups}

    +
    +
    + +
    +
    + + + +
    + +
    + +

    {lang forum_activeusers} ($onlinenum)

    +
    +
    +
      + +
    • + + +

      $online[username]

      + +

      $online[username]

      + + $online[lastactivity]{LF} +
    • + +
    +
    + +
    + +

    {lang forum_activeusers} ($onlinenum)

    +
    + +
    + + +
    +
    +
    + +
    + +
    +
    + + + + + + + + + + + + + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/template/ahome_common/forum/forumdisplay_fastpost.htm b/template/ahome_common/forum/forumdisplay_fastpost.htm new file mode 100644 index 0000000..d2d856e --- /dev/null +++ b/template/ahome_common/forum/forumdisplay_fastpost.htm @@ -0,0 +1,163 @@ + +
    +
    +
    + + +
    +

    {lang quick_post}

    +
    + +
    + +
    + + + + {lang comment_message1} 80 {lang comment_message2} +
    + +
    +
    + +
    +
    + + + {lang post_advancemode} + + + + +
    +
    + + + +
    + + + {lang login_to_post} {lang login} | $_G['setting']['reglinkname'] + + {lang connect_fill_profile_to_post} + + + {lang no_permission_to_post}{lang click_to_show_reason} + + +
    + +
    +
    +
    +
    + + + +
    + + + +
    + + + + + +
    + + + + + + + + + + + +
    + + + + + + +
    + + +

    + {lang post_credits_rule} + + + + + {lang post_sync_method}: + + + + + + +

    + +
    +
    \ No newline at end of file diff --git a/template/ahome_common/forum/forumdisplay_list.htm b/template/ahome_common/forum/forumdisplay_list.htm new file mode 100644 index 0000000..d65efa0 --- /dev/null +++ b/template/ahome_common/forum/forumdisplay_list.htm @@ -0,0 +1,489 @@ +
    + + + + +
    + + + + + + + + + + + + + + +
    + +
    + 0}onclick="setatarget(-1)" class="y atarget_1"{else}onclick="setatarget(1)" class="y"{/if} title="{lang new_window_thread}">{lang new_window} + + {lang all_reward}{lang rewarding}{lang reward_solved}  + + {lang thread_poll}{lang thread_trade}{lang thread_reward}{lang thread_activity}{lang thread_debate}{lang threads_all}  + {lang latest}  + {lang order_heats}  + {lang hot_thread}  + {lang digest_posts}  + {lang more}  + + + + + + $ctime + + + + +
    + + {lang title} + +
    {lang forum_group}{lang author}{lang replies}{lang lastpost} + {lang view_thread_imagemode} +
    +
    +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {lang announcement} {lang announcement}: $announcement[subject]$announcement[subject] +
    {echo avatar($thread[authorid],'small');}
    +$announcement[author] + $announcement[starttime] +
      
      {lang forum_thread}    
    + + + + + + + + + + + +

    {lang forum_nothreads}

    + + + + + +
    +
    + +
    + + + + + + + + + + + + +
    + $multipage + {lang return_index} + +
    \ No newline at end of file diff --git a/template/ahome_common/forum/viewthread.htm b/template/ahome_common/forum/viewthread.htm new file mode 100644 index 0000000..7b5936c --- /dev/null +++ b/template/ahome_common/forum/viewthread.htm @@ -0,0 +1,504 @@ + + + + + + + + + + + +
    + + + + + + +
    +
    +
    +
    +
    +
    $multipage
    + {lang return_forumdisplay} + + + + + +
    + {lang send_posts}
    + + +
    {lang reply}
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + +
    + +
    + + + {lang thread_author}: $_G[forum_thread][author] + + {lang thread_author}: + + {lang anonymous} + + {lang anonymous} + + +
    + +
    + {lang show}: $_G[forum_thread][views]|{lang reply}: $_G[forum_thread][allreplies] +
    + +
    + +
    + {lang thread_printable} + + {lang last_thread} + {lang next_thread} +
    + + + + + {lang collapse_the_left} + + {lang open_the_left} + + + +

    + + + [{$_G['forum']['threadtypes']['types'][$_G['forum_thread']['typeid']]}] + + [{$_G['forum']['threadtypes']['types'][$_G['forum_thread']['typeid']]}] + + + + [{$_G['forum']['threadsorts']['types'][$_G['forum_thread']['sortid']]}] + + $_G[forum_thread][subject] +

    + + ({lang moderating}) + ({lang have_ignored}) + ({lang draft}) + + {lang published} + + + + {lang hidden}({lang hidden}) +   + + +   + + +   + + +  {lang close} + + [{lang share_url_copy}] + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + {lang replycredit} + {$_G['forum_thread']['replycredit']} {$_G['setting']['extcredits'][$_G[forum_thread][replycredit_rule][extcreditstype]][unit]}{$_G['setting']['extcredits'][$_G[forum_thread][replycredit_rule][extcreditstype]][title]} + + + +      + + {lang thread_replycredit_tips1} {lang thread_replycredit_tips2}{lang thread_replycredit_tips3} +
    + {lang rushreply} + {lang rushreply} + + + + {lang rushreply} + + + + {lang thread_rushreply_statnum} + + {lang rushreply_view} + + + + + {lang thread_rushreply}  + + {lang thread_rushreply_limit}   + + + {lang havemore_special} {if $rushresult['timertype'] == 'start'} {lang header_start} {else} {lang over} {/if} {lang right_special} + + + {lang thread_rushreply_end}$rushresult[stopfloor]  + + + {lang thread_rushreply_floor}: $rushresult[rewardfloor]  + + +

    + [$countrushpost]{lang thread_rushreply_rewardnum} {lang thread_rushreply_noreward}    + {lang thread_rushreply_check_back} +

    + +
    +
    + + + + + + + + + +
    + + + +
    + + + + + +
    + +
    + + +
    + + +
    + +
    + + +
    + +
    + + +
    + + + + + +
    + +$_G['forum_tagscript'] + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/ahome_common/forum/viewthread_node.htm b/template/ahome_common/forum/viewthread_node.htm new file mode 100644 index 0000000..a36bf7d --- /dev/null +++ b/template/ahome_common/forum/viewthread_node.htm @@ -0,0 +1,551 @@ + + + + $_G['setting']['verify'][$vid][title]$_G['setting']['verify'][$vid]['title'] + + + $_G['setting']['verify'][$vid][title] + + + +
    + + + + + $post[newpostanchor] $post[lastpostanchor] + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + +
    {lang member_avatar_banned}
    + + +
    + +
    + + + + +
    + + +
    +
    $post[author]$authorverifys
    +
    + + + + + + {eval viewthread_profile_node('left', $post);} + + + + + + + + + + + + + + +
    + + $_G[setting][anonymoustext] $post[useip]{if $post[port]}:$post[port]{/if} + + $_G[setting][anonymoustext]$_G[setting][anonymoustext] + + $post[author] {lang member_deleted} + +
    + + +

    + + IP + + + {lang edit} + + + + {lang ban_member} + + {lang ban_member} + + + {lang posts} + + {lang clear} + +

    + +
    +
    style="width:100%"> +
    style="height:48px"> + + +
    + + + {lang thread_redirect_postno_tips} +
    + + + {lang warn_get} + + + + + {lang from} {$post[number]}{$postnostick} + + {lang recommend} + + + $postno[$post[number]] + + {$post[number]}{$postno[0]} + + + + + +
    + +
    + + {echo avatar($post['authorid'], 'small')} + + + + + + + + + + + + + + +  {lang thread_author}| + + $post[author]$authorverifys + + {lang poston} $post[dateline] + + {$_G['setting']['mobile']['mobilecomefrom']}{lang from_mobile} + + + | + + {lang thread_show_author} + + {lang thread_show_all} + + + + $post[author] +  {lang poston} $post[dateline] + + $_G[setting][anonymoustext]  + {lang poston} $post[dateline] + + + + |{lang view_bigpic} + + {lang replycredit} + + + |{lang post_descview} + + |{lang post_ascview} + + + + + |{lang read_mode} + + +
    +
    +
    + + + +
    + + + + + + + +
    +

    + {lang replycredit} +{$post['replycredit']} {$_G['setting']['extcredits'][$_G['forum_thread']['replycredit_rule']['extcreditstype']][unit]}{$_G['setting']['extcredits'][$_G['forum_thread']['replycredit_rule']['extcreditstype']][title]} +

    +
    + + + +
    + + + +
    +

    {lang collection_related}

    +
      + +
    • · $var[name]|{lang collection_threadnum}: $var[threadnum], {lang collection_follow}: $var[follownum]
    • + + +
    • · {lang more}
    • + +
    +
    + +
    + {lang collection_fromctid} +
    + + + + 1 + 2 + 3 + 4 + 5 + + + +   +
    +
    + + + +
    + +
    $locations[$post[pid]][location]
    + + + + + + + + + + +
    +

    {lang related_thread}

    + +
    + + +
    {lang member_signature_banned}
    + +
    $post[signature]
    + +
    $_G['setting']['globalsightml']
    + + + +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    style="width:100%"> + +
    {lang post_deleted}
    +
    + + \ No newline at end of file diff --git a/template/ahome_common/home/spacecp_profile.htm b/template/ahome_common/home/spacecp_profile.htm new file mode 100644 index 0000000..8a851eb --- /dev/null +++ b/template/ahome_common/home/spacecp_profile.htm @@ -0,0 +1,300 @@ + + + + + +

    {lang validator_comment}

    +
    + + + + + + + + + + + + + + + + +
    {lang validator_remark}$validate[remark] 
    {lang validator_message} 
      + +
    +
    +
    + +
    + + + +

    + + {lang old_password_comment}{lang wechat_config_newpassword_comment}{lang connect_config_newpassword_comment} + + {lang freeze_pw_tips} + + {lang freeze_email_tips} + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    *{lang old_password}
    {lang new_password} + +

    {lang memcp_profile_passwd_comment}

    +
    {lang new_password_confirm} + +

    {lang memcp_profile_passwd_comment}

    +
    {lang email} + +

    + + {lang email_been_active} + + $acitvemessage + +

    +

    {lang memcp_profile_email_comment}

    +
    {lang freeze_reason} + +

    {lang freeze_reason_comment}

    +
    {lang security_question} + +

    {lang memcp_profile_security_comment}

    +
    {lang security_answer} + +

    {lang memcp_profile_security_answer_comment}

    +
    + + + + + + + + +
     
    + + + + + + + +

    {lang spacecp_profile_message1}{lang spacecp_profile_message2}

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {lang username}$_G[member][username] 
    *$value[title] + $htmls[$key] + + + + + + +
    {lang permission_basic_status} + +
    +
     
    {lang personal_signature} +
    +
    + {lang preview} + + + + + + + + +
    +
    + +
    +
    +
    +
    + + +
     
    {lang time_zone} + + +

    {lang current_time} :

    +

    {lang time_zone_message}

    +
     
    Email$space[email] ({lang modify}) 
      + + + +
    + +
    + + +
    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git a/template/ahome_common/home/spacecp_usergroup_header.htm b/template/ahome_common/home/spacecp_usergroup_header.htm new file mode 100644 index 0000000..d822ba9 --- /dev/null +++ b/template/ahome_common/home/spacecp_usergroup_header.htm @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/template/ahome_common/index.htm b/template/ahome_common/index.htm new file mode 100644 index 0000000..e69de29 diff --git a/template/ahome_common/preview.jpg b/template/ahome_common/preview.jpg new file mode 100644 index 0000000..ee274e9 Binary files /dev/null and b/template/ahome_common/preview.jpg differ diff --git a/template/ahome_common/preview_large.jpg b/template/ahome_common/preview_large.jpg new file mode 100644 index 0000000..3b25e38 Binary files /dev/null and b/template/ahome_common/preview_large.jpg differ diff --git a/template/ahome_common/search/header.htm b/template/ahome_common/search/header.htm new file mode 100644 index 0000000..e054656 --- /dev/null +++ b/template/ahome_common/search/header.htm @@ -0,0 +1,59 @@ + + + + +
    + + + + + $_G[setting][menunavs] + + + + + + \ No newline at end of file diff --git a/template/ahome_common/src/default/background3.jpg b/template/ahome_common/src/default/background3.jpg new file mode 100755 index 0000000..ce2e102 Binary files /dev/null and b/template/ahome_common/src/default/background3.jpg differ diff --git a/template/ahome_common/src/default/background4.jpg b/template/ahome_common/src/default/background4.jpg new file mode 100755 index 0000000..9b1cef4 Binary files /dev/null and b/template/ahome_common/src/default/background4.jpg differ diff --git a/template/ahome_common/src/default/background5.jpg b/template/ahome_common/src/default/background5.jpg new file mode 100755 index 0000000..638b629 Binary files /dev/null and b/template/ahome_common/src/default/background5.jpg differ diff --git a/template/ahome_common/src/default/bg.jpg b/template/ahome_common/src/default/bg.jpg new file mode 100644 index 0000000..36be31e Binary files /dev/null and b/template/ahome_common/src/default/bg.jpg differ diff --git a/template/ahome_common/src/default/blanklogo.png b/template/ahome_common/src/default/blanklogo.png new file mode 100644 index 0000000..38c0856 Binary files /dev/null and b/template/ahome_common/src/default/blanklogo.png differ diff --git a/template/ahome_common/src/default/half-transparent.png b/template/ahome_common/src/default/half-transparent.png new file mode 100644 index 0000000..d8b63fa Binary files /dev/null and b/template/ahome_common/src/default/half-transparent.png differ diff --git a/template/ahome_common/src/default/logo.AVIF b/template/ahome_common/src/default/logo.AVIF new file mode 100755 index 0000000..64ee1de Binary files /dev/null and b/template/ahome_common/src/default/logo.AVIF differ diff --git a/template/ahome_common/src/default/logo.png b/template/ahome_common/src/default/logo.png new file mode 100644 index 0000000..c3abcbf Binary files /dev/null and b/template/ahome_common/src/default/logo.png differ diff --git a/template/ahome_common/src/default/logo4.png b/template/ahome_common/src/default/logo4.png new file mode 100755 index 0000000..f5e0f9b Binary files /dev/null and b/template/ahome_common/src/default/logo4.png differ diff --git a/template/ahome_common/src/default/mypost.png b/template/ahome_common/src/default/mypost.png new file mode 100644 index 0000000..6c0335b Binary files /dev/null and b/template/ahome_common/src/default/mypost.png differ diff --git a/template/ahome_common/src/default/newreply.png b/template/ahome_common/src/default/newreply.png new file mode 100644 index 0000000..2b40bd5 Binary files /dev/null and b/template/ahome_common/src/default/newreply.png differ diff --git a/template/ahome_common/src/default/panel-toggle-drop.png b/template/ahome_common/src/default/panel-toggle-drop.png new file mode 100644 index 0000000..962f205 Binary files /dev/null and b/template/ahome_common/src/default/panel-toggle-drop.png differ diff --git a/template/ahome_common/src/default/panel-toggle-space.png b/template/ahome_common/src/default/panel-toggle-space.png new file mode 100644 index 0000000..8e00064 Binary files /dev/null and b/template/ahome_common/src/default/panel-toggle-space.png differ diff --git a/template/ahome_common/src/default/panel-toggle.png b/template/ahome_common/src/default/panel-toggle.png new file mode 100644 index 0000000..8fc47e5 Binary files /dev/null and b/template/ahome_common/src/default/panel-toggle.png differ diff --git a/template/ahome_common/src/default/search.png b/template/ahome_common/src/default/search.png new file mode 100644 index 0000000..5a46540 Binary files /dev/null and b/template/ahome_common/src/default/search.png differ diff --git a/template/ahome_common/src/default/switch_width.png b/template/ahome_common/src/default/switch_width.png new file mode 100644 index 0000000..36e9e3b Binary files /dev/null and b/template/ahome_common/src/default/switch_width.png differ diff --git a/template/ahome_common/style/t1/background.png b/template/ahome_common/style/t1/background.png new file mode 100644 index 0000000..0272a97 Binary files /dev/null and b/template/ahome_common/style/t1/background.png differ diff --git a/template/ahome_common/style/t1/bgimg.jpg b/template/ahome_common/style/t1/bgimg.jpg new file mode 100644 index 0000000..28a10da Binary files /dev/null and b/template/ahome_common/style/t1/bgimg.jpg differ diff --git a/template/ahome_common/style/t1/create_group.png b/template/ahome_common/style/t1/create_group.png new file mode 100644 index 0000000..10eb1a1 Binary files /dev/null and b/template/ahome_common/style/t1/create_group.png differ diff --git a/template/ahome_common/style/t1/flw_post.png b/template/ahome_common/style/t1/flw_post.png new file mode 100644 index 0000000..f4eeb83 Binary files /dev/null and b/template/ahome_common/style/t1/flw_post.png differ diff --git a/template/ahome_common/style/t1/hotspot.gif b/template/ahome_common/style/t1/hotspot.gif new file mode 100644 index 0000000..f296b0e Binary files /dev/null and b/template/ahome_common/style/t1/hotspot.gif differ diff --git a/template/ahome_common/style/t1/mood_input.png b/template/ahome_common/style/t1/mood_input.png new file mode 100644 index 0000000..f6a2259 Binary files /dev/null and b/template/ahome_common/style/t1/mood_input.png differ diff --git a/template/ahome_common/style/t1/mood_input_btn.png b/template/ahome_common/style/t1/mood_input_btn.png new file mode 100644 index 0000000..0db99fe Binary files /dev/null and b/template/ahome_common/style/t1/mood_input_btn.png differ diff --git a/template/ahome_common/style/t1/nv.png b/template/ahome_common/style/t1/nv.png new file mode 100644 index 0000000..6914651 Binary files /dev/null and b/template/ahome_common/style/t1/nv.png differ diff --git a/template/ahome_common/style/t1/nv_a.png b/template/ahome_common/style/t1/nv_a.png new file mode 100644 index 0000000..95d8b28 Binary files /dev/null and b/template/ahome_common/style/t1/nv_a.png differ diff --git a/template/ahome_common/style/t1/pn.png b/template/ahome_common/style/t1/pn.png new file mode 100644 index 0000000..3d86dec Binary files /dev/null and b/template/ahome_common/style/t1/pn.png differ diff --git a/template/ahome_common/style/t1/pn_post.png b/template/ahome_common/style/t1/pn_post.png new file mode 100644 index 0000000..60d317a Binary files /dev/null and b/template/ahome_common/style/t1/pn_post.png differ diff --git a/template/ahome_common/style/t1/pn_reply.png b/template/ahome_common/style/t1/pn_reply.png new file mode 100644 index 0000000..e53dbf5 Binary files /dev/null and b/template/ahome_common/style/t1/pn_reply.png differ diff --git a/template/ahome_common/style/t1/pn_rt.png b/template/ahome_common/style/t1/pn_rt.png new file mode 100644 index 0000000..8dc434d Binary files /dev/null and b/template/ahome_common/style/t1/pn_rt.png differ diff --git a/template/ahome_common/style/t1/polljoins.gif b/template/ahome_common/style/t1/polljoins.gif new file mode 100644 index 0000000..b6a7cb9 Binary files /dev/null and b/template/ahome_common/style/t1/polljoins.gif differ diff --git a/template/ahome_common/style/t1/qmenu.png b/template/ahome_common/style/t1/qmenu.png new file mode 100644 index 0000000..6fed521 Binary files /dev/null and b/template/ahome_common/style/t1/qmenu.png differ diff --git a/template/ahome_common/style/t1/search.png b/template/ahome_common/style/t1/search.png new file mode 100644 index 0000000..e0d93f9 Binary files /dev/null and b/template/ahome_common/style/t1/search.png differ diff --git a/template/ahome_common/style/t1/style.css b/template/ahome_common/style/t1/style.css new file mode 100644 index 0000000..94b50e6 --- /dev/null +++ b/template/ahome_common/style/t1/style.css @@ -0,0 +1,55 @@ +/* +[name]红[/name] +[iconbgcolor]#DD0000[/iconbgcolor] +Powered by Tsmini.com +*/ + +.bm_h, .tl th, .tl td { border-bottom-color: #CDCDCD; } +.fl .bm_h { border-color: #FCC; background: #FFECEC; } +.bm_h a{color:#DD0000} +.bm_h h2 a{color:#DD0000 !important} +.bm_h .xw1 a{color:#DD0000 !important} +a,link {color:#333} +.tbmu .pnc{background:#DD0000 !important} + +.postbtn { + padding: 10px 20px; + font-size: 16px; + background: linear-gradient(60deg, rgba(213,0,0,1) 0%, rgba(213,100,0,1) 100%); + border-radius: 10px; + color: #FFF; + float: left; +} + +.postbtn:hover { + background: #a20000; +} + + +.pnc { + background: #f63a00; +} + +.pnc:hover { + background: #ff6b3d; +} + +.header { +position: relative; +text-align: center; +background: linear-gradient(60deg, rgba(233,67,67,1) 0%, rgba(209,0,0,1) 100%); +background-size: 100% auto; +color: white; +} + +/* ض尴ť */ +#create_group_btn { display: block; background: url(create_group.png) no-repeat 0 0; } + #create_group_btn img { opacity: 0; filter: alpha(opacity=0); } + /* ض㲥 */ +.moodfm_btn { background-image: url(mood_input_btn.png) !important; } +#uhd, #flw_header .bar, .flw_replybox { background-color: #FFECEC; } + #uhd .tb a, #flw_header .bar { border-top-color: #FFECEC; } +.pg_follow #fastpostsubmit { background-image: url(flw_post.png); } +.flw_replybox .pnc { background-image: url(pn_reply.png); } +.flw_replybox td table .pnc { background-image: url(pn_rt.png); } +#flw_post_extra .sec { border-color: #FFECEC; background-color: #FFECEC } \ No newline at end of file diff --git a/template/ahome_common/style/t1/titlebg.png b/template/ahome_common/style/t1/titlebg.png new file mode 100644 index 0000000..248f3fc Binary files /dev/null and b/template/ahome_common/style/t1/titlebg.png differ diff --git a/template/ahome_common/style/t1/titlebg_sd.png b/template/ahome_common/style/t1/titlebg_sd.png new file mode 100644 index 0000000..b25ac77 Binary files /dev/null and b/template/ahome_common/style/t1/titlebg_sd.png differ diff --git a/template/ahome_common/style/t1/vlineb.png b/template/ahome_common/style/t1/vlineb.png new file mode 100644 index 0000000..5c2df97 Binary files /dev/null and b/template/ahome_common/style/t1/vlineb.png differ diff --git a/template/ahome_common/style/t2/background.png b/template/ahome_common/style/t2/background.png new file mode 100644 index 0000000..b20a035 Binary files /dev/null and b/template/ahome_common/style/t2/background.png differ diff --git a/template/ahome_common/style/t2/bgimg.jpg b/template/ahome_common/style/t2/bgimg.jpg new file mode 100644 index 0000000..2060559 Binary files /dev/null and b/template/ahome_common/style/t2/bgimg.jpg differ diff --git a/template/ahome_common/style/t2/create_group.png b/template/ahome_common/style/t2/create_group.png new file mode 100644 index 0000000..e639d1d Binary files /dev/null and b/template/ahome_common/style/t2/create_group.png differ diff --git a/template/ahome_common/style/t2/flw_post.png b/template/ahome_common/style/t2/flw_post.png new file mode 100644 index 0000000..83efab7 Binary files /dev/null and b/template/ahome_common/style/t2/flw_post.png differ diff --git a/template/ahome_common/style/t2/hotspot.gif b/template/ahome_common/style/t2/hotspot.gif new file mode 100644 index 0000000..7699b2b Binary files /dev/null and b/template/ahome_common/style/t2/hotspot.gif differ diff --git a/template/ahome_common/style/t2/mood_input_btn.png b/template/ahome_common/style/t2/mood_input_btn.png new file mode 100644 index 0000000..5c6c96b Binary files /dev/null and b/template/ahome_common/style/t2/mood_input_btn.png differ diff --git a/template/ahome_common/style/t2/nv.png b/template/ahome_common/style/t2/nv.png new file mode 100644 index 0000000..af7660b Binary files /dev/null and b/template/ahome_common/style/t2/nv.png differ diff --git a/template/ahome_common/style/t2/nv_a.png b/template/ahome_common/style/t2/nv_a.png new file mode 100644 index 0000000..89fd7f5 Binary files /dev/null and b/template/ahome_common/style/t2/nv_a.png differ diff --git a/template/ahome_common/style/t2/pn.png b/template/ahome_common/style/t2/pn.png new file mode 100644 index 0000000..acee27c Binary files /dev/null and b/template/ahome_common/style/t2/pn.png differ diff --git a/template/ahome_common/style/t2/pn_post.png b/template/ahome_common/style/t2/pn_post.png new file mode 100644 index 0000000..36fff23 Binary files /dev/null and b/template/ahome_common/style/t2/pn_post.png differ diff --git a/template/ahome_common/style/t2/pn_reply.png b/template/ahome_common/style/t2/pn_reply.png new file mode 100644 index 0000000..39376d3 Binary files /dev/null and b/template/ahome_common/style/t2/pn_reply.png differ diff --git a/template/ahome_common/style/t2/pn_rt.png b/template/ahome_common/style/t2/pn_rt.png new file mode 100644 index 0000000..cc59359 Binary files /dev/null and b/template/ahome_common/style/t2/pn_rt.png differ diff --git a/template/ahome_common/style/t2/polljoins.gif b/template/ahome_common/style/t2/polljoins.gif new file mode 100644 index 0000000..45a9caf Binary files /dev/null and b/template/ahome_common/style/t2/polljoins.gif differ diff --git a/template/ahome_common/style/t2/style.css b/template/ahome_common/style/t2/style.css new file mode 100644 index 0000000..69db2ab --- /dev/null +++ b/template/ahome_common/style/t2/style.css @@ -0,0 +1,56 @@ +/* +[name]青[/name] +[iconbgcolor]#429296[/iconbgcolor] +Powered by Tsmini.com +*/ + +.bm_h, .tl th, .tl td { border-bottom-color: #CDCDCD; } +.fl .bm_h { border-color: #FCC; background: #ecfff6; } +.bm_h a{color:#45926d} +.bm_h .xw1 a{color:#45926d !important} +.bm_h h2 a{color:#45926d !important} +.tbmu .pnc{background:#45926d !important} +a,link {color:#333} + +.postbtn { + padding: 10px 20px; + font-size: 16px; + background: linear-gradient(60deg, rgba(69,132,102,1) 0%, rgba(118,184,152,1) 100%); + border-radius: 10px; + color: #FFF; + float: left; +} + +.postbtn:hover { + background: #295841; +} + + +.pnc { + background: #549475; +} + +.pnc:hover { + background: #70b795; +} + +.header { +position: relative; +text-align: center; +background: linear-gradient(60deg, rgba(78,164,151,1) 0%, rgba(25,111,98,1) 100%); +background-size: 100% auto; +color: white; +} + +/* ض尴ť */ +#create_group_btn { display: block; background: url(create_group.png) no-repeat 0 0; } + #create_group_btn img { opacity: 0; filter: alpha(opacity=0); } + +/* ض㲥 */ +.moodfm_btn { background-image: url(mood_input_btn.png) !important; } +#uhd, #flw_header .bar, .flw_replybox { background-color: #ecfff6; } + #uhd .tb a, #flw_header .bar { border-top-color: #ecfff6; } +.pg_follow #fastpostsubmit { background-image: url(flw_post.png); } +.flw_replybox .pnc { background-image: url(pn_reply.png); } +.flw_replybox td table .pnc { background-image: url(pn_rt.png); } +#flw_post_extra .sec { border-color: #ecfff6; background-color: #ecfff6; } \ No newline at end of file diff --git a/template/ahome_common/style/t2/titlebg.png b/template/ahome_common/style/t2/titlebg.png new file mode 100644 index 0000000..01fd0bb Binary files /dev/null and b/template/ahome_common/style/t2/titlebg.png differ diff --git a/template/ahome_common/style/t2/titlebg_sd.png b/template/ahome_common/style/t2/titlebg_sd.png new file mode 100644 index 0000000..b657401 Binary files /dev/null and b/template/ahome_common/style/t2/titlebg_sd.png differ diff --git a/template/ahome_common/style/t2/vlineb.png b/template/ahome_common/style/t2/vlineb.png new file mode 100644 index 0000000..0f2df72 Binary files /dev/null and b/template/ahome_common/style/t2/vlineb.png differ diff --git a/template/ahome_common/style/t3/background.png b/template/ahome_common/style/t3/background.png new file mode 100644 index 0000000..bf88d01 Binary files /dev/null and b/template/ahome_common/style/t3/background.png differ diff --git a/template/ahome_common/style/t3/bgimg.jpg b/template/ahome_common/style/t3/bgimg.jpg new file mode 100644 index 0000000..f529b8a Binary files /dev/null and b/template/ahome_common/style/t3/bgimg.jpg differ diff --git a/template/ahome_common/style/t3/create_group.png b/template/ahome_common/style/t3/create_group.png new file mode 100644 index 0000000..0722522 Binary files /dev/null and b/template/ahome_common/style/t3/create_group.png differ diff --git a/template/ahome_common/style/t3/flw_post.png b/template/ahome_common/style/t3/flw_post.png new file mode 100644 index 0000000..23f8f86 Binary files /dev/null and b/template/ahome_common/style/t3/flw_post.png differ diff --git a/template/ahome_common/style/t3/hotspot.gif b/template/ahome_common/style/t3/hotspot.gif new file mode 100644 index 0000000..462d895 Binary files /dev/null and b/template/ahome_common/style/t3/hotspot.gif differ diff --git a/template/ahome_common/style/t3/mood_input_btn.png b/template/ahome_common/style/t3/mood_input_btn.png new file mode 100644 index 0000000..b643a88 Binary files /dev/null and b/template/ahome_common/style/t3/mood_input_btn.png differ diff --git a/template/ahome_common/style/t3/nv.png b/template/ahome_common/style/t3/nv.png new file mode 100644 index 0000000..9fa5101 Binary files /dev/null and b/template/ahome_common/style/t3/nv.png differ diff --git a/template/ahome_common/style/t3/nv_a.png b/template/ahome_common/style/t3/nv_a.png new file mode 100644 index 0000000..56fe8cd Binary files /dev/null and b/template/ahome_common/style/t3/nv_a.png differ diff --git a/template/ahome_common/style/t3/pn.png b/template/ahome_common/style/t3/pn.png new file mode 100644 index 0000000..a43fdf8 Binary files /dev/null and b/template/ahome_common/style/t3/pn.png differ diff --git a/template/ahome_common/style/t3/pn_post.png b/template/ahome_common/style/t3/pn_post.png new file mode 100644 index 0000000..cb70d47 Binary files /dev/null and b/template/ahome_common/style/t3/pn_post.png differ diff --git a/template/ahome_common/style/t3/pn_reply.png b/template/ahome_common/style/t3/pn_reply.png new file mode 100644 index 0000000..498798c Binary files /dev/null and b/template/ahome_common/style/t3/pn_reply.png differ diff --git a/template/ahome_common/style/t3/pn_rt.png b/template/ahome_common/style/t3/pn_rt.png new file mode 100644 index 0000000..78017c7 Binary files /dev/null and b/template/ahome_common/style/t3/pn_rt.png differ diff --git a/template/ahome_common/style/t3/polljoins.gif b/template/ahome_common/style/t3/polljoins.gif new file mode 100644 index 0000000..724a597 Binary files /dev/null and b/template/ahome_common/style/t3/polljoins.gif differ diff --git a/template/ahome_common/style/t3/style.css b/template/ahome_common/style/t3/style.css new file mode 100644 index 0000000..66ca8bb --- /dev/null +++ b/template/ahome_common/style/t3/style.css @@ -0,0 +1,57 @@ +/* +[name]紫[/name] +[iconbgcolor]#a846d1[/iconbgcolor] +Powered by Tsmini.com +*/ + +.bm_h, .tl th, .tl td { border-bottom-color: #CDCDCD; } +.fl .bm_h { border-color: #FCC; background: #F8EFF8; } +.bm_h a{color:#9846ba} +.bm_h .xw1 a{color:#9846ba !important} +.bm_h h2 a{color:#9846ba !important} +.tbmu .pnc{background:#9846ba !important} +a,link {color:#333} + +.postbtn { + padding: 10px 20px; + font-size: 16px; + background: linear-gradient(60deg, rgba(147,62,183,1) 0%, rgba(175,95,209,1) 100%); + border-radius: 10px; + color: #FFF; + float: left; +} + +.postbtn:hover { + background: #893ea9; +} + + +.pnc { + background: #a12ed2; +} + +.pnc:hover { + background: #b85fde; +} + +.header { +position: relative; +text-align: center; +background: linear-gradient(60deg, rgba(175,95,209,1) 0%, rgba(147,62,183,1) 100%); +background-size: 100% auto; +color: white; +} + +/* ض尴ť */ + +#create_group_btn { display: block; background: url(create_group.png) no-repeat 0 0; } + #create_group_btn img { opacity: 0; filter: alpha(opacity=0); } + +/* ض㲥 */ +.moodfm_btn { background-image: url(mood_input_btn.png) !important; } +#uhd, #flw_header .bar, .flw_replybox { background-color: #FCF9FC; } + #uhd .tb a, #flw_header .bar { border-top-color: #F8EFF8; } +.pg_follow #fastpostsubmit { background-image: url(flw_post.png); } +.flw_replybox .pnc { background-image: url(pn_reply.png); } +.flw_replybox td table .pnc { background-image: url(pn_rt.png); } +#flw_post_extra .sec { border-color: #F8EFF8; background-color: #FCF9FC; } diff --git a/template/ahome_common/style/t3/titlebg.png b/template/ahome_common/style/t3/titlebg.png new file mode 100644 index 0000000..2fd6b08 Binary files /dev/null and b/template/ahome_common/style/t3/titlebg.png differ diff --git a/template/ahome_common/style/t3/titlebg_sd.png b/template/ahome_common/style/t3/titlebg_sd.png new file mode 100644 index 0000000..96a2c3e Binary files /dev/null and b/template/ahome_common/style/t3/titlebg_sd.png differ diff --git a/template/ahome_common/style/t3/vlineb.png b/template/ahome_common/style/t3/vlineb.png new file mode 100644 index 0000000..96001d8 Binary files /dev/null and b/template/ahome_common/style/t3/vlineb.png differ diff --git a/template/ahome_common/style/t4/background.png b/template/ahome_common/style/t4/background.png new file mode 100644 index 0000000..1cec95d Binary files /dev/null and b/template/ahome_common/style/t4/background.png differ diff --git a/template/ahome_common/style/t4/bgimg.jpg b/template/ahome_common/style/t4/bgimg.jpg new file mode 100644 index 0000000..5b2db7d Binary files /dev/null and b/template/ahome_common/style/t4/bgimg.jpg differ diff --git a/template/ahome_common/style/t4/create_group.png b/template/ahome_common/style/t4/create_group.png new file mode 100644 index 0000000..341b78f Binary files /dev/null and b/template/ahome_common/style/t4/create_group.png differ diff --git a/template/ahome_common/style/t4/flw_post.png b/template/ahome_common/style/t4/flw_post.png new file mode 100644 index 0000000..e46a6a5 Binary files /dev/null and b/template/ahome_common/style/t4/flw_post.png differ diff --git a/template/ahome_common/style/t4/hotspot.gif b/template/ahome_common/style/t4/hotspot.gif new file mode 100644 index 0000000..621ea60 Binary files /dev/null and b/template/ahome_common/style/t4/hotspot.gif differ diff --git a/template/ahome_common/style/t4/mood_input.png b/template/ahome_common/style/t4/mood_input.png new file mode 100644 index 0000000..0e12d57 Binary files /dev/null and b/template/ahome_common/style/t4/mood_input.png differ diff --git a/template/ahome_common/style/t4/mood_input_btn.png b/template/ahome_common/style/t4/mood_input_btn.png new file mode 100644 index 0000000..b45f9de Binary files /dev/null and b/template/ahome_common/style/t4/mood_input_btn.png differ diff --git a/template/ahome_common/style/t4/nv.png b/template/ahome_common/style/t4/nv.png new file mode 100644 index 0000000..fe964ca Binary files /dev/null and b/template/ahome_common/style/t4/nv.png differ diff --git a/template/ahome_common/style/t4/nv_a.png b/template/ahome_common/style/t4/nv_a.png new file mode 100644 index 0000000..876017c Binary files /dev/null and b/template/ahome_common/style/t4/nv_a.png differ diff --git a/template/ahome_common/style/t4/pn.png b/template/ahome_common/style/t4/pn.png new file mode 100644 index 0000000..2fd20a7 Binary files /dev/null and b/template/ahome_common/style/t4/pn.png differ diff --git a/template/ahome_common/style/t4/pn_post.png b/template/ahome_common/style/t4/pn_post.png new file mode 100644 index 0000000..984ab85 Binary files /dev/null and b/template/ahome_common/style/t4/pn_post.png differ diff --git a/template/ahome_common/style/t4/pn_reply.png b/template/ahome_common/style/t4/pn_reply.png new file mode 100644 index 0000000..c3528f2 Binary files /dev/null and b/template/ahome_common/style/t4/pn_reply.png differ diff --git a/template/ahome_common/style/t4/pn_rt.png b/template/ahome_common/style/t4/pn_rt.png new file mode 100644 index 0000000..90009c4 Binary files /dev/null and b/template/ahome_common/style/t4/pn_rt.png differ diff --git a/template/ahome_common/style/t4/polljoins.gif b/template/ahome_common/style/t4/polljoins.gif new file mode 100644 index 0000000..1171693 Binary files /dev/null and b/template/ahome_common/style/t4/polljoins.gif differ diff --git a/template/ahome_common/style/t4/search.png b/template/ahome_common/style/t4/search.png new file mode 100644 index 0000000..2eb324f Binary files /dev/null and b/template/ahome_common/style/t4/search.png differ diff --git a/template/ahome_common/style/t4/style.css b/template/ahome_common/style/t4/style.css new file mode 100644 index 0000000..e06d4b1 --- /dev/null +++ b/template/ahome_common/style/t4/style.css @@ -0,0 +1,55 @@ +/* +[name]橙[/name] +[iconbgcolor]#FF8800[/iconbgcolor] +Powered by Tsmini.com +*/ + +.bm_h, .tl th, .tl td { border-bottom-color: #CDCDCD; } +.fl .bm_h { border-color: #CDCDCD; background: #fdf0e1; } +.bm_h a{color:#8e5a10} +.bm_h h2 a{color:#8e5a10 !important} +.bm_h .xw1 a{color:#8e5a10 !important} +a,link {color:#333} +.tbmu .pnc{background:#8e5a10 !important} + +.postbtn { + padding: 10px 20px; + font-size: 16px; + background: linear-gradient(60deg, rgba(255,84,0,1) 0%, rgba(255,168,0,1) 100%); + border-radius: 10px; + color: #FFF; + float: left; +} + +.postbtn:hover { + background: #a20000; +} + + +.pnc { + background: #f63a00; +} + +.pnc:hover { + background: #ff6b3d; +} + +.header { +position: relative; +text-align: center; +background: linear-gradient(60deg, rgba(255,84,0,1) 0%, rgba(255,168,0,1) 100%); +background-size: 100% auto; +color: white; +} + +/* ض尴ť */ +#create_group_btn { display: block; background: url(create_group.png) no-repeat 0 0; } + #create_group_btn img { opacity: 0; filter: alpha(opacity=0); } + /* ض㲥 */ +.moodfm_btn { background-image: url(mood_input_btn.png) !important; } +#uhd, #flw_header .bar, .flw_replybox { background-color: #fffdec; } + #uhd .tb a, #flw_header .bar { border-top-color: #fffdec; } +.pg_follow #fastpostsubmit { background-image: url(flw_post.png); } +.flw_replybox .pnc { background-image: url(pn_reply.png); } +.flw_replybox td table .pnc { background-image: url(pn_rt.png); } +#flw_post_extra .sec { border-color: #fffdec; background-color: #fffdec } \ No newline at end of file diff --git a/template/ahome_common/style/t4/titlebg.png b/template/ahome_common/style/t4/titlebg.png new file mode 100644 index 0000000..f76e345 Binary files /dev/null and b/template/ahome_common/style/t4/titlebg.png differ diff --git a/template/ahome_common/style/t4/titlebg_sd.png b/template/ahome_common/style/t4/titlebg_sd.png new file mode 100644 index 0000000..0f1c1ac Binary files /dev/null and b/template/ahome_common/style/t4/titlebg_sd.png differ diff --git a/template/ahome_common/style/t4/vlineb.png b/template/ahome_common/style/t4/vlineb.png new file mode 100644 index 0000000..37839e3 Binary files /dev/null and b/template/ahome_common/style/t4/vlineb.png differ diff --git a/template/ahome_common/style/t5/background.png b/template/ahome_common/style/t5/background.png new file mode 100644 index 0000000..1cec95d Binary files /dev/null and b/template/ahome_common/style/t5/background.png differ diff --git a/template/ahome_common/style/t5/create_group.png b/template/ahome_common/style/t5/create_group.png new file mode 100644 index 0000000..341b78f Binary files /dev/null and b/template/ahome_common/style/t5/create_group.png differ diff --git a/template/ahome_common/style/t5/flw_post.png b/template/ahome_common/style/t5/flw_post.png new file mode 100644 index 0000000..e46a6a5 Binary files /dev/null and b/template/ahome_common/style/t5/flw_post.png differ diff --git a/template/ahome_common/style/t5/hotspot.gif b/template/ahome_common/style/t5/hotspot.gif new file mode 100644 index 0000000..621ea60 Binary files /dev/null and b/template/ahome_common/style/t5/hotspot.gif differ diff --git a/template/ahome_common/style/t5/mood_input.png b/template/ahome_common/style/t5/mood_input.png new file mode 100644 index 0000000..0e12d57 Binary files /dev/null and b/template/ahome_common/style/t5/mood_input.png differ diff --git a/template/ahome_common/style/t5/mood_input_btn.png b/template/ahome_common/style/t5/mood_input_btn.png new file mode 100644 index 0000000..fcd4c8c Binary files /dev/null and b/template/ahome_common/style/t5/mood_input_btn.png differ diff --git a/template/ahome_common/style/t5/nv.png b/template/ahome_common/style/t5/nv.png new file mode 100644 index 0000000..fe964ca Binary files /dev/null and b/template/ahome_common/style/t5/nv.png differ diff --git a/template/ahome_common/style/t5/nv_a.png b/template/ahome_common/style/t5/nv_a.png new file mode 100644 index 0000000..876017c Binary files /dev/null and b/template/ahome_common/style/t5/nv_a.png differ diff --git a/template/ahome_common/style/t5/pn.png b/template/ahome_common/style/t5/pn.png new file mode 100644 index 0000000..2fd20a7 Binary files /dev/null and b/template/ahome_common/style/t5/pn.png differ diff --git a/template/ahome_common/style/t5/pn_post.png b/template/ahome_common/style/t5/pn_post.png new file mode 100644 index 0000000..8912cc6 Binary files /dev/null and b/template/ahome_common/style/t5/pn_post.png differ diff --git a/template/ahome_common/style/t5/pn_reply.png b/template/ahome_common/style/t5/pn_reply.png new file mode 100644 index 0000000..c3528f2 Binary files /dev/null and b/template/ahome_common/style/t5/pn_reply.png differ diff --git a/template/ahome_common/style/t5/pn_rt.png b/template/ahome_common/style/t5/pn_rt.png new file mode 100644 index 0000000..90009c4 Binary files /dev/null and b/template/ahome_common/style/t5/pn_rt.png differ diff --git a/template/ahome_common/style/t5/polljoins.gif b/template/ahome_common/style/t5/polljoins.gif new file mode 100644 index 0000000..1171693 Binary files /dev/null and b/template/ahome_common/style/t5/polljoins.gif differ diff --git a/template/ahome_common/style/t5/search.png b/template/ahome_common/style/t5/search.png new file mode 100644 index 0000000..2eb324f Binary files /dev/null and b/template/ahome_common/style/t5/search.png differ diff --git a/template/ahome_common/style/t5/style.css b/template/ahome_common/style/t5/style.css new file mode 100644 index 0000000..010badf --- /dev/null +++ b/template/ahome_common/style/t5/style.css @@ -0,0 +1,55 @@ +/* +[name]黑[/name] +[iconbgcolor]#333333[/iconbgcolor] +Powered by Tsmini.com +*/ + +.bm_h, .tl th, .tl td { border-bottom-color: #CDCDCD; } +.fl .bm_h { border-color: #CDCDCD; background: #FAFAFA; } +.bm_h a{color:#333} +.bm_h h2 a{color:#333 !important} +.bm_h .xw1 a{color:#333 !important} +a,link {color:#333} +.tbmu .pnc{background:#333 !important} + +.postbtn { + padding: 10px 20px; + font-size: 16px; + background: linear-gradient(60deg, rgba(15,15,15,1) 0%, rgba(85,85,85,1) 100%); + border-radius: 10px; + color: #FFF; + float: left; +} + +.postbtn:hover { + background: #666; +} + + +.pnc { + background: #666; +} + +.pnc:hover { + background: #AAA; +} + +.header { +position: relative; +text-align: center; +background: linear-gradient(60deg, rgba(15,15,15,1) 0%, rgba(85,85,85,1) 100%); +background-size: 100% auto; +color: white; +} + +/* ض尴ť */ +#create_group_btn { display: block; background: url(create_group.png) no-repeat 0 0; } + #create_group_btn img { opacity: 0; filter: alpha(opacity=0); } + /* ض㲥 */ +.moodfm_btn { background-image: url(mood_input_btn.png) !important; } +#uhd, #flw_header .bar, .flw_replybox { background-color: #fafafa; } + #uhd .tb a, #flw_header .bar { border-top-color: #fafafa; } +.pg_follow #fastpostsubmit { background-image: url(flw_post.png); } +.flw_replybox .pnc { background-image: url(pn_reply.png); } +.flw_replybox td table .pnc { background-image: url(pn_rt.png); } +#flw_post_extra .sec { border-color: #fafafa; background-color: #fafafa } \ No newline at end of file diff --git a/template/ahome_common/style/t5/titlebg.png b/template/ahome_common/style/t5/titlebg.png new file mode 100644 index 0000000..f76e345 Binary files /dev/null and b/template/ahome_common/style/t5/titlebg.png differ diff --git a/template/ahome_common/style/t5/titlebg_sd.png b/template/ahome_common/style/t5/titlebg_sd.png new file mode 100644 index 0000000..0f1c1ac Binary files /dev/null and b/template/ahome_common/style/t5/titlebg_sd.png differ diff --git a/template/ahome_common/style/t5/vlineb.png b/template/ahome_common/style/t5/vlineb.png new file mode 100644 index 0000000..7b1b075 Binary files /dev/null and b/template/ahome_common/style/t5/vlineb.png differ diff --git a/template/bygsjw_sj/cache.inc.php b/template/bygsjw_sj/cache.inc.php new file mode 100644 index 0000000..bb37dd8 --- /dev/null +++ b/template/bygsjw_sj/cache.inc.php @@ -0,0 +1,18 @@ +2?e-2:0),n=2;n1&&void 0!==arguments[1]?arguments[1]:1e11;return N.test(t)?Math.round(t*i)/i:t}function r(t){var i=t.match(L);return i&&(i[1]!==R.protocol||i[2]!==R.hostname||i[3]!==R.port)}function s(t){var i="timestamp="+(new Date).getTime();return t+(-1===t.indexOf("?")?"?":"&")+i}function c(t){var i=t.rotate,e=t.scaleX,n=t.scaleY,o=t.translateX,h=t.translateY,r=[];return a(o)&&0!==o&&r.push("translateX("+o+"px)"),a(h)&&0!==h&&r.push("translateY("+h+"px)"),a(i)&&0!==i&&r.push("rotate("+i+"deg)"),a(e)&&1!==e&&r.push("scaleX("+e+")"),a(n)&&1!==n&&r.push("scaleY("+n+")"),r.length?r.join(" "):"none"}function d(t,i){if(!t.naturalWidth||A){var e=document.createElement("img");e.onload=function(){i(e.width,e.height)},e.src=t.src}else i(t.naturalWidth,t.naturalHeight)}function l(i){var e=t.extend({},i),a=[];return t.each(i,function(i,n){delete e[i],t.each(e,function(t,i){var e=Math.abs(n.startX-i.startX),o=Math.abs(n.startY-i.startY),h=Math.abs(n.endX-i.endX),r=Math.abs(n.endY-i.endY),s=Math.sqrt(e*e+o*o),c=(Math.sqrt(h*h+r*r)-s)/s;a.push(c)})}),a.sort(function(t,i){return Math.abs(t)0};return n(a)&&n(e)?e*i>a?e=a/i:a=e*i:n(a)?e=a/i:n(e)&&(a=e*i),{width:a,height:e}}function u(t){var i=t.width,e=t.height,a=t.degree;if((a=Math.abs(a))%180==90)return{width:e,height:i};var n=a%90*Math.PI/180,o=Math.sin(n),h=Math.cos(n);return{width:i*h+e*o,height:i*o+e*h}}function f(e,a,n,o){var r=a.naturalWidth,s=a.naturalHeight,c=a.rotate,d=void 0===c?0:c,l=a.scaleX,p=void 0===l?1:l,m=a.scaleY,u=void 0===m?1:m,f=n.aspectRatio,v=n.naturalWidth,w=n.naturalHeight,x=o.fillColor,b=void 0===x?"transparent":x,y=o.imageSmoothingEnabled,C=void 0===y||y,M=o.imageSmoothingQuality,$=void 0===M?"low":M,B=o.maxWidth,k=void 0===B?1/0:B,W=o.maxHeight,T=void 0===W?1/0:W,D=o.minWidth,H=void 0===D?0:D,Y=o.minHeight,X=void 0===Y?0:Y,O=g({aspectRatio:f,width:k,height:T}),z=g({aspectRatio:f,width:H,height:X}),E=Math.min(O.width,Math.max(z.width,v)),N=Math.min(O.height,Math.max(z.height,w)),R=document.createElement("canvas"),L=R.getContext("2d"),P=[-r/2,-s/2,r,s];return R.width=h(E),R.height=h(N),L.fillStyle=b,L.fillRect(0,0,E,N),L.save(),L.translate(E/2,N/2),L.rotate(d*Math.PI/180),L.scale(p,u),L.imageSmoothingEnabled=!!C,L.imageSmoothingQuality=$,L.drawImage.apply(L,[e].concat(i(t.map(P,function(t){return Math.floor(h(t))})))),L.restore(),R}function v(t,i,e){var a="",n=void 0;for(e+=i,n=i;n=8&&(o=s+d)}}}if(o){var l=i.getUint16(o,a),p=void 0,m=void 0;for(m=0;mi.width?3===a?s=i.height*r:c=i.width/r:3===a?c=i.width/r:s=i.height*r;var d={aspectRatio:r,naturalWidth:o,naturalHeight:h,width:s,height:c};d.left=(i.width-s)/2,d.top=(i.height-c)/2,d.oldLeft=d.left,d.oldTop=d.top,this.canvas=d,this.limited=1===a||2===a,this.limitCanvas(!0,!0),this.initialImage=t.extend({},e),this.initialCanvas=t.extend({},d)},limitCanvas:function(t,i){var e=this.options,a=this.container,n=this.canvas,o=this.cropBox,h=e.viewMode,r=n.aspectRatio,s=this.cropped&&o;if(t){var c=Number(e.minCanvasWidth)||0,d=Number(e.minCanvasHeight)||0;h>0&&(h>1?(c=Math.max(c,a.width),d=Math.max(d,a.height),3===h&&(d*r>c?c=d*r:d=c/r)):c?c=Math.max(c,s?o.width:0):d?d=Math.max(d,s?o.height:0):s&&(c=o.width,(d=o.height)*r>c?c=d*r:d=c/r));var l=g({aspectRatio:r,width:c,height:d});c=l.width,d=l.height,n.minWidth=c,n.minHeight=d,n.maxWidth=1/0,n.maxHeight=1/0}if(i)if(h>0){var p=a.width-n.width,m=a.height-n.height;n.minLeft=Math.min(0,p),n.minTop=Math.min(0,m),n.maxLeft=Math.max(0,p),n.maxTop=Math.max(0,m),s&&this.limited&&(n.minLeft=Math.min(o.left,o.left+o.width-n.width),n.minTop=Math.min(o.top,o.top+o.height-n.height),n.maxLeft=o.left,n.maxTop=o.top,2===h&&(n.width>=a.width&&(n.minLeft=Math.min(0,p),n.maxLeft=Math.max(0,p)),n.height>=a.height&&(n.minTop=Math.min(0,m),n.maxTop=Math.max(0,m))))}else n.minLeft=-n.width,n.minTop=-n.height,n.maxLeft=a.width,n.maxTop=a.height},renderCanvas:function(t,i){var e=this.canvas,a=this.image;if(i){var n=u({width:a.naturalWidth*Math.abs(a.scaleX||1),height:a.naturalHeight*Math.abs(a.scaleY||1),degree:a.rotate||0}),o=n.width,h=n.height,r=e.width*(o/e.naturalWidth),s=e.height*(h/e.naturalHeight);e.left-=(r-e.width)/2,e.top-=(s-e.height)/2,e.width=r,e.height=s,e.aspectRatio=o/h,e.naturalWidth=o,e.naturalHeight=h,this.limitCanvas(!0,!1)}(e.width>e.maxWidth||e.widthe.maxHeight||e.heighte.width?o.height=o.width/a:o.width=o.height*a),this.cropBox=o,this.limitCropBox(!0,!0),o.width=Math.min(Math.max(o.width,o.minWidth),o.maxWidth),o.height=Math.min(Math.max(o.height,o.minHeight),o.maxHeight),o.width=Math.max(o.minWidth,o.width*n),o.height=Math.max(o.minHeight,o.height*n),o.left=e.left+(e.width-o.width)/2,o.top=e.top+(e.height-o.height)/2,o.oldLeft=o.left,o.oldTop=o.top,this.initialCropBox=t.extend({},o)},limitCropBox:function(t,i){var e=this.options,a=this.container,n=this.canvas,o=this.cropBox,h=this.limited,r=e.aspectRatio;if(t){var s=Number(e.minCropBoxWidth)||0,c=Number(e.minCropBoxHeight)||0,d=Math.min(a.width,h?n.width:a.width),l=Math.min(a.height,h?n.height:a.height);s=Math.min(s,a.width),c=Math.min(c,a.height),r&&(s&&c?c*r>s?c=s/r:s=c*r:s?c=s/r:c&&(s=c*r),l*r>d?l=d/r:d=l*r),o.minWidth=Math.min(s,d),o.minHeight=Math.min(c,l),o.maxWidth=d,o.maxHeight=l}i&&(h?(o.minLeft=Math.max(0,n.left),o.minTop=Math.max(0,n.top),o.maxLeft=Math.min(a.width,n.left+n.width)-o.width,o.maxTop=Math.min(a.height,n.top+n.height)-o.height):(o.minLeft=0,o.minTop=0,o.maxLeft=a.width-o.width,o.maxTop=a.height-o.height))},renderCropBox:function(){var t=this.options,i=this.container,e=this.cropBox;(e.width>e.maxWidth||e.widthe.maxHeight||e.height=i.width&&e.height>=i.height?"move":"all"),this.$cropBox.css({width:e.width,height:e.height,transform:c({translateX:e.left,translateY:e.top})}),this.cropped&&this.limited&&this.limitCanvas(!0,!0),this.disabled||this.output()},output:function(){this.preview(),this.completed&&this.trigger("crop",this.getData())}},j={initPreview:function(){var i=this.crossOrigin,e=i?this.crossOriginUrl:this.url,a=document.createElement("img");i&&(a.crossOrigin=i),a.src=e;var n=t(a);this.$preview=t(this.options.preview),this.$clone2=n,this.$viewBox.html(n),this.$preview.each(function(a,n){var o=t(n),h=document.createElement("img");o.data("preview",{width:o.width(),height:o.height(),html:o.html()}),i&&(h.crossOrigin=i),h.src=e,h.style.cssText='display:block;width:100%;height:auto;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;image-orientation:0deg!important;"',o.html(h)})},resetPreview:function(){this.$preview.each(function(i,e){var a=t(e),n=a.data("preview");a.css({width:n.width,height:n.height}).html(n.html).removeData("preview")})},preview:function(){var i=this.image,e=this.canvas,a=this.cropBox,n=a.width,o=a.height,h=i.width,r=i.height,s=a.left-e.left-i.left,d=a.top-e.top-i.top;this.cropped&&!this.disabled&&(this.$clone2.css({width:h,height:r,transform:c(t.extend({translateX:-s,translateY:-d},i))}),this.$preview.each(function(e,a){var l=t(a),p=l.data("preview"),m=p.width,g=p.height,u=m,f=g,v=1;n&&(f=o*(v=m/n)),o&&f>g&&(u=n*(v=g/o),f=g),l.css({width:u,height:f}).find("img").css({width:h*v,height:r*v,transform:c(t.extend({translateX:-s*v,translateY:-d*v},i))})}))}},q={bind:function(){var i=this.$element,e=this.options,a=this.$cropper;t.isFunction(e.cropstart)&&i.on("cropstart",e.cropstart),t.isFunction(e.cropmove)&&i.on("cropmove",e.cropmove),t.isFunction(e.cropend)&&i.on("cropend",e.cropend),t.isFunction(e.crop)&&i.on("crop",e.crop),t.isFunction(e.zoom)&&i.on("zoom",e.zoom),a.on(k,o(this.cropStart,this)),e.zoomable&&e.zoomOnWheel&&a.on("wheel mousewheel DOMMouseScroll",o(this.wheel,this)),e.toggleDragModeOnDblclick&&a.on("dblclick",o(this.dblclick,this)),t(document).on(W,this.onCropMove=o(this.cropMove,this)).on(T,this.onCropEnd=o(this.cropEnd,this)),e.responsive&&t(window).on("resize",this.onResize=o(this.resize,this))},unbind:function(){var i=this.$element,e=this.options,a=this.$cropper;t.isFunction(e.cropstart)&&i.off("cropstart",e.cropstart),t.isFunction(e.cropmove)&&i.off("cropmove",e.cropmove),t.isFunction(e.cropend)&&i.off("cropend",e.cropend),t.isFunction(e.crop)&&i.off("crop",e.crop),t.isFunction(e.zoom)&&i.off("zoom",e.zoom),a.off(k,this.cropStart),e.zoomable&&e.zoomOnWheel&&a.off("wheel mousewheel DOMMouseScroll",this.wheel),e.toggleDragModeOnDblclick&&a.off("dblclick",this.dblclick),t(document).off(W,this.onCropMove).off(T,this.onCropEnd),e.responsive&&t(window).off("resize",this.onResize)}},Q={resize:function(){var i=this.options,e=this.$container,a=this.container,n=Number(i.minContainerWidth)||200,o=Number(i.minContainerHeight)||100;if(!(this.disabled||a.width<=n||a.height<=o)){var h=e.width()/a.width;if(1!==h||e.height()!==a.height){var r=void 0,s=void 0;i.restore&&(r=this.getCanvasData(),s=this.getCropBoxData()),this.render(),i.restore&&(this.setCanvasData(t.each(r,function(t,i){r[t]=i*h})),this.setCropBoxData(t.each(s,function(t,i){s[t]=i*h})))}}},dblclick:function(){this.disabled||"none"===this.options.dragMode||this.setDragMode(this.$dragBox.hasClass("cropper-crop")?"move":"crop")},wheel:function(t){var i=this,e=t.originalEvent||t,a=Number(this.options.wheelZoomRatio)||.1;if(!this.disabled&&(t.preventDefault(),!this.wheeling)){this.wheeling=!0,setTimeout(function(){i.wheeling=!1},50);var n=1;e.deltaY?n=e.deltaY>0?1:-1:e.wheelDelta?n=-e.wheelDelta/120:e.detail&&(n=e.detail>0?1:-1),this.zoom(-n*a,t)}},cropStart:function(i){if(!this.disabled){var e=this.options,a=this.pointers,n=i.originalEvent,o=void 0;n&&n.changedTouches?t.each(n.changedTouches,function(t,i){a[i.identifier]=p(i)}):a[n&&n.pointerId||0]=p(n||i),o=E(a).length>1&&e.zoomable&&e.zoomOnTouch?"zoom":t(i.target).data("action"),D.test(o)&&(this.trigger("cropstart",{originalEvent:n,action:o}).isDefaultPrevented()||(i.preventDefault(),this.action=o,this.cropping=!1,"crop"===o&&(this.cropping=!0,this.$dragBox.addClass("cropper-modal"))))}},cropMove:function(i){var e=this.action;if(!this.disabled&&e){var a=this.pointers,n=i.originalEvent;i.preventDefault(),this.trigger("cropmove",{originalEvent:n,action:e}).isDefaultPrevented()||(n&&n.changedTouches?t.each(n.changedTouches,function(i,e){t.extend(a[e.identifier],p(e,!0))}):t.extend(a[n&&n.pointerId||0],p(n||i,!0)),this.change(i))}},cropEnd:function(i){if(!this.disabled){var e=this.action,a=this.pointers,n=i.originalEvent;n&&n.changedTouches?t.each(n.changedTouches,function(t,i){delete a[i.identifier]}):delete a[n&&n.pointerId||0],e&&(i.preventDefault(),E(a).length||(this.action=""),this.cropping&&(this.cropping=!1,this.$dragBox.toggleClass("cropper-modal",this.cropped&&this.options.modal)),this.trigger("cropend",{originalEvent:n,action:e}))}}},K={change:function(i){var e=this.options,a=this.pointers,n=this.container,o=this.canvas,h=this.cropBox,r=this.action,s=e.aspectRatio,c=h.left,d=h.top,p=h.width,m=h.height,g=c+p,u=d+m,f=0,v=0,w=n.width,x=n.height,b=!0,y=void 0;!s&&i.shiftKey&&(s=p&&m?p/m:1),this.limited&&(f=h.minLeft,v=h.minTop,w=f+Math.min(n.width,o.width,o.left+o.width),x=v+Math.min(n.height,o.height,o.top+o.height));var C=a[E(a)[0]],M={x:C.endX-C.startX,y:C.endY-C.startY},$=function(t){switch(t){case"e":g+M.x>w&&(M.x=w-g);break;case"w":c+M.xx&&(M.y=x-u)}};switch(r){case"all":c+=M.x,d+=M.y;break;case"e":if(M.x>=0&&(g>=w||s&&(d<=v||u>=x))){b=!1;break}$("e"),p+=M.x,s&&(m=p/s,d-=M.x/s/2),p<0&&(r="w",p=0);break;case"n":if(M.y<=0&&(d<=v||s&&(c<=f||g>=w))){b=!1;break}$("n"),m-=M.y,d+=M.y,s&&(p=m*s,c+=M.y*s/2),m<0&&(r="s",m=0);break;case"w":if(M.x<=0&&(c<=f||s&&(d<=v||u>=x))){b=!1;break}$("w"),p-=M.x,c+=M.x,s&&(m=p/s,d+=M.x/s/2),p<0&&(r="e",p=0);break;case"s":if(M.y>=0&&(u>=x||s&&(c<=f||g>=w))){b=!1;break}$("s"),m+=M.y,s&&(p=m*s,c-=M.y*s/2),m<0&&(r="n",m=0);break;case"ne":if(s){if(M.y<=0&&(d<=v||g>=w)){b=!1;break}$("n"),m-=M.y,d+=M.y,p=m*s}else $("n"),$("e"),M.x>=0?gv&&(m-=M.y,d+=M.y):(m-=M.y,d+=M.y);p<0&&m<0?(r="sw",m=0,p=0):p<0?(r="nw",p=0):m<0&&(r="se",m=0);break;case"nw":if(s){if(M.y<=0&&(d<=v||c<=f)){b=!1;break}$("n"),m-=M.y,d+=M.y,p=m*s,c+=M.y*s}else $("n"),$("w"),M.x<=0?c>f?(p-=M.x,c+=M.x):M.y<=0&&d<=v&&(b=!1):(p-=M.x,c+=M.x),M.y<=0?d>v&&(m-=M.y,d+=M.y):(m-=M.y,d+=M.y);p<0&&m<0?(r="se",m=0,p=0):p<0?(r="ne",p=0):m<0&&(r="sw",m=0);break;case"sw":if(s){if(M.x<=0&&(c<=f||u>=x)){b=!1;break}$("w"),p-=M.x,c+=M.x,m=p/s}else $("s"),$("w"),M.x<=0?c>f?(p-=M.x,c+=M.x):M.y>=0&&u>=x&&(b=!1):(p-=M.x,c+=M.x),M.y>=0?u=0&&(g>=w||u>=x)){b=!1;break}$("e"),m=(p+=M.x)/s}else $("s"),$("e"),M.x>=0?g=0&&u>=x&&(b=!1):p+=M.x,M.y>=0?u0?r=M.y>0?"se":"ne":M.x<0&&(c-=p,r=M.y>0?"sw":"nw"),M.y<0&&(d-=m),this.cropped||(this.$cropBox.removeClass(B),this.cropped=!0,this.limited&&this.limitCropBox(!0,!0))}b&&(h.width=p,h.height=m,h.left=c,h.top=d,this.action=r,this.renderCropBox()),t.each(a,function(t,i){i.startX=i.endX,i.startY=i.endY})}},Z={crop:function(){this.ready&&!this.disabled&&(this.cropped||(this.cropped=!0,this.limitCropBox(!0,!0),this.options.modal&&this.$dragBox.addClass("cropper-modal"),this.$cropBox.removeClass(B)),this.setCropBoxData(this.initialCropBox))},reset:function(){this.ready&&!this.disabled&&(this.image=t.extend({},this.initialImage),this.canvas=t.extend({},this.initialCanvas),this.cropBox=t.extend({},this.initialCropBox),this.renderCanvas(),this.cropped&&this.renderCropBox())},clear:function(){this.cropped&&!this.disabled&&(t.extend(this.cropBox,{left:0,top:0,width:0,height:0}),this.cropped=!1,this.renderCropBox(),this.limitCanvas(!0,!0),this.renderCanvas(),this.$dragBox.removeClass("cropper-modal"),this.$cropBox.addClass(B))},replace:function(t,i){!this.disabled&&t&&(this.isImg&&this.$element.attr("src",t),i?(this.url=t,this.$clone.attr("src",t),this.ready&&this.$preview.find("img").add(this.$clone2).attr("src",t)):(this.isImg&&(this.replaced=!0),this.options.data=null,this.load(t)))},enable:function(){this.ready&&(this.disabled=!1,this.$cropper.removeClass("cropper-disabled"))},disable:function(){this.ready&&(this.disabled=!0,this.$cropper.addClass("cropper-disabled"))},destroy:function(){var t=this.$element;this.loaded?(this.isImg&&this.replaced&&t.attr("src",this.originalUrl),this.unbuild(),t.removeClass(B)):this.isImg?t.off("load",this.start):this.$clone&&this.$clone.remove(),t.removeData("cropper")},move:function(t,i){var e=this.canvas,a=e.left,o=e.top;this.moveTo(n(t)?t:a+Number(t),n(i)?i:o+Number(i))},moveTo:function(t,i){var e=this.canvas,o=!1;n(i)&&(i=t),t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.movable&&(a(t)&&(e.left=t,o=!0),a(i)&&(e.top=i,o=!0),o&&this.renderCanvas(!0))},zoom:function(t,i){var e=this.canvas;t=(t=Number(t))<0?1/(1-t):1+t,this.zoomTo(e.width*t/e.naturalWidth,i)},zoomTo:function(t,i){var e=this.options,a=this.pointers,n=this.canvas,o=n.width,h=n.height,r=n.naturalWidth,s=n.naturalHeight;if((t=Number(t))>=0&&this.ready&&!this.disabled&&e.zoomable){var c=r*t,d=s*t,l=void 0;if(i&&(l=i.originalEvent),this.trigger("zoom",{originalEvent:l,oldRatio:o/r,ratio:c/r}).isDefaultPrevented())return;if(l){var p=this.$cropper.offset(),g=a&&E(a).length?m(a):{pageX:i.pageX||l.pageX||0,pageY:i.pageY||l.pageY||0};n.left-=(c-o)*((g.pageX-p.left-n.left)/o),n.top-=(d-h)*((g.pageY-p.top-n.top)/h)}else n.left-=(c-o)/2,n.top-=(d-h)/2;n.width=c,n.height=d,this.renderCanvas(!0)}},rotate:function(t){this.rotateTo((this.image.rotate||0)+Number(t))},rotateTo:function(t){a(t=Number(t))&&this.ready&&!this.disabled&&this.options.rotatable&&(this.image.rotate=t%360,this.renderCanvas(!0,!0))},scaleX:function(t){var i=this.image.scaleY;this.scale(t,a(i)?i:1)},scaleY:function(t){var i=this.image.scaleX;this.scale(a(i)?i:1,t)},scale:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,e=this.image,n=!1;t=Number(t),i=Number(i),this.ready&&!this.disabled&&this.options.scalable&&(a(t)&&(e.scaleX=t,n=!0),a(i)&&(e.scaleY=i,n=!0),n&&this.renderCanvas(!0,!0))},getData:function(){var i=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.options,a=this.image,n=this.canvas,o=this.cropBox,h=void 0;if(this.ready&&this.cropped){h={x:o.left-n.left,y:o.top-n.top,width:o.width,height:o.height};var r=a.width/a.naturalWidth;t.each(h,function(t,e){e/=r,h[t]=i?Math.round(e):e})}else h={x:0,y:0,width:0,height:0};return e.rotatable&&(h.rotate=a.rotate||0),e.scalable&&(h.scaleX=a.scaleX||1,h.scaleY=a.scaleY||1),h},setData:function(i){var e=this.options,n=this.image,o=this.canvas,h={};if(t.isFunction(i)&&(i=i.call(this.element)),this.ready&&!this.disabled&&t.isPlainObject(i)){var r=!1;e.rotatable&&a(i.rotate)&&i.rotate!==n.rotate&&(n.rotate=i.rotate,r=!0),e.scalable&&(a(i.scaleX)&&i.scaleX!==n.scaleX&&(n.scaleX=i.scaleX,r=!0),a(i.scaleY)&&i.scaleY!==n.scaleY&&(n.scaleY=i.scaleY,r=!0)),r&&this.renderCanvas(!0,!0);var s=n.width/n.naturalWidth;a(i.x)&&(h.left=i.x*s+o.left),a(i.y)&&(h.top=i.y*s+o.top),a(i.width)&&(h.width=i.width*s),a(i.height)&&(h.height=i.height*s),this.setCropBoxData(h)}},getContainerData:function(){return this.ready?t.extend({},this.container):{}},getImageData:function(){return this.loaded?t.extend({},this.image):{}},getCanvasData:function(){var i=this.canvas,e={};return this.ready&&t.each(["left","top","width","height","naturalWidth","naturalHeight"],function(t,a){e[a]=i[a]}),e},setCanvasData:function(i){var e=this.canvas,n=e.aspectRatio;t.isFunction(i)&&(i=i.call(this.$element)),this.ready&&!this.disabled&&t.isPlainObject(i)&&(a(i.left)&&(e.left=i.left),a(i.top)&&(e.top=i.top),a(i.width)?(e.width=i.width,e.height=i.width/n):a(i.height)&&(e.height=i.height,e.width=i.height*n),this.renderCanvas(!0))},getCropBoxData:function(){var t=this.cropBox;return this.ready&&this.cropped?{left:t.left,top:t.top,width:t.width,height:t.height}:{}},setCropBoxData:function(i){var e=this.cropBox,n=this.options.aspectRatio,o=void 0,h=void 0;t.isFunction(i)&&(i=i.call(this.$element)),this.ready&&this.cropped&&!this.disabled&&t.isPlainObject(i)&&(a(i.left)&&(e.left=i.left),a(i.top)&&(e.top=i.top),a(i.width)&&i.width!==e.width&&(o=!0,e.width=i.width),a(i.height)&&i.height!==e.height&&(h=!0,e.height=i.height),n&&(o?e.height=e.width/n:h&&(e.width=e.height*n)),this.renderCropBox())},getCroppedCanvas:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.ready||!window.HTMLCanvasElement)return null;var e=this.canvas,a=f(this.$clone[0],this.image,e,i);if(!this.cropped)return a;var n=this.getData(),o=n.x,r=n.y,s=n.width,c=n.height,d=s/c,l=g({aspectRatio:d,width:i.maxWidth||1/0,height:i.maxHeight||1/0}),p=g({aspectRatio:d,width:i.minWidth||0,height:i.minHeight||0}),m=g({aspectRatio:d,width:i.width||s,height:i.height||c}),u=m.width,v=m.height;u=Math.min(l.width,Math.max(p.width,u)),v=Math.min(l.height,Math.max(p.height,v));var w=document.createElement("canvas"),x=w.getContext("2d");w.width=h(u),w.height=h(v),x.fillStyle=i.fillColor||"transparent",x.fillRect(0,0,u,v);var b=i.imageSmoothingEnabled,y=void 0===b||b,M=i.imageSmoothingQuality;x.imageSmoothingEnabled=y,M&&(x.imageSmoothingQuality=M);var $=a.width,B=a.height,k=o,W=r,T=void 0,D=void 0,H=void 0,Y=void 0,X=void 0,O=void 0;k<=-s||k>$?(k=0,T=0,H=0,X=0):k<=0?(H=-k,k=0,X=T=Math.min($,s+k)):k<=$&&(H=0,X=T=Math.min(s,$-k)),T<=0||W<=-c||W>B?(W=0,D=0,Y=0,O=0):W<=0?(Y=-W,W=0,O=D=Math.min(B,c+W)):W<=B&&(Y=0,O=D=Math.min(c,B-W));var z=[k,W,T,D];if(X>0&&O>0){var E=u/s;z.push(H*E,Y*E,X*E,O*E)}return x.drawImage.apply(x,[a].concat(C(t.map(z,function(t){return Math.floor(h(t))})))),w},setAspectRatio:function(t){var i=this.options;this.disabled||n(t)||(i.aspectRatio=Math.max(0,t)||NaN,this.ready&&(this.initCropBox(),this.cropped&&this.renderCropBox()))},setDragMode:function(t){var i=this.options,e=void 0,a=void 0;this.loaded&&!this.disabled&&(e="crop"===t,a=i.movable&&"move"===t,t=e||a?t:"none",this.$dragBox.data("action",t).toggleClass("cropper-crop",e).toggleClass("cropper-move",a),i.cropBoxMovable||this.$face.data("action",t).toggleClass("cropper-crop",e).toggleClass("cropper-move",a))}},V=function(){function t(t,i){for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{};if(M(this,i),!e||!X.test(e.tagName))throw new Error("The first argument is required and must be an or element.");this.element=e,this.$element=t(e),this.options=t.extend({},O,t.isPlainObject(a)&&a),this.completed=!1,this.cropped=!1,this.disabled=!1,this.isImg=!1,this.limited=!1,this.loaded=!1,this.ready=!1,this.replaced=!1,this.wheeling=!1,this.originalUrl="",this.canvas=null,this.cropBox=null,this.pointers={},this.init()}return V(i,[{key:"init",value:function(){var t=this.$element,i=void 0;if(t.is("img")){if(this.isImg=!0,i=t.attr("src")||"",this.originalUrl=i,!i)return;i=t.prop("src")}else t.is("canvas")&&window.HTMLCanvasElement&&(i=t[0].toDataURL());this.load(i)}},{key:"trigger",value:function(i,e){var a=t.Event(i,e);return this.$element.trigger(a),a}},{key:"load",value:function(t){var i=this;if(t){this.url=t,this.image={};var e=this.$element,a=this.options;if(a.checkOrientation&&window.ArrayBuffer)if(H.test(t))Y.test(t)?this.read(w(t)):this.clone();else{var n=new XMLHttpRequest;n.onerror=function(){i.clone()},n.onload=function(){i.read(n.response)},a.checkCrossOrigin&&r(t)&&e.prop("crossOrigin")&&(t=s(t)),n.open("get",t),n.responseType="arraybuffer",n.withCredentials="use-credentials"===e.prop("crossOrigin"),n.send()}else this.clone()}}},{key:"read",value:function(t){var i=this.options,e=this.image,a=b(t),n=0,o=1,h=1;if(a>1){this.url=x(t,"image/jpeg");var r=y(a);n=r.rotate,o=r.scaleX,h=r.scaleY}i.rotatable&&(e.rotate=n),i.scalable&&(e.scaleX=o,e.scaleY=h),this.clone()}},{key:"clone",value:function(){var i=this.$element,e=this.options,a=this.url,n="",o=void 0;e.checkCrossOrigin&&r(a)&&((n=i.prop("crossOrigin"))?o=a:(n="anonymous",o=s(a))),this.crossOrigin=n,this.crossOriginUrl=o;var h=document.createElement("img");n&&(h.crossOrigin=n),h.src=o||a;var c=t(h);this.$clone=c,this.isImg?this.element.complete?this.start():i.one("load",t.proxy(this.start,this)):c.one("load",t.proxy(this.start,this)).one("error",t.proxy(this.stop,this)).addClass("cropper-hide").insertAfter(i)}},{key:"start",value:function(){var i=this,e=this.$clone,a=this.$element;this.isImg||(e.off("error",this.stop),a=e),d(a[0],function(e,a){t.extend(i.image,{naturalWidth:e,naturalHeight:a,aspectRatio:e/a}),i.loaded=!0,i.build()})}},{key:"stop",value:function(){this.$clone.remove(),this.$clone=null}},{key:"build",value:function(){var i=this;if(this.loaded){this.ready&&this.unbuild();var e=this.$element,a=this.options,n=this.$clone,o=t('
    '),h=o.find(".cropper-crop-box"),r=h.find(".cropper-face");this.$container=e.parent(),this.$cropper=o,this.$canvas=o.find(".cropper-canvas").append(n),this.$dragBox=o.find(".cropper-drag-box"),this.$cropBox=h,this.$viewBox=o.find(".cropper-view-box"),this.$face=r,e.addClass(B).after(o),this.isImg||n.removeClass("cropper-hide"),this.initPreview(),this.bind(),a.aspectRatio=Math.max(0,a.aspectRatio)||NaN,a.viewMode=Math.max(0,Math.min(3,Math.round(a.viewMode)))||0,this.cropped=a.autoCrop,a.autoCrop?a.modal&&this.$dragBox.addClass("cropper-modal"):h.addClass(B),a.guides||h.find(".cropper-dashed").addClass(B),a.center||h.find(".cropper-center").addClass(B),a.cropBoxMovable&&r.addClass("cropper-move").data("action","all"),a.highlight||r.addClass("cropper-invisible"),a.background&&o.addClass("cropper-bg"),a.cropBoxResizable||h.find(".cropper-line,.cropper-point").addClass(B),this.setDragMode(a.dragMode),this.render(),this.ready=!0,this.setData(a.data),this.completing=setTimeout(function(){t.isFunction(a.ready)&&e.one("ready",a.ready),i.trigger("ready"),i.trigger("crop",i.getData()),i.completed=!0},0)}}},{key:"unbuild",value:function(){this.ready&&(this.completed||clearTimeout(this.completing),this.ready=!1,this.completed=!1,this.initialImage=null,this.initialCanvas=null,this.initialCropBox=null,this.container=null,this.canvas=null,this.cropBox=null,this.unbind(),this.resetPreview(),this.$preview=null,this.$viewBox=null,this.$cropBox=null,this.$dragBox=null,this.$canvas=null,this.$container=null,this.$cropper.remove(),this.$cropper=null)}}],[{key:"setDefaults",value:function(i){t.extend(O,t.isPlainObject(i)&&i)}}]),i}();if(t.extend&&t.extend(G.prototype,S,j,q,Q,K,Z),t.fn){var J=t.fn.cropper;t.fn.cropper=function(i){for(var a=arguments.length,o=Array(a>1?a-1:0),h=1;h + + + + + + + + + diff --git a/template/bygsjw_sj/image/bolang2.svg b/template/bygsjw_sj/image/bolang2.svg new file mode 100644 index 0000000..b9b4b1f --- /dev/null +++ b/template/bygsjw_sj/image/bolang2.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/image/byg_into.js b/template/bygsjw_sj/image/byg_into.js new file mode 100644 index 0000000..5d95ace --- /dev/null +++ b/template/bygsjw_sj/image/byg_into.js @@ -0,0 +1,98 @@ +/* + Delighters - Add CSS animations to delight users as they scroll down. + (c) 2018 - Q42 + Written by Martin Kool + https://github.com/Q42/delighters +*/ +var Delighters = new (function() { + var self = this, + dels = this.dels = [], + + // default options + options = { + attribute: 'data-byginto', + classNames: ['byg_into', 'byg_start', 'byg_end'], + start: 1, + end: 1, + autoInit: true + }; + + document.addEventListener("DOMContentLoaded", function() { + if (options.autoInit) init(); + }); + + function config(opts) { + for (var name in opts) options[name] = opts[name]; + } + + function init() { + document.addEventListener('scroll', scroll) + var els = document.querySelectorAll('[' + options.attribute + ']'); + + for (var i=0; i= 0 && factorStart <= 1) { + if (!del.startLine) { + del.startLine = document.createElement('div') + document.body.appendChild(del.startLine); + del.startLine.style = 'position:fixed;height:0;width:100%;border-bottom:dotted red 2px;top:' + (del.start * 100) + 'vh'; + } + } + if (((factorEnd < del.end) || (factorStart > 1)) && del.startLine) { + del.startLine.parentNode.removeChild(del.startLine); + delete del.startLine; + } + } + if (factorStart < del.start && !del.started) { + del.started = true; + del.el.classList.add(options.classNames[1]) + } + else if (factorStart > del.start && del.started) { + del.started = false; + del.el.classList.remove(options.classNames[1]) + } + if (factorEnd < del.end && !del.ended) { + del.ended = true; + del.el.classList.add(options.classNames[2]) + } + else if (factorEnd > del.end && del.ended) { + del.ended = false; + del.el.classList.remove(options.classNames[2]) + } + } + } + + self.init = init; + self.config = config; +})(); diff --git a/template/bygsjw_sj/image/cai.png b/template/bygsjw_sj/image/cai.png new file mode 100644 index 0000000..cfaba7c Binary files /dev/null and b/template/bygsjw_sj/image/cai.png differ diff --git a/template/bygsjw_sj/image/chakan.png b/template/bygsjw_sj/image/chakan.png new file mode 100644 index 0000000..98e23d6 Binary files /dev/null and b/template/bygsjw_sj/image/chakan.png differ diff --git a/template/bygsjw_sj/image/comment_reply.js b/template/bygsjw_sj/image/comment_reply.js new file mode 100644 index 0000000..8c1dd60 --- /dev/null +++ b/template/bygsjw_sj/image/comment_reply.js @@ -0,0 +1,245 @@ + +function portal_comment_requote(cid, aid) { + var x = new Ajax(); + x.get('portal.php?mod=portalcp&ac=comment&op=requote&cid='+cid+'&aid='+aid+'&inajax=1', function(s){ + jq('message').focus(); + ajaxinnerhtml(jq('message'), s); + }); + $(".cover_div").slideToggle(0); + $("#cform").slideToggle(0); +} + +function jq(id) { + return !id ? null : document.getElementById(id); +} + +function browserVersion(types) { + var other = 1; + for(i in types) { + var v = types[i] ? types[i] : i; + if(USERAGENT.indexOf(v) != -1) { + var re = new RegExp(v + '(\\/|\\s|:)([\\d\\.]+)', 'ig'); + var matches = re.exec(USERAGENT); + var ver = matches != null ? matches[2] : 0; + other = ver !== 0 && v != 'mozilla' ? 0 : other; + }else { + var ver = 0; + } + eval('BROWSER.' + i + '= ver'); + } + BROWSER.other = other; +} + +function Ajax(recvType, waitId) { + var aj = new Object(); + aj.loading = '请稍候...'; + aj.recvType = recvType ? recvType : 'XML'; + aj.waitId = waitId ? jq(waitId) : null; + aj.resultHandle = null; + aj.sendString = ''; + aj.targetUrl = ''; + aj.setLoading = function(loading) { + if(typeof loading !== 'undefined' && loading !== null) aj.loading = loading; + }; + aj.setRecvType = function(recvtype) { + aj.recvType = recvtype; + }; + aj.setWaitId = function(waitid) { + aj.waitId = typeof waitid == 'object' ? waitid : jq(waitid); + }; + aj.createXMLHttpRequest = function() { + var request = false; + if(window.XMLHttpRequest) { + request = new XMLHttpRequest(); + if(request.overrideMimeType) { + request.overrideMimeType('text/xml'); + } + } else if(window.ActiveXObject) { + var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP']; + for(var i=0; i ' + aj.loading + ''; + } + }; + aj.processHandle = function() { + if(aj.XMLHttpRequest.readyState == 4 && aj.XMLHttpRequest.status == 200) { + if(aj.waitId) { + aj.waitId.style.display = 'none'; + } + if(aj.recvType == 'HTML') { + aj.resultHandle(aj.XMLHttpRequest.responseText, aj); + } else if(aj.recvType == 'XML') { + if(!aj.XMLHttpRequest.responseXML || !aj.XMLHttpRequest.responseXML.lastChild || aj.XMLHttpRequest.responseXML.lastChild.localName == 'parsererror') { + aj.resultHandle('' , aj); + } else { + aj.resultHandle(aj.XMLHttpRequest.responseXML.lastChild.firstChild.nodeValue, aj); + } + } else if(aj.recvType == 'JSON') { + var s = null; + try { + s = (new Function("return ("+aj.XMLHttpRequest.responseText+")"))(); + } catch (e) { + s = null; + } + aj.resultHandle(s, aj); + } + } + }; + aj.get = function(targetUrl, resultHandle) { + targetUrl = hostconvert(targetUrl); + setTimeout(function(){aj.showLoading()}, 250); + aj.targetUrl = targetUrl; + aj.XMLHttpRequest.onreadystatechange = aj.processHandle; + aj.resultHandle = resultHandle; + var attackevasive = isUndefined(attackevasive) ? 0 : attackevasive; + if(window.XMLHttpRequest) { + aj.XMLHttpRequest.open('GET', aj.targetUrl); + aj.XMLHttpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + aj.XMLHttpRequest.send(null); + } else { + aj.XMLHttpRequest.open("GET", targetUrl, true); + aj.XMLHttpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + aj.XMLHttpRequest.send(); + } + }; + aj.post = function(targetUrl, sendString, resultHandle) { + targetUrl = hostconvert(targetUrl); + setTimeout(function(){aj.showLoading()}, 250); + aj.targetUrl = targetUrl; + aj.sendString = sendString; + aj.XMLHttpRequest.onreadystatechange = aj.processHandle; + aj.resultHandle = resultHandle; + aj.XMLHttpRequest.open('POST', targetUrl); + aj.XMLHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + aj.XMLHttpRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); + aj.XMLHttpRequest.send(aj.sendString); + }; + aj.getJSON = function(targetUrl, resultHandle) { + aj.setRecvType('JSON'); + aj.get(targetUrl+'&ajaxdata=json', resultHandle); + }; + aj.getHTML = function(targetUrl, resultHandle) { + aj.setRecvType('HTML'); + aj.get(targetUrl+'&ajaxdata=html', resultHandle); + }; + return aj; +} + +function getHost(url) { + var host = "null"; + if(typeof url == "undefined"|| null == url) { + url = window.location.href; + } + var regex = /^\w+\:\/\/([^\/]*).*/; + var match = url.match(regex); + if(typeof match != "undefined" && null != match) { + host = match[1]; + } + return host; +} + +function hostconvert(url) { + if(!url.match(/^https?:\/\//)) url = SITEURL + url; + var url_host = getHost(url); + var cur_host = getHost().toLowerCase(); + if(url_host && cur_host != url_host) { + url = url.replace(url_host, cur_host); + } + return url; +} + +function $F(func, args, script) { + var run = function () { + var argc = args.length, s = ''; + for(i = 0;i < argc;i++) { + s += ',args[' + i + ']'; + } + eval('var check = typeof ' + func + ' == \'function\''); + if(check) { + eval(func + '(' + s.substr(1) + ')'); + } else { + setTimeout(function () {checkrun();}, 50); + } + }; + var checkrun = function () { + if(JSLOADED[src]) { + run(); + } else { + setTimeout(function () {checkrun();}, 50); + } + }; + script = script || 'common_extra'; + src = JSPATH + script + '.js?' + VERHASH; + if(!JSLOADED[src]) { + appendscript(src); + } + return checkrun(); +} + +function ajaxupdateevents(obj, tagName) { + $F('_ajaxupdateevents', arguments, 'ajax'); +} + +function ajaxupdateevent(o) { + $F('_ajaxupdateevent', arguments, 'ajax'); +} + +function ajaxget(url, showid, waitid, loading, display, recall) { + $F('_ajaxget', arguments, 'ajax'); +} + +function ajaxpost(formid, showid, waitid, showidclass, submitbtn, recall) { + $F('_ajaxpost', arguments, 'ajax'); +} + +function ajaxmenu(ctrlObj, timeout, cache, duration, pos, recall, idclass, contentclass) { + $F('_ajaxmenu', arguments, 'ajax'); +} + +function ajaxinnerhtml(showid, s) { + $F('_ajaxinnerhtml', arguments, 'ajax'); +} + +var BROWSER = {}; +var USERAGENT = navigator.userAgent.toLowerCase(); +browserVersion({'ie':'msie','firefox':'','chrome':'','opera':'','safari':'','mozilla':'','webkit':'','maxthon':'','qq':'qqbrowser','rv':'rv'}); +if(BROWSER.safari || BROWSER.rv) { + BROWSER.firefox = true; +} +BROWSER.opera = BROWSER.opera ? opera.version() : 0; + +HTMLNODE = document.getElementsByTagName('head')[0].parentNode; +if(BROWSER.ie) { + BROWSER.iemode = parseInt(typeof document.documentMode != 'undefined' ? document.documentMode : BROWSER.ie); + HTMLNODE.className = 'ie_all ie' + BROWSER.iemode; +} + +var CSSLOADED = []; +var JSLOADED = []; +var JSMENU = []; +JSMENU['active'] = []; +JSMENU['timer'] = []; +JSMENU['drag'] = []; +JSMENU['layer'] = 0; +JSMENU['zIndex'] = {'win':200,'menu':300,'dialog':400,'prompt':500}; +JSMENU['float'] = ''; +var CURRENTSTYPE = null; +var discuz_uid = isUndefined(discuz_uid) ? 0 : discuz_uid; +var creditnotice = isUndefined(creditnotice) ? '' : creditnotice; +var cookiedomain = isUndefined(cookiedomain) ? '' : cookiedomain; +var cookiepath = isUndefined(cookiepath) ? '' : cookiepath; +var EXTRAFUNC = [], EXTRASTR = ''; +EXTRAFUNC['showmenu'] = []; diff --git a/template/bygsjw_sj/image/common.css b/template/bygsjw_sj/image/common.css new file mode 100644 index 0000000..02ab5d0 --- /dev/null +++ b/template/bygsjw_sj/image/common.css @@ -0,0 +1,407 @@ + +/* x3.5 */ +.fico-person:before{content:"\f100";} +.fico-search:before{content:"\f101";} +.fico-account_box:before{content:"\f102";} +.fico-account:before{content:"\f102";} +.fico-home:before{content:"\f103";} +.fico-assessment:before{content:"\f104";} +.fico-widthfixed:before{content:"\f105";} +.fico-widthauto:before{content:"\f106";} +.fico-styleselect:before{content:"\f107";} +.fico-add_circle:before{content:"\f108";} +.fico-add:before{content:"\f108";} +.fico-remove_circle:before{content:"\f109";} +.fico-remove:before{content:"\f109";} +.fico-rss_feed:before{content:"\f10a";} +.fico-rss:before{content:"\f10a";} +.fico-refresh:before{content:"\f10b";} +.fico-delete:before{content:"\f10c";} +.fico-comment:before{content:"\f10d";} +.fico-edit:before{content:"\f10e";} +.fico-push:before{content:"\f10f";} +.fico-thumbup:before{content:"\f110";} +.fico-thumbdown:before{content:"\f111";} +.fico-collection:before{content:"\f112";} +.fico-activitysm:before{content:"\f113";} +.fico-share:before{content:"\f114";} +.fico-check_right:before{content:"\f115";} +.fico-error:before{content:"\f116";} +.fico-info:before{content:"\f117";} +.fico-qq:before{content:"\f118";} +.fico-email:before{content:"\f119";} +.fico-task:before{content:"\f11a";} +.fico-scrolltop:before{content:"\f11b";} +.fico-replyfast:before{content:"\f11c";} +.fico-list:before{content:"\f11d";} +.fico-follow:before{content:"\f11e";} +.fico-friendadd:before{content:"\f11f";} +.fico-mypost:before{content:"\f120";} +.fico-interactive:before{content:"\f121";} +.fico-settings:before{content:"\f122";} +.fico-link:before{content:"\f123";} +.fico-up:before{content:"\f124";} +.fico-down:before{content:"\f125";} +.fico-left:before{content:"\f126";} +.fico-right:before{content:"\f127";} +.fico-valid:before{content:"\f128";} +.fico-invalid:before{content:"\f129";} +.fico-stars:before{content:"\f12a";} +.fico-sun:before{content:"\f12b";} +.fico-star3:before{content:"\f12b";} +.fico-moon:before{content:"\f12c";} +.fico-star2:before{content:"\f12c";} +.fico-star:before{content:"\f12d";} +.fico-star1:before{content:"\f12d";} +.fico-checkbox:before{content:"\f12e";} +.fico-checked:before{content:"\f12f";} +.fico-doing:before{content:"\f130";} +.fico-volume:before{content:"\f131";} +.fico-image:before{content:"\f132";} +.fico-attachment:before{content:"\f133";} +.fico-thread:before{content:"\f134";} +.fico-clock:before{content:"\f135";} +.fico-lock:before{content:"\f136";} +.fico-print:before{content:"\f137";} +.fico-help:before{content:"\f138";} +.fico-launch:before{content:"\f139";} +.fico-imgadjust:before{content:"\f13a";} +.fico-vote:before{content:"\f13b";} +.fico-reward:before{content:"\f13c";} +.fico-vs:before{content:"\f13d";} +.fico-group:before{content:"\f13e";} +.fico-cart:before{content:"\f13f";} +.fico-headset:before{content:"\f140";} +.fico-phone:before{content:"\f141";} +.fico-place:before{content:"\f142";} +.fico-camera:before{content:"\f143";} +.fico-voice:before{content:"\f144";} +.fico-bell:before{content:"\f145";} +.fico-loading:before{content:"\f146";} +.fico-poke:before{content:'\f146';} +.fico-profile:before{content:'\f147';} +.fico-dropdown:before{content:'\f148';} +.fico-ban:before{content:'\f149';} +.fico-tag:before{content:'\f14a';} +.m15 {margin: 15px !important;} +.mt0 {margin-top:0px !important;} +.mt5 {margin-top:5px !important;} +.mt10 {margin-top:10px !important;} +.mt15 {margin-top:15px !important;} +.mb10 {margin-bottom:10px !important;} +.p0 {padding:0px !important;} +.p5 {padding:5px !important;} +.p10 {padding:10px !important;} +.p15 {padding:15px !important;} +.pt5 {padding-top:5px !important;} +.pb5 {padding-bottom:5px !important;} +.pt10 {padding-top:10px !important;} +.pb10 {padding-bottom:10px !important;} +.pl5 {padding-left: 5px !important;} +.b0 {border:0 !important;} +.bodybox {background-color:var(--dz-BG-0); font-size: 12px;} +.alt, .alt th, .alt td { background-color: var(--dz-BG-5); } +.align-items-center {align-items:center} +.justify-content-between {justify-content:space-between} +.justify-content-end {justify-content: flex-end} +.discuz_x {height:10px;background-color:var(--dz-BG-body);border-bottom:1px solid var(--dz-BOR-ed);overflow:hidden} +.flex-box{ display:-webkit-box; display:-webkit-flex; display:-ms-flexbox; display:flex; -webkit-box-align:center; -webkit-align-items:center; -ms-flex-align:center; align-items:center;} +.flex{ -webkit-box-flex:1; -webkit-flex:1; -ms-flex:1; flex:1;} +.mtime .doing_listgl a {float: right;margin-left: 8px;color: #888;} +.x35_post_btn{ padding: .1rem;} +.x35_post_btn .pn{ width: 100%; border: none; padding: 0; height: 44px; line-height: 44px; text-align: center; font-size: 16px; background-color: var(--dz-BG-color); color: var(--dz-FC-fff); border-radius: 6px;} +.x35_tbmu { padding: 8px 10px 8px 0; border-bottom: 1px dashed var(--dz-BOR-ed); } + +.login_from .sec_code{ line-height: normal;} +.sec_code img{ margin-left: 5px;} + +.header {background:#2B7ACD;background-color:var(--dz-BG-color);color:#fff;height:30px;line-height:30px;padding:10px 12px} +.header .mz, .header .mzlogo {float:left;position:relative} +.header .mzlogo a {line-height:normal} +.header .my, .header .myss {float:right;position:relative} +.header .my a, .header .myss a {float:right} +.header .mz, .header .my {width:20%} +.header .mzlogo {width:40%;height:30px;text-align:left;font-size:18px;position:relative;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center} +.header .myss {width:60%} +.header .myss a {background-color:#fff;color:#aaa;line-height:30px;font-size:14px;padding:0 15px;border-radius:15px} +.header .myss a i {float:left;font-size:16px;margin-right:5px;color:#aaa} +.header i {font-size:20px;color:#fff} +.header .my a {margin-left:10px} +.header h2 {float:left;width:60%;text-align:center;font-size:18px;position:relative;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} +.header h2 img, .header .mzlogo img {max-height:30px;vertical-align:top;max-width:100%} +.header h2 a {color:#fff} + +@font-face { font-family: "dzicon"; src: url('./font/common/dzicon.eot'); src: url('./font/common/dzicon.eot?#iefix') format('eot'), url('./font/common/dzicon.woff2') format('woff2'), url('./font/common/dzicon.woff') format('woff'); font-weight: normal; font-style: normal; } +[class^="fico-"]:before, [class*=" fico-"]:before { font-family: "dzicon"; font-style: normal; font-weight: normal; speak: none; display: inline-block; text-decoration: inherit; width: 1em; margin-right: .2em; text-align: center; font-variant: normal; text-transform: none; line-height: 1em; font-size: 120%; } + +/* font icon size */ +.fic4 { font-size: 14px; }.fic6 { font-size: 16px; }.fic8 { font-size: 18px; } +/* flip x */ +.fifx::before { transform: scale(-1,1); } +/* font rotate */ +@keyframes dzrotate{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}} +.ficr { margin-right: .2em; }.ficr:before { margin-right: 0; animation: dzrotate 2s infinite linear; } +.loadicon { background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3e%3cpath fill='%23999' d='M12.2 12.2L14 14H9V9l1.8 1.8c.7-.7 1.2-1.7 1.2-2.8 0-1.9-1.3-3.4-3-3.9v-2c2.8.4 5 2.9 5 5.9 0 1.6-.7 3.1-1.8 4.2zM3.8 3.8C2.7 4.8 2 6.3 2 8c0 3 2.2 5.4 5 5.9v-2.1c-1.7-.4-3-2-3-3.9 0-1.1.5-2.1 1.2-2.8L7 7V2H2l1.8 1.8z'/%3e%3c/svg%3e"); display: inline-block; width: 16px; height: 16px; animation: dzrotate 1.2s infinite linear; } +/* font color primary/secondary/notice/light/alarm/valid/invalid */ +.fc-p { color: #2B7ACD; } .fc-s { color: #999; } .fc-n { color: #7DA0CC; } .fc-l { color: #FF9C00; } .fc-a { color: #F26C4F; } .fc-v { color: #7CBE00; } .fc-i { color: #FF512C; } .fc-t { color: transparent; } +/* no margin right */ +.fnmr:before { margin-right: 0; } + +.txtlist {background-color:var(--dz-BG-0);overflow:hidden} +.txtlist .mtit {font-size:16px;height:40px;line-height:40px;font-weight:400;padding:0 15px;border-bottom:1px solid var(--dz-BOR-ed);overflow:hidden} +.txtlist .mtit em {margin-left:5px;font-size:12px;color:var(--dz-FC-999)} +.txtlist .mtit .ytxt {float:right;margin-top:9px;margin-left:8px;padding:0 5px;height:20px;line-height:20px;font-size:12px;color:var(--dz-FC-color);background-color:var(--dz-BG-5);border:1px solid var(--dz-BOR-ed);border-radius:4px;position:relative} +.txtlist ul {padding:0 15px;overflow:hidden} +.txtlist ul li {border-top:1px solid var(--dz-BOR-ed);height:40px;line-height:40px;font-size:14px;overflow:hidden} +.txtlist ul li:first-child {border-top:none} +.txtlist ul li i {float:left;margin-right:5px;font-size:12px;color:var(--dz-FC-ddd)} +.text-muted {padding:10px 15px;color:var(--dz-FC-999)} + +.dhnv {background-color:var(--dz-BG-0);border-top:1px solid var(--dz-BOR-ed);border-bottom:1px solid var(--dz-BOR-ed);font-size:15px;text-align:center} +.dhnv a {height:40px;line-height:38px;color:var(--dz-FC-999);position:relative} +.dhnv a.mon {height:38px;color:var(--dz-FC-color);font-weight:400;border-bottom:2px solid var(--dz-BG-color)} +.dhnavs_box, .dhnavs {width:100%;height:40px;overflow:hidden} +.dhnavs_box {background-color:var(--dz-BG-0);border-bottom:1px solid var(--dz-BOR-ed);overflow:hidden} +#dhnavs_li {width:100%;height:40px;text-align:center;white-space:nowrap} +#dhnavs_li li {float:left;width:auto;text-align:center;overflow:hidden;color:var(--dz-FC-999);position:relative} +#dhnavs_li li a {display:inline-block;font-size:14px;height:24px;line-height:24px;margin:8px 10px;padding:0 6px;color:var(--dz-FC-999);border-radius:4px;border: 1px solid #eee;} +#dhnavs_li li span {color:var(--dz-FC-ddd)} +#dhnavs_li li.mon a {background-color:var(--dz-BG-color);color:var(--dz-FC-fff)} + +.x35_threadlist_box h2, .x35_threadlist_box h3, .x35_threadlist_box h4{ display: block;} +.x35_threadlist_box {overflow:hidden} +.x35_threadlist_box h2 {padding:0 15px;background-color:var(--dz-BG-0);border-top:1px solid var(--dz-BOR-ed);line-height:40px;font-size:14px} +.x35_threadlist_box h2 .emfont {color:var(--dz-BG-2)} +.x35_threadlist_box h4 {background-color:var(--dz-BG-0);height:30px;line-height:30px;padding:80px 0;text-align:center;font-size:14px;font-weight:400;color:var(--dz-FC-999);border-top:1px solid var(--dz-BOR-ed);border-bottom:1px solid var(--dz-BOR-ed);margin-bottom:10px} +.x35_threadlist {padding:0;overflow:hidden} +.x35_threadlist li.list {padding:2px 15px;background-color:var(--dz-BG-0);border-top:1px solid var(--dz-BOR-ed);border-bottom:1px solid var(--dz-BOR-ed);margin-top:10px} +.x35_threadlist li.list a {display:block} +.x35_threadlist_top {height:38px;padding:12px 0 10px} +.x35_threadlist_top .mimg {float:left;margin-right:8px} +.x35_threadlist_top .mimg img {float:left;width:38px;line-height:38px;border-radius:50%} +.x35_threadlist_top .muser h3 {margin-top:2px;height:20px;line-height:20px} +.x35_threadlist_top .muser h3 .mmc {font-size:15px} +.x35_threadlist_top .muser .mtime {display:block;height:18px;line-height:18px;font-size:12px;color:var(--dz-FC-ccc)} +.x35_threadlist_tit {line-height:26px;font-size:18px;margin-bottom:5px;font-weight:400} +.x35_threadlist_tit .micon {float:left;width:30px;height:18px;line-height:18px;text-align:center;font-size:12px;background-color:var(--dz-BG-color);color:var(--dz-FC-fff);margin-top:4px;margin-right:5px;border-radius:2px;overflow:hidden} +.x35_threadlist_tit .top {background-color:var(--dz-BG-3)} +.x35_threadlist_tit .digest {background-color:var(--dz-BG-4)} +.x35_threadlist_tit .lock {background-color:var(--dz-BG-2)} +.x35_threadlist_mes {margin-bottom:8px;line-height:22px;font-size:14px;color:var(--dz-FC-999);overflow:hidden} +.x35_threadlist_imgs {margin-bottom:10px;font-size:0;overflow:hidden;position:relative} +.x35_threadlist_imgs li {float:left;width:32.6%;padding-bottom:30%;margin-top:1.1%;margin-right:1.1%;box-sizing:border-box;background:var(--dz-BG-5);position:relative;overflow:hidden;border-radius:4px} +.x35_threadlist_imgs li:nth-child(3n) {margin-right:0} +.x35_threadlist_imgs li img {width:100%;height:100%;object-fit:cover;position:absolute} +.x35_threadlist_imgs li em {position:absolute;bottom:0;right:0;z-index:100;background:rgb(0,0,0,.5);color:var(--dz-FC-fff);font-size:12px;height:22px;line-height:22px;padding:1px 5px;border-radius:0 0 4px 0} +.x35_threadlist_imgs1 {margin-bottom:10px;font-size:0;overflow:hidden;position:relative} +.x35_threadlist_imgs1 li {width:100%;padding-bottom:66%;background:var(--dz-BG-5);position:relative;overflow:hidden;border-radius:4px} +.x35_threadlist_imgs1 li img {width:100%;height:100%;object-fit:cover;position:absolute} +.x35_threadlist_imgs2 li {width:49.45%} +.x35_threadlist_imgs2 li:nth-child(2n) {margin-right:0} +.x35_threadlist_foot {padding:5px 0 15px;height:22px;line-height:22px;font-size:13px} +.x35_threadlist_foot li {float:left;background-color:var(--dz-BG-5);padding:0 10px;margin:2px 10px 2px 0px;color:var(--dz-FC-aaa);border-radius:4px} +.x35_threadlist_foot li i {float:left;font-size:14px;margin-right:3px;color:var(--dz-FC-ccc)} +.x35_threadlist_foot li.mr {float:right;margin-right:0;padding:0;background:none;color:var(--dz-FC-color)} +.x35_threadlist_foot li.mr a {float:right;color:var(--dz-FC-color)} +.x35_threadlist li.list_top {padding:0 15px;background-color:var(--dz-BG-0);border-top:1px solid var(--dz-BOR-ed)} +.x35_threadlist li.list_top a {display:block;height:36px;line-height:36px;font-size:14px;overflow:hidden} +.x35_threadlist li.list_top a .micon {float:left;height:18px;line-height:18px;font-size:12px;background-color:var(--dz-BG-color);color:var(--dz-FC-fff);margin-top:9px;margin-right:6px;padding:0 3px;border-radius:2px;overflow:hidden} +.x35_threadlist li.list_top a .gonggao {background-color:var(--dz-BG-2)} + +.x35_viewthread {background-color:var(--dz-BG-0);overflow:hidden} +.x35_viewthread .view_tit {padding:15px 15px 0;line-height:30px;font-size:20px;font-weight:400} +.x35_viewthread .view_tit span {font-size:12px;color:var(--dz-BG-2)} +.x35_viewthread .view_reply {padding:50px 15px;line-height:30px;font-size:14px;color:var(--dz-FC-ccc);text-align:center} +.x35_viewthread .view_reply i {display:block;font-size:50px;line-height:50px;margin:5px auto} +.x35_plc {padding:0 15px;border-bottom:1px solid var(--dz-BOR-ed);overflow:hidden;position:relative} +.x35_plc .avatar {position:absolute;left:15px;top:15px;display:inline} +.x35_plc .avatar img {width:36px;height:36px;border-radius:50%} +.x35_plc .pi {margin-top:5px;padding:10px 0;position:relative} +.x35_plc .pi .authi {margin-left:45px;margin-bottom:10px;position:relative} +.x35_plc .pi .authi li.mtit {height:18px;line-height:16px;padding-top:2px;overflow:hidden} +.x35_plc .pi .authi li span.z, .x35_plc .pi .authi li span.z a {font-size:14px;color:var(--dz-FC-color)} +.x35_plc .pi .authi li span.y {float:right;color:var(--dz-FC-999)} +.x35_plc .pi .authi li.mtime {height:16px;line-height:16px;font-size:12px;color:var(--dz-FC-999);overflow:hidden} +.x35_plc .pi .authi li.mtime span {float:right;font-size:12px} +.x35_plc .pi .authi li.mtime span i {float:left;margin-left:8px;margin-right:2px;color:var(--dz-FC-bbb)} +.x35_plc .pi .authi li.mtime span em {float:left} +.x35_plc .pi .authi li.mtime em.mgl {float:right;margin-left:8px;color:var(--dz-BG-2)} +.x35_plc .pi .authi li.mtime em.mgl a {color:var(--dz-BG-2)} +.x35_plc .pione {margin-left:0} +.x35_plc .pione .authi {margin-left:45px} +.x35_plc .pi .message {line-height:26px;font-size:16px} +.x35_plc .pi .message .jammer {font-size:12px;color:var(--dz-FC-color)} +.x35_plc .pi .message img, .x35_plc .pi .img_one img {margin:6px 0;max-width:100%;border-radius:4px} +.x35_plc .pi .img_list {margin:0 auto} +.x35_plc .pi .img_list li {width:100%;text-align:center;vertical-align:middle} +.x35_plc .pi .img_list li a {display:block} +.x35_plc .pi .img_list li img {margin:7px 0;max-width:100%;border-radius:4px} +.x35_plc .pi .message .rate {margin:15px auto 10px;text-align:center;overflow:hidden} +.x35_plc .pi .message .rate p {height:20px;line-height:20px} +.x35_plc .pi .message .rate p.rate_tit {font-size:15px} +.x35_plc .pi .message .rate p.rate_tip {font-size:13px} +.x35_plc .pi .message .rate p.rate_tip span {font-size:15px;padding:0 3px} +.x35_plc .pi .message .rate h2 {height:52px;margin:10px 0 16px;font-size:24px;overflow:hidden} +.x35_plc .pi .message .rate h2 a {display:inline-block;width:52px;height:52px;line-height:54px;text-align:center;border-radius:50%;overflow:hidden} +.x35_plc .pi .message .rate h2.rate_btn {height:34px;font-size:16px} +.x35_plc .pi .message .rate h2.rate_btn a {padding:0 15px;height:34px;line-height:34px;border-radius:4px} +.x35_plc .pi .message .rate ul {margin:8px 30px 0;text-align:center;overflow:hidden} +.x35_plc .pi .message .rate ul li {display:inline-block;height:32px;margin:0 2px;overflow:hidden} +.x35_plc .pi .message .rate ul li img {width:32px;height:32px;border-radius:50%;overflow:hidden} +.x35_plc .pi .message .rate ul li a span {display:inline-block;text-align:center;font-size:14px;width:32px;height:32px;line-height:26px;overflow:hidden;border-radius:50%} + + +/* forum_4grid */ +.dz-swiper_box, .hotbox, .discuz_4grid_box{ position:relative; width: 3.59rem; margin: .08rem; overflow: hidden; border-radius: .1rem;} +.dz-swiper .swiper-wrapper li a{ display:block; width:100%; height:230px;} +.dz-swiper .swiper-wrapper li a img{ width:100%; height:100%; object-fit:cover; overflow:hidden;} +.dz-swiper .swiper-wrapper li a span{ position:absolute; left:0; right:0; bottom:0; display:block; background:-webkit-linear-gradient(top,rgba(0,0,0,0) 0,rgba(0,0,0,.8) 100%); color:#fff; padding:0 15px; font-size:16px; height:40px; overflow:hidden; line-height:42px; font-weight:400;} +.dz-swiper_box .swiper-forum{ position:absolute; right:15px; bottom:0; width: auto; line-height:34px; text-align:right; font-family:Arial; color:#fff; font-size:12px; z-index:9;} +.dz-swiper_box .swiper-forum .swiper-pagination-current{ font-weight:400; font-size:20px;} +.dz-swiper_box .swiper-forum .swiper-pagination-total{ font-style:100;} +.hotbox{ background-color:#fff; line-height:24px; font-size:14px; overflow:hidden;} +.hotbox h2{ margin:15px 15px 0; height:24px; line-height:24px; font-size:16px;} +.hotbox h2 span{ float:left; margin-right:5px; padding:0 4px; background-color:#ff5656; color:#fff; border-radius:4px;} +.hotbox-toutiao a{ display:block; margin:0 15px; padding:10px 0; border-bottom:1px solid #ededed; color:#999;} +.hotbox-toutiao a span{ display:block; margin-bottom:4px; line-height:24px; font-size:18px; color:var(--dz-BG-color);} +.hotbox .listbox{ margin-bottom:0;} +.tabs{ background-color:#fff; border-top:1px solid #ededed; border-bottom:1px solid #ededed; height:40px; font-size:15px; text-align:center;} +.tabs a{ height:40px; line-height:38px; color:#999; position:relative;} +.tabs a em{ position:absolute; bottom:0; left:50%; margin-left:-10px; background-color:var(--dz-BG-color); width:20px; height:3px; display:none;} +.tabs a.mon{ height:38px; color:var(--dz-BG-color); font-weight:400; border-bottom:2px solid var(--dz-BG-color);} +.listbox{ margin:0 auto 10px; background-color:#fff; border-bottom:1px solid #ededed; overflow:hidden;} +.listbox li{ height:40px; line-height:40px; margin:0 15px; font-size:15px; border-top:1px solid #ededed; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;} +.listbox li i{ float:left; font-size:13px; margin-right:4px; color:#ccc;} +.listbox li span.mbk{ color:#999;} +.listbox li span.mx{ color:#ddd; margin:0 8px;} +.listbox li span.mybk{ color:#aaa; float:right; font-size:13px; padding-left:8px;} +.listbox li span.mico{ background-color:#ccc; float:left; width:4px; height:4px; margin:18px 10px 0 2px;} +.listbox li span.mnum{ float:left; width:20px; height:20px; line-height:20px; font-size:12px; text-align:center; margin-top:10px; margin-right:8px; background-color:#ccc; color:#fff; border-radius:4px;} +.listbox li:nth-child(1) span.mnum{ background-color:#ff5656} +.listbox li:nth-child(2) span.mnum{ background-color:#ff9900;} +.listbox li:nth-child(3) span.mnum{ background-color:#b3cc0d;} +.listbox li:first-child{ border-top:none;} + +/* space_profile */ +.user_avatar_credits{ background: #fff; margin: -.25rem .1rem .1rem .1rem; position: relative; z-index: 10; border-radius: .08rem;} +.user_avatar_credits li{ float: left; width: 25%; margin: .12rem 0; text-align: center; line-height: .22rem; font-size: .13rem; color: #999;} +.user_avatar_credits li span{ display: block; height: .22rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: .17rem; color: #555;} + +/* spacecp_blog */ +.x35_tip_dd{ padding-top: .1rem; text-align: center;} +.x35_tip_dd a.button{ display: inline-block; vertical-align: top; line-height: 39px; color: #fff;} + +/* space_blog_view */ +.doing_list_box {margin-top: 10px;} +.doing_list_box .wall_i {margin-bottom: 10px;padding: 10px;font-size: 14px;line-height: 24px;background: #FDFBEC;color: #F26C4F;position: relative;} +.doing_list_box .wall_i a {color: var(--dz-FC-color);} +.x35_threadlist .doing_list_li.list {margin-top: 0px;padding: 2px 12px 12px 12px;border-bottom: 0px solid var(--dz-BOR-ed);} +.x35_threadlist_top {height:38px;padding:12px 0 10px} +.x35_threadlist_top .mimg {float:left;margin-right:8px} +.x35_threadlist_top .mimg img {float:left;width:38px;line-height:38px;border-radius:50%} +.x35_threadlist_top .muser h3 {margin-top:2px;height:20px;line-height:20px} +.x35_threadlist_top .muser h3 .mmc {font-size:15px} +.x35_threadlist_top .muser .mtime {display:block;height:18px;line-height:18px;font-size:12px;color:var(--dz-FC-ccc)} +.wall_list .magic_doodle { line-height: 30px;} +.wall_list .magic_doodle img { margin-right: 5px;margin-bottom: 2px;} +.wall_magic_list .magic_doodle { margin-left: 10px;} + +/* spacecp_usergroup */ +.tdats { overflow: hidden; zoom: 1; margin: 10px 0; } +.tdats i { font-size: 14px; } +.tdats i:before { height: 18px; line-height: 18px; margin-right: 2px; } +.tdats th, .tdats td { overflow: hidden; padding: 0 5px; height: 26px; border-width: 0 1px 0 0; border-color: #fff; white-space: nowrap; text-overflow: ellipsis;} +.tdats th { height: 40px; font-weight: 700; } +.tdats .h th { height: 24px; border-top: 1px solid var(--dz-BOR-ed); border-bottom: 1px solid #E5E5E5; background: linear-gradient(0deg, #efefef, #fcfcfc); color: var(--dz-FC-666); zoom: 1; } +.tdats .tdat { float: left; width: 40%; border: none; table-layout: fixed; } +.tdats .tfx { width: 300px; } +.tdats .tfxf { width: 60%; } +.tdats.tdats_group .tdat, .tdats.tdats_group .tb, .tdats_group .tscr{ width: 33.3%;} +.tfx th, .tfx td { border-width: 0 3px !important; background: #FFF2DF; } +.tfx .alt, .tfx .alt th, .tfx .alt td { background: #FAEDDA; } +.tfx .h th { padding: 1px 5px; } +.tscr { float: left; overflow: hidden; width: 470px; } +.tscr .tdat th, .tscr .tdat td { width: 470px; } +.nwp { word-wrap: normal; white-space: nowrap; } +.tdats .c0 { padding: 0; height: 46px; text-align: center; vertical-align: bottom; background: transparent; } +.tdats .c0 h4 {font-size: 12px; display: block; line-height: 38px; background-color: #F60; color: var(--dz-FC-fff); } +.tdats .c0 h4, .tdats .tb li { -moz-border-radius: 4px 4px 0 0; -webkit-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } +.tdats .tb { float: left; margin-top: 8px; padding-left: 0; width: 470px; border-bottom-width: 4px; } +.tdats .tb li { padding: 0 10px; line-height: 33px; font-weight: 700; color: var(--dz-BG-2); } +.tdats .c1 { border-color: #158B00; } +.tdats #c1 { border-color: #158B00; background-color: #158B00; background-position: 0 -40px; } +.tdats .c2 { border-color: #057373; } +.tdats #c2 { border-color: #057373; background-color: #057373; background-position: 0 -80px; } +.tdats .c3 { border-color: #1F57A9; } +.tdats #c3 { border-color: #1F57A9; background-color: #1F57A9; background-position: 0 -120px; } +.tdats .c4 { border-color: #1A588D; } +.tdats #c4 { border-color: #1A588D; background-color: #1A588D; background-position: 0 -160px; } +.tdats .c1 #c1, .tdats .c2 #c2, .tdats .c3 #c3, .tdats .c4 #c4 { line-height: 38px; color: #fff;} +.notice { clear: both; margin: 5px 0; padding: 3px 0; } +.notice:before { content: "\f145"; font-family: dzicon; font-size: 16px; line-height: 14px; margin-right: 4px; color: #F26C4F; } +.x35_expirylist{ width: 100%; border-left: 1px solid #eee; border-top: 1px solid #eee;} +.x35_expirylist td, .x35_expirylist th{ padding: 7px 4px; border-bottom: 1px solid #eee; border-right: 1px solid #eee; text-align: center;} +.x35_expirylist th{ background: #f5f5f5;} +.x35_expirylist a{ color: #06c;} +.x35_f_c{ width: 3rem; padding: .1rem; background: #fff; font-size: .14rem; border-color: #ddd; border-radius: .02rem;} +.x35_f_c h3{ margin-bottom: .1rem; padding: 0 .05rem .1rem; border-bottom: 1px solid #eee; display: block; font-weight: 700;} +.x35_f_c h3 a{ font-size: .14rem; float: right; color: #888;} +.x35_f_c table{ width: 100%; border-top: 1px solid #eee; border-left: 1px solid #eee;} +.x35_f_c table tr{ border-bottom: 1px solid #eee;} +.x35_f_c table td{ padding: .05rem .08rem; border-right: 1px solid #eee;} +.x35_f_c .x35_td2{ color: #999;} +.x35_f_c .x35_td2 br{ display: none;} +.x35_pns{ margin-top: .1rem;} +.x35_pns .pn{ width: 100%; border: none; padding: 0; height: 40px; line-height: 40px; text-align: center; font-size: 16px; background-color: var(--dz-BG-color); color: var(--dz-FC-fff); border-radius: 6px;} +.x35_tdat tr{ border: 1px solid #eee;} +.x35_tdat th{ padding: .05rem;} +.x35_tdat td{ padding: .05rem 0;} + +/* spacecp_payment_pay */ +.dzcell-group {background:#FFF;position:relative;} +.dzcell-group-inset {margin: 0 15px;overflow: hidden;border-radius:8px;} +.dzcell-item {position: relative;display: flex;box-sizing: border-box;width: 100%;padding: 10px 16px;overflow: hidden;color: #323232;font-size: 14px;line-height: 24px;background-color: #FFF;} +.dzcell-item .dzcell-title {width:80px;} +.dzcell-item .dzcell-value {flex:1;position: relative;overflow: hidden;color: #969799;text-align: right;vertical-align: middle;word-wrap: break-word;} + + +/* common */ +.hdc_xin, .landingPrompt a, .bg_xin #date-wrapper h3, #date-wrapper #d-confirm, .ac_hd .on, .post_nav_b .post_on, #cform .area button, .pmbox li .num{ background: var(--dz-BG-color);} +.button, .button2, .btn_pn, .btn_login .pn, .btn_login .pn:hover, .btn_register .pn, .btn_register .pn:hover, .btn_exit a, .btn_exit a:hover{ background: var(--dz-BG-color); color: #fff; border-radius: 2px;} +input[type=button], input[type=submit], input[type=file], button{ background: var(--dz-BG-color); color: #fff; border: 0; border-radius: .02rem; cursor: pointer; -webkit-appearance: none; font-size: .14rem;} +input, textarea, select{ outline-color: var(--dz-BG-color); max-width: 100%;} +.lanjiazai_bg, .sj_slide_bd li{ background: #fff url(./lanjiazai.gif) no-repeat center center;} +.hdc_xin a.shouye{ position: relative; z-index: 2; margin-left: 0; padding-left: .16rem; background: var(--dz-BG-color) url(./bianlan.png) no-repeat .1rem center; background-size: .05rem .2rem; -webkit-background-size: .05rem .2rem;} +.portal_font_nav .on, .portal_cat_top .on, .discuz_font_nav .on, .forumdisplay_tab .on, .newthread_type_tab .a{ color: var(--dz-BG-color);} +.portal_font_nav .on:after, .portal_cat_top .on:after, .discuz_font_nav .on:after, .forumdisplay_tab .on:after, .newthread_type_tab .a:after{ content: "."; position: absolute; top: .26rem; left: 50%; display: block; width: .16rem; height: .04rem; margin-left: -.08rem; line-height: 999em; background: var(--dz-BG-color); color: #fff; border-radius: .02rem;} +.portal_cat_sub .on, .byg_thread_types .a a, .byg_sort_font .a a{ border-color: var(--dz-BG-color); color: var(--dz-BG-color);} + +/* portal */ +.number{ width: .16rem; height: .16rem; line-height: .16rem; border-radius: 50%; color: #fff; font-size: 12px; text-align: center; display: block; background: var(--dz-BG-color);} +.qh_content .number1, .qh_content .number2, .qh_content .number3, .sub_forum li .num{ background: #F26C4F;} +.tabBox_hd li.on a, .tw_tab h2, .ac_hd h2, .bm_xin h2{ box-shadow: 0 -2px 0 var(--dz-BG-color);} +.ac_bd h3 span{ height: .2rem; line-height: .2rem; padding: 0 .05rem; color: #F26C4F; border: 1px solid #F26C4F; border-radius: .1rem; font-size: .12rem;} + +/* view */ +.quote{ padding: .05rem 0 .05rem 16px; margin: .04rem 0; line-height: .2rem; border: 1px dashed #eee; border-radius: .02rem; background: #ffe url(./qa.gif) no-repeat 0 .05rem; font-size: .14rem; color: #888; overflow: hidden;} +.quote blockquote{ margin: 0; padding-right: 16px; background: url(./qz.gif) no-repeat 100% 100%; display: inline; font-size: .14rem;} + +/* viewthread */ +.byg_viewpay, #attachpayform .byg_o button, #payform .byg_o button, .trade_add_about a, .byg_reward_b a, #affirmbutton, #negabutton, .byg_debate_b .mtn a{ padding: .01rem .06rem; background: var(--dz-BG-color) !important; font-size: .14rem; color: #fff !important; border-radius: .02rem; display: inline-block;} +a.byg_attach_name{ display: inline-block; vertical-align: middle; line-height: .28rem; padding: 0 .06rem 0 .24rem; background: var(--dz-BG-color) url(./bai_xiazai.png) no-repeat .05rem center; background-size: .17rem; -webkit-background-size: .17rem; font-size: .16rem; color: #fff !important; border-radius: .04rem;} + +/* post */ +#block_forum .over_one{ background: url(./jinru.png) no-repeat right center; background-size: .16rem; -webkit-background-size: .16rem;} +.plc_xin li .reply_y_b{ top: .9rem; width: .4rem; height: .25rem; line-height: .25rem; border: 0; background: var(--dz-BG-color); color: #fff;} +.post_sort_img_btn .psi_btn{ position: absolute; top: 0; left: 0; z-index: 1; padding: .02rem .05rem; text-align: center; background: var(--dz-BG-color); color: #fff; border-radius: .04rem;} + +/* footer */ +.footer{ background: var(--dz-WEIBG-color);} +.footer_on, .footer_on span, .footer_on i{ color: var(--dz-BG-color) !important;} +.sidenav-brand{ width: 100%; overflow: hidden; display: block; background-position: center center; background-image:url(./home_bg.jpg); background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover;} +.byg_bl_lang1{ top: 0; background: url(./bolang1.svg) repeat-x; background-size: 300px; -webkit-animation: byg_bl_lang1 3s linear infinite; animation: byg_bl_lang1 3s linear infinite;} +.byg_bl_lang2{ top: 4px; background: url(./bolang2.svg) repeat-x; background-size: 300px; -webkit-animation: byg_bl_lang2 5s linear infinite; animation: byg_bl_lang2 5s linear infinite;} +.byg_scrolltop .scrolltop_side{ background: var(--dz-BG-color);} +.byg_scrolltop .scrolltop_top{ background: #F26C4F;} +.scrolltop_order_tit{ padding: .1rem 0; font-size: .18rem; text-align: center; background: var(--dz-BG-color); color: #fff; border-radius: .1rem .1rem 0 0;} +.scrolltop_order_c li .on{ background: var(--dz-BG-color); color: #fff;} diff --git a/template/bygsjw_sj/image/common.js b/template/bygsjw_sj/image/common.js new file mode 100644 index 0000000..cc46e92 --- /dev/null +++ b/template/bygsjw_sj/image/common.js @@ -0,0 +1,1321 @@ +var supporttouch = "ontouchend" in document; +!supporttouch && (window.location.href = 'forum.php?mobile=1'); + +var platform = navigator.platform; +var ua = navigator.userAgent; +var ios = /iPhone|iPad|iPod/.test(platform) && ua.indexOf( "AppleWebKit" ) > -1; +var andriod = ua.indexOf( "Android" ) > -1; + +var JSLOADED = []; + +var BROWSER = {}; +var USERAGENT = navigator.userAgent.toLowerCase(); +browserVersion({'ie':'msie','firefox':'','chrome':'','opera':'','safari':'','mozilla':'','webkit':'','maxthon':'','qq':'qqbrowser','rv':'rv'}); +if(BROWSER.safari || BROWSER.rv) { + BROWSER.firefox = true; +} +BROWSER.opera = BROWSER.opera ? opera.version() : 0; + +(function($, window, document, undefined) { + var dataPropertyName = "virtualMouseBindings", + touchTargetPropertyName = "virtualTouchID", + virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "), + touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), + mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], + mouseEventProps = $.event.props.concat( mouseHookProps ), + activeDocHandlers = {}, + resetTimerID = 0, + startX = 0, + startY = 0, + didScroll = false, + clickBlockList = [], + blockMouseTriggers = false, + blockTouchTriggers = false, + eventCaptureSupported = "addEventListener" in document, + $document = $(document), + nextTouchID = 1, + lastTouchID = 0, threshold; + $.vmouse = { + moveDistanceThreshold: 10, + clickDistanceThreshold: 10, + resetTimerDuration: 1500 + }; + function getNativeEvent(event) { + while( event && typeof event.originalEvent !== "undefined" ) { + event = event.originalEvent; + } + return event; + } + function createVirtualEvent(event, eventType) { + var t = event.type, oe, props, ne, prop, ct, touch, i, j, len; + event = $.Event(event); + event.type = eventType; + oe = event.originalEvent; + props = $.event.props; + if(t.search(/^(mouse|click)/) > -1 ) { + props = mouseEventProps; + } + if(oe) { + for(i = props.length, prop; i;) { + prop = props[ --i ]; + event[ prop ] = oe[ prop ]; + } + } + if(t.search(/mouse(down|up)|click/) > -1 && !event.which) { + event.which = 1; + } + if(t.search(/^touch/) !== -1) { + ne = getNativeEvent(oe); + t = ne.touches; + ct = ne.changedTouches; + touch = (t && t.length) ? t[0] : (( ct && ct.length) ? ct[0] : undefined); + if(touch) { + for(j = 0, len = touchEventProps.length; j < len; j++) { + prop = touchEventProps[j]; + event[prop] = touch[prop]; + } + } + } + return event; + } + function getVirtualBindingFlags(element) { + var flags = {}, + b, k; + while(element) { + b = $.data(element, dataPropertyName); + for(k in b) { + if(b[k]) { + flags[k] = flags.hasVirtualBinding = true; + } + } + element = element.parentNode; + } + return flags; + } + function getClosestElementWithVirtualBinding(element, eventType) { + var b; + while(element) { + b = $.data( element, dataPropertyName ); + if(b && (!eventType || b[eventType])) { + return element; + } + element = element.parentNode; + } + return null; + } + function enableTouchBindings() { + blockTouchTriggers = false; + } + function disableTouchBindings() { + blockTouchTriggers = true; + } + function enableMouseBindings() { + lastTouchID = 0; + clickBlockList.length = 0; + blockMouseTriggers = false; + disableTouchBindings(); + } + function disableMouseBindings() { + enableTouchBindings(); + } + function startResetTimer() { + clearResetTimer(); + resetTimerID = setTimeout(function() { + resetTimerID = 0; + enableMouseBindings(); + }, $.vmouse.resetTimerDuration); + } + function clearResetTimer() { + if(resetTimerID ) { + clearTimeout(resetTimerID); + resetTimerID = 0; + } + } + function triggerVirtualEvent(eventType, event, flags) { + var ve; + if((flags && flags[eventType]) || + (!flags && getClosestElementWithVirtualBinding(event.target, eventType))) { + ve = createVirtualEvent(event, eventType); + $(event.target).trigger(ve); + } + return ve; + } + function mouseEventCallback(event) { + var touchID = $.data(event.target, touchTargetPropertyName); + if(!blockMouseTriggers && (!lastTouchID || lastTouchID !== touchID)) { + var ve = triggerVirtualEvent("v" + event.type, event); + if(ve) { + if(ve.isDefaultPrevented()) { + event.preventDefault(); + } + if(ve.isPropagationStopped()) { + event.stopPropagation(); + } + if(ve.isImmediatePropagationStopped()) { + event.stopImmediatePropagation(); + } + } + } + } + function handleTouchStart(event) { + var touches = getNativeEvent(event).touches, + target, flags; + if(touches && touches.length === 1) { + target = event.target; + flags = getVirtualBindingFlags(target); + if(flags.hasVirtualBinding) { + lastTouchID = nextTouchID++; + $.data(target, touchTargetPropertyName, lastTouchID); + clearResetTimer(); + disableMouseBindings(); + didScroll = false; + var t = getNativeEvent(event).touches[0]; + startX = t.pageX; + startY = t.pageY; + triggerVirtualEvent("vmouseover", event, flags); + triggerVirtualEvent("vmousedown", event, flags); + } + } + } + function handleScroll(event) { + if(blockTouchTriggers) { + return; + } + if(!didScroll) { + triggerVirtualEvent("vmousecancel", event, getVirtualBindingFlags(event.target)); + } + didScroll = true; + startResetTimer(); + } + function handleTouchMove(event) { + if(blockTouchTriggers) { + return; + } + var t = getNativeEvent(event).touches[0], + didCancel = didScroll, + moveThreshold = $.vmouse.moveDistanceThreshold, + flags = getVirtualBindingFlags(event.target); + didScroll = didScroll || + (Math.abs(t.pageX - startX) > moveThreshold || + Math.abs(t.pageY - startY) > moveThreshold); + if(didScroll && !didCancel) { + triggerVirtualEvent("vmousecancel", event, flags); + } + triggerVirtualEvent("vmousemove", event, flags); + startResetTimer(); + } + function handleTouchEnd(event) { + if(blockTouchTriggers) { + return; + } + disableTouchBindings(); + var flags = getVirtualBindingFlags(event.target), t; + triggerVirtualEvent("vmouseup", event, flags); + if(!didScroll) { + var ve = triggerVirtualEvent("vclick", event, flags); + if(ve && ve.isDefaultPrevented()) { + t = getNativeEvent(event).changedTouches[0]; + clickBlockList.push({ + touchID: lastTouchID, + x: t.clientX, + y: t.clientY + }); + blockMouseTriggers = true; + } + } + triggerVirtualEvent("vmouseout", event, flags); + didScroll = false; + startResetTimer(); + } + function hasVirtualBindings(ele) { + var bindings = $.data( ele, dataPropertyName ), k; + if(bindings) { + for(k in bindings) { + if(bindings[k]) { + return true; + } + } + } + return false; + } + function dummyMouseHandler() {} + + function getSpecialEventObject(eventType) { + var realType = eventType.substr(1); + return { + setup: function(data, namespace) { + if(!hasVirtualBindings(this)) { + $.data(this, dataPropertyName, {}); + } + var bindings = $.data(this, dataPropertyName); + bindings[eventType] = true; + activeDocHandlers[eventType] = (activeDocHandlers[eventType] || 0) + 1; + if(activeDocHandlers[eventType] === 1) { + $document.bind(realType, mouseEventCallback); + } + $(this).bind(realType, dummyMouseHandler); + if(eventCaptureSupported) { + activeDocHandlers["touchstart"] = (activeDocHandlers["touchstart"] || 0) + 1; + if(activeDocHandlers["touchstart"] === 1) { + $document.bind("touchstart", handleTouchStart) + .bind("touchend", handleTouchEnd) + .bind("touchmove", handleTouchMove) + .bind("scroll", handleScroll); + } + } + }, + teardown: function(data, namespace) { + --activeDocHandlers[eventType]; + if(!activeDocHandlers[eventType]) { + $document.unbind(realType, mouseEventCallback); + } + if(eventCaptureSupported) { + --activeDocHandlers["touchstart"]; + if(!activeDocHandlers["touchstart"]) { + $document.unbind("touchstart", handleTouchStart) + .unbind("touchmove", handleTouchMove) + .unbind("touchend", handleTouchEnd) + .unbind("scroll", handleScroll); + } + } + var $this = $(this), + bindings = $.data(this, dataPropertyName); + if(bindings) { + bindings[eventType] = false; + } + $this.unbind(realType, dummyMouseHandler); + if(!hasVirtualBindings(this)) { + $this.removeData(dataPropertyName); + } + } + }; + } + for(var i = 0; i < virtualEventNames.length; i++) { + $.event.special[virtualEventNames[i]] = getSpecialEventObject(virtualEventNames[i]); + } + if(eventCaptureSupported) { + document.addEventListener("click", function(e) { + var cnt = clickBlockList.length, + target = e.target, + x, y, ele, i, o, touchID; + if(cnt) { + x = e.clientX; + y = e.clientY; + threshold = $.vmouse.clickDistanceThreshold; + ele = target; + while(ele) { + for(i = 0; i < cnt; i++) { + o = clickBlockList[i]; + touchID = 0; + if((ele === target && Math.abs(o.x - x) < threshold && Math.abs(o.y - y) < threshold) || + $.data(ele, touchTargetPropertyName) === o.touchID) { + e.preventDefault(); + e.stopPropagation(); + return; + } + } + ele = ele.parentNode; + } + } + }, true); + } +})(jQuery, window, document); + +(function($, window, undefined) { + function triggercustomevent(obj, eventtype, event) { + var origtype = event.type; + event.type = eventtype; + $.event.handle.call(obj, event); + event.type = origtype; + } + + $.event.special.tap = { + setup : function() { + var thisobj = this; + var obj = $(thisobj); + obj.on('vmousedown', function(e) { + if(e.which && e.which !== 1) { + return false; + } + var origtarget = e.target; + var origevent = e.originalEvent; + var timer; + + function cleartaptimer() { + clearTimeout(timer); + } + function cleartaphandlers() { + cleartaptimer(); + obj.off('vclick', clickhandler) + .off('vmouseup', cleartaptimer); + $(document).off('vmousecancel', cleartaphandlers); + } + + function clickhandler(e) { + cleartaphandlers(); + if(origtarget === e.target) { + triggercustomevent(thisobj, 'tap', e); + } + return false; + } + + obj.on('vmouseup', cleartaptimer) + .on('vclick', clickhandler) + $(document).on('touchcancel', cleartaphandlers); + + timer = setTimeout(function() { + triggercustomevent(thisobj, 'taphold', $.Event('taphold', {target:origtarget})); + }, 750); + return false; + }); + } + }; + $.each(('tap').split(' '), function(index, name) { + $.fn[name] = function(fn) { + return this.on(name, fn); + }; + }); + +})(jQuery, this); + +var page = { + converthtml : function() { + var prevpage = $('div.pg .prev').prop('href'); + var nextpage = $('div.pg .nxt').prop('href'); + var lastpage = $('div.pg label span').text().replace(/[^\d]/g, '') || 0; + var curpage = $('div.pg input').val() || 1; + var page_a_all = $('div.pg a'); + + if (page_a_all.length > 1) { + for (var i=0; i 1) { + var page_0href = page_a_all[0]['href']; + var page_1href = page_a_all[1]['href']; + if (page_0href && page_1href) { + for (var i=0; i'; + selector += ''; + selector += '第'+curpage+'页'; + } + + $('div.pg').removeClass('pg').addClass('page').html('上一页'+ selector +'下一页'); + + $('#dumppage').on('change', function() { + if (page_href_z && page_href_y) { + window.location.href = page_href_z + $(this).val() + page_href_y; + } else { + var href = (prevpage || nextpage); + window.location.href = href.replace(/page=\d+/, 'page=' + $(this).val()); + } + }); + }, +}; + +var scrolltop = { + obj : null, + init : function(obj) { + scrolltop.obj = obj; + var fixed = this.isfixed(); + obj.css('opacity', '.618'); + if(fixed) { + obj.css('bottom', '8px'); + } else { + obj.css({'visibility':'visible', 'position':'absolute'}); + } + $(window).on('resize', function() { + if(fixed) { + obj.css('bottom', '8px'); + } else { + obj.css('top', ($(document).scrollTop() + $(window).height() - 40) + 'px'); + } + }); + obj.on('tap', function() { + $(document).scrollTop($(document).height()); + }); + $(document).on('scroll', function() { + if(!fixed) { + obj.css('top', ($(document).scrollTop() + $(window).height() - 40) + 'px'); + } + if($(document).scrollTop() >= 400) { + obj.removeClass('bottom') + .off().on('tap', function() { + window.scrollTo('0', '1'); + }); + } else { + obj.addClass('bottom') + .off().on('tap', function() { + $(document).scrollTop($(document).height()); + }); + } + }); + + }, + isfixed : function() { + var offset = scrolltop.obj.offset(); + var scrollTop = $(window).scrollTop(); + var screenHeight = document.documentElement.clientHeight; + if(offset == undefined) { + return false; + } + if(offset.top < scrollTop || (offset.top - scrollTop) > screenHeight) { + return false; + } else { + return true; + } + } +}; + +var img = { + init : function(is_err_t) { + var errhandle = this.errorhandle; + $('img').on('load', function() { + var obj = $(this); + obj.attr('zsrc', obj.attr('src')); + if(obj.width() < 5 && obj.height() < 10 && obj.css('display') != 'none') { + return errhandle(obj, is_err_t); + } + obj.css('display', 'inline'); + obj.css('visibility', 'visible'); + if(obj.width() > window.innerWidth) { + obj.css('width', window.innerWidth); + } + obj.parent().find('.loading').remove(); + obj.parent().find('.error_text').remove(); + }) + .on('error', function() { + var obj = $(this); + obj.attr('zsrc', obj.attr('src')); + errhandle(obj, is_err_t); + }); + }, + errorhandle : function(obj, is_err_t) { + if(obj.attr('noerror') == 'true') { + return; + } + obj.css('visibility', 'hidden'); + obj.css('display', 'none'); + var parentnode = obj.parent(); + parentnode.find('.loading').remove(); + parentnode.append('
    '); + var loadnums = parseInt(obj.attr('load')) || 0; + if(loadnums < 3) { + obj.attr('src', obj.attr('zsrc')); + obj.attr('load', ++loadnums); + return false; + } + if(is_err_t) { + var parentnode = obj.parent(); + parentnode.find('.loading').remove(); + parentnode.append('
    点击重新加载
    '); + parentnode.find('.error_text').one('click', function() { + obj.attr('load', 0).find('.error_text').remove(); + parentnode.append('
    '); + obj.attr('src', obj.attr('zsrc')); + }); + } + return false; + } +}; + +var atap = { + init : function() { + $('.atap').on('tap', function() { + var obj = $(this); + obj.css({'background':'#6FACD5', 'color':'#FFFFFF', 'font-weight':'bold', 'text-decoration':'none', 'text-shadow':'0 1px 1px #3373A5'}); + return false; + }); + $('.atap a').off('click'); + } +}; + + +var POPMENU = new Object; +var popup = { + init : function() { + var $this = this; + $('.popup').each(function(index, obj) { + obj = $(obj); + var pop = $(obj.attr('href')); + if(pop && pop.attr('popup')) { + pop.css({'display':'none'}); + obj.on('click', function(e) { + $this.open(pop); + return false; + }); + } + }); + this.maskinit(); + }, + maskinit : function() { + var $this = this; + $('#mask').off().on('tap', function() { + $this.close(); + }); + }, + + open : function(pop, type, url) { + this.close(); + this.maskinit(); + if(typeof pop == 'string') { + $('#ntcmsg').remove(); + if(type == 'alert') { + pop = '
    '+ pop +'
    ' + } else if(type == 'confirm') { + pop = '
    '+ pop +'
    取消
    ' + } + $('body').append(''); + pop = $('#ntcmsg'); + } + if(POPMENU[pop.attr('id')]) { + $('#' + pop.attr('id') + '_popmenu').html(pop.html()).css({'height':pop.height()+'px', 'width':pop.width()+'px'}); + } else { + pop.parent().append('
    '+ pop.html() +'
    '); + } + var popupobj = $('#' + pop.attr('id') + '_popmenu'); + var left = (window.innerWidth - popupobj.width()) / 2; + var top = (document.documentElement.clientHeight - popupobj.height()) / 2; + popupobj.css({'display':'block','position':'fixed','left':left,'top':top,'z-index':120,'opacity':1}); + $('#mask').css({'display':'block','width':'100%','height':'100%','position':'fixed','top':'0','left':'0','background':'black','opacity':'0.2','z-index':'100'}); + POPMENU[pop.attr('id')] = pop; + }, + close : function() { + $('#mask').css('display', 'none'); + $.each(POPMENU, function(index, obj) { + $('#' + index + '_popmenu').css('display','none'); + }); + } +}; + +var dialog = { + init : function() { + $(document).on('click', '.dialog', function() { + var obj = $(this); + popup.open(''); + $.ajax({ + type : 'GET', + url : obj.attr('href') + '&inajax=1', + dataType : 'xml' + }) + .success(function(s) { + popup.open(s.lastChild.firstChild.nodeValue); + evalscript(s.lastChild.firstChild.nodeValue); + }) + .error(function() { + window.location.href = obj.attr('href'); + popup.close(); + }); + return false; + }); + }, + +}; + +var formdialog = { + init : function() { + $(document).on('click', '.formdialog', function() { + popup.open(''); + var obj = $(this); + var formobj = $(this.form); + var isFormData = formobj.find("input[type='file']").length > 0; + $.ajax({ + type:'POST', + url:formobj.attr('action') + '&handlekey='+ formobj.attr('id') +'&inajax=1', + data:isFormData ? new FormData(formobj[0]) : formobj.serialize(), + dataType:'xml', + processData:isFormData ? false : true, + contentType:isFormData ? false : 'application/x-www-form-urlencoded; charset=UTF-8' + }) + .success(function(s) { + popup.open(s.lastChild.firstChild.nodeValue); + evalscript(s.lastChild.firstChild.nodeValue); + }) + .error(function() { + window.location.href = obj.attr('href'); + popup.close(); + }); + return false; + }); + } +}; + +var redirect = { + init : function() { + $(document).on('click', '.redirect', function() { + var obj = $(this); + popup.close(); + window.location.href = obj.attr('href'); + }); + } +}; + +var DISMENU = new Object; +var display = { + init : function() { + var $this = this; + $('.display').each(function(index, obj) { + obj = $(obj); + var dis = $(obj.attr('href')); + if(dis && dis.attr('display')) { + dis.css({'display':'none'}); + dis.css({'z-index':'102'}); + DISMENU[dis.attr('id')] = dis; + obj.on('click', function(e) { + if(in_array(e.target.tagName, ['A', 'IMG', 'INPUT'])) return; + $this.maskinit(); + if(dis.attr('display') == 'true') { + dis.css('display', 'block'); + dis.attr('display', 'false'); + $('#mask').css({'display':'block','width':'100%','height':'100%','position':'fixed','top':'0','left':'0','background':'transparent','z-index':'100'}); + } + return false; + }); + } + }); + }, + maskinit : function() { + var $this = this; + $('#mask').off().on('touchstart', function() { + $this.hide(); + }); + }, + hide : function() { + $('#mask').css('display', 'none'); + $.each(DISMENU, function(index, obj) { + obj.css('display', 'none'); + obj.attr('display', 'true'); + }); + } +}; + +var geo = { + latitude : null, + longitude : null, + loc : null, + errmsg : null, + timeout : 5000, + getcurrentposition : function() { + if(!!navigator.geolocation) { + navigator.geolocation.getCurrentPosition(this.locationsuccess, this.locationerror, { + enableHighAcuracy : true, + timeout : this.timeout, + maximumAge : 3000 + }); + } + }, + locationerror : function(error) { + geo.errmsg = 'error'; + switch(error.code) { + case error.TIMEOUT: + geo.errmsg = "获取位置超时,请重试"; + break; + case error.POSITION_UNAVAILABLE: + geo.errmsg = '无法检测到您的当前位置'; + break; + case error.PERMISSION_DENIED: + geo.errmsg = '请允许能够正常访问您的当前位置'; + break; + case error.UNKNOWN_ERROR: + geo.errmsg = '发生未知错误'; + break; + } + }, + locationsuccess : function(position) { + geo.latitude = position.coords.latitude; + geo.longitude = position.coords.longitude; + geo.errmsg = ''; + $.ajax({ + type:'POST', + url:'http://maps.google.com/maps/api/geocode/json?latlng=' + geo.latitude + ',' + geo.longitude + '&language=zh-CN&sensor=true', + dataType:'json' + }) + .success(function(s) { + if(s.status == 'OK') { + geo.loc = s.results[0].formatted_address; + } + }) + .error(function() { + geo.loc = null; + }); + } +}; + +var pullrefresh = { + init : function() { + var pos = {}; + var status = false; + var divobj = null; + var contentobj = null; + var reloadflag = false; + $('body').on('touchstart', function(e) { + e = mygetnativeevent(e); + pos.startx = e.touches[0].pageX; + pos.starty = e.touches[0].pageY; + }) + .on('touchmove', function(e) { + e = mygetnativeevent(e); + pos.curposx = e.touches[0].pageX; + pos.curposy = e.touches[0].pageY; + if(pos.curposy - pos.starty < 0 && !status) { + return; + } + if(!status && $(window).scrollTop() <= 0) { + status = true; + divobj = document.createElement('div'); + divobj = $(divobj); + divobj.css({'position':'relative', 'margin-left':'-85px'}); + $('body').prepend(divobj); + contentobj = document.createElement('div'); + contentobj = $(contentobj); + contentobj.css({'position':'absolute', 'height':'30px', 'top': '-30px', 'left':'50%'}); + contentobj.html('下拉可以刷新'); + contentobj.find('img').css({'-webkit-transition':'all 0.5s ease-in-out'}); + divobj.prepend(contentobj); + pos.topx = pos.curposx; + pos.topy = pos.curposy; + } + if(!status) { + return; + } + if(status == true) { + var pullheight = pos.curposy - pos.topy; + if(pullheight >= 0 && pullheight < 150) { + divobj.css({'height': pullheight/2 + 'px'}); + contentobj.css({'top': (-30 + pullheight/2) + 'px'}); + if(reloadflag) { + contentobj.find('img').css({'-webkit-transform':'rotate(180deg)', '-moz-transform':'rotate(180deg)', '-o-transform':'rotate(180deg)', 'transform':'rotate(180deg)'}); + contentobj.find('#refreshtxt').html('下拉可以刷新'); + } + reloadflag = false; + } else if(pullheight >= 150) { + divobj.css({'height':pullheight/2 + 'px'}); + contentobj.css({'top': (-30 + pullheight/2) + 'px'}); + if(!reloadflag) { + contentobj.find('img').css({'-webkit-transform':'rotate(360deg)', '-moz-transform':'rotate(360deg)', '-o-transform':'rotate(360deg)', 'transform':'rotate(360deg)'}); + contentobj.find('#refreshtxt').html('松开可以刷新'); + } + reloadflag = true; + } + } + e.preventDefault(); + }) + .on('touchend', function(e) { + if(status == true) { + if(reloadflag) { + contentobj.html('正在加载...'); + contentobj.animate({'top': (-30 + 75) + 'px'}, 618, 'linear'); + divobj.animate({'height': '75px'}, 618, 'linear', function() { + window.location.reload(); + }); + return; + } + } + divobj.remove(); + divobj = null; + status = false; + pos = {}; + }); + } +}; + +function mygetnativeevent(event) { + + while(event && typeof event.originalEvent !== "undefined") { + event = event.originalEvent; + } + return event; +} + +function evalscript(s) { + if(s.indexOf(']*?>([^\x00]*?)<\/script>/ig; + var arr = []; + while(arr = p.exec(s)) { + var p1 = /]*?src=\"([^\>]*?)\"[^\>]*?(reload=\"1\")?(?:charset=\"([\w\-]+?)\")?><\/script>/i; + var arr1 = []; + arr1 = p1.exec(arr[0]); + if(arr1) { + appendscript(arr1[1], '', arr1[2], arr1[3]); + } else { + p1 = /([^\x00]+?)<\/script>/i; + arr1 = p1.exec(arr[0]); + appendscript('', arr1[2], arr1[1].indexOf('reload=') != -1); + } + } + return s; +} + +var safescripts = {}, evalscripts = []; + +function appendscript(src, text, reload, charset) { + var id = hash(src + text); + if(!reload && in_array(id, evalscripts)) return; + if(reload && $('#' + id)[0]) { + $('#' + id)[0].parentNode.removeChild($('#' + id)[0]); + } + + evalscripts.push(id); + var scriptNode = document.createElement("script"); + scriptNode.type = "text/javascript"; + scriptNode.id = id; + scriptNode.charset = charset ? charset : (!document.charset ? document.characterSet : document.charset); + try { + if(src) { + scriptNode.src = src; + scriptNode.onloadDone = false; + scriptNode.onload = function () { + scriptNode.onloadDone = true; + JSLOADED[src] = 1; + }; + scriptNode.onreadystatechange = function () { + if((scriptNode.readyState == 'loaded' || scriptNode.readyState == 'complete') && !scriptNode.onloadDone) { + scriptNode.onloadDone = true; + JSLOADED[src] = 1; + } + }; + } else if(text){ + scriptNode.text = text; + } + document.getElementsByTagName('head')[0].appendChild(scriptNode); + } catch(e) {} +} + +function hash(string, length) { + var length = length ? length : 32; + var start = 0; + var i = 0; + var result = ''; + filllen = length - string.length % length; + for(i = 0; i < filllen; i++){ + string += "0"; + } + while(start < string.length) { + result = stringxor(result, string.substr(start, length)); + start += length; + } + return result; +} + +function stringxor(s1, s2) { + var s = ''; + var hash = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + var max = Math.max(s1.length, s2.length); + for(var i=0; i cookie_start ? cookie_end : document.cookie.length)); + return !nounescape ? unescape(v) : v; + } +} + +function browserVersion(types) { + var other = 1; + for(i in types) { + var v = types[i] ? types[i] : i; + if(USERAGENT.indexOf(v) != -1) { + var re = new RegExp(v + '(\\/|\\s|:)([\\d\\.]+)', 'ig'); + var matches = re.exec(USERAGENT); + var ver = matches != null ? matches[2] : 0; + other = ver !== 0 && v != 'mozilla' ? 0 : other; + } else { + var ver = 0; + } + eval('BROWSER.' + i + '= ver'); + } + BROWSER.other = other; +} + +function AC_FL_RunContent() { + var str = ''; + var ret = AC_GetArgs(arguments, "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash"); + if(BROWSER.ie && !BROWSER.opera) { + str += ' '; + } + str += ''; + } else { + str += ''; + break; + case 'ra': + case 'ram': + height = 32; + html = ''; + break; + case 'rm': + case 'rmvb': + html = '
    '; + break; + case 'swf': + html = AC_FL_RunContent('width', width, 'height', height, 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', encodeURI(src), 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true'); + break; + case 'asf': + case 'asx': + case 'wmv': + case 'avi': + case 'mpg': + case 'mpeg': + html = ''; + break; + case 'mov': + html = ''; + break; + default: + break; + } + document.getElementById(randomid).style.width = width + 'px'; + document.getElementById(randomid).style.height = height + 'px'; + document.getElementById(randomid + '_container').innerHTML = html; +} + +function html5Player(randomid, ext, src, width, height) { + switch (ext) { + case 'aac': + case 'flac': + case 'mp3': + case 'm4a': + case 'wav': + case 'ogg': + height = 66; + appendstyle(STATICURL + 'js/player/aplayer.min.css'); + appendscript(STATICURL + 'js/player/aplayer.min.js'); + html5APlayer(randomid, ext, src, width, height); + break; + case 'flv': + appendscript(STATICURL + 'js/player/flv.min.js'); + case 'mp4': + case 'm4v': + case '3gp': + case 'ogv': + case 'webm': + appendstyle(STATICURL + 'js/player/dplayer.min.css'); + appendscript(STATICURL + 'js/player/dplayer.min.js'); + html5DPlayer(randomid, ext, src, width, height); + break; + default: + break; + } + document.getElementById(randomid).style.width = width + 'px'; + document.getElementById(randomid).style.height = height + 'px'; +} + +function html5APlayer(randomid, ext, src, width, height) { + if (JSLOADED[STATICURL + 'js/player/aplayer.min.js']) { + window[randomid] = new APlayer({ + container: document.getElementById(randomid + '_container'), + mini: false, + autoplay: false, + loop: 'all', + preload: 'none', + volume: 1, + mutex: true, + listFolded: true, + audio: [{ + name: ' ', + artist: ' ', + url: src, + }] + }); + } else { + setTimeout(function () { + html5APlayer(randomid, ext, src, width, height); + }, 50); + } +} + +function html5DPlayer(randomid, ext, src, width, height) { + if (JSLOADED[STATICURL + 'js/player/dplayer.min.js'] && (ext != 'flv' || JSLOADED[STATICURL + 'js/player/flv.min.js'])) { + window[randomid] = new DPlayer({ + container: document.getElementById(randomid + '_container'), + autoplay: false, + loop: true, + screenshot: false, + hotkey: true, + preload: 'none', + volume: 1, + mutex: true, + listFolded: true, + video: { + url: src, + } + }); + } else { + setTimeout(function () { + html5DPlayer(randomid, ext, src, width, height); + }, 50); + } +} + +$(document).ready(function() { + + if($('div.pg').length > 0) { + page.converthtml(); + } + if($('.scrolltop').length > 0) { + scrolltop.init($('.scrolltop')); + } + if($('img').length > 0) { + img.init(1); + } + if($('.popup').length > 0) { + popup.init(); + } + if($('.display').length > 0) { + display.init(); + } + if($('.atap').length > 0) { + atap.init(); + } + if($('.pullrefresh').length > 0) { + pullrefresh.init(); + } + dialog.init(); + formdialog.init(); + redirect.init(); +}); + +function setCopy(text, msg) { + var cp = document.createElement('textarea'); + cp.style.fontSize = '12pt'; + cp.style.border = '0'; + cp.style.padding = '0'; + cp.style.margin = '0'; + cp.style.position = 'absolute'; + cp.style.left = '-9999px'; + var yPosition = window.pageYOffset || document.documentElement.scrollTop; + cp.style.top = yPosition + 'px'; + cp.setAttribute('readonly', ''); + text = text.replace(/[\xA0]/g, ' '); + cp.value = text; + document.getElementById('append_parent').appendChild(cp); + cp.select(); + cp.setSelectionRange(0, cp.value.length); + try { + var success = document.execCommand('copy', false, null); + } catch(e) { + var success = false; + } + document.getElementById('append_parent').removeChild(cp); + + if (success) { + if (msg) { + popup.open(msg, 'alert'); + } + } else if (BROWSER.ie) { + var r = clipboardData.setData('Text', text); + if (r) { + if (msg) { + popup.open(msg, 'alert'); + } + } else { + popup.open('复制失败', 'alerts'); + } + } else { + popup.open('复制失败', 'alerts'); + } +} + +function ajaxget(url, showid, waitid, loading, display, recall) { + var url = url + '&inajax=1&ajaxtarget=' + showid; + $.ajax({ + type : 'GET', + url : url, + dataType : 'xml', + }).success(function(s) { + $('#'+showid).html(s.lastChild.firstChild.nodeValue); + $("[ajaxtarget]").off('click').on('click', function(e) { + var id = $(this); + ajaxget(id.attr('href'), id.attr('ajaxtarget')); + return false; + }); + }); + return false; +} diff --git a/template/bygsjw_sj/image/dark.css b/template/bygsjw_sj/image/dark.css new file mode 100644 index 0000000..3337ee0 --- /dev/null +++ b/template/bygsjw_sj/image/dark.css @@ -0,0 +1,98 @@ + +.byg_dark_bg_1i, body, .search .input, #uhd, .postlist, .byg_gg_viewthread, .relateitem, .byg_threadlist_picstyle, .discuz_x, .byg_editor_fun_c, .bodybox{ background: #111 !important; color: #aaa !important;} + +.byg_dark_bg_2i, .viewthread_pay_fixed, .fast_post, #block_group .pbls a, .forumdisplay_tab, .dhnav_box, .newthread_type_tab, .byg_sinf h4, .pollimg_view, .byg_buy .text-muted, .my_threadlist.threadlist .viewtype_reply .viewtype_reply_b, .an_all_li_b, .byg_faq_nav, .byg_faq_list_li_b, .portal_cat_top, .portal_cat, div.about_introduce, div.about_vision, dl.about_contact, div.about_join, .tfx td, .byg_editor_fun_c #face_box_t .swiper-slide.swiper-slide-thumb-active, .byg_editor_fun_c .insert_box_t .swiper-slide.swiper-slide-thumb-active, .login_pop, .header_nav_forumdisplay .hdc_xin, .forumdisplay_top_bg{ background: #222 !important; color: #aaa !important;} + +.byg_dark_bg_3i, .byg_sidenav, .load_more_button a, .forum_gg, .byg_tongji, .wm_xin .bm, .sub_forum, .fast_post #block_group, .search, .scbar_hot, .user_avatar_credits, .myinfo_sige_ul, .myinfo_list li, .forumdisplay_tongji, .byg_thread_types, .threadlist li, .plc, .relate_thread, .postlist_title, .post_fixed, .tip, .forumdisplay_admin, .forumdisplay_rules, .byg_list_sort_on, .byg_list_sort, .fdy_passwd_box, .fdy_pay_box, .page a, .byg_getpassword_pop, #attachpayform, #payform, .byg_pay_view, .byg_ratelog_all_t, .byg_ratelog_all_b, .bygsjw_rate, .post_msg_from, .post_from, .post_msg_from li, .post_from li{ background: #333 !important; color: #aaa !important;} + +.byg_group_box, .dhnv, .x35_expirylist th, .x35_f_c, .profile_body>div, .byg_profilelist, .creditl, .byg_base_b, .byg_buy, .dzcell-item, .new_password_p, .new_password, .sec_code, .dhnavs_box, .byg_privacy, .byg_privacy .tfm, .post_promotion_t, .post_promotion_c, .post_notice_list li, .pmbox li, .dialog_c, .dialog_t, .dialog_b, .byg_friend_list, .tip dd, .x35_threadlist li.list, .x35_viewthread, .medallist li, .threadlist_box h4, .task_view, .an_all_li, .home_no_data, .group_index_new, .group_manage_group, .group_manage_manageuser_search, .group_manage_manageuser_list li, .group_manage_manageuser_b, .byg_group_create{ background: #333 !important; color: #aaa !important;} + +.tag_list, .byg_faq_search, .byg_faq_list, .scrolltop_order_pop, .scrolltop_guide_pop, .landingPrompt, .list_dl, .about_block_bg, .portal_content_t, .portal_content_c, .portal_content_b, #cform, .comment_edit, .comment_delete, .byg_threadlist .byg_threadlist_pic, .byg_grouppm, .hotbox, .tabs, .listbox, .bodybox.dark_box, .dialogbox, .dialogbox .c, .dialogbox .o, .byg_box_x35, .moodfm_post, .flw_newreply{ background: #333 !important; color: #aaa !important;} + +.byg_dark_bg_4i, input[type=text], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=time], input[type=url], textarea, select, .px, .sidenav-brand, .scbar_hot a, .byg_attach, .plc .pi .message .locked, .byg_fufei_jilu, .plc .pi .message .showhide, .byg_quote, .byg_poll, .byg_trade, .byg_reward, .byg_activity, .byg_activityjoin, .byg_activitycancel, .byg_debate, .byg_vtl_rec_box .byg_vtl_rec, .byg_viewthread_ratelog, .byg_viewthread_ratelog h3, .byg_sort_font th, .sort_search_th,.byg_sort_font li a, .byg_sort_table th, .login_from li, .reg_link a{ background: #444 !important; color: #bbb !important;} + +.bygsjw_rate th, .byg_editor_fun_box, .byg_profilelist th, .byg_base_b th, .new_password th, .byg_privacy .tfm th, .txtlist, .byg_group_all_dd a, .group_manage_group th, .byg_reward_good .psth, .byg_activitylist_t, .byg_debate_result_t, .byg_post_sort th, .rolldate-container .rolldate-panel, .byg_editor_upimg .post_imglist li .p_img img, .login_from > p, .login_from form > p, .message .blockcode, .stat, .byg_box_x35 .text-muted, .byg_box_x35 th, .byg_box_x35 .alt td, .txtlist .mtit .ytxt, .flw_replybox, .flw_loadmore.pn, .byg_article_description{ background: #444 !important; color: #bbb !important;} + +.byg_dark_bg_5i, .threadlist .list_typename, .byg_viewthread_ratelog a.byg_ratelog_viewall, .byg_sort_table caption, .tailoring-container .tailoring-content, .avatar_pop, .tdats .h th, .byg_buy a, .byg_friend_list .byg_friend_list_delete, .byg_home_space .threadlist li .y, .x35_threadlist_foot li, .byg_group_attentiongroup li label, .byg_group_box .list_bottom .byg_groupname, .uhd_name a, .uhd_name .groupjoin_btn, .scrolltop_order_c li a, .landingPrompt .landing_off{ background: #555 !important; color: #bbb !important;} + +.byg_dark_bg_05i, .uhd_description, .scrolltop_order_c li .on{ background: rgba(0,0,0,0.5) !important; color: #aaa !important;} + +.byg_dark_bg_ti, .byg_bl_lang1, .byg_bl_lang2, .flw_foot.txtlist{ background: transparent !important;} + +.byg_dark_bgc_3i, .lanjiazai_bg, .sj_slide_bd li, a.byg_editor_upimg_btn, .byg_group_rec a, .tailoring-content .tailoring-box-parcel, .alt, .alt th, .alt td, .group_my_join_list a, .group_memberlist_admin a, .x35_threadlist_box h4{ background-color: #333 !important; color: #aaa !important;} + +.byg_dark_bgc_4i, .quote{ background-color: #444 !important; color: #bbb !important;} + +.byg_dark_bgc_ti, .login_select .icon-arrow{ background-color: transparent !important;} + +.byg_dark_border_1i, .no_post_first.plc{ border-color: #111 !important;} + +.byg_dark_border_5, .byg_thread_types li a, .viewthread_signature{ border-color: #555;} + +.byg_dark_border_5i, table, caption, tr, th, td, input[type=text], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=time], input[type=url], textarea, select, .px, .byg_tongji li, .sub_forum li, #block_group .over_one, .search .input, .myinfo_sige_ul a, .myinfo_list li, .forumdisplay_tongji li.z p, .forumdisplay_tongji li.z span, .byg_thread_types, .bk_y2_b span, .plc, .postlist h2, .relateitem, .relate_thread_h3, .relate_thread_li, .postlist_title, .byg_viewthread_ratelog, .post_fixed, .tip, .byg_threadlist .byg_an, .byg_list_sort_on, .sort_search_tr, .sort_search_td, .sort_search_but, .byg_list_sort, .byg_sort_font li a{ border-color: #555 !important;} + +.page a, .viewthread_pay_fixed, .byg_ratelog_all_b li, .forumdisplay_tab, .dhnav_box, .newthread_type_tab, .post_msg_from li, .post_from li, .byg_editor_upimg, .byg_editor_fun_box, .byg_editor_fun_t .swiper-wrapper, .byg_upload_attach, .extra_replycredit_c label, .extra_rushreplyset_c dl, .byg_pollm_c_1, .byg_pollm_c_1p, .byg_sadd, .byg_sadd .byg_mbn, .byg_exfm, .byg_sinf dl, .byg_group_rec a, .dhnv, .x35_tbmu, .x35_f_c h3, .profile_body h2, .profile_body_1ul2, .profile_body_1ul3, .profile_body_6ul1, .byg_buy .text-muted, .sec_code, .new_password_p, .dhnavs_box, .post_promotion_t, .post_notice_list li, .pmbox li, .publish_t, .my_threadlist.threadlist .viewtype_reply .viewtype_reply_b, .byg_friend_list li{ border-color: #555 !important;} + +.tip dd, .x35_threadlist li.list, .discuz_x, .x35_plc, .txtlist .mtit, .task_view, .task_view_box, .task_viewappnr, .an_all_li_b, .byg_group_box_h2, .byg_group_all_dl, .byg_group_box .threadlist li, .group_my_join_list a, .group_memberlist_admin a, .group_manage_manageuser_list li, .threadtypes_manage h2, .byg_group_create_h2, .byg_group_box .tbmu, .byg_faq_nav, .byg_faq_list_li, .byg_faq_list_li_b, .landingPrompt div, .portal_cat_top, .portal_cat_sub, .about_contact dd, .about_join .y dt, .portal_content_t .title, .portal_content_c .pcc_title, .portal_content_b .pcb_title, .comment_list li, .byg_grouppm_t, .hotbox-toutiao a, .listbox, .tabs, .listbox li, .stat{ border-color: #555 !important;} + +#followlist .list, .xlda dl, .byg_box_x35 li, .txtlist .mtit .ytxt, .moodfm_text, .flw_newreply li, .credit_log_tab, .byg_article_description, .x35_threadlist_box h4, .forumdisplay_top_bg{ border-color: #555 !important;} + +.byg_dark_border_6i, #block_forum p, .byg_attach, .plc .pi .message .locked, .byg_fufei_jilu, .plc .pi .message .showhide, .byg_quote, .byg_poll, .byg_trade, .byg_reward, .byg_activity, .byg_activityjoin, .byg_activitycancel, .byg_debate, .byg_vtl_rec_box .byg_vtl_rec, .reply_xin a, .byg_viewthread_ratelog a.byg_ratelog_viewall, .quote, .post_fixed .post_edit, .plc_xin .reply_y, .byg_activity dt, .byg_activityjoin_list, .byg_trade_c, .byg_trade_b, .byg_pcht_font, .byg_pcht_b, .reg_link a, .tailoring-content .tailoring-box-parcel, .byg_buy a, #dhnavs_li li a{ border-color: #666 !important;} + +.byg_group_all_dt .byg_group_all_sgid, .byg_group_all_dd a, .byg_group_attentiongroup li label, .byg_group_box .list_bottom .byg_groupname, .landingPrompt .landing_off, .portal_cat_sub a, .about_block_bg .h2_b, .comment_list .y_b a, #cform .cform_off, .message .blockcode, .byg_debate_c, .byg_box_x35 .text-muted, .avt img, .credit_log_tab a{ border-color: #666 !important;} + +.byg_dark_border_8i, .tailoring-content-one, .tailoring-content .tailoring-content-three{ border-color: #888 !important;} + +.byg_dark_font_9, div.credit_log_tab a{ color: #aaa;} + +.byg_dark_font_9i, label, .forumdisplay_tongji li, .byg_trade_t em, .xg2, .byg_pinf strong, .byg_editor_fun_t .swiper-slide, .byg_exfm, .byg_exfm_t, .uhd_top_y_b, .about_introduce p, .about_contact dt, .about_join .z, .about_join .y dt, .byg_activityjoin_list div, .byg_credit_log_box li .txt a{ color: #aaa !important;} + +.byg_dark_font_ai, .user_avatar_credits li span, .forumdisplay_top_z p, .bk_y2_li .bk_y2_author a, a.blue:link, a.blue:visited, .xi1, #dhnavs_li li a, .byg_group_all_dt .byg_group_all_more, .uhd_name, .rolldate-container .rolldate-btn, .pmbox li .name, .txtlist .mtit .ztxt, .flw_foot .flw_zbus{ color: #bbb !important;} + +.byg_dark_font_ei, input[type=button], input[type=submit], input[type=file], button, .sj_sl_tit span, .number, .sidenav-brand .sidenav_c a, .byg_scrolltop i, .byg_scrolltop span, .search .button2, .user_avatar .name, .user_avatar .home_user_group, .user_avatar .home_user_group font, a.threadlist_usergroup, .threadlist_usergroup font, a.byg_attach_name, .plc_xin li .reply_y_b, .byg_viewpay, .trade_add_about a, .byg_reward_b a, .byg_debate_b .mtn a, #affirmbutton, #negabutton, .btn_qqlogin a, .viewthread_pay_fixed .pay_thread, .bygsjw_rate h3{ color: #eee !important;} + +.byg_editor_fun_t .swiper-slide.swiper-slide-thumb-active, a.byg_attswf_add, .l-btn, .tdats .c0 h4, #dhnavs_li li.mon a, .medallist .medal_btn a, .medallist .medal_btn span, .group_index_new .z, .group_memberlist_admin a span, .tag_list a, .scrolltop_order_tit, .landingPrompt a, .byg_editor_upimg .post_imglist li .p_img .charu, .dz-swiper_box .swiper-forum, .dz-swiper .swiper-wrapper li a span{ color: #eee !important;} + +.byg_dark_opacity_05{ opacity: 0.5;} + +.byg_dark_bs_ni, .byg_threadlist .byg_threadlist_pic_li, textarea, .byg_post_vid .px{ box-shadow: none !important;} + +.byg_dark_bs_5i, .viewthread_pay_fixed .post_edit, .byg_box_x35 .px, .xlda dt .dialog{ box-shadow: 0 0 0 1px #555 !important;} + +.byg_dark_bs_6i, .byg_activityjoin_list .pt, a.byg_editor_upimg_btn, .byg_editor_upimg .post_imglist li .p_img img, .insert_box_body .px, .insert_box_body textarea.pt{ box-shadow: 0 0 0 1px #666 !important;} + +.byg_dark_filter_img, .no_reply img, .byg_an_i, .an_all_li_t .y{ -webkit-filter: invert(80.3%); filter: invert(80.3%);} +.byg_dark_filter_box, .no_reply{ background: #333;} + +a:link, a:visited, a:hover{ color: #bbb;} +.reply_xin a span{ color: #888;} + + +/* bygsjw */ + +.header_nav_cover, .cover_div, .cover_top, .sidenav_overlay, .scrolltop_order_cover, .scrolltop_guide_cover, .byg_getpassword_cover, #mask{ opacity: 0.8 !important;} + +body .hdc_xin .header_z.header_index_y, body .hdc_xin .header_search{ top: .1rem;} +body .hdc_xin h1 img{ margin-top: .08rem;} +.hdc_xin .header_search{ background: #111 !important; color: #aaa !important;} +.hdc_xin{ background: #444 !important; color: #bbb !important;} +.hdc_xin .header_search_z, .hdc_xin .header_search_y, .hdc_xin a.shouye{ background-color: transparent !important;} +.hdc_xin .header_search_z{ color: #aaa !important;} +.header_z i, .header_z a, .header_z em, .header_z span{ color: #bbb !important;} + +.bg_xin.byg_portal_index .portal_font_nav, .bg_xin.byg_forum_index .portal_font_nav{ margin-top: 0; padding-top: .06rem; line-height: .18rem;} +.bg_xin .portal_font_nav{ background: #222 !important; border-color: #111 !important;} +.bg_xin .portal_font_nav.cl a{ color: #bbb;} +.portal_font_nav .on{ color: #3498db; color: var(--dz-BG-color) !important;} +.portal_font_nav .on:after{ background: #3498db; background: var(--dz-BG-color) !important;} + +.linear_bg{ background: #111 !important;} +.byg_an, .byg_gg, .sj_headline_box, .byg_diynav, .tabBox, .tuwen, .tw_tab h2, #portal_activity, .ac_hd h2, .load_more_li, .bm_xin h2{ background: #333 !important; color: #aaa !important;} +.sj_headline_li h3, .tabBox_hd li a, .tw_tab, .tw_tab h2, .tuwen li, .ac_hd, .ac_hd h2, .load_more_b span, .bm_xin, .bm_xin h2{ border-color: #555 !important;} +.ac_hd li, .sj_slide_hd .swiper-pagination-bullet-active{ background: #bbb;} + +.forumdisplay_top_bg + .sub_forum li{ box-shadow: -1px 0 1px #555 !important;} + +.footer_nav, .footer_nav li i, .footer_nav li span, .footer_nav .footer_fatie, .footer_nav .footer_fatie a{ background: #222; color: #aaa;} +.footer_nav .footer_fatie i{ background: transparent !important;} +.footer_nav, .footer_nav .footer_fatie{ border-color: #555 !important;} diff --git a/template/bygsjw_sj/image/date.js b/template/bygsjw_sj/image/date.js new file mode 100644 index 0000000..75d4092 --- /dev/null +++ b/template/bygsjw_sj/image/date.js @@ -0,0 +1,8 @@ +/** + * Rolldate 3.1.0 + * Copyright 2019 + * weijhfly https://github.com/weijhfly/rolldate + * Licensed under MIT + * Released on: aug 4, 2018 + */ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).Rolldate=i()}(this,function(){"use strict";!function(t,i){void 0===i&&(i={});var e=i.insertAt;if(t&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css","top"===e&&o.firstChild?o.insertBefore(s,o.firstChild):o.appendChild(s),s.styleSheet?s.styleSheet.cssText=t:s.appendChild(document.createTextNode(t))}}("ul{margin:0;padding:0}li{list-style-type:none}.rolldate-container{font-size:20px;color:#333;text-align:center}.rolldate-container header{position:relative;line-height:60px;font-size:18px;border-bottom:1px solid #e0e0e0}.rolldate-container .rolldate-mask{position:fixed;width:100%;height:100%;top:0;left:0;background:#000;opacity:.4;z-index:999}.rolldate-container .rolldate-panel{position:fixed;bottom:0;left:0;width:100%;height:273px;z-index:1000;background:#fff;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-delay:0s;animation-delay:0s;-webkit-animation-iteration-count:1;animation-iteration-count:1}.rolldate-container .rolldate-btn{position:absolute;left:0;top:0;height:100%;padding:0 15px;color:#666;font-size:16px;cursor:pointer;-webkit-tap-highlight-color:transparent}.rolldate-container.wx .rolldate-btn{height:150%}.rolldate-container .rolldate-confirm{left:auto;right:0;color:#007bff}.rolldate-container .rolldate-content{position:relative;top:20px}.rolldate-container .rolldate-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.rolldate-container .rolldate-wrapper>div{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;height:173px;line-height:36px;overflow:hidden;-webkit-flex-basis:-8e;-ms-flex-preferred-size:-8e;flex-basis:-8e;width:1%}.rolldate-container .rolldate-wrapper ul{margin-top:68px}.rolldate-container .rolldate-wrapper li{height:36px}.rolldate-container .rolldate-dim{position:absolute;left:0;top:0;width:100%;height:68px;background:-webkit-gradient(linear,left bottom,left top,from(hsla(0,0%,100%,.4)),to(hsla(0,0%,100%,.8)));background:-webkit-linear-gradient(bottom,hsla(0,0%,100%,.4),hsla(0,0%,100%,.8));background:-o-linear-gradient(bottom,hsla(0,0%,100%,.4),hsla(0,0%,100%,.8));background:-webkit-gradient(linear, left bottom, left top, from(hsla(0, 0%, 100%, 0.4)), to(hsla(0, 0%, 100%, 0.8)));background:-webkit-linear-gradient(bottom, hsla(0, 0%, 100%, 0.4), hsla(0, 0%, 100%, 0.8));background:-o-linear-gradient(bottom, hsla(0, 0%, 100%, 0.4), hsla(0, 0%, 100%, 0.8));background:linear-gradient(0deg,hsla(0,0%,100%,.4),hsla(0,0%,100%,.8));pointer-events:none;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.rolldate-container .mask-top{border-bottom:1px solid #ebebeb}.rolldate-container .mask-bottom{top:auto;bottom:1px;border-top:1px solid #ebebeb}.rolldate-container .fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}.rolldate-container .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeIn{0%{bottom:-273px}to{bottom:0}}@keyframes fadeIn{0%{bottom:-273px}to{bottom:0}}@-webkit-keyframes fadeOut{0%{bottom:0}to{bottom:-273px;display:none}}@keyframes fadeOut{0%{bottom:0}to{bottom:-273px;display:none}}@media screen and (max-width:414px){.rolldate-container{font-size:18px}}@media screen and (max-width:320px){.rolldate-container{font-size:15px}}");"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var t,S=(function(t,i){t.exports=function(){function s(t,i){for(;i+1this.minScrollX||this.xthis.minScrollY||this.ythis.options.momentumLimitTime&&nn+this.options.directionLockThreshold?this.directionLocked="h":n>=s+this.options.directionLockThreshold?this.directionLocked="v":this.directionLocked="n"),"h"===this.directionLocked){if("vertical"===this.options.eventPassthrough)t.preventDefault();else if("horizontal"===this.options.eventPassthrough)return void(this.initiated=!1);o=0}else if("v"===this.directionLocked){if("horizontal"===this.options.eventPassthrough)t.preventDefault();else if("vertical"===this.options.eventPassthrough)return void(this.initiated=!1);e=0}e=this.hasHorizontalScroll?e:0,o=this.hasVerticalScroll?o:0,this.movingDirectionX=0this.minScrollX||athis.minScrollX&&d||athis.minScrollX?this.minScrollX:this.maxScrollX),(l>this.minScrollY||lthis.minScrollY&&h||lthis.minScrollY?this.minScrollY:this.maxScrollY),this.moved||(this.moved=!0,this.trigger("scrollStart")),this._translate(a,l),r-this.startTime>this.options.momentumLimitTime&&(this.startTime=r,this.startX=this.x,this.startY=this.y,1===this.options.probeType&&this.trigger("scroll",{x:this.x,y:this.y})),1document.documentElement.clientWidth-this.options.momentumLimitDistance||vdocument.documentElement.clientHeight-this.options.momentumLimitDistance)&&this._end(t)}}},L.prototype._end=function(t){if(this.enabled&&!this.destroyed&&T[t.type]===this.initiated){this.initiated=!1,this.options.preventDefault&&!Y(t.target,this.options.preventDefaultException)&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation(),this.trigger("touchEnd",{x:this.x,y:this.y}),this.isInTransition=!1;var i=Math.round(this.x),e=Math.round(this.y),o=i-this.absStartX,s=e-this.absStartY;if(this.directionX=0this.options.momentumLimitDistance||r>this.options.momentumLimitDistance)){var h=!1,c=!1,d=!1,p=!1,m=this.options.bounce;!1!==m&&(h=void 0===m.top||m.top,c=void 0===m.bottom||m.bottom,d=void 0===m.left||m.left,p=void 0===m.right||m.right);var u=-1===this.directionX&&d||1===this.directionX&&p?this.wrapperWidth:0,f=-1===this.directionY&&h||1===this.directionY&&c?this.wrapperHeight:0,v=this.hasHorizontalScroll?k(this.x,this.startX,n,this.maxScrollX,this.minScrollX,u,this.options):{destination:i,duration:0},g=this.hasVerticalScroll?k(this.y,this.startY,n,this.maxScrollY,this.minScrollY,f,this.options):{destination:e,duration:0};i=v.destination,e=g.destination,l=Math.max(v.duration,g.duration),this.isInTransition=!0}else this.options.wheel&&(e=Math.round(e/this.itemHeight)*this.itemHeight,l=this.options.wheel.adjustTime||400);var w=M.swipe;if(this.options.snap){var y=this._nearestSnap(i,e);this.currentPage=y,l=this.options.snapSpeed||Math.max(Math.max(Math.min(Math.abs(i-y.x),1e3),Math.min(Math.abs(e-y.y),1e3)),300),i=y.x,e=y.y,this.directionX=0,this.directionY=0,w=this.options.snap.easing||M.bounce}if(i!==this.x||e!==this.y)return(i>this.minScrollX||ithis.minScrollY||ethis.minScrollY?this.selectedIndex=0:ithis.minScrollX?this.minScrollX:n.leftthis.minScrollY?this.minScrollY:n.topthis.minScrollX?e=this.minScrollX:othis.minScrollY?s=this.minScrollY:nthis.minScrollX?p=this.minScrollX:pthis.minScrollY?m=this.minScrollY:m
      ',"YYYY"==s)for(var p=r.beginYear;p<=r.endYear;p++)e+='
    • '+p+c.year+"
    • ",d++;else if("MM"==s)for(var m=1;m<=12;m++)e+='
    • '+(m<10?"0"+m:m)+c.month+"
    • ",d++;else if("DD"==s)for(var u=n.bissextile(h.getFullYear(),h.getMonth()+1),f=1;f<=u;f++)e+='
    • '+(f<10?"0"+f:f)+c.day+"
    • ",d++;else if("hh"==s)for(var v=0;v<=23;v++)e+='
    • '+(v<10?"0"+v:v)+c.hour+"
    • ",d++;else if("mm"==s)for(var g=0;g<=59;g+=r.minStep)e+='
    • '+(g<10?"0"+g:g)+c.min+"
    • ",d++;else if("ss"==s)for(var w=0;w<=59;w++)e+='
    • '+(w<10?"0"+w:w)+c.sec+"
    • ",d++;e+="
    "}var y='
    \n
    \n
    \n '+c.cancel+"\n "+c.title+'\n '+c.confirm+'\n
    \n
    \n
    \n
    \n
    \n '+e+"\n
    \n
    \n
    ",b=document.createElement("div");b.className="rolldate-container"+(navigator.userAgent.match(/MicroMessenger/i)?" wx":""),b.innerHTML=y,document.body.appendChild(b),n.scroll={};for(var x=function(t){var i=a[l[t]];n.scroll[l[t]]=new S("#"+i,{wheel:{selectedIndex:0,wheelWrapperClass:"wheel-scroll",wheelItemClass:"wheel-item"},probeType:1});var o=n.scroll[l[t]],e=n.$("#"+i+" .active"),s=e?e.getAttribute("data-index"):Math.round(h.getMinutes()/r.minStep);o.wheelTo(s),o.on("scrollEnd",function(){if(r.moveEnd&&r.moveEnd.call(n,o),-1!=[a.YYYY,a.MM].indexOf(o.wrapper.id)&&n.scroll.DD){n.getSelected(n.scroll.DD);var t=n.bissextile(n.getSelected(n.scroll.YYYY),n.getSelected(n.scroll.MM)),i="";if(t!=n.$("#"+a.DD+" li",1).length){for(var e=1;e<=t;e++)i+='
  • '+(e<10?"0"+e:e)+c.day+"
  • ";n.$("#"+a.DD+" ul").innerHTML=i,n.scroll.DD.refresh()}}})},T=0;T maxWidth) { + width = maxWidth; + } + var rem = width * 100 / designWidth; + rootStyle="html{font-size:"+rem+'px !important}'; + rootItem = document.getElementById('rootsize') || document.createElement("style"); + if(!document.getElementById('rootsize')){ + document.getElementsByTagName("head")[0].appendChild(rootItem); + rootItem.id='rootsize'; + } + if(rootItem.styleSheet){ + rootItem.styleSheet.disabled||(rootItem.styleSheet.cssText=rootStyle) + }else{ + try{rootItem.innerHTML=rootStyle}catch(f){rootItem.innerText=rootStyle} + } + docEl.style.fontSize = rem + "px"; + }; + refreshRem(); + + win.addEventListener("resize", function() { + clearTimeout(tid); + tid = setTimeout(refreshRem, 300); + }, false); + + win.addEventListener("pageshow", function(e) { + if (e.persisted) { + clearTimeout(tid); + tid = setTimeout(refreshRem, 300); + } + }, false); + + if (doc.readyState === "complete") { + doc.body.style.fontSize = "16px"; + } else { + doc.addEventListener("DOMContentLoaded", function(e) { + doc.body.style.fontSize = "16px"; + }, false); + } +})(375, 3750); \ No newline at end of file diff --git a/template/bygsjw_sj/image/font/common/dzicon.eot b/template/bygsjw_sj/image/font/common/dzicon.eot new file mode 100644 index 0000000..97418ae Binary files /dev/null and b/template/bygsjw_sj/image/font/common/dzicon.eot differ diff --git a/template/bygsjw_sj/image/font/common/dzicon.woff b/template/bygsjw_sj/image/font/common/dzicon.woff new file mode 100644 index 0000000..6e774d2 Binary files /dev/null and b/template/bygsjw_sj/image/font/common/dzicon.woff differ diff --git a/template/bygsjw_sj/image/font/common/dzicon.woff2 b/template/bygsjw_sj/image/font/common/dzicon.woff2 new file mode 100644 index 0000000..80490da Binary files /dev/null and b/template/bygsjw_sj/image/font/common/dzicon.woff2 differ diff --git a/template/bygsjw_sj/image/font/dzmicon.css b/template/bygsjw_sj/image/font/dzmicon.css new file mode 100644 index 0000000..bdda141 --- /dev/null +++ b/template/bygsjw_sj/image/font/dzmicon.css @@ -0,0 +1,56 @@ +@font-face { +font-family: 'dzmicon'; +src: url('./dzmicon.woff2') format('woff2'), +url('./dzmicon.woff') format('woff'), +url('./dzmicon.ttf') format('truetype'); +font-weight: normal; +font-style: normal; +} + +[class^="dm-"]:before, [class*=" dm-"]:before { +font-family: "dzmicon"; +font-style: normal; +font-weight: normal; +display: inline-block; +text-decoration: inherit; +width: 1em; +text-align: center; +font-variant: normal; +text-transform: none; +-webkit-font-smoothing: antialiased; +-moz-osx-font-smoothing: grayscale; +} + +.dm-camera:before { content: '\f100'; } +.dm-camera-fill:before { content: '\f101'; } +.dm-chat-s:before { content: '\f102'; } +.dm-chat-s-fill:before { content: '\f103'; } +.dm-chat-t:before { content: '\f104'; } +.dm-chat-t-fill:before { content: '\f105'; } +.dm-c-up:before { content: '\f106'; } +.dm-c-down:before { content: '\f107'; } +.dm-c-left:before { content: '\f108'; } +.dm-c-right:before { content: '\f109'; } +.dm-edit:before { content: '\f10a'; } +.dm-emoji:before { content: '\f10b'; } +.dm-error:before { content: '\f10c'; } +.dm-explore:before { content: '\f10d'; } +.dm-eye:before { content: '\f10e'; } +.dm-eye-fill:before { content: '\f10f'; } +.dm-heart:before { content: '\f110'; } +.dm-heart-fill:before { content: '\f111'; } +.dm-house:before { content: '\f112'; } +.dm-house-fill:before { content: '\f113'; } +.dm-image:before { content: '\f114'; } +.dm-minus-c:before { content: '\f115'; } +.dm-plus-c:before { content: '\f116'; } +.dm-person:before { content: '\f117'; } +.dm-person-fill:before { content: '\f118'; } +.dm-search:before { content: '\f119'; } +.dm-sofa:before { content: '\f11a'; } +.dm-star:before { content: '\f11b'; } +.dm-star-fill:before { content: '\f11c'; } +.dm-tag:before { content: '\f11d'; } +.dm-trash:before { content: '\f11e'; } +.dm-warn:before { content: '\f11f'; } +.dm-x:before { content: '\f120'; } \ No newline at end of file diff --git a/template/bygsjw_sj/image/font/dzmicon.ttf b/template/bygsjw_sj/image/font/dzmicon.ttf new file mode 100644 index 0000000..976fb14 Binary files /dev/null and b/template/bygsjw_sj/image/font/dzmicon.ttf differ diff --git a/template/bygsjw_sj/image/font/dzmicon.woff b/template/bygsjw_sj/image/font/dzmicon.woff new file mode 100644 index 0000000..619ea94 Binary files /dev/null and b/template/bygsjw_sj/image/font/dzmicon.woff differ diff --git a/template/bygsjw_sj/image/font/dzmicon.woff2 b/template/bygsjw_sj/image/font/dzmicon.woff2 new file mode 100644 index 0000000..51281ea Binary files /dev/null and b/template/bygsjw_sj/image/font/dzmicon.woff2 differ diff --git a/template/bygsjw_sj/image/footer.js b/template/bygsjw_sj/image/footer.js new file mode 100644 index 0000000..5b11185 --- /dev/null +++ b/template/bygsjw_sj/image/footer.js @@ -0,0 +1,32 @@ + +//如果需要尾部导航栏固定,把下面代码全部删除即可。 + +var new1_scroll_position = 0; +var last1_scroll_position; +var byg_footer_nav = document.getElementById("footer_nav"); +var footer_scroll_d = 0, footer_scroll_t = 0; + +window.addEventListener('scroll', function (e) { + last1_scroll_position = window.pageYOffset; + if (last1_scroll_position > 150 && last1_scroll_position < (document.documentElement.scrollHeight - window.innerHeight - 20)) { + // 向下滚动 + if (new1_scroll_position < last1_scroll_position) { + footer_scroll_d = last1_scroll_position; + if (footer_scroll_d > footer_scroll_t + 50) { + byg_footer_nav.classList.remove("slideDown"); + byg_footer_nav.classList.add("slideUp1"); + } + // 向上滚动 + } else if (new1_scroll_position > last1_scroll_position) { + footer_scroll_t = last1_scroll_position; + if (footer_scroll_d > footer_scroll_t + 50) { + byg_footer_nav.classList.remove("slideUp1"); + byg_footer_nav.classList.add("slideDown"); + } + } + new1_scroll_position = last1_scroll_position; + } else { + byg_footer_nav.classList.remove("slideUp1"); + byg_footer_nav.classList.add("slideDown"); + } +}); diff --git a/template/bygsjw_sj/image/forum.png b/template/bygsjw_sj/image/forum.png new file mode 100644 index 0000000..549c8e1 Binary files /dev/null and b/template/bygsjw_sj/image/forum.png differ diff --git a/template/bygsjw_sj/image/forum_posts.png b/template/bygsjw_sj/image/forum_posts.png new file mode 100644 index 0000000..bf7d506 Binary files /dev/null and b/template/bygsjw_sj/image/forum_posts.png differ diff --git a/template/bygsjw_sj/image/forum_threads.png b/template/bygsjw_sj/image/forum_threads.png new file mode 100644 index 0000000..5c5fca2 Binary files /dev/null and b/template/bygsjw_sj/image/forum_threads.png differ diff --git a/template/bygsjw_sj/image/forumdisplay_pic.js b/template/bygsjw_sj/image/forumdisplay_pic.js new file mode 100644 index 0000000..b191ea6 --- /dev/null +++ b/template/bygsjw_sj/image/forumdisplay_pic.js @@ -0,0 +1,141 @@ + +;(function ($, window, document, undefined) { + var pluginName = 'pinterest_grid', + defaults = { + padding_x: 0, + padding_y: 0, + no_columns: 2, + margin_bottom: 0, + single_column_breakpoint: 1 + }, + columns, + $article, + article_width; + + function Plugin(element, options) { + this.element = element; + this.options = $.extend({}, defaults, options) ; + this._defaults = defaults; + this._name = pluginName; + this.init(); + } + + Plugin.prototype.init = function () { + var self = this, + resize_finish; + + $(window).resize(function() { + clearTimeout(resize_finish); + resize_finish = setTimeout( function () { + self.make_layout_change(self); + }, 11); + }); + + self.make_layout_change(self); + + setTimeout(function() { + $(window).resize(); + }, 500); + }; + + Plugin.prototype.calculate = function (single_column_mode) { + var self = this, + tallest = 0, + row = 0, + $container = $(this.element), + container_width = $container.width(); + $article = $(this.element).children(); + + if(single_column_mode === true) { + article_width = $container.width() - self.options.padding_x; + } else { + article_width = ($container.width() - self.options.padding_x * self.options.no_columns) / self.options.no_columns; + } + + $article.each(function() { + $(this).css('width', article_width); + }); + + columns = self.options.no_columns; + + $article.each(function(index) { + var current_column, + left_out = 0, + top = 0, + $this = $(this), + prevAll = $this.prevAll(), + tallest = 0; + + if(single_column_mode === false) { + current_column = (index % columns); + } else { + current_column = 0; + } + + for(var t = 0; t < columns; t++) { + $this.removeClass('c'+t); + } + + if(index % columns === 0) { + row++; + } + + $this.addClass('c' + current_column); + $this.addClass('r' + row); + + prevAll.each(function(index) { + if($(this).hasClass('c' + current_column)) { + top += $(this).outerHeight() + self.options.padding_y; + } + }); + + if(single_column_mode === true) { + left_out = 0; + } else { + left_out = (index % columns) * (article_width + self.options.padding_x); + } + + $this.css({ + 'left': left_out, + 'top' : top + }); + }); + + this.tallest($container); + $(window).resize(); + }; + + Plugin.prototype.tallest = function (_container) { + var column_heights = [], + largest = 0; + + for(var z = 0; z < columns; z++) { + var temp_height = 0; + _container.find('.c'+z).each(function() { + temp_height += $(this).outerHeight(); + }); + column_heights[z] = temp_height; + } + + largest = Math.max.apply(Math, column_heights); + _container.css('height', largest + (this.options.padding_y + this.options.margin_bottom)); + }; + + Plugin.prototype.make_layout_change = function (_self) { + if($(window).width() < _self.options.single_column_breakpoint) { + _self.calculate(true); + } else { + _self.calculate(false); + } + }; + + $.fn[pluginName] = function (options) { + return this.each(function () { + if (!$.data(this, 'plugin_' + pluginName)) { + $.data(this, 'plugin_' + pluginName, + new Plugin(this, options)); + } + }); + } + +})(jQuery, window, document); \ No newline at end of file diff --git a/template/bygsjw_sj/image/guan.png b/template/bygsjw_sj/image/guan.png new file mode 100644 index 0000000..4528ccc Binary files /dev/null and b/template/bygsjw_sj/image/guan.png differ diff --git a/template/bygsjw_sj/image/header.js b/template/bygsjw_sj/image/header.js new file mode 100644 index 0000000..be73cdc --- /dev/null +++ b/template/bygsjw_sj/image/header.js @@ -0,0 +1,32 @@ + +//如果需要头部导航栏固定,把下面代码全部删除即可。 + +var new_scroll_position = 0; +var last_scroll_position; +var byg_header_nav = document.getElementById("byg_header"); +var header_scroll_d = 0, header_scroll_t = 0; + +window.addEventListener('scroll', function(e) { + last_scroll_position = window.pageYOffset; + if (last_scroll_position > 150 && last_scroll_position < (document.documentElement.scrollHeight - window.innerHeight - 20)) { + // 向下滚动 + if (new_scroll_position < last_scroll_position) { + header_scroll_d = last_scroll_position; + if (header_scroll_d > header_scroll_t + 50) { + byg_header_nav.classList.remove("slideDown"); + byg_header_nav.classList.add("slideUp"); + } + // 向上滚动 + } else if (new_scroll_position > last_scroll_position) { + header_scroll_t = last_scroll_position; + if (header_scroll_d > header_scroll_t + 50) { + byg_header_nav.classList.remove("slideUp"); + byg_header_nav.classList.add("slideDown"); + } + } + new_scroll_position = last_scroll_position; + } else { + byg_header_nav.classList.remove("slideUp"); + byg_header_nav.classList.add("slideDown"); + } +}); diff --git a/template/bygsjw_sj/image/headline.png b/template/bygsjw_sj/image/headline.png new file mode 100644 index 0000000..7d3667f Binary files /dev/null and b/template/bygsjw_sj/image/headline.png differ diff --git a/template/bygsjw_sj/image/hei_shaixuan.png b/template/bygsjw_sj/image/hei_shaixuan.png new file mode 100644 index 0000000..0f737ce Binary files /dev/null and b/template/bygsjw_sj/image/hei_shaixuan.png differ diff --git a/template/bygsjw_sj/image/hei_xiangxia.png b/template/bygsjw_sj/image/hei_xiangxia.png new file mode 100644 index 0000000..a5e4d67 Binary files /dev/null and b/template/bygsjw_sj/image/hei_xiangxia.png differ diff --git a/template/bygsjw_sj/image/home_bg.jpg b/template/bygsjw_sj/image/home_bg.jpg new file mode 100644 index 0000000..0acd266 Binary files /dev/null and b/template/bygsjw_sj/image/home_bg.jpg differ diff --git a/template/bygsjw_sj/image/home_forum_header.js b/template/bygsjw_sj/image/home_forum_header.js new file mode 100644 index 0000000..7eaa5b9 --- /dev/null +++ b/template/bygsjw_sj/image/home_forum_header.js @@ -0,0 +1 @@ +!function(a){var b={total:10,ofTop:0,ofLeft:0,on:"document.body",twinkle:.2,minPixel:1,maxPixel:2,color:"#fff",namespace:"jqueryFireFly",zIndex:Math.ceil(20*Math.random())-1,borderRadius:"50%",_paused:!1};a.firefly=function(c){if(a.firefly.settings=a.extend({},b,c),a.firefly.eleHeight=a(a.firefly.settings.on).height(),a.firefly.eleWidth=a(a.firefly.settings.on).width(),a(window).resize(function(){if("document.body"!==a.firefly.settings.on){var b=a(a.firefly.settings.on).offset();a.firefly.offsetTop=b.top,a.firefly.offsetLeft=b.left,a.firefly.eleHeight=a(a.firefly.settings.on).height(),a.firefly.eleWidth=a(a.firefly.settings.on).width()}else a.firefly.offsetTop=0,a.firefly.offsetLeft=0,a.firefly.eleHeight=a(document.body).height(),a.firefly.eleWidth=a(document.body).width()}),"document.body"!==a.firefly.settings.on){var d=a(a.firefly.settings.on).offset();a.firefly.offsetTop=d.top,a.firefly.offsetLeft=d.left,a.firefly.eleHeight=a(a.firefly.settings.on).height(),a.firefly.eleWidth=a(a.firefly.settings.on).width()}else a.firefly.offsetTop=0,a.firefly.offsetLeft=0,a.firefly.eleHeight=a(document.body).height(),a.firefly.eleWidth=a(document.body).width();for(i=0;i").hide(),spark.addClass(a.firefly.settings.namespace),a.firefly.settings._onSparkID++,"document.body"===a.firefly.settings.on?a(document.body).append(spark):a(a.firefly.settings.on).append(spark),spark.css({position:"absolute",width:b,height:b,"background-color":a.firefly.settings.color,"z-index":a.firefly.settings.zIndex,"border-radius":a.firefly.settings.borderRadius,top:a.firefly.offsetTop+a.firefly.random(a.firefly.eleHeight-50),left:a.firefly.offsetLeft+a.firefly.random(a.firefly.eleWidth-50),"pointer-events":"none"}).show()},a.firefly.fly=function(b){a(b).animate({top:a.firefly.offsetTop+a.firefly.random(a.firefly.eleHeight-50),left:a.firefly.offsetLeft+a.firefly.random(a.firefly.eleWidth-50),opacity:a.firefly.opacity(a.firefly.settings.twinkle)},{duration:2e3*(a.firefly.random(10)+5),done:function(){a.firefly.settings._paused||a.firefly.fly(b)}})},a.firefly.randomPixel=function(a,b){return Math.floor(Math.random()*(b-a+1)+a)},a.firefly.random=function(a){return Math.ceil(Math.random()*a)-1},a.firefly.opacity=function(a){return op=Math.random(),op.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(i=c,o=s.document,a=!1,(h=function(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(h,50)}t()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,t())});function t(){a||(a=!0,i())}var i,o,a,h}(function(){var c,l;(c=document.createElement("div")).innerHTML=t,t=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window); \ No newline at end of file diff --git a/template/bygsjw_sj/image/iconfont/iconfont.svg b/template/bygsjw_sj/image/iconfont/iconfont.svg new file mode 100644 index 0000000..13680d5 --- /dev/null +++ b/template/bygsjw_sj/image/iconfont/iconfont.svg @@ -0,0 +1,101 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/bygsjw_sj/image/iconfont/iconfont.ttf b/template/bygsjw_sj/image/iconfont/iconfont.ttf new file mode 100644 index 0000000..4440996 Binary files /dev/null and b/template/bygsjw_sj/image/iconfont/iconfont.ttf differ diff --git a/template/bygsjw_sj/image/iconfont/iconfont.woff b/template/bygsjw_sj/image/iconfont/iconfont.woff new file mode 100644 index 0000000..5cac2e1 Binary files /dev/null and b/template/bygsjw_sj/image/iconfont/iconfont.woff differ diff --git a/template/bygsjw_sj/image/iconfont/iconfont.woff2 b/template/bygsjw_sj/image/iconfont/iconfont.woff2 new file mode 100644 index 0000000..88357f9 Binary files /dev/null and b/template/bygsjw_sj/image/iconfont/iconfont.woff2 differ diff --git a/template/bygsjw_sj/image/images/arrow_top.png b/template/bygsjw_sj/image/images/arrow_top.png new file mode 100644 index 0000000..e5cfdde Binary files /dev/null and b/template/bygsjw_sj/image/images/arrow_top.png differ diff --git a/template/bygsjw_sj/image/images/avatar_m_bg.png b/template/bygsjw_sj/image/images/avatar_m_bg.png new file mode 100644 index 0000000..f1b2564 Binary files /dev/null and b/template/bygsjw_sj/image/images/avatar_m_bg.png differ diff --git a/template/bygsjw_sj/image/images/btn_s_bg.png b/template/bygsjw_sj/image/images/btn_s_bg.png new file mode 100644 index 0000000..91624ce Binary files /dev/null and b/template/bygsjw_sj/image/images/btn_s_bg.png differ diff --git a/template/bygsjw_sj/image/images/button_bg.gif b/template/bygsjw_sj/image/images/button_bg.gif new file mode 100644 index 0000000..67d3f1f Binary files /dev/null and b/template/bygsjw_sj/image/images/button_bg.gif differ diff --git a/template/bygsjw_sj/image/images/button_bg.png b/template/bygsjw_sj/image/images/button_bg.png new file mode 100644 index 0000000..eb896dd Binary files /dev/null and b/template/bygsjw_sj/image/images/button_bg.png differ diff --git a/template/bygsjw_sj/image/images/button_bg2.png b/template/bygsjw_sj/image/images/button_bg2.png new file mode 100644 index 0000000..489345e Binary files /dev/null and b/template/bygsjw_sj/image/images/button_bg2.png differ diff --git a/template/bygsjw_sj/image/images/collapsed_no.png b/template/bygsjw_sj/image/images/collapsed_no.png new file mode 100644 index 0000000..b37ac55 Binary files /dev/null and b/template/bygsjw_sj/image/images/collapsed_no.png differ diff --git a/template/bygsjw_sj/image/images/collapsed_yes.png b/template/bygsjw_sj/image/images/collapsed_yes.png new file mode 100644 index 0000000..605cd16 Binary files /dev/null and b/template/bygsjw_sj/image/images/collapsed_yes.png differ diff --git a/template/bygsjw_sj/image/images/collect.png b/template/bygsjw_sj/image/images/collect.png new file mode 100644 index 0000000..5f57a80 Binary files /dev/null and b/template/bygsjw_sj/image/images/collect.png differ diff --git a/template/bygsjw_sj/image/images/dialog_b.png b/template/bygsjw_sj/image/images/dialog_b.png new file mode 100644 index 0000000..f80ecf3 Binary files /dev/null and b/template/bygsjw_sj/image/images/dialog_b.png differ diff --git a/template/bygsjw_sj/image/images/dialog_bg.png b/template/bygsjw_sj/image/images/dialog_bg.png new file mode 100644 index 0000000..5dd571e Binary files /dev/null and b/template/bygsjw_sj/image/images/dialog_bg.png differ diff --git a/template/bygsjw_sj/image/images/dialog_t.png b/template/bygsjw_sj/image/images/dialog_t.png new file mode 100644 index 0000000..88177ed Binary files /dev/null and b/template/bygsjw_sj/image/images/dialog_t.png differ diff --git a/template/bygsjw_sj/image/images/exit.png b/template/bygsjw_sj/image/images/exit.png new file mode 100644 index 0000000..20f38bd Binary files /dev/null and b/template/bygsjw_sj/image/images/exit.png differ diff --git a/template/bygsjw_sj/image/images/exit_on.png b/template/bygsjw_sj/image/images/exit_on.png new file mode 100644 index 0000000..49ac893 Binary files /dev/null and b/template/bygsjw_sj/image/images/exit_on.png differ diff --git a/template/bygsjw_sj/image/images/header_bg.jpg b/template/bygsjw_sj/image/images/header_bg.jpg new file mode 100644 index 0000000..dadb367 Binary files /dev/null and b/template/bygsjw_sj/image/images/header_bg.jpg differ diff --git a/template/bygsjw_sj/image/images/icon.png b/template/bygsjw_sj/image/images/icon.png new file mode 100644 index 0000000..a9d0bd1 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon.png differ diff --git a/template/bygsjw_sj/image/images/icon_arrow.gif b/template/bygsjw_sj/image/images/icon_arrow.gif new file mode 100644 index 0000000..8dd58a9 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_arrow.gif differ diff --git a/template/bygsjw_sj/image/images/icon_arrow.png b/template/bygsjw_sj/image/images/icon_arrow.png new file mode 100644 index 0000000..4a80157 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_arrow.png differ diff --git a/template/bygsjw_sj/image/images/icon_arrow_down.png b/template/bygsjw_sj/image/images/icon_arrow_down.png new file mode 100644 index 0000000..c2511b8 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_arrow_down.png differ diff --git a/template/bygsjw_sj/image/images/icon_back.png b/template/bygsjw_sj/image/images/icon_back.png new file mode 100644 index 0000000..30aab32 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_back.png differ diff --git a/template/bygsjw_sj/image/images/icon_close.png b/template/bygsjw_sj/image/images/icon_close.png new file mode 100644 index 0000000..a1e2743 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_close.png differ diff --git a/template/bygsjw_sj/image/images/icon_close_g.png b/template/bygsjw_sj/image/images/icon_close_g.png new file mode 100644 index 0000000..5aadf1e Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_close_g.png differ diff --git a/template/bygsjw_sj/image/images/icon_del.png b/template/bygsjw_sj/image/images/icon_del.png new file mode 100644 index 0000000..3e818d1 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_del.png differ diff --git a/template/bygsjw_sj/image/images/icon_digest.png b/template/bygsjw_sj/image/images/icon_digest.png new file mode 100644 index 0000000..330d1a2 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_digest.png differ diff --git a/template/bygsjw_sj/image/images/icon_img.png b/template/bygsjw_sj/image/images/icon_img.png new file mode 100644 index 0000000..ae937fb Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_img.png differ diff --git a/template/bygsjw_sj/image/images/icon_load.gif b/template/bygsjw_sj/image/images/icon_load.gif new file mode 100644 index 0000000..dc67c8f Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_load.gif differ diff --git a/template/bygsjw_sj/image/images/icon_more.png b/template/bygsjw_sj/image/images/icon_more.png new file mode 100644 index 0000000..414631d Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_more.png differ diff --git a/template/bygsjw_sj/image/images/icon_msg.png b/template/bygsjw_sj/image/images/icon_msg.png new file mode 100644 index 0000000..2e4fc80 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_msg.png differ diff --git a/template/bygsjw_sj/image/images/icon_num.png b/template/bygsjw_sj/image/images/icon_num.png new file mode 100644 index 0000000..22cb277 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_num.png differ diff --git a/template/bygsjw_sj/image/images/icon_photo.png b/template/bygsjw_sj/image/images/icon_photo.png new file mode 100644 index 0000000..ccf365a Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_photo.png differ diff --git a/template/bygsjw_sj/image/images/icon_reply.png b/template/bygsjw_sj/image/images/icon_reply.png new file mode 100644 index 0000000..cd6de63 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_reply.png differ diff --git a/template/bygsjw_sj/image/images/icon_top.png b/template/bygsjw_sj/image/images/icon_top.png new file mode 100644 index 0000000..cae8ff0 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_top.png differ diff --git a/template/bygsjw_sj/image/images/icon_tu.png b/template/bygsjw_sj/image/images/icon_tu.png new file mode 100644 index 0000000..076a836 Binary files /dev/null and b/template/bygsjw_sj/image/images/icon_tu.png differ diff --git a/template/bygsjw_sj/image/images/login.png b/template/bygsjw_sj/image/images/login.png new file mode 100644 index 0000000..870d964 Binary files /dev/null and b/template/bygsjw_sj/image/images/login.png differ diff --git a/template/bygsjw_sj/image/images/login_on.png b/template/bygsjw_sj/image/images/login_on.png new file mode 100644 index 0000000..db3b5b6 Binary files /dev/null and b/template/bygsjw_sj/image/images/login_on.png differ diff --git a/template/bygsjw_sj/image/images/logo.png b/template/bygsjw_sj/image/images/logo.png new file mode 100644 index 0000000..648dad1 Binary files /dev/null and b/template/bygsjw_sj/image/images/logo.png differ diff --git a/template/bygsjw_sj/image/images/my_subject_bg.png b/template/bygsjw_sj/image/images/my_subject_bg.png new file mode 100644 index 0000000..2df2f56 Binary files /dev/null and b/template/bygsjw_sj/image/images/my_subject_bg.png differ diff --git a/template/bygsjw_sj/image/images/my_subject_bg151.png b/template/bygsjw_sj/image/images/my_subject_bg151.png new file mode 100644 index 0000000..239a1b1 Binary files /dev/null and b/template/bygsjw_sj/image/images/my_subject_bg151.png differ diff --git a/template/bygsjw_sj/image/images/nav_b_line.png b/template/bygsjw_sj/image/images/nav_b_line.png new file mode 100644 index 0000000..7cfe4c7 Binary files /dev/null and b/template/bygsjw_sj/image/images/nav_b_line.png differ diff --git a/template/bygsjw_sj/image/images/pic_bg.jpg b/template/bygsjw_sj/image/images/pic_bg.jpg new file mode 100644 index 0000000..4249417 Binary files /dev/null and b/template/bygsjw_sj/image/images/pic_bg.jpg differ diff --git a/template/bygsjw_sj/image/images/pic_select.png b/template/bygsjw_sj/image/images/pic_select.png new file mode 100644 index 0000000..7494d95 Binary files /dev/null and b/template/bygsjw_sj/image/images/pic_select.png differ diff --git a/template/bygsjw_sj/image/images/qqlogin.png b/template/bygsjw_sj/image/images/qqlogin.png new file mode 100644 index 0000000..77d0f66 Binary files /dev/null and b/template/bygsjw_sj/image/images/qqlogin.png differ diff --git a/template/bygsjw_sj/image/images/qqlogin_on.png b/template/bygsjw_sj/image/images/qqlogin_on.png new file mode 100644 index 0000000..2e35178 Binary files /dev/null and b/template/bygsjw_sj/image/images/qqlogin_on.png differ diff --git a/template/bygsjw_sj/image/images/qqlogintext.png b/template/bygsjw_sj/image/images/qqlogintext.png new file mode 100644 index 0000000..8fbf6dc Binary files /dev/null and b/template/bygsjw_sj/image/images/qqlogintext.png differ diff --git a/template/bygsjw_sj/image/images/reply.png b/template/bygsjw_sj/image/images/reply.png new file mode 100644 index 0000000..063ec9c Binary files /dev/null and b/template/bygsjw_sj/image/images/reply.png differ diff --git a/template/bygsjw_sj/image/images/titlebg.png b/template/bygsjw_sj/image/images/titlebg.png new file mode 100644 index 0000000..3103bd1 Binary files /dev/null and b/template/bygsjw_sj/image/images/titlebg.png differ diff --git a/template/bygsjw_sj/image/jinru.png b/template/bygsjw_sj/image/jinru.png new file mode 100644 index 0000000..f1eea22 Binary files /dev/null and b/template/bygsjw_sj/image/jinru.png differ diff --git a/template/bygsjw_sj/image/jq_register.js b/template/bygsjw_sj/image/jq_register.js new file mode 100644 index 0000000..5505f3f --- /dev/null +++ b/template/bygsjw_sj/image/jq_register.js @@ -0,0 +1,380 @@ +/* + [Discuz!] (C)2001-2099 Discuz Team. + This is NOT a freeware, use is subject to license terms + + $Id: register.js 33433 2013-06-13 07:36:25Z nemohou $ +*/ + +function jq(id) { + return !id ? null : document.getElementById(id); +} + +var lastusername = '', lastpassword = '', lastemail = '', lastinvitecode = '', stmp = new Array(), modifypwd = false, profileTips = '如不需要更改密码,此处请留空'; + +function errormessage(id, msg) { + if(jq(id)) { + try{ + showInputTip(); + } catch (e) {} + msg = !msg ? '' : msg; + if(jq('tip_' + id)) { + if(msg == 'succeed') { + msg = ''; + jq('tip_' + id).parentNode.className = jq('tip_' + id).parentNode.className.replace(/ p_right/, ''); + jq('tip_' + id).parentNode.className += ' p_right'; + } else if(msg !== '') { + jq('tip_' + id).parentNode.className = jq('tip_' + id).parentNode.className.replace(/ p_right/, ''); + } + } + if(jq('chk_' + id)) { + jq('chk_' + id).innerHTML = msg; + } + jq(id).className = jq(id).className.replace(/ er/, ''); + jq(id).className += !msg ? '' : ' er'; + } +} + +function addFormEvent(formid, focus){ + var si = 0; + var formNode = jq(formid).getElementsByTagName('input'); + for(i = 0;i < formNode.length;i++) { + if(formNode[i].name == '') { + formNode[i].name = formNode[i].id; + stmp[si] = i; + si++; + } + if(formNode[i].type == 'text' || formNode[i].type == 'password'){ + formNode[i].onfocus = function(){ + showInputTip(!this.id ? this.name : this.id); + } + } + } + if(!si) { + return; + } + formNode[stmp[0]].onblur = function () { + checkusername(formNode[stmp[0]].id); + }; + checkPwdComplexity(formNode[stmp[1]], formNode[stmp[2]]); + try { + if(!ignoreEmail) { + addMailEvent(formNode[stmp[3]]); + } + } catch(e) {} + + try { + if(focus) { + jq('invitecode').focus(); + } else { + formNode[stmp[0]].focus(); + } + } catch(e) {} +} + +function checkPwdComplexity(firstObj, secondObj, modify) { + modifypwd = modify || false; + firstObj.onblur = function () { + if(firstObj.value == '') { + var pwmsg = !modifypwd ? '请填写密码' : profileTips; + if(pwlength > 0) { + pwmsg += ', 最小长度为 '+pwlength+' 个字符'; + } + errormessage(firstObj.id, pwmsg); + }else{ + errormessage(firstObj.id, !modifypwd ? 'succeed' : ''); + } + checkpassword(firstObj.id, secondObj.id); + }; + firstObj.onkeyup = function () { + if(pwlength == 0 || jq(firstObj.id).value.length >= pwlength) { + var passlevels = new Array('','弱','中','强'); + var passlevel = checkstrongpw(firstObj.id); + errormessage(firstObj.id, '密码强度:'+passlevels[passlevel]+''); + } + }; + secondObj.onblur = function () { + if(secondObj.value == '') { + errormessage(secondObj.id, !modifypwd ? '请再次输入密码' : profileTips); + } + checkpassword(firstObj.id, secondObj.id); + }; +} + +function addMailEvent(mailObj) { + + mailObj.onclick = function (event) { + emailMenu(event, mailObj.id); + }; + mailObj.onkeyup = function (event) { + emailMenu(event, mailObj.id); + }; + mailObj.onkeydown = function (event) { + emailMenuOp(4, event, mailObj.id); + }; + mailObj.onblur = function () { + if(mailObj.value == '') { + errormessage(mailObj.id, '请输入邮箱地址'); + } + emailMenuOp(3, null, mailObj.id); + }; + stmp['email'] = mailObj.id; +} +function checkstrongpw(id) { + var passlevel = 0; + if(jq(id).value.match(/\d+/g)) { + passlevel ++; + } + if(jq(id).value.match(/[a-z]+/ig)) { + passlevel ++; + } + if(jq(id).value.match(/[^a-z0-9]+/ig)) { + passlevel ++; + } + return passlevel; +} +function showInputTip(id) { + var p_tips = jq('registerform').getElementsByTagName('i'); + for(i = 0;i < p_tips.length;i++){ + if(p_tips[i].className == 'p_tip'){ + p_tips[i].style.display = 'none'; + } + } + if(jq('tip_' + id)) { + jq('tip_' + id).style.display = 'block'; + } +} + +function showbirthday(){ + var el = jq('birthday'); + var birthday = el.value; + el.length=0; + el.options.add(new Option('日', '')); + for(var i=0;i<28;i++){ + el.options.add(new Option(i+1, i+1)); + } + if(jq('birthmonth').value!="2"){ + el.options.add(new Option(29, 29)); + el.options.add(new Option(30, 30)); + switch(jq('birthmonth').value){ + case "1": + case "3": + case "5": + case "7": + case "8": + case "10": + case "12":{ + el.options.add(new Option(31, 31)); + } + } + } else if(jq('birthyear').value!="") { + var nbirthyear=jq('birthyear').value; + if(nbirthyear%400==0 || (nbirthyear%4==0 && nbirthyear%100!=0)) el.options.add(new Option(29, 29)); + } + el.value = birthday; +} + +function trim(str) { + return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); +} + +var emailMenuST = null, emailMenui = 0, emaildomains = ['qq.com', '163.com', 'sina.com', 'sohu.com', 'yahoo.com', 'gmail.com', 'hotmail.com']; +function emailMenuOp(op, e, id) { + if(op == 3 && BROWSER.ie && BROWSER.ie < 7) { + checkemail(id); + } + if(!jq('emailmore_menu')) { + return; + } + if(op == 1) { + jq('emailmore_menu').style.display = 'none'; + } else if(op == 2) { + showMenu({'ctrlid':'emailmore','pos': '13!'}); + } else if(op == 3) { + emailMenuST = setTimeout(function () { + emailMenuOp(1, id); + checkemail(id); + }, 500); + } else if(op == 4) { + e = e ? e : window.event; + var obj = jq(id); + if(e.keyCode == 13) { + var v = obj.value.indexOf('@') != -1 ? obj.value.substring(0, obj.value.indexOf('@')) : obj.value; + obj.value = v + '@' + emaildomains[emailMenui]; + doane(e); + } + } else if(op == 5) { + var as = jq('emailmore_menu').getElementsByTagName('a'); + for(i = 0;i < as.length;i++){ + as[i].className = ''; + } + } +} + +function emailMenu(e, id) { + if(BROWSER.ie && BROWSER.ie < 7) { + return; + } + e = e ? e : window.event; + var obj = jq(id); + if(obj.value.indexOf('@') != -1) { + jq('emailmore_menu').style.display = 'none'; + return; + } + var value = e.keyCode; + var v = obj.value; + if(!obj.value.length) { + emailMenuOp(1); + return; + } + + if(value == 40) { + emailMenui++; + if(emailMenui >= emaildomains.length) { + emailMenui = 0; + } + } else if(value == 38) { + emailMenui--; + if(emailMenui < 0) { + emailMenui = emaildomains.length - 1; + } + } else if(value == 13) { + jq('emailmore_menu').style.display = 'none'; + return; + } + if(!jq('emailmore_menu')) { + menu = document.createElement('div'); + menu.id = 'emailmore_menu'; + menu.style.display = 'none'; + menu.className = 'p_pop'; + menu.setAttribute('disautofocus', true); + jq('append_parent').appendChild(menu); + } + var s = ''; + jq('emailmore_menu').innerHTML = s; + emailMenuOp(2); +} + +function checksubmit() { + var p_chks = jq('registerform').getElementsByTagName('kbd'); + for(i = 0;i < p_chks.length;i++){ + if(p_chks[i].className == 'p_chk'){ + p_chks[i].innerHTML = ''; + } + } + ajaxpost('registerform', 'returnmessage4', 'returnmessage4', 'onerror'); + return; +} + +function checkusername(id) { + errormessage(id); + var username = trim(jq(id).value); + if(jq('tip_' + id).parentNode.className.match(/ p_right/) && (username == '' || username == lastusername)) { + return; + } else { + lastusername = username; + } + if(username.match(/<|"/ig)) { + errormessage(id, '用户名包含敏感字符'); + return; + } + var unlen = username.replace(/[^\x00-\xff]/g, "**").length; + if(unlen < 3 || unlen > 15) { + errormessage(id, unlen < 3 ? '用户名不得小于 3 个字符' : '用户名不得超过 15 个字符'); + return; + } + var x = new Ajax(); + jq('tip_' + id).parentNode.className = jq('tip_' + id).parentNode.className.replace(/ p_right/, ''); + x.get('forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username=' + (BROWSER.ie && document.charset == 'utf-8' ? encodeURIComponent(username) : username.replace(/%/g, '%25').replace(/#/g, '%23')), function(s) { + errormessage(id, s); + }); +} + +function checkpassword(id1, id2) { + if(!jq(id1).value && !jq(id2).value) { + return; + } + if(pwlength > 0) { + if(jq(id1).value.length < pwlength) { + errormessage(id1, '密码太短,不得少于 '+pwlength+' 个字符'); + return; + } + } + if(strongpw) { + var strongpw_error = false, j = 0; + var strongpw_str = new Array(); + for(var i in strongpw) { + if(strongpw[i] === 1 && !jq(id1).value.match(/\d+/g)) { + strongpw_error = true; + strongpw_str[j] = '数字'; + j++; + } + if(strongpw[i] === 2 && !jq(id1).value.match(/[a-z]+/g)) { + strongpw_error = true; + strongpw_str[j] = '小写字母'; + j++; + } + if(strongpw[i] === 3 && !jq(id1).value.match(/[A-Z]+/g)) { + strongpw_error = true; + strongpw_str[j] = '大写字母'; + j++; + } + if(strongpw[i] === 4 && !jq(id1).value.match(/[^A-Za-z0-9]+/g)) { + strongpw_error = true; + strongpw_str[j] = '特殊符号'; + j++; + } + } + if(strongpw_error) { + errormessage(id1, '密码太弱,密码中必须包含 '+strongpw_str.join(',')); + return; + } + } + errormessage(id2); + if(jq(id1).value != jq(id2).value) { + errormessage(id2, '两次输入的密码不一致'); + } else { + errormessage(id2, !modifypwd ? 'succeed' : ''); + } +} + +function checkemail(id) { + errormessage(id); + var email = trim(jq(id).value); + if(jq(id).parentNode.className.match(/ p_right/) && (email == '' || email == lastemail)) { + return; + } else { + lastemail = email; + } + if(email.match(/<|"/ig)) { + errormessage(id, 'Email 包含敏感字符'); + return; + } + var x = new Ajax(); + jq('tip_' + id).parentNode.className = jq('tip_' + id).parentNode.className.replace(/ p_right/, ''); + x.get('forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkemail&email=' + email, function(s) { + errormessage(id, s); + }); +} + +function checkinvite() { + errormessage('invitecode'); + var invitecode = trim(jq('invitecode').value); + if(invitecode == '' || invitecode == lastinvitecode) { + return; + } else { + lastinvitecode = invitecode; + } + if(invitecode.match(/<|"/ig)) { + errormessage('invitecode', '邀请码包含敏感字符'); + return; + } + var x = new Ajax(); + jq('tip_invitecode').parentNode.className = jq('tip_invitecode').parentNode.className.replace(/ p_right/, ''); + x.get('forum.php?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkinvitecode&invitecode=' + invitecode, function(s) { + errormessage('invitecode', s); + }); +} \ No newline at end of file diff --git a/template/bygsjw_sj/image/jquery.min.js b/template/bygsjw_sj/image/jquery.min.js new file mode 100644 index 0000000..193b0ec --- /dev/null +++ b/template/bygsjw_sj/image/jquery.min.js @@ -0,0 +1,2 @@ + +(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write(""),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t
    a",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="
    t
    ",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="
    ",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;ti.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="
    ",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="

    ",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t0)for(i=r;i=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*\s*$/g,Nt={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X
    ","
    "]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1>");try{for(;r1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]===""&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("
    ").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window); \ No newline at end of file diff --git a/template/bygsjw_sj/image/kai.png b/template/bygsjw_sj/image/kai.png new file mode 100644 index 0000000..27a22d9 Binary files /dev/null and b/template/bygsjw_sj/image/kai.png differ diff --git a/template/bygsjw_sj/image/kapian.css b/template/bygsjw_sj/image/kapian.css new file mode 100644 index 0000000..d59c0c3 --- /dev/null +++ b/template/bygsjw_sj/image/kapian.css @@ -0,0 +1,71 @@ + +/* portal_index forum_index */ +.hdc_xin .header_z.header_index_y{ left: auto; right: 0; top: .12rem; height: auto;} +.hdc_xin .header_index_y a.shouye{ position: relative; height: auto; padding: 0; margin-right: .1rem; background: transparent;} +.hdc_xin .header_index_y .header_index_avatar{ width: .26rem; height: .26rem; margin: 0; border-radius: 50%; vertical-align: top;} +.hdc_xin .header_z.header_index_y .new_pm{ top: .01rem; left: auto; right: 0;} +.hdc_xin h1 img{ max-width: 1.5rem; margin: .1rem 0 0 .09rem;} +.hdc_xin .header_search{ position: absolute; top: .12rem; right: .46rem; display: block; width: 1.6rem; height: .26rem; line-height: .26rem; background: #fff; border-radius: .13rem;} +.hdc_xin .header_search_z{ float: left; width: 1.2rem; height: .26rem; line-height: .26rem; padding-left: .1rem; border: 0; border-radius: .13rem; outline: 0; font-size: .12rem;} +.header_xin, .hdc_xin, .header_search, .header_search_z, .header_search_y, .header_z, .hdc_xin h1{ -webkit-transition: all .4s; -o-transition: all .4s; -moz-transition: all .4s; transition: all .4s;} +.header_search_big #byg_header{ z-index: 97; -webkit-transform: translateY(0); -ms-transform: translateY(0); -o-transform: translateY(0); -moz-transform: translateY(0); transform: translateY(0);} +.header_search_big.bg_xin .header_xin{ padding-bottom: .91rem;} +.header_search_big.bg_xin #byg_header, .header_search_big .hdc_xin{ height: .9rem;} +.header_search_big .hdc_xin .header_search{ top: .25rem; right: .44rem; width: 2.87rem; height: .4rem; line-height: .4rem;} +.header_search_big .hdc_xin .header_search_z{ width: 2.3rem; height: .4rem; line-height: .4rem; font-size: .16rem;} +.header_search_big .hdc_xin .header_search_y{ width: .4rem; height: .4rem; background-size: .2rem .2rem;} +.header_search_big .hdc_xin .header_z, .header_search_big .hdc_xin h1{ -webkit-transform: translateY(-1rem); -ms-transform: translateY(-1rem); -o-transform: translateY(-1rem); -moz-transform: translateY(-1rem); transform: translateY(-1rem);} +.header_search_big .portal_font_nav{ display: none;} +.header_search_big .header_nav_cover{ display: block;} +.header_nav_cover{ display: none; width: 100%; height: 100%; position: fixed; left: 0; bottom: 0; background: black; opacity: 0.5; z-index: 96;} + +.linear_bg .sj_slide, .linear_bg .forum_gg{ margin-top: 0;} +body .sj_slide, body .sj_headline_box, body .byg_diynav, body .byg_gg, body .tabBox, body .tuwen, body #portal_activity, body .load_more_li, body .load_more_button, body .forum_gg, body .byg_an, body .byg_tongji, body .wm_xin .bm{ width: 3.59rem; margin: .08rem; overflow: hidden; border-radius: .1rem;} + +body .sj_slide_bd, body .sj_slide_bd li, body .sj_slide_bd .slide_img{ width: 3.59rem; border-radius: .1rem; overflow: hidden;} +body .sj_sl_tit{ border-radius: 0 0 .1rem .1rem; overflow: hidden;} +body .sj_sl_tit span{ width: 3.3rem; padding: 0 .14rem; display: block; line-height: .36rem;} +body .sj_headline_ul{ margin: 0 .05rem;} +body .sj_headline_li h3{ width: 2.94rem;} +body .byg_gg img{ max-width: 3.39rem;} +body .qh_number{ padding-right: .05rem;} +body .qh_content h3 a{ width: 2.68rem;} +body .qh_content em span{ max-width: .49rem;} +body .tw_z{ width: 1.15rem;} +body .tuwen li:last-child{ border: 0;} +body .portal_activity .tw_z{ width: 3.39rem;} +body .ac_bd h3{ width: 3.39rem;} +body .load_more{ margin: .08rem 0;} +body .load_more_li{ width: 3.39rem; margin-top: 0;} +body .load_more_author, body .load_more_date{ width: 2.95rem;} +body a.load_more_from{ max-width: 2.15rem;} +body .load_more_title{ margin-bottom: .06rem;} +body .load_more_img1 img{ max-width: 3.39rem; margin: 0 0 .06rem;} +body .load_more_img3{ margin: 0;} +body .load_more_img3 .img_center{ width: 1.09rem; height: 1.09rem; margin: 0 .06rem .06rem 0;} +body .load_more_b{ margin: .06rem 0 0;} +body .load_more_b span{ width: 1.12rem;} + +body .forum_gg_sl_bd img{ width: 3.39rem;} +body .an_li a{ width: 3.15rem;} +body .byg_tongji li{ width: 1.19rem;} +body .byg_tongji li:last-child{ width: 1.18rem;} +body .wm_xin{ margin-top: 0;} +body .bm_xin h2{ max-width: 2.75rem;} +body .sub_forum .forum_name{ float: right; width: 2.89rem;} +body .forum_name .forum_names{ float: left; width: 1.74rem;} +body .sub_forum.byg_forum2 ul{ width: 100%;} +body .sub_forum.byg_forum2 li{ width: 1.794rem;} +body .sub_forum.byg_forum2 .forum_name{ width: 1.13rem;} +body .sub_forum.byg_forum2 .forum_names{ width: 1.1rem;} +body .sub_forum.byg_forum2 .forum_posts, body .sub_forum.byg_forum2 .forum_threads{ max-width: .514rem;} +body .sub_forum.byg_forum3 ul{ width: 100%;} +body .sub_forum.byg_forum3 li{ width: 1.195rem;} +body .sub_forum.byg_forum3 .forum_img{ margin: .11rem 0 .03rem .4rem;} +body .sub_forum.byg_forum3 .forum_name{ width: .99rem;} +body .sub_forum.byg_forum3 .forum_names{ width: 100%;} +body .sub_forum.byg_forum4 ul{ width: 100%;} +body .sub_forum.byg_forum4 li{ width: .897rem;} +body .sub_forum.byg_forum4 .forum_img{ margin: .11rem 0 .03rem .248rem;} +body .sub_forum.byg_forum4 .forum_name{ width: .81rem; margin: 0 .04rem .08rem;} +body .sub_forum.byg_forum4 .forum_names{ width: 100%;} diff --git a/template/bygsjw_sj/image/lanjiazai.gif b/template/bygsjw_sj/image/lanjiazai.gif new file mode 100644 index 0000000..e8c2892 Binary files /dev/null and b/template/bygsjw_sj/image/lanjiazai.gif differ diff --git a/template/bygsjw_sj/image/lanjiazai.js b/template/bygsjw_sj/image/lanjiazai.js new file mode 100644 index 0000000..615b90e --- /dev/null +++ b/template/bygsjw_sj/image/lanjiazai.js @@ -0,0 +1,2 @@ +/*! Lazy Load 1.9.3 - MIT license - Copyright 2010-2013 Mika Tuupola */ +!function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document); \ No newline at end of file diff --git a/template/bygsjw_sj/image/loading.gif b/template/bygsjw_sj/image/loading.gif new file mode 100644 index 0000000..9c400e4 Binary files /dev/null and b/template/bygsjw_sj/image/loading.gif differ diff --git a/template/bygsjw_sj/image/logo.png b/template/bygsjw_sj/image/logo.png new file mode 100644 index 0000000..fd3e7c6 Binary files /dev/null and b/template/bygsjw_sj/image/logo.png differ diff --git a/template/bygsjw_sj/image/members.png b/template/bygsjw_sj/image/members.png new file mode 100644 index 0000000..3177a18 Binary files /dev/null and b/template/bygsjw_sj/image/members.png differ diff --git a/template/bygsjw_sj/image/middle.gif b/template/bygsjw_sj/image/middle.gif new file mode 100644 index 0000000..44305ae Binary files /dev/null and b/template/bygsjw_sj/image/middle.gif differ diff --git a/template/bygsjw_sj/image/new_pm.png b/template/bygsjw_sj/image/new_pm.png new file mode 100644 index 0000000..7069364 Binary files /dev/null and b/template/bygsjw_sj/image/new_pm.png differ diff --git a/template/bygsjw_sj/image/no_reply.png b/template/bygsjw_sj/image/no_reply.png new file mode 100644 index 0000000..91d36c8 Binary files /dev/null and b/template/bygsjw_sj/image/no_reply.png differ diff --git a/template/bygsjw_sj/image/nophoto.gif b/template/bygsjw_sj/image/nophoto.gif new file mode 100644 index 0000000..d352dc9 Binary files /dev/null and b/template/bygsjw_sj/image/nophoto.gif differ diff --git a/template/bygsjw_sj/image/pin_1.png b/template/bygsjw_sj/image/pin_1.png new file mode 100644 index 0000000..63027d5 Binary files /dev/null and b/template/bygsjw_sj/image/pin_1.png differ diff --git a/template/bygsjw_sj/image/pin_2.png b/template/bygsjw_sj/image/pin_2.png new file mode 100644 index 0000000..8936a04 Binary files /dev/null and b/template/bygsjw_sj/image/pin_2.png differ diff --git a/template/bygsjw_sj/image/pin_3.png b/template/bygsjw_sj/image/pin_3.png new file mode 100644 index 0000000..a221f9a Binary files /dev/null and b/template/bygsjw_sj/image/pin_3.png differ diff --git a/template/bygsjw_sj/image/pin_4.png b/template/bygsjw_sj/image/pin_4.png new file mode 100644 index 0000000..660d8d4 Binary files /dev/null and b/template/bygsjw_sj/image/pin_4.png differ diff --git a/template/bygsjw_sj/image/post_sidenav.png b/template/bygsjw_sj/image/post_sidenav.png new file mode 100644 index 0000000..3a7b427 Binary files /dev/null and b/template/bygsjw_sj/image/post_sidenav.png differ diff --git a/template/bygsjw_sj/image/posts.png b/template/bygsjw_sj/image/posts.png new file mode 100644 index 0000000..e53672d Binary files /dev/null and b/template/bygsjw_sj/image/posts.png differ diff --git a/template/bygsjw_sj/image/qa.gif b/template/bygsjw_sj/image/qa.gif new file mode 100644 index 0000000..8ddf35f Binary files /dev/null and b/template/bygsjw_sj/image/qa.gif differ diff --git a/template/bygsjw_sj/image/qz.gif b/template/bygsjw_sj/image/qz.gif new file mode 100644 index 0000000..4ac7429 Binary files /dev/null and b/template/bygsjw_sj/image/qz.gif differ diff --git a/template/bygsjw_sj/image/rec_add.png b/template/bygsjw_sj/image/rec_add.png new file mode 100644 index 0000000..6f58c00 Binary files /dev/null and b/template/bygsjw_sj/image/rec_add.png differ diff --git a/template/bygsjw_sj/image/rec_rate.png b/template/bygsjw_sj/image/rec_rate.png new file mode 100644 index 0000000..cd9c633 Binary files /dev/null and b/template/bygsjw_sj/image/rec_rate.png differ diff --git a/template/bygsjw_sj/image/rec_rate_bai.png b/template/bygsjw_sj/image/rec_rate_bai.png new file mode 100644 index 0000000..f5aea54 Binary files /dev/null and b/template/bygsjw_sj/image/rec_rate_bai.png differ diff --git a/template/bygsjw_sj/image/rec_rate_hui.png b/template/bygsjw_sj/image/rec_rate_hui.png new file mode 100644 index 0000000..6b341c4 Binary files /dev/null and b/template/bygsjw_sj/image/rec_rate_hui.png differ diff --git a/template/bygsjw_sj/image/rec_subtract.png b/template/bygsjw_sj/image/rec_subtract.png new file mode 100644 index 0000000..509439b Binary files /dev/null and b/template/bygsjw_sj/image/rec_subtract.png differ diff --git a/template/bygsjw_sj/image/sanjiao.png b/template/bygsjw_sj/image/sanjiao.png new file mode 100644 index 0000000..4625201 Binary files /dev/null and b/template/bygsjw_sj/image/sanjiao.png differ diff --git a/template/bygsjw_sj/image/scrolltop.js b/template/bygsjw_sj/image/scrolltop.js new file mode 100644 index 0000000..ceb0965 --- /dev/null +++ b/template/bygsjw_sj/image/scrolltop.js @@ -0,0 +1,38 @@ + +if(jQuery(document).height() > jQuery(window).height() + 100) { + jQuery(".byg_scrolltop").addClass("scrolltop_show"); + jQuery(".scrolltop_top").css("display","none"); +} + +jQuery(window).scroll(function() { + if(jQuery(window).scrollTop() < 500) { + jQuery(".scrolltop_top").css("display","none"); + } else { + jQuery(".scrolltop_top").removeAttr("style",""); + } +}); + +var new2_scroll_position = 0; +var last2_scroll_position; +var scroll_scroll_d = 0, scroll_scroll_t = 0; +window.addEventListener('scroll', function(e) { + last2_scroll_position = window.pageYOffset; + // 向下滚动 + if (new2_scroll_position < last2_scroll_position) { + scroll_scroll_d = last2_scroll_position; + if (scroll_scroll_d > scroll_scroll_t + 50) { + jQuery(".byg_scrolltop").removeClass("scrolltop_show"); + } + // 向上滚动 + } else if (new2_scroll_position > last2_scroll_position) { + scroll_scroll_t = last2_scroll_position; + if (scroll_scroll_d > scroll_scroll_t + 50) { + jQuery(".byg_scrolltop").addClass("scrolltop_show"); + } + } + new2_scroll_position = last2_scroll_position; +}); + +function topFunction() { + jQuery("html, body").animate({scrollTop: 0}, 500); +} diff --git a/template/bygsjw_sj/image/shanchu.png b/template/bygsjw_sj/image/shanchu.png new file mode 100644 index 0000000..4d3e75a Binary files /dev/null and b/template/bygsjw_sj/image/shanchu.png differ diff --git a/template/bygsjw_sj/image/shoucang.png b/template/bygsjw_sj/image/shoucang.png new file mode 100644 index 0000000..1749e84 Binary files /dev/null and b/template/bygsjw_sj/image/shoucang.png differ diff --git a/template/bygsjw_sj/image/shouye.png b/template/bygsjw_sj/image/shouye.png new file mode 100644 index 0000000..c6860e6 Binary files /dev/null and b/template/bygsjw_sj/image/shouye.png differ diff --git a/template/bygsjw_sj/image/slide.js b/template/bygsjw_sj/image/slide.js new file mode 100644 index 0000000..4743cb6 --- /dev/null +++ b/template/bygsjw_sj/image/slide.js @@ -0,0 +1,14 @@ +/*! + * TouchSlide v1.1 + * javascript触屏滑动特效插件,移动端滑动特效,触屏焦点图,触屏Tab切换,触屏多图切换等 + * 详尽信息请看官网:http://www.SuperSlide2.com/TouchSlide/ + * + * Copyright 2013 大话主席 + * + * 请尊重原创,保留头部版权 + * 在保留版权的前提下可应用于个人或商业用途 + + * 1.1 宽度自适应(修复安卓横屏时滑动范围不变的bug) + */ + +var TouchSlide=function(a){a=a||{};var b={slideCell:a.slideCell||"#touchSlide",titCell:a.titCell||".hd li",mainCell:a.mainCell||".bd",effect:a.effect||"left",autoPlay:a.autoPlay||!1,delayTime:a.delayTime||200,interTime:a.interTime||2500,defaultIndex:a.defaultIndex||0,titOnClassName:a.titOnClassName||"on",autoPage:a.autoPage||!1,prevCell:a.prevCell||".prev",nextCell:a.nextCell||".next",pageStateCell:a.pageStateCell||".pageState",pnLoop:"undefined "==a.pnLoop?!0:a.pnLoop,startFun:a.startFun||null,endFun:a.endFun||null,switchLoad:a.switchLoad||null},c=document.getElementById(b.slideCell.replace("#",""));if(!c)return!1;var d=function(a,b){a=a.split(" ");var c=[];b=b||document;var d=[b];for(var e in a)0!=a[e].length&&c.push(a[e]);for(var e in c){if(0==d.length)return!1;var f=[];for(var g in d)if("#"==c[e][0])f.push(document.getElementById(c[e].replace("#","")));else if("."==c[e][0])for(var h=d[g].getElementsByTagName("*"),i=0;iR;R++)Q+="
  • "+(R+1)+"
  • ";else for(var R=0;p>R;R++)Q+=b.autoPage.replace("$",R+1);o.innerHTML=Q,o=o.children}"leftLoop"==i&&(P+=2,m.appendChild(m.children[0].cloneNode(!0)),m.insertBefore(m.children[n-1].cloneNode(!0),m.children[0])),N=e(m,'
    '),m.style.cssText="width:"+P*M+"px;"+"position:relative;overflow:hidden;padding:0;margin:0;";for(var R=0;P>R;R++)m.children[R].style.cssText="display:table-cell;vertical-align:top;width:"+M+"px";var S=function(){"function"==typeof b.startFun&&b.startFun(r,p)},T=function(){"function"==typeof b.endFun&&b.endFun(r,p)},U=function(a){var b=("leftLoop"==i?r+1:r)+a,c=function(a){for(var b=m.children[a].getElementsByTagName("img"),c=0;ca;a++)m.children[a].style.width=M+"px";var b="leftLoop"==i?r+1:r;W(-b*M,0)};window.addEventListener("resize",V,!1);var W=function(a,b,c){c=c?c.style:m.style,c.webkitTransitionDuration=c.MozTransitionDuration=c.msTransitionDuration=c.OTransitionDuration=c.transitionDuration=b+"ms",c.webkitTransform="translate("+a+"px,0)"+"translateZ(0)",c.msTransform=c.MozTransform=c.OTransform="translateX("+a+"px)"},X=function(a){switch(i){case"left":r>=p?r=a?r-1:0:0>r&&(r=a?0:p-1),null!=q&&U(0),W(-r*M,s),x=r;break;case"leftLoop":null!=q&&U(0),W(-(r+1)*M,s),-1==r?(z=setTimeout(function(){W(-p*M,0)},s),r=p-1):r==p&&(z=setTimeout(function(){W(-M,0)},s),r=0),x=r}S(),A=setTimeout(function(){T()},s);for(var c=0;p>c;c++)h(o[c],b.titOnClassName),c==r&&g(o[c],b.titOnClassName);0==w&&(h(k,"nextStop"),h(j,"prevStop"),0==r?g(j,"prevStop"):r==p-1&&g(k,"nextStop")),l&&(l.innerHTML=""+(r+1)+"/"+p)};if(X(),u&&(y=setInterval(function(){r++,X()},t)),o)for(var R=0;p>R;R++)!function(){var a=R;o[a].addEventListener("click",function(){clearTimeout(z),clearTimeout(A),r=a,X()})}();k&&k.addEventListener("click",function(){(1==w||r!=p-1)&&(clearTimeout(z),clearTimeout(A),r++,X())}),j&&j.addEventListener("click",function(){(1==w||0!=r)&&(clearTimeout(z),clearTimeout(A),r--,X())});var Y=function(a){clearTimeout(z),clearTimeout(A),O=void 0,D=0;var b=H?a.touches[0]:a;B=b.pageX,C=b.pageY,m.addEventListener(J,Z,!1),m.addEventListener(K,$,!1)},Z=function(a){if(!H||!(a.touches.length>1||a.scale&&1!==a.scale)){var b=H?a.touches[0]:a;if(D=b.pageX-B,E=b.pageY-C,"undefined"==typeof O&&(O=!!(O||Math.abs(D)0||r>=p-1&&0>D)&&(D=.4*D),W(-r*M+D,0);break;case"leftLoop":W(-(r+1)*M+D,0)}null!=q&&Math.abs(D)>M/3&&U(D>-0?-1:1)}}},$=function(a){0!=D&&(a.preventDefault(),O||(Math.abs(D)>M/10&&(D>0?r--:r++),X(!0),u&&(y=setInterval(function(){r++,X()},t))),m.removeEventListener(J,Z,!1),m.removeEventListener(K,$,!1))};m.addEventListener(I,Y,!1)}; \ No newline at end of file diff --git a/template/bygsjw_sj/image/sousuo_bai.png b/template/bygsjw_sj/image/sousuo_bai.png new file mode 100644 index 0000000..eaaff23 Binary files /dev/null and b/template/bygsjw_sj/image/sousuo_bai.png differ diff --git a/template/bygsjw_sj/image/sousuo_hui.png b/template/bygsjw_sj/image/sousuo_hui.png new file mode 100644 index 0000000..fbc51d2 Binary files /dev/null and b/template/bygsjw_sj/image/sousuo_hui.png differ diff --git a/template/bygsjw_sj/image/style.css b/template/bygsjw_sj/image/style.css new file mode 100644 index 0000000..5dd1414 --- /dev/null +++ b/template/bygsjw_sj/image/style.css @@ -0,0 +1,836 @@ + +/* common */ +h2, h3, h4, h5, h6{ font-size: .16rem; font-weight: 400; display: inline-block;} +.message h4, .message h5, .message h6{ font-size: .16rem; font-weight: bold; display: block;} +h2.log_tit{ display: block;} +b{ font-weight: 400;} +textarea{ border-color: #ddd;} +input::-webkit-input-placeholder, textarea::-webkit-input-placeholder{ color: #999;} +a:link, a:visited, a:hover{ color: #444;} +a.blue:link, a.blue:visited, a.blue:hover{ color: #444;} +.xg1{ color: #999; vertical-align: middle;} +.xg2{ color: #666; vertical-align: middle;} +.button{ margin: 5px;} +.jump_c{ padding: 1rem .2rem; line-height: .3rem; font-size: .16rem; text-align: center;} +.jump_c .grey{ font-size: .16rem;} +.jump_c + div{ text-align: center;} +.jump_c a, .jump_c a.grey{ color: #06c;} +.tip{ width: 3rem; height: auto; background: #fff; border-color: #ddd; border-radius: .02rem;} +.tip dt{ padding: .1rem; height: auto; font-size: .16rem;} +.tip dt .xg2{ vertical-align: top;} +.tip dd{ margin: .05rem 0; border-top: 1px solid #eee;} +.scrolltop{ bottom: 60px !important; background: rgba(64, 64, 64, .3); border-radius: 50%; z-index: 90;} +.footer{ margin-top: .1rem; font-size: .12rem; padding: 10px 0;} +.footer a{ color: #999;} +#mask{ opacity: 0.5 !important;} + +.clear{ clear: both;} +.hidden{ display: none;} +.bg_xin{ width: 100%; min-width: 3.749rem; background: #f1f1f1; font-size: .16rem !important;} + +.over_one{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.over_two{ overflow: hidden; text-overflow: ellipsis; display:box; display:-webkit-box; display:-moz-box; box-orient: vertical; -webkit-box-orient: vertical; -moz-box-orient: vertical; line-clamp: 2; -webkit-line-clamp: 2; -moz-line-clamp: 2;} +img{ border-radius: 2px;} +.img_center{ overflow: hidden; display: block; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover; border-radius: 2px;} + +.cover_overflow{ width: 100%; height: 100%; overflow: hidden;} +.cover_div, .cover_top, .sidenav_overlay, .scrolltop_order_cover, .scrolltop_guide_cover, .byg_getpassword_cover{ display: none; width: 100%; height: 100%; position: fixed; left: 0; bottom: 0; background: black; opacity: 0.5; z-index: 96;} + +.portal_font_nav::-webkit-scrollbar, .portal_cat_top::-webkit-scrollbar, .portal_cat_sub::-webkit-scrollbar, .fast_post li::-webkit-scrollbar, .byg_sidenav::-webkit-scrollbar, .forumdisplay_tab::-webkit-scrollbar, .byg_thread_types::-webkit-scrollbar, .newthread_type_tab::-webkit-scrollbar{ display: none;} + +.byg_gg_viewthread{ padding-top: .1rem; background: #f1f1f1;} +.byg_gg_viewthread .byg_gg{ margin: 0;} +.byg_gg{ margin: .1rem 0; padding: .1rem 0; background: #fff;} +.byg_gg img{ max-width: 3.55rem; padding: 0 .1rem; border-radius: .02rem; vertical-align: middle;} + +.byg_into{ opacity: 0; -webkit-transform: translateY(.4rem); -ms-transform: translateY(.4rem); -o-transform: translateY(.4rem); -moz-transform: translateY(.4rem); transform: translateY(.4rem); -webkit-transition: all .4s; -o-transition: all .4s; -moz-transition: all .4s; transition: all .4s;} +.byg_into.byg_start{ opacity: 1; -webkit-transform: none; -ms-transform: none; -o-transform: none; -moz-transform: none; transform: none;} + + +/* header */ +.header_xin{ padding-bottom: .46rem; -webkit-transition: all .4s; -o-transition: all .4s; -moz-transition: all .4s; transition: all .4s;} +.slideUp{ -webkit-transform: translateY(-1rem); -ms-transform: translateY(-1rem); -o-transform: translateY(-1rem); -moz-transform: translateY(-1rem); transform: translateY(-1rem); -webkit-transition: transform .4s; -o-transition: transform .4s; -moz-transition: transform .4s; transition: transform .4s;} +.slideDown{ -webkit-transform: translateY(0); -ms-transform: translateY(0); -o-transform: translateY(0); -moz-transform: translateY(0); transform: translateY(0); -webkit-transition: transform .4s; -o-transition: transform .4s; -moz-transition: transform .4s; transition: transform .4s;} + +#byg_header{ width: 100%; height: .46rem; position: fixed; top: 0; z-index: 90;} + +.hdc_xin{ width: 100%; height: .46rem; overflow: hidden;} +.hdc_xin .header_z{ max-width: 3.3rem; height: .2rem; line-height: .22rem; overflow: hidden; position: absolute; top: .13rem; left: 0;} +.header_z a, .header_z em, .header_z span{ float: left; height: .2rem; line-height: .22rem; margin-right: .06rem; font-size: .14rem; color: #fff; white-space: nowrap; display: block;} +.header_z i{ float: left; height: .2rem; line-height: .22rem; font-size: .14rem; color: #fff; white-space: nowrap; display: block;} +.hdc_xin .shouye{ margin-left: .1rem;} +.hdc_xin .shouye img{ width: .2rem; height: .2rem; border-radius: 50%; vertical-align: top;} +.hdc_xin .shouye .new_pm{ position: absolute; left: .32rem; top: 0; width: 4px; height: 4px; border: 1px solid #fff;} +.hdc_xin h1{ text-align: center;} +.hdc_xin h1 img{ margin: .08rem; width: auto; height: .3rem; vertical-align: top;} +.hdc_xin .header_y{ position: absolute; top: 0; right: 0;} +.hdc_xin .header_y img{ width: .2rem; height: .2rem; margin: .13rem .1rem; vertical-align: top;} + +.portal_font_nav{ width: 100%; height: .32rem; line-height: .2rem; padding: .06rem 0; background: #fff; overflow-y: hidden; overflow-x: auto; white-space: nowrap; border-bottom: 1px solid #eee;} +.portal_font_nav a{ width: auto; height: .2rem; margin: 0 .11rem 0 .01rem; padding: .06rem .1rem; display: inline-block; font-size: .16rem; position: relative; vertical-align: middle;} +.portal_font_nav a:last-child{ margin-right: 0;} + + +/* footer */ +.footer_xin{ padding-top: .65rem;} +.footer_nav{ width: 100%; height: .5rem; background: #fff; border-top: 1px solid #ddd; position: fixed; bottom: 0; z-index: 95;} +.slideUp1{ -webkit-transform: translateY(1rem); -ms-transform: translateY(1rem); -o-transform: translateY(1rem); -moz-transform: translateY(1rem); transform: translateY(1rem); -webkit-transition: transform .4s; -o-transition: transform .4s; -moz-transition: transform .4s; transition: transform .4s;} +.footer_nav li{ float: left; width: 20%; height: .5rem; text-align: center;} +.footer_nav li a{ width: 100%; height: .42rem; padding: .04rem 0; display: block;} +.footer_nav li span{ width: 100%; height: .16rem; line-height: .16rem; display: block; text-align: center; font-size: .12rem; font-weight: 400; color: #666;} +.footer_nav li i{ height: .26rem; line-height: .26rem; display: block; font-size: .24rem; text-align: center; color: #666;} +.footer_nav li img{ height: .22rem; max-width: .65rem; margin: .02rem 0; display: inline-block; vertical-align: top;} +.footer_nav .footer_fatie{ width: .65rem; height: .6rem; margin: -.1rem .05rem 0; background: #fff; border-top: 1px solid #ddd; border-radius: 50%;} +.footer_nav .footer_fatie a{ margin-top: .1rem; background: #fff;} +.footer_nav .footer_fatie i{ margin-top: -.07rem; height: .32rem; line-height: .32rem; font-size: .34rem; color: #888;} +.footer_nav .footer_fatie img{ height: .28rem; margin: -.05rem 0 .02rem;} + +.byg_sidenav{ width: 2.4rem; height: 100%; background: #fff; display: block; -webkit-transform: translate(-3rem, 0); -ms-transform: translate(-3rem, 0); -o-transform: translate(-3rem, 0); -moz-transform: translate(-3rem, 0); transform: translate(-3rem, 0); -webkit-transition: transform .4s; -o-transition: transform .4s; -moz-transition: transform .4s; transition: transform .4s; position: fixed; top: 0; left: 0; z-index: 97; overflow-x: hidden; overflow-y: auto;} +.byg_sidenav.show{ -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); -o-transform: translate(0, 0); -moz-transform: translate(0, 0); transform: translate(0, 0);} +.sidenav-brand .sidenav_t{ margin: 15px .15rem; display: block;} +.sidenav-brand .sidenav_t img{ float: left; width: .4rem; height: .4rem; border-radius: 50%; vertical-align: top; box-shadow: 1px 1px 1px #555;} +.sidenav-brand .sidenav_t span{ float: right; width: 1.6rem; height: .4rem; line-height: .4rem; display: block; color: #fff; font-size: .16rem; text-align: left; text-shadow: 1px 1px 1px #000; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +.sidenav-brand .sidenav_c{ margin-bottom: 35px; text-align: right;} +.sidenav-brand .sidenav_c a{ line-height: .2rem; margin-right: .15rem; padding: .02rem .06rem; border-radius: .04rem; background: rgba(0,0,0,.3); color: #fff; font-size: .12rem; display: inline-block;} +.sidenav-brand .sidenav_c i{ display: inline-block; width: .14rem; height: .14rem; line-height: .14rem; margin: .03rem .02rem .03rem 0; vertical-align: top; font-size: .14rem;} +.sidenav-brand .sidenav_c img{ vertical-align: top; width: .16rem; height: .16rem; margin: .02rem .02rem .02rem 0;} +.sidenav-brand{ position: relative;} +.byg_bl_lang{ position: absolute; left: 0; bottom: -10px; z-index: 1; width: 100%; height: 30px;} +.byg_bl_lang1, .byg_bl_lang2{ position: absolute; width: 100%; height: 30px;} +@keyframes byg_bl_lang1{ 0% { background-position: 0 top;} 100% { background-position: 300px top;}} +@-webkit-keyframes byg_bl_lang1{ 0% { background-position: 0 top;} 100% { background-position: 300px top;}} +@keyframes byg_bl_lang2{ 0% { background-position: 0 top;} 100% { background-position: 300px top;}} +@-webkit-keyframes byg_bl_lang2{ 0% { background-position: 0 top;} 100% { background-position: 300px top;}} +.sidenav-menu{ padding: 10px 0;} +.sidenav-menu li{ padding: 5px .18rem} +.sidenav-menu a{ display: block; height: 30px; line-height: 32px; font-size: 16px;} +.sidenav-menu img{ height: 22px; margin: 4px 5px 4px 0; vertical-align: top;} +.sidenav-menu i{ display: inline-block; height: 22px; line-height: 22px; margin: 4px 5px 4px 0; vertical-align: top; font-size: 22px;} +.sidenav-menu .icon-fanhui2{ color: #0c9990;} +.sidenav-menu .icon-zhuye-off{ color: #df4430;} +.sidenav-menu .icon-luntan-off{ color: #eda843;} +.sidenav-menu .icon-sousuo{ color: #1a9adc;} +.sidenav-menu .icon-wode{ color: #37aa23;} +.sidenav-menu .icon-xiaoxi{ color: #e07480;} +.sidenav-menu .icon-tixing{ color: #d7254e;} +.sidenav-menu .icon-fatie{ color: #2074bb;} +.sidenav-menu .icon-diannao{ color: #eda63d;} +.sidenav-menu .new_pm, .myinfo_list li .new_pm{ position: absolute; left: -8px; top: 6px; margin: 0; width: 6px; height: 6px; border-radius: 50%;} +.sidenav_overlay.show{ display: block;} + +.landingPrompt{ display: none; width: 3rem; height: 1.25rem; position: fixed; left: 50%; bottom: 50%; z-index: 99; margin-left: -1.5rem; margin-bottom: -.6rem; background: #fff; border-radius: .1rem;} +.landingPrompt p{ padding: .2rem; text-align: center; font-size: .18rem;} +.landingPrompt div{ padding: .11rem; border-top: 1px solid #eee; text-align: center;} +.landingPrompt a{ margin: 0 .05rem; padding: .05rem .1rem; display: inline-block; color: #fff; border-radius: .02rem;} +.landingPrompt .landing_off{ padding: .04rem .09rem; border: .01rem solid #ddd; background: #fff; color: #888;} + +.byg_scrolltop{ position: fixed; bottom: .8rem; right: .1rem; z-index: 95; width: .42rem; -webkit-transform: translate(1rem, 0); -ms-transform: translate(1rem, 0); -o-transform: translate(1rem, 0); -moz-transform: translate(1rem, 0); transform: translate(1rem, 0); -webkit-transition: transform .4s; -o-transition: transform .4s; -moz-transition: transform .4s; transition: transform .4s;} +.byg_scrolltop a{ display: block; width: .42rem; height: .42rem; margin-bottom: .1rem; background: rgba(0,0,0,.4); border-radius: 50%;} +.byg_scrolltop i{ display: inline-block; width: .2rem; height: .2rem; line-height: .2rem; padding: .01rem .11rem 0; vertical-align: top; font-size: .2rem; color: #fff;} +.byg_scrolltop span{ display: inline-block; width: 100%; height: .12rem; line-height: .12rem; margin-top: -.02rem; font-size: .12rem; color: #fff; vertical-align: top; text-align: center;} +.byg_scrolltop.scrolltop_show{ -webkit-transform: translate(0, 0); -ms-transform: translate(0, 0); -o-transform: translate(0, 0); -moz-transform: translate(0, 0); transform: translate(0, 0);} + +.byg_scrolltop .scrolltop_order, .byg_scrolltop .scrolltop_guide{ background: #ff9800;} +.byg_scrolltop img{ width: .2rem; height: .2rem; padding: .01rem .11rem 0; vertical-align: top;} +.scrolltop_order_pop, .scrolltop_guide_pop{ display: none; position: fixed; top: 1rem; left: .2rem; z-index: 97; width: 3.35rem; border-radius: .1rem; background: #fff;} +.scrolltop_order_c{ padding: 0 0 .12rem .1rem;} +.scrolltop_order_c li{ margin-top: .12rem;} +.scrolltop_order_c li span{ float: left; display: inline-block; margin: .04rem 0; line-height: .24rem; font-size: .16rem; font-weight: 700;} +.scrolltop_order_c li a{ float: left; display: inline-block; margin: .04rem .08rem .04rem 0; padding: 0 .06rem; background: #f5f5f5; line-height: .24rem; border-radius: .04rem; font-size: .14rem; color: #555;} +.scrolltop_guide_pop .scrolltop_order_c li a{ margin: .06rem .1rem .06rem .01rem; padding: 0 .12rem; line-height: .32rem;} + + +/* portal */ +.sj_slide{ width: 100%; height: 2rem; position: relative; overflow: hidden;} +.sj_slide_bd{ position: relative; z-index: 0;} +.sj_slide_bd li{ position: relative; float: left;} +.sj_slide_bd .slide_img{ width: 100%; height: 2rem; overflow: hidden; display: block; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover;} +.sj_slide_bd li a{ -webkit-tap-highlight-color: rgba(0,0,0,0);} +.sj_sl_tit{ display: block; width: 100%; height: .36rem; position: absolute; bottom: 0; background: rgba(0,0,0,0.3);} +.sj_sl_tit span{ width: 3.38rem; height: .36rem; padding: 0 .18rem; display: table-cell; vertical-align: middle; color: #fff; font-size: .16rem; white-space: nowrap; overflow: hidden; text-overflow:ellipsis;} +.sj_slide_hd{ width: 3rem; margin-left: -1.5rem; position: absolute; top: .05rem; left: 50%; z-index: 1; text-align: center;} +.sj_slide_hd span{ height: 6px; width: 6px; margin: 0 .06rem; display: inline-block; border-radius: 50%; background: rgba(0,0,0,0.3); text-indent: -9999em; overflow: hidden; opacity: 1;} +.sj_slide_hd .swiper-pagination-bullet-active{ background: #eee;} + +.sj_headline_box{ width: 100%; height: .81rem; margin: .1rem 0; overflow: hidden; background: #fff;} +.sj_headline{ width: 100%; height: .82rem; position: relative;} +.sj_headline_ul{ margin: 0 .1rem; position: absolute; top: 0;} +.sj_headline_li{ width: 3.05rem; height: .41rem; padding-left: .5rem; background-position: .06rem .12rem; background-repeat: no-repeat; background-size: .36rem .16rem;} +.sj_headline_li h3{ width: 3.05rem; height: .4rem; line-height: .42rem; font-size: .16rem; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; border-bottom: .01rem dashed #eaeaea;} + +.byg_diynav{ width: 100%; margin: .1rem 0; padding-bottom: .08rem; background: #fff;} +.byg_diynav:after{ content: "."; display: block; height: 0; visibility: hidden; clear: both;} +.byg_diynav li{ width: 20%; height: .75rem; overflow: hidden; float: left; text-align: center;} +.byg_diynav a{ margin: .1rem 0 0; display: block;} +.byg_diynav img{ width: .4rem; height: .4rem; margin: 0 auto; border-radius: 50%; vertical-align: middle;} +.byg_diynav p{ margin-top: .02rem; height: .2rem; line-height: .22rem; font-size: .14rem; white-space: nowrap;} + +.tabBox{ width: 100%; margin: .1rem 0; padding-top: .1rem; overflow: hidden; background: #fff; position: relative;} +.tabBox_hd{ height: .4rem; margin: 0 .1rem;} +.tabBox_hd li{ width: 33.3%; float: left; overflow: hidden; white-space: nowrap;} +.tabBox_hd li a{ margin-top: 2px; height: .36rem; line-height: .36rem; border-bottom: 1px solid #eaeaea; display: block; text-align: center;} +.tabBox_hd li.on a{ border-left: 1px solid #eaeaea; border-right: 1px solid #eaeaea; border-bottom: 0;} +.tabBox_hd .on h2{ font-weight: bold;} +.tabBox_bd ul{ margin: 0 .1rem;} +.qh_content ul{ padding: .06rem 0 .1rem;} +.qh_content li{ height: .3rem; margin: .02rem 0; overflow: hidden;} +.qh_number{ float: left; height: .16rem; padding: .08rem .06rem .06rem 0; display: block;} +.qh_content h3{ float: left;} +.qh_content h3 span{ height: .3rem; line-height: .32rem; display: block;} +.qh_content h3 a{ width: 2.8rem; display: block; overflow: hidden; white-space: nowrap; text-overflow:ellipsis; font-size: .16rem;} +.qh_content em{ float: right;} +.qh_content em span{ max-width: .5rem; height: .3rem; line-height: .32rem; color: #999; font-size: .12rem; display: block; overflow: hidden; white-space: nowrap; text-overflow:ellipsis;} + +.tuwen{ width: 100%; margin: .1rem 0; padding-top: .1rem; background: #fff;} +.tw_tab{ height: .36rem; margin: 0 .1rem; border-bottom: 1px solid #eaeaea;} +.tw_tab h2{ min-width: 30%; margin-top: 2px; padding: 0 .07rem; height: .36rem; line-height: .36rem; border-left: 1px solid #eaeaea; border-right: 1px solid #eaeaea; background: #fff; text-align: center; display: inline-block; font-weight: bold;} +.tuwen ul{ margin: 0 .1rem;} +.tuwen li{ padding: .12rem 0; border-bottom: 1px solid #f1f1f1;} +.tw_z{ float: left; margin-top: .04rem; width: 1.3rem; height: .65rem; overflow: hidden; display: inline-block; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover; border-radius: .05rem;} +.tw_y{ float: right;} +.tw_y h3{ width: 2.15rem; height: .42rem; margin: .03rem 0; overflow: hidden; display: block;} +.tw_y h3 a{ width: 2.15rem; height: .42rem; line-height: .21rem; overflow: hidden; font-size: .16rem; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;} +.tw_y_time{ display: inline-block; max-width: 1.04rem; margin-top: .02rem; line-height: .2rem; vertical-align: top; font-size: .12rem; color: #999; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;} +.tw_y em{ float: right; max-width: 1.1rem; line-height: .23rem; overflow: hidden; display: inline-block; white-space: nowrap; text-overflow: ellipsis; text-align: right;} +.tw_y em a{ margin-right: .1rem; color: #999; font-size: .12rem;} +.tw_y .lanjiazai{ display: inline-block !important; width: .2rem; height: .2rem; margin-top: .02rem; vertical-align: top; border-radius: 50%;} + +#portal_activity{ width: 100%; margin: .1rem 0; padding-top: .1rem; background: #fff;} +.ac_hd{ height: .36rem; margin: 0 .1rem; border-bottom: 1px solid #eaeaea;} +.ac_hd h2{ width: 30%; margin-top: 2px; padding: 0 .07rem; height: .36rem; line-height: .36rem; border-left: 1px solid #eaeaea; border-right: 1px solid #eaeaea; background: #fff; text-align: center; display: inline-block; font-weight: bold; overflow: hidden; white-space: nowrap;} +.ac_hd ul{ float: right; padding-top: .12rem;} +.ac_hd li{ float:left; width: .08rem; height: .08rem; line-height: 1rem; background: #eaeaea; margin: 0 .06rem; overflow:hidden; border-radius: 50%;} +.ac_hd .lanjiazai{ width: .1rem; height: .14rem; margin: .09rem .05rem;} +.portal_activity{ position: relative;} +.portal_activity .tw_z{ width: 3.55rem; height: 1.77rem; margin: .1rem .1rem .02rem; vertical-align: middle;} +.ac_bd h3{ margin: 0 .1rem .02rem; width: 3.55rem; height: .28rem; line-height: .28rem; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: .16rem;} + +.load_more{ position: relative; width: 100%; margin: .1rem 0; overflow: hidden;} +.load_more_hidden{ display: none;} +.load_more_li{ margin-bottom: .1rem; padding: .12rem .1rem; background: #fff;} +.load_more_t{ position: relative; height: .36rem; padding-bottom: .1rem;} +.load_more_avatar{ width: .36rem; height: .36rem; border-radius: 50%;} +.load_more_author, .load_more_date{ width: 3.1rem; height: .18rem; line-height: .18rem; font-size: .12rem;} +.load_more_author a{ color: #666; line-height: .2rem;} +.load_more_date{ color: #999;} +a.load_more_from{ position: absolute; top: .06rem; right: 0; height: .2rem; line-height: .2rem; font-size: .12rem; color: #888;} +.load_more_title{ display: block; margin-bottom: .05rem; line-height: 1.4; font-size: .16rem;} +.load_more_img1 img{ margin: 0 .015rem .05rem; max-width: 3.52rem; max-height: 1.76rem; vertical-align: top;} +.load_more_img3{ width: 3.6rem; margin: 0 .015rem;} +.load_more_img3 .img_center{ width: 1.14rem; height: 1.14rem; margin: 0 .05rem .05rem 0;} +.load_more_b{ margin: .09rem 0 .01rem;} +.load_more_b span{ width: 1.17rem; height: .18rem; display: block; border-right: .01rem solid #dedede; line-height: .18rem; font-size: .12rem; color: #888; text-align: center;} +.load_more_b .lanjiazai{ display: inline-block !important; width: .17rem; height: .17rem; margin-right: .02rem; vertical-align: top;} +.load_more_b .y{ border: 0;} +.load_more_button a{ display: block; width: 100%; margin: 1px 0; padding: .1rem 0; background: #fff; color: #aebccc; text-align: center; font-size: .14rem;} +.load_more_button img{ height: .12rem; margin: .06rem .05rem; vertical-align: top;} +.load_more_button .lanjiazai{ display: inline-block !important; width: .12rem; height: .12rem; margin: .06rem .05rem; vertical-align: top;} + + +/* portal_list */ +.portal_cat{ background: #fff; position: relative;} + +.portal_cat_top{ width: 100%; height: .32rem; line-height: .18rem; padding: .06rem 0; border-bottom: 1px solid #eee; background: #fff; overflow-y: hidden; overflow-x: auto; white-space: nowrap;} +.portal_cat_top a{ width: auto; height: .2rem; margin: 0 .11rem 0 .01rem; padding: .06rem .1rem; display: inline-block; font-size: .16rem; position: relative; vertical-align: middle;} +.portal_cat_top a:last-child{ margin-right: 0;} + +.portal_cat_sub{ width: 100%; height: .24rem; padding: .1rem 0; border-bottom: 1px solid #eee; overflow-y: hidden; overflow-x: auto; white-space: nowrap;} +.portal_cat_sub span{ padding: 0 .05rem;} +.portal_cat_sub a{ width: auto; height: .22rem; line-height: .22rem; margin-right: .15rem; padding: 0 .06rem; border: 1px solid #ddd; border-radius: .02rem; font-size: .13rem; color: #888; display: inline-block;} + +.portal_list{ margin-top: .1rem; position: relative;} +.list_dl{ margin: 1px 0; padding: .12rem .1rem; background: #fff;} +.list_dl a, .list_dl span{ overflow: hidden; display: block;} +.list_dd_z a{ width: 1.3rem; height: .98rem; margin: .01rem 0; border-radius: .02rem; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover;} +.list_dt_yt a{ width: 2.15rem; height: .4rem; line-height: .2rem; font-size: .16rem;} +.list_dd_yc a{ width: 2.15rem; height: .38rem; line-height: .19rem; margin-top: .02rem; color: #999; font-size: .12rem;} +.list_dd_yb span{ width: 2.05rem; height: .18rem; line-height: .18rem; margin: .02rem .05rem 0; font-size: .12rem; color: #999; text-align: right;} + + +/* portal_view */ +.portal_content_t{ margin: .1rem 0; padding: .1rem; background: #fff; position: relative;} +.portal_content_t .title{ padding-bottom: .1rem; margin-bottom: .1rem; border-bottom: 1px solid #eee;} +.portal_content_t .title h1{ font-size: .2rem;} +.portal_content_t .title p{ padding-top: .05rem; font-size: .12rem; color: #888;} +.portal_content_t .title a{ color: #888;} +#article_content{ font-size: .18rem;} +#article_content a{ color: #06c;} +#article_content img{ max-width: 100%;} +#article_content b{ font-weight: 700;} +.atd{ margin: .25rem auto .05rem;} +.atd img{ margin-bottom: .03rem; vertical-align: top;} +.atd a{ width: .5rem; display: block; font-size: .12rem; color: #999;} +.atd td{ padding: .1rem; text-align: center; vertical-align: bottom;} +.atd .atdc{ position: relative; margin: 0 auto .1rem; width: .1rem; height: .5rem;} +.atdc div{ position: absolute; left: 0; bottom: 0; width: .1rem; text-align: left; border-radius: .02rem;} +.atd .ac1{ background: #C30;} +.atd .ac2{ background: #0C0;} +.atd .ac3{ background: #F90;} +.atd .ac4{ background: #06F;} +.atdc em{ position: absolute; margin: -.22rem 0 0 -.2rem; width: .5rem; text-align: center; white-space: nowrap;} +#click_div h3{ width: 100%; text-align: center; color: #888; font-size: .13rem;} +#trace_div ul{ width: 3.55rem; height: .6rem; overflow: hidden;} +#trace_div img{ width: .41rem; height: .41rem; margin: .09rem; border-radius: 50%; vertical-align: top;} +.portal_content_t .pren{ margin-top: .1rem;} +.portal_content_t .pren em{ width: 3.55rem; height: .3rem; line-height: .3rem; display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: .16rem;} + +.portal_content_c{ margin: .1rem; padding: .04rem .1rem; background: #fff; border-radius: .1rem;} +.portal_content_c .pcc_title{ width: 100%; height: .36rem; margin-bottom: 2px; border-bottom: 1px solid #eee;} +.portal_content_c .pcc_title h3{ height: .35rem; line-height: .36rem; font-size: .16rem; font-weight: 700; display: inline-block;} +.portal_content_c .pcc_content{ width: 100%; margin: .05rem 0; overflow: hidden;} +.portal_content_c .pcc_content li{ width: 100%; height: .3rem; line-height: .3rem; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: .16rem;} + +.portal_content_b{ margin: .1rem 0; padding: .04rem .1rem 0; background: #fff;} +.portal_content_b .pcb_title{ width: 100%; height: .36rem; margin-bottom: .15rem; border-bottom: 1px solid #eee;} +.portal_content_b .pcb_title span{ margin: 0 .05rem; line-height: .36rem; font-size: .12rem;} +.portal_content_b .pcb_title h3{ height: .35rem; line-height: .36rem; padding: 0 .1rem; font-size: .16rem; font-weight: 700; display: inline-block;} +.comment_list li{ margin-bottom: .15rem; padding-bottom: .05rem; border-bottom: 1px solid #f1f1f1;} +.comment_list .z img{ width: .36rem; height: .36rem; margin: .02rem 0; border-radius: 50%; vertical-align: top;} +.comment_list .cl div{ width: 3.1rem; height: .2rem; line-height: .2rem; font-size: .12rem;} +.comment_list .y_b{ color: #999; position: relative;} +.comment_list .y_b .y{ position: absolute; top: -.11rem; right: 0;} +.comment_list .y_b a{ height: .18rem; line-height: .18rem; margin-left: .02rem; padding: .01rem .1rem; font-size: .12rem; border: solid 1px #eee; color: #999; display: inline-block; border-radius: .02rem;} +.comment_list .y_b img{ height: .14rem; padding: .02rem 0; vertical-align: top;} +.comment_list p{ padding: .05rem 0;} + +#cform{ display: none; position: fixed; left: 0; bottom: 0; z-index: 97; width: 3.55rem; padding: .1rem; background: #fff;} +#cform .area{ position: relative;} +#cform .area textarea{ width: 3rem; height: 1.1rem; padding: .01rem; border-color: #eee; border-radius: .02rem; vertical-align: top;} +#cform .cform_off{ top: 0; bottom: auto; width: .38rem; height: .23rem; border: .01rem solid #ddd; color: #888; line-height: .23rem;} +.cform_off, #cform .area button{ position: absolute; right: 0; bottom: 0; width: .4rem; height: .25rem; display: block; line-height: .25rem; color: #fff; font-size: .12rem; text-align: center; border: 0; border-radius: .02rem;} +#cform .sec_code{ padding: 0; border: 0;} +#cform .sec_code .px{ line-height: 24px; border-radius: 2px; border-color: #eee; font-size: 12px;} + +.comment_edit{ padding: .1rem; background: #fff;} +.comment_edit textarea{ width: 100%; margin-top: .1rem; vertical-align: top; border-color: #eee;} +.comment_edit p{ margin: .05rem 1.1rem 0;} +.comment_edit button, .comment_delete button{ margin: .1rem 0; padding: .02rem .1rem;} +.comment_delete{ padding: .2rem; background: #fff; text-align: center;} +.comment_delete .c{ margin: .2rem 0; font-size: .16rem;} +.comment_delete p{ margin: 0 1rem;} + + +/* discuz */ +.forum_gg{ width: 100%; margin: .1rem 0; padding: .1rem 0; background: #fff; position: relative; overflow: hidden;} +.forum_gg_sl_bd ul{ width: 12rem;} +.forum_gg_sl_bd li{ position: relative; float: left;} +.forum_gg_sl_bd img{ width: 3.55rem; margin: 0 .1rem; border-radius: .02rem; vertical-align: top;} + +.byg_an{ width: 100%; height: .4rem; margin: 1px 0; padding: .02rem 0; background: #fff; overflow: hidden; position: relative;} +.byg_an_i{ height: 0.2rem; position: absolute; top: .13rem; left: .1rem;} +.an_li{ padding-left: .36rem; height: .4rem; line-height: .4rem; display: block;} +.an_li a{ width: 3.3rem; height: .4rem; display: inline-block; overflow: hidden; font-size: .15rem; white-space: nowrap; text-overflow:ellipsis;} +.byg_an .byg_an_ul_box{ width: 3.23rem; height: .4rem; padding-left: .36rem; line-height: .4rem; overflow: hidden;} +.byg_an .byg_an_ul_box li *{ display: block; overflow: hidden; white-space: nowrap; text-overflow:ellipsis; font-size: .15rem;} +.byg_an .byg_an_ul_box li em{ display: none;} +.byg_an .byg_an_ul_box b, .an_li b, .an_all_li b{ font-weight:700;} + +.byg_tongji{ width: 100%; height: .57rem; margin: 1px 0; background: #fff;} +.byg_tongji li{ float: left; width: 1.24rem; padding: .12rem 0; border-right: .01rem solid #f1f1f1;} +.byg_tongji div{ margin: 0 auto; display: table;} +.byg_tongji img{ float: left; width: .32rem; height: .32rem; margin-right: .02rem; display: block; vertical-align: top;} +.byg_tongji span{ float: left; height: .3rem; margin-top: .03rem; display: block; overflow: hidden;} +.byg_tongji p{ max-width: .8rem; line-height: .15rem; font-size: .12rem; color: #888; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;} + +.wm_xin{ width: 100%; margin: .1rem 0;} +.wm_xin .bm{ margin-bottom: .1rem; padding-top: .1rem; background: #fff;} +.wm_xin .bm_c{ padding: 0 .1rem;} +.bm_xin{ height: .36rem; margin: 0 .1rem; border-bottom: 1px solid #eaeaea;} +.bm_xin h2{ margin-top: 2px; min-width: 1rem; max-width: 2.9rem; height: .22rem; line-height: .22rem; padding: .07rem .1rem; border-left: 1px solid #eaeaea; border-right: 1px solid #eaeaea; background: #fff; text-align: center; font-weight: bold; white-space: nowrap; overflow: hidden; text-overflow:ellipsis;} +.bm_xin img{ float: right; width: .3rem; height: .3rem;} + +.sub_forum{ width: 100%; overflow: hidden; border: 0; border-radius: 0;} +.sub_forum li{ float: left; width: 100%; height: auto; line-height: normal; padding: .04rem 0; border-bottom: 1px solid #f1f1f1; font-size: .15rem;} +.sub_forum li:last-child{ border-bottom: 1px solid #f1f1f1;} +.sub_forum li a{ float: left; padding: 0;} +.sub_forum .forum_img{ float: left; margin: .1rem 0 .1rem .12rem; width: .4rem; height: .4rem; overflow: hidden;} +.sub_forum .forum_img img{ width: .4rem !important; height: .4rem; vertical-align: top; border-radius: .08rem;} +.sub_forum .forum_name{ float: right; width: 3.05rem; height: .2rem; line-height: .2rem; margin: .1rem .1rem .1rem 0; padding: .1rem 0; overflow: hidden;} +.forum_name .forum_names{ float: left; width: 1.9rem; height: .2rem; display: block;} +.forum_name .forum_names em{ display: none; margin-left: .02rem; font-size: .12rem; color: #f26c4f;} +.byg_forum1 .forum_name .forum_names em{ display: inline-block;} +.forum_name .forum_posts, .forum_name .forum_threads{ float: left; max-width: .52rem; height: .2rem; line-height: .22rem; color: #999; font-size: .12rem; display: block;} +.forum_name .forum_threads{ margin-right: .1rem;} +.forum_name img{ float: left; width: .14rem; height: .14rem; margin: .04rem .01rem; vertical-align: top;} + +.sub_forum.byg_forum2 ul{ width: 3.8rem;} +.sub_forum.byg_forum2 li{ width: 1.87rem;} +.sub_forum.byg_forum2 .forum_name{ width: 1.21rem; height: .4rem; margin-right: .08rem; padding: 0;} +.sub_forum.byg_forum2 .forum_names{ width: 1.18rem; margin-left: .02rem;} +.sub_forum.byg_forum2 .forum_name .y{ float: left;} +.sub_forum.byg_forum2 .forum_posts, .sub_forum.byg_forum2 .forum_threads{ max-width: .55rem;} +.sub_forum.byg_forum3 ul{ width: 3.8rem;} +.sub_forum.byg_forum3 li{ width: 1.25rem;} +.sub_forum.byg_forum3 .forum_img{ margin: .11rem 0 .03rem .42rem;} +.sub_forum.byg_forum3 .forum_name{ width: 1.05rem; margin: 0 .1rem .08rem; padding: 0;} +.sub_forum.byg_forum3 .forum_names{ width: 1.05rem; text-align: center;} +.sub_forum.byg_forum3 .forum_name .y{ display: none;} +.sub_forum.byg_forum4 ul{ width: 3.8rem;} +.sub_forum.byg_forum4 li{ width: .93rem;} +.sub_forum.byg_forum4 .forum_img{ margin: .11rem 0 .03rem .27rem;} +.sub_forum.byg_forum4 .forum_name{ width: .83rem; margin: 0 .05rem .08rem; padding: 0;} +.sub_forum.byg_forum4 .forum_names{ width: .83rem; text-align: center;} +.sub_forum.byg_forum4 .forum_name .y{ display: none;} + + +/* forumdisplay,guide */ +.header_nav_forumdisplay .portal_font_nav{ background: var(--dz-BG-color); padding: 0 0 .08rem; border: none;} +.header_nav_forumdisplay .portal_font_nav a{ color: #fff;} +.header_nav_forumdisplay .portal_font_nav .on:after{ background: #fff;} +.forumdisplay_top_bg{ background: var(--dz-BG-color); border-bottom: 1px solid #f1f1f1;} +.forumdisplay_top_bg .forumdisplay_top{ padding-top: .18rem; border-radius: 0.18rem 0.18rem 0 0; background-color: #f5f5f5;} +.forumdisplay_top_bg .forumdisplay_tongji{ margin-top: .15rem;} +.forumdisplay_top_bg .byg_bl_lang{ bottom: -8px;} +.forumdisplay_top_bg + .sub_forum li{ box-shadow: -1px 0 1px #f1f1f1;} + +.forumdisplay_top{ width: auto !important; padding: .15rem .1rem .28rem;} +.forumdisplay_top_z img{ float: left; width: .5rem; height: .5rem; margin-right: .1rem; border-radius: .1rem; vertical-align: top; box-shadow: 1px 1px 1px #888;} +.forumdisplay_top_z p{ width: 1.6rem; height: .23rem; line-height: .23rem; color: #fff; font-size: .18rem; text-shadow: 1px 1px 1px #555; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +.forumdisplay_top_y{ margin-top: .12rem;} +.forumdisplay_top_y a{ float: right; display: block; height: .2rem; line-height: .2rem; margin-left: .1rem; padding: .03rem .07rem .03rem .06rem; background: rgba(0,0,0,.3); border-radius: .05rem; color: #fff; font-size: .13rem; text-shadow: none;} +.forumdisplay_top_y img{ width: .16rem; height: .16rem; margin: .02rem .02rem 0 0; vertical-align: top;} +.forumdisplay_admin, .forumdisplay_rules{ margin-top: .1rem; padding: .06rem .1rem; background: rgba(255,255,255,0.7); border-radius: .08rem; font-size: .14rem; color: #666;} +.forumdisplay_admin a{ color: #666;} +.forumdisplay_tongji{ margin-top: .1rem; background: rgba(255,255,255,0.7); border-radius: .08rem;} +.forumdisplay_tongji li{ width: 24.99%; padding: .05rem 0; font-size: .14rem; text-align: center; color: #666;} +.forumdisplay_tongji li span{ display: block; padding: 0 .1rem; font-size: .16rem; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;} +.forumdisplay_tongji li.z p, .forumdisplay_tongji li.z span{ border-right: 1px solid #ddd;} + +.fdy_passwd_box, .fdy_pay_box{ margin: .2rem; padding: .1rem .1rem .15rem; background: #fff; border-radius: .1rem; text-align: center;} +.fdy_passwd_box h3, .fdy_pay_box h3{ font-size: .16rem; margin-bottom: .1rem; text-align: center;} +.fdy_passwd_form, .fdy_pay_form{ text-align: center;} +.fdy_passwd_form .px{ width: 2.5rem; padding: .04rem; line-height: .18rem; font-size: .16rem;} +.fdy_passwd_form button, .fdy_pay_form button{ line-height: .22rem; padding: .03rem .06rem;} + +.byg_thread_types{ width: 100%; height: .24rem; padding: .12rem 0 .12rem; border-top: 1px solid #eee; background: #fff; overflow-y: hidden; overflow-x: auto; white-space: nowrap;} +.byg_thread_types #ttp_all{ margin-left: .1rem;} +.byg_thread_types li{ width: auto; margin-right: .15rem; display: inline-block;} +.byg_thread_types li a{ width: auto; height: .22rem; line-height: .24rem; padding: 0 .06rem; border: 1px solid #ddd; border-radius: .02rem; font-size: .13rem; color: #888; display: inline-block;} +.byg_thread_types li img{ height: .16rem; margin: .03rem 0; vertical-align: top;} +.byg_thread_types li .num{ margin-left: .02rem; color: #bbb;} +.byg_thread_types .pipe{ color: #ccc;} +.byg_thread_types li:last-child{ margin-right: .11rem;} + +.byg_list_sort_on{ position: absolute; top: 1px; right: 0; height: .28rem; line-height: .28rem; background: #fcfcfc; font-size: .14rem; z-index: 10; padding: .1rem; border-left: 1px solid #eee; color: #777;} +.byg_list_sort_on img{ width: .16rem; height: .16rem; margin: .06rem .02rem 0 0; vertical-align: top;} + +.byg_list_sort{ display: none; border-bottom: 1px solid #eee; background: #fff;} +.byg_sort_font, .byg_sort_search table{ width: 100%; overflow: hidden; font-size: .14rem;} +.byg_sort_font tr, .sort_search_tr{ width: 100%; line-height: .2rem; border-top: 1px solid #eee; border-bottom: 1px solid #eee;} +.byg_sort_font th, .sort_search_th{ width: .9rem; padding: .1rem; background: #fcfcfc; color: #666;} +.byg_sort_font td, .sort_search_td{ padding: .05rem; border-left: 1px solid #eee;} +.byg_sort_font li{ float: left;} +.byg_sort_font li a{ margin: .05rem; padding: .02rem.05rem; line-height: .2rem; border: 1px solid #eee; border-radius: .04rem; display: block; background: #fff;} +.byg_sort_font .subtsm{ margin: .05rem; padding: .05rem; background: #fcfcfc; border: 1px dashed #eee; border-radius: .06rem; font-size: .12rem;} +.sort_search_td .input_text{ width: 2.2rem; height: .2rem; line-height: .2rem; margin: .05rem; padding: .02rem .05rem; border: 1px solid #eaeaea; border-radius: .04rem; vertical-align: top; font-size: .14rem; color: #444;} +.sort_search_td select{ margin: .05rem; padding: .02rem; border-color: #eaeaea; color: #444; font-size: .14rem; border-radius: .04rem;} +.sort_search_td label{ float: left; margin: .05rem; font-size: .14rem; color: #444; display: block;} +.sort_search_but{ padding: .11rem; border-top: 1px solid #eee;} +.sort_search_but button{ width: 100%; height: .4rem; line-height: .4rem; display: block; font-size: .16rem; border: 0; color: #fff; border-radius: .06rem; text-align: center;} +#date-wrapper h3{ display: block;} + +.byg_threadlist{ width: 100%; margin-top: .1rem; overflow: hidden;} +.threadlist .byg_an{ padding: .02rem 0;} +.threadlist .byg_an_i{ top: .12rem;} +.threadlist .byg_an a{ font-size: .16rem;} +.list_displayorder .bk_y2_t, .list_displayorder .bk_y2_b{ display: none;} +.list_displayorder .bk_y2_title{ margin: 0;} +.list_displayorder .bk_y2_title a{ font-size: .165rem;} +.threadlist .bk_y2_li a{ padding: 0;} +.threadlist .bk_y2_li{ padding: .1rem; background: #fff;} +.bk_y2_li.no_displayorder{ margin-top: .08rem;} +.bk_y2_t{ position: relative; height: .36rem; padding-bottom: .1rem;} +.bk_y2_avatar{ width: .36rem; height: .36rem; border-radius: 50%;} +.bk_y2_author, .bk_y2_date{ width: 3.1rem; height: .18rem; line-height: .18rem; font-size: .12rem;} +.bk_y2_li .bk_y2_author a{ font-size: .12rem; line-height: .2rem; color: #666;} +.bk_y2_date{ color: #999;} +.threadlist .bk_y2_li .bk_y2_from{ position: absolute; top: .06rem; right: 0; height: .2rem; line-height: .2rem; font-size: .12rem; color: #888;} +.bk_y2_title{ display: block; margin-bottom: .05rem; line-height: 1.4; font-size: .16rem;} +.bk_y2_title img{ vertical-align: top; height: .18rem; margin-top: .03rem;} +.bk_y2_img1 img{ margin: 0 .015rem .05rem; max-width: 3.52rem; max-height: 1.76rem; vertical-align: top;} +.bk_y2_img3{ width: 3.6rem; margin: 0 .015rem;} +.bk_y2_img3 .img_center{ width: 1.14rem; height: 1.14rem; margin: 0 .05rem .05rem 0;} +.bk_y2_b{ margin: .09rem 0 .01rem;} +.bk_y2_b span{ width: 1.17rem; height: .18rem; display: block; border-right: .01rem solid #dedede; line-height: .18rem; font-size: .12rem; color: #888; text-align: center;} +.bk_y2_b img{ width: .17rem; height: .17rem; margin-right: .02rem; vertical-align: top;} +.bk_y2_b .y{ border: 0;} + +.threadlist li{ margin: 1px 0; padding: .02rem 0; border-bottom: 0; border-top: 0; background: #fff; font-size: .17rem;} +.threadlist li a{ line-height: .23rem; padding: .1rem; font-size: .17rem;} +.threadlist .list_top{ padding: .1rem .1rem .04rem;} +.threadlist .list_top a{ max-height: .44rem; padding: 0; display: -webkit-box; letter-spacing: .004rem;} +.threadlist .list_top img{ height: .16rem; margin: .03rem 0; vertical-align: top; display: inline-block;} +.threadlist .list_typename{ height: .18rem; line-height: .18rem; margin: .03rem .02rem .02rem 0; padding: 0 .02rem; font-size: .13rem; color: #fff; border-radius: .02rem; background: #bdbdbd; font-style: normal; display: inline-block; vertical-align: top;} + +.threadlist .list_img3{ padding: .02rem 0 .05rem .1rem;} +.threadlist .list_img3 li{ float: left; margin: 0; padding: 0; border: 0;} +.threadlist .list_img3 a{ float: left; width: 1.15rem; height: .76rem; margin-right: .05rem; padding: 0; border-radius: .04rem; overflow: hidden; display: block; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover;} + +.list_bottom{ height: .22rem; line-height: .22rem; margin: 0 .12rem .1rem .1rem; overflow: hidden;} +.list_bottom .z{ padding: 0; font-size: .12rem; color: #888;} +.list_bottom em.z{ color: #999;} +.list_bottom .z img{ width: .18rem; height: .18rem; padding: .02rem .02rem .02rem 0; vertical-align: top; border-radius: 50%;} +.list_bottom .y{ font-size: .12rem; color: #999;} +.list_bottom .y img{ width: .14rem; height: .14rem; padding: .04rem .01rem; vertical-align: top;} +.list_bottom .z.jinghua_icon img{ width: auto; height: .14rem; margin: .04rem .02rem 0 0; padding: 0; border-radius: 0;} + +.byg_sorttemplate_box{ width: 3.81rem; margin-bottom: .06rem; background: #fff;} +.byg_sorttemplate{ padding: .1rem 0 0 .1rem;} +.sort_list_box{ float: left; width: 1.7rem; margin: 0 .15rem .15rem 0; box-shadow: 0 0 2px -1px #999;} +.sort_list_box .img_center{ width: 100%; height: 1rem;} +.sort_list_tit{ width: 1.6rem; height: .2rem; line-height: .2rem; padding: .05rem; border-top: 1px solid #f5f5f5; display: block; font-size: .16rem;} +.sort_list_count{ width: 1.65rem; height: .2rem; margin: 0 0 .05rem; padding-left: .05rem; overflow: hidden;} +.sort_list_count span{ line-height: .2rem; padding-right: .09rem; font-size: .12rem; color: #999;} +.sort_list_count img{ width: .14rem; height: .14rem; margin: .03rem .01rem; vertical-align: top;} +.sort_list_b{ width: 1.6rem; height: .18rem; line-height: .18rem; padding: .05rem .05rem .06rem; overflow: hidden; border-top: 1px solid #f5f5f5;} +.sort_list_name{ display: block; font-size: .12rem;} +.sort_list_name a{ max-width: .7rem; height: .18rem; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.sort_list_b img{ width: .18rem; height: .18rem; margin-right: 2px; border-radius: 50%; vertical-align: top;} +.sort_list_date{ max-width: .68rem; height: .18rem; display: block; font-size: .12rem; color: #888;} + + +/* viewthread */ +.postlist{ background: #fff;} +.postlist h2{ width: 3.55rem; padding: .1rem; margin: 0; border-bottom: 1px solid #f1f1f1; font-size: .2rem;} +.postlist .plc h2{ padding: 0; border: 0; font-size: .16rem;} +.plc{ border-bottom: 1px solid #f1f1f1; background: #fff;} +.plc .pi{ margin: 0; padding: .1rem;} +.plc .avatar{ left: .1rem; top: .1rem;} +.plc .avatar img{ width: .36rem; height: .36rem; border: 0; padding: 0; border-radius: 50%; vertical-align: top;} +.plc .pi .authi{ margin-left: .41rem; margin-bottom: .1rem; font-size: .12rem;} +.plc .pi .authi li{ line-height: .19rem;} +.plc .pi .authi li em{ float: none;} +.plc .pi .authi li em.post_number{ float: right;} +.plc .pi .authi li em sup{ vertical-align: top;} +.plc .pi .authi li.rela em{ float: right;} +a.threadlist_usergroup{ display: inline-block; vertical-align: top; margin: .01rem .02rem; padding: 0 .03rem; height: .16rem; line-height: .17rem; border-radius: .02rem; font-size: .12rem; color: #fff; background: #ff9800;} +.threadlist_usergroup font{ color: #fff;} +.no_post_first.plc{ border-bottom: 5px solid #f1f1f1;} +.no_post_first.plc .avatar img{ width: .26rem; height: .26rem;} +.no_post_first.plc .pi .authi{ margin-left: .3rem;} +.no_post_first.plc .pi .authi li{ padding: .04rem 0;} +.byg_post_views{ float: right;} +.byg_post_views img{ width: .14rem; height: .14rem; margin: .02rem .02rem 0 0; vertical-align: top;} +.message a, .message a:link, .message a:visited{ color: #06c;} +.message a.byg_attach_name{ word-break: break-all;} +.plc .pi .message{ font-size: .17rem;} +.plc .pi .message .xg1, .plc .pi .message .xg2, .byg_quote{ font-size: .14rem;} +.plc .pi .message .locked{ font-size: .16rem;} +.byg_fufei_jilu{ font-size: .16rem;} +.plc .pi .message .showhide h4{ font-size: .16rem; text-align: center; color: #F66;} +.plc .pi .message .quote{ padding: .08rem 0 .08rem 16px; margin: .04rem 0; border: 1px dashed #eee; font-size: .14rem;} +.plc .pi .message .quote + br, .plc .pi .message i.pstatus + br, .plc .pi .message i.pstatus + br + br{ display: none;} +.plc .pi .message img, .plc .pi .img_one img{ margin: 4px 0; max-width: 100%; max-height: 100%; vertical-align: middle;} +.plc .pi .message i.pstatus{ margin: .04rem 0; display: block; font-size: .14rem; text-align: center; color: #999;} +.plc .pi .img_list{ margin: 0 auto;} +.plc .pi .img_list li{ width: auto; height: auto; margin: 4px 0; overflow: hidden; line-height: normal;} +.plc .pi .img_list li img{ max-width: 100%;} +.postalbum_h_back, .postalbum_h_picnum{ width: auto !important; height: 44px !important;} +.message input[type=button], .message input[type=submit], .message input[type=file], .message button{ padding: .01rem .06rem;} +.message .media{ width: auto !important; height: auto !important;} +.message .blockcode{ padding: .05rem .05rem .05rem .22rem; margin: .05rem 0; border: 1px dashed #eee; background: #ffe repeat-y 0 0; background-image: linear-gradient(90deg, #eee, #eee); background-size: .32rem; overflow: hidden;} +.message .blockcode ol{ margin: 0 0 0 .1rem;} +.message .blockcode ol li{ padding-left: .1rem; list-style-type: decimal-leading-zero; font-family: Monaco,Consolas,'Lucida Console','Courier New',serif; font-size: .12rem; line-height: 1.8em;} + +.attach_nopermission{ margin: .1rem 0; width: 100%; border: 1px dashed #eee; background: #ffe; font-size: .12rem;} +.attach_nopermission div{ padding: .08rem .1rem;} +.attach_nopermission h3 strong{ color: #8CA226; font-size: .15rem; display:block; margin-bottom: .1rem;} + +.byg_view_replycredit{ margin: .1rem 0; padding: .08rem .1rem; border: 1px dashed #eee; background: #ffe; border-radius: .02rem; font-size: .15rem; color: #F26C4F;} +.byg_view_replycredit .xg1{ display: block;} + +.byg_attach, .plc .pi .message .locked, .byg_fufei_jilu, .plc .pi .message .showhide, .byg_quote, .byg_poll, .byg_trade, .byg_reward, .byg_activity, .byg_activityjoin, .byg_activitycancel, .byg_debate{ margin: .1rem 0; padding: .1rem; border: 1px dashed #eee; background: #ffe; border-radius: .02rem;} + +.byg_sort_table{ table-layout: fixed; width: 100%; margin: .1rem 0; border: 1px solid #eee; font-size: .16rem;} +.byg_sort_table caption{ padding: 0 .06rem; font-size: .16rem; font-weight: 700; line-height: .36rem; background: #f1f1f1;} +.byg_sort_table tr{ width: 100%; line-height: .2rem; border: 1px solid #eee;} +.byg_sort_table th{ width: 1rem; padding: .08rem .06rem; background: #fafafa; border: 1px solid #eee;} +.byg_sort_table td{ padding: .06rem; border: 1px solid #eee;} + +.message .sort_view_box{ margin: .1rem 0; border: 1px solid #eee; border-bottom: 0; font-size: .16rem;} +.message .sort_view_z{ float: none; width: auto; margin: 0;} +.message .sort_view_z img{ margin: 0 auto !important; display: block;} +.message .sort_view_y{ border-top: 1px solid #eee; float: none; width: auto; border: 0; font-size: .16rem;} +.message .sort_view_y dt, .message .sort_view_y dd{ height: .2rem; line-height: .2rem; padding: .1rem; border-bottom: 1px solid #eee; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.message .sort_view_y dt{ float: left; width: 1.32rem; background: #fafafa;} +.message .sort_view_y dd{ float: right; width: 1.8rem;} + +.reply_xin{ margin-top: .1rem;} +.reply_xin a{ float: right; height: .2rem; line-height: .2rem; margin: 0 0 .05rem .08rem; padding: 0 .05rem; font-size: 12px; border: 1px solid #eee; color: #aaa; border-radius: .02rem;} +.reply_xin img{ height: .14rem; padding: .03rem 0; vertical-align: top;} +.reply_xin_dateline{ float: left; line-height: .22rem; font-size: .12rem; color: #999;} +.reply_xin .byg_post_tag a{ float: left; margin: 0 .03rem .05rem 0; border-radius: .11rem;} +.reply_xin .byg_post_tag img{ float: left; margin-right: .02rem; padding: .04rem 0;} + +.relateitem{ padding: .1rem .08rem 0; border-bottom: 1px solid #eee; background: #f1f1f1;} +.relate_thread{ margin: 0 0 .1rem; padding: .02rem .09rem 0; background: #fff; border-radius: .1rem;} +.relate_thread_h3{ width: 100%; height: .4rem; border-bottom: 1px solid #eee;} +.relate_thread_h3 h3{ height: .38rem; line-height: .38rem; font-size: .16rem; font-weight: 700; display: inline-block;} +.relate_thread_li{ padding: .1rem 0; border-bottom: 1px solid #f1f1f1;} +.relate_thread li:last-child{ border: 0;} +.relate_thread_tit a{ width: 100%; max-height: .52rem; line-height: .26rem; font-size: .17rem;} +.relate_thread_li .list_img3{ width: 3.5rem; margin: .04rem 0 .02rem;} +.relate_thread_li .list_img3 a{ float: left; width: 1.1rem; height: .7rem; margin-right: .05rem; padding: 0; border-radius: .04rem; overflow: hidden; display: block; background-position: center center; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover;} +.relate_thread_b{ width: 100%; height: .22rem; line-height: .22rem; font-size: .12rem; color: #999;} +.relate_thread_b .z{ margin-right: .1rem;} +.relate_thread_b a{ color: #999;} +.relate_thread_b .y{ margin-right: .01rem;} +.relate_thread_more{ display: none; line-height: .4rem; text-align: center; color: #06c; font-size: .14rem;} + +.postlist_title{ width: 3.55rem; height: .36rem; line-height: .36rem; margin-bottom: 2px; padding: .04rem .1rem; border-bottom: 1px solid #eee; background: #fff;} +.postlist_title div a{ margin-left: .1rem; font-size: .12rem;} +.postlist_title h3{ float: left; height: .36rem; font-size: .16rem; font-weight: 700; display: block; position: relative;} +.no_reply{ background: #fff;} +.no_reply img{ width: 2.34rem; padding: .2rem .6rem; vertical-align: top;} + +.plc_xin{ display: none; position: fixed; left: 0; bottom: 0; z-index: 97; width: 100%; background: #fff;} +.plc.plc_xin .pi{ margin: 0;} +.plc_xin textarea{ width: 3rem; height: 1.1rem; padding: .01rem; border-color: #eee; border-radius: .02rem; vertical-align: top;} +.plc_xin .sec_code{ padding: .1rem 0 0; border: 0;} +.plc_xin .sec_code .px{ line-height: 24px; border-radius: 2px; border-color: #eee; font-size: 12px;} +.plc_xin .reply_y{ position: absolute; right: 0; top: 0; width: .38rem; height: .23rem; display: block; line-height: .23rem; color: #888; font-size: .12rem; text-align: center; border: .01rem solid #ddd; border-radius: .02rem;} +.plc_xin li .reply_y_c{ top: .45rem;} + +#attachpayform, #payform, .byg_pay_view{ padding: .1rem .1rem .15rem; background: #fff;} +#attachpayform h3, #payform h3, .byg_pay_view h3{ padding-bottom: .08rem; display: block; font-size: .18rem; font-weight: 700;} +#attachpayform .byg_c table, #payform .byg_c table, .byg_pay_view .byg_c table{ width: 100%;} +#attachpayform .byg_c tr, #payform .byg_c tr, .byg_pay_view .byg_c tr{ line-height: .22rem;} +#attachpayform .byg_c tr th, #payform .byg_c tr th, .byg_pay_view .byg_c tr th, #attachpayform .byg_c tr td, #payform .byg_c tr td, .byg_pay_view .byg_c tr td{ padding: .08rem; min-width: .8rem; border: 1px solid #f1f1f1;} +#attachpayform .byg_o, #payform .byg_o{ margin-top: .1rem;} +#attachpayform .byg_o label, #attachpayform .byg_o button{ margin-right: .1rem;} +.byg_viewpay{ margin-left: .1rem;} + +.byg_pinf{ margin-bottom: .1rem; color: #888; font-size: .14rem;} +.byg_pinf strong{ color: #555; font-size: .16rem;} +.byg_ptmr{ margin: -.1rem 0 .1rem; font-size: .14rem;} +.byg_pcht_font{ margin-bottom: .1rem; padding-top: .08rem; border-top: 1px dashed #ddd; font-size: .16rem;} +.byg_pcht_img{ margin: .06rem 0 .04rem !important; display: block !important;} +.pcht_font_b{ line-height: .2rem; font-size: .14rem;} +.pcht_font_b .pbg{ float: left; width: 50%; height: .1rem; margin: .05rem .05rem .05rem 0; border-radius: 0 .05rem .05rem 0; background: #f1f1f1;} +.pcht_font_b .pbr{ height: .1rem; border-radius: 0 .05rem .05rem 0;} +.byg_pcht_b{ padding: .1rem 0 .02rem; border-top: 1px dashed #ddd; font-size: .16rem;} +.byg_pcht_b .xg2{ font-size: .13rem !important;} + +.byg_trade_t{ margin-bottom: .1rem;} +.byg_trade_t em{ font-weight: 700; color: #555;} +.byg_trade_t span{ float: right; margin-top: .03rem; font-size: .14rem; color: #888;} +.byg_trade_c{ margin-bottom: .1rem; padding-top: .1rem; border-top: 1px dashed #ddd; font-size: .16rem;} +.byg_trade_c h4{ font-size: .16rem;} +.byg_trade_c_b strong{ color: #f30;} +.byg_trade_b{ padding-top: .1rem; border-top: 1px dashed #ddd;} + +.byg_reward_t strong{ color: #f30;} +.byg_reward_t .xi1{ margin-left: .05rem; font-size: .16rem; color: #666;} +.byg_reward_b{ margin-top: .05rem;} +.byg_reward_b span{ margin-left: .02rem; font-size: .14rem; color: #999;} +.byg_reward_good{ margin: .1rem 0; border: 1px solid #eee; font-size: .16rem;} +.byg_reward_good .pstl{ padding: .1rem;} +.byg_reward_good .psta{ float: left;} +.byg_reward_good .psta img{ width: .4rem; height: .4rem; border-radius: 50%;} +.byg_reward_good .psti{ float: right; width: 2.85rem;} +.byg_reward_good .psti_p{ line-height: .2rem; padding: .1rem 0; font-size: .14rem;} +.byg_reward_good .psti_p_y{ margin-left: .1rem; padding: 0 .06rem; display: inline-block; color: #888; border: 1px solid #eee; border-radius: 2px; background: #fafafa; font-size: .13rem;} +.byg_reward_good .psti .mtn{ padding-top: .1rem; border-top: 1px solid #eee;} + +.byg_reward_good .psth, .byg_activitylist_t, .byg_debate_result_t{ height: .36rem; line-height: .36rem; font-size: .16rem; background: #f1f1f1; text-align: center; display: block;} + +.byg_activity .activity_img{ margin: .02rem 0 .12rem 0 !important;} +.byg_activity dt{ margin-bottom: .1rem; padding-top: .1rem; border-top: 1px dashed #ddd; font-size: .16rem;} +.byg_activity .activity_mod{ margin-left: .02rem; font-size: .14rem; color: #999;} +.byg_activityjoin, .byg_activitycancel{ font-size: .16rem;} +.byg_activityjoin_t, .byg_activitycancel_t{ margin-bottom: .1rem; font-size: .16rem; font-weight: 700;} +.byg_activitylist{ margin: .1rem 0; font-size: .16rem;} +.byg_activitylist table{ width: 100%; border: 1px solid #eee;} +.byg_activitylist tr{ line-height: .2rem; border: 1px solid #eee;} +.byg_activitylist th, .byg_activitylist td{ padding: .06rem; text-align: center; border: 1px solid #eee;} + +.byg_debate_c{ margin: .12rem 0 .1rem; padding: .1rem 0 .12rem; border-top: 1px dashed #ddd; border-bottom: 1px dashed #ddd;} +.byg_debate_b{ font-size: .14rem; color: #888;} +.byg_debate_result{ margin: .1rem 0; border: 1px solid #eee; font-size: .16rem;} +.byg_debate_result p{ padding: .1rem; border-top: 1px solid #eee;} + +.byg_viewthread_ratelog{ margin: .2rem 0; padding: .1rem; border: 1px dashed #eee; background: #ffe; border-radius: .1rem; position: relative;} +.byg_viewthread_ratelog h3 img{ width: .16rem; height: .16rem; vertical-align: top; margin: .04rem .04rem 0 0;} +.byg_viewthread_ratelog_ul{ width: 2.7rem; height: .3rem; overflow: hidden;} +.byg_viewthread_ratelog_ul li{ margin-right: .08rem;} +.byg_viewthread_ratelog_ul li img{ width: .3rem; height: .3rem; border-radius: 50%; vertical-align: top;} +.byg_viewthread_ratelog a.byg_ratelog_viewall{ position: absolute; right: .1rem; top: .5rem; font-size: .12rem; display: block; border: 1px solid #eee; background: #fff; padding: .01rem .06rem; border-radius: .12rem; color: #aaa;} +.no_post_first .byg_viewthread_ratelog{ margin: .1rem 0;} + +.byg_vtl_rec_box{ text-align: center; margin: .2rem 0;} +.byg_vtl_rec_box .byg_vtl_rec{ margin: 0 .04rem; height: .18rem; line-height: .18rem; display: inline-block; background: #f1f6ff; padding: .07rem .08rem; border-radius: .04rem; font-size: .14rem; color: #888; border: 1px solid #f2f2f2;} +.byg_vtl_rec img{ height: .18rem; vertical-align: top;} +.byg_vtl_rec span{ margin-left: .01rem; font-size: .12rem; color: #aaa;} + +.byg_ratelog_all_t{ padding: .1rem .12rem; background: #fff;} +.byg_ratelog_all_t span{ color: #f26c4f;} +.byg_ratelog_all_t em{ font-size: .14rem; color: #999;} +.byg_ratelog_all_b{ margin: .1rem 0; padding: 0 .1rem; background: #fff;} +.byg_ratelog_all_b li{ padding: .1rem 0; border-bottom: 1px solid #f1f1f1;} +.byg_ratelog_all_bz{} +.byg_ratelog_all_bz img{ width: .4rem; height: .4rem; vertical-align: top; border-radius: 50%;} +.byg_ratelog_all_by{ width: 3.06rem; line-height: .18rem; padding-top: .01rem; font-size: .15rem;} +.byg_ratelog_all_byt{} +.byg_ratelog_all_byt a{} +.byg_ratelog_all_byt span{ font-size: .12rem; color: #999;} +.byg_ratelog_all_byb{ margin-top: .03rem; font-size: .13rem; color: #888;} +.byg_ratelog_all_byb span{ color: #f26c4f; margin-right: .1rem;} + +.viewthread_signature{ margin: .1rem 0; padding: .16rem 0 .08rem 0; border-top: 1px dashed #eee; border-bottom: 1px dashed #eee; font-size: .14rem; overflow: hidden; color: #999;} +.viewthread_signature::before{ content: "SIGNATURE"; float: left; margin-top: -.18rem; margin-left: -.1rem; color: #7FCCE5; transform: scale(0.75); letter-spacing: .02rem; font-size: .12rem; height: .16rem;} +.viewthread_signature img{ max-width: 100%;} + + +/* post */ +.newthread_type_tab{ width: 100%; height: .32rem; line-height: .2rem; margin-bottom: .1rem; padding: .06rem 0; background: #fff; border-bottom: 1px solid #eee; overflow-y: hidden; overflow-x: auto; white-space: nowrap;} +.newthread_type_tab a{ width: auto; height: .2rem; margin: 0 .11rem 0 .01rem; padding: .06rem .1rem; display: inline-block; font-size: .16rem; position: relative; vertical-align: middle;} +.newthread_type_tab a:last-child{ margin-right: 0;} + +.post_msg_from, .post_from{ background: #fff;} +.post_msg_from li, .post_from li{ padding: .1rem; line-height: .28rem; font-size: .16rem;} +.bl_line{ border-bottom: 1px solid #eaeaea;} +.post_msg_from .px, .post_from .px{ height: .28rem; line-height: .28rem; background: #fff; font-size: .16rem; border: none; border-radius: .05rem; text-indent: .05rem;} +.post_msg_from textarea, .post_from textarea{ width: 96%; height: 2rem; padding: .02rem 2%; box-shadow: 0 0 0 1px #eee; color: #444; vertical-align: top; font-size: .16rem; border-radius: .06rem;} +.post_from .sort_sel{ font-size: .16rem; text-indent: .02rem;} +.sec_code{ border-bottom: 1px solid #ddd;} +.publish{ padding: .11rem;} +.publish .btn_pn{ width: 100%; height: .4rem; line-height: .4rem; border-radius: .06rem; font-size: .16rem; display: block; text-align: center;} +.publish_t{ border-top: 1px solid #ddd;} + +.post_from .byg_post_sort{ padding: 0; border-bottom: 1px solid #ddd; background: #fff;} +.byg_post_sort table{ width: 100%; overflow: hidden; font-size: .14rem;} +.byg_post_sort tr{ width: 100%; line-height: .2rem; border-bottom: 1px solid #eee;} +.byg_post_sort th{ width: .9rem; padding: .1rem; background: #fcfcfc; color: #666;} +.byg_post_sort .byg_td1{ padding: .05rem; border-left: 1px solid #eee;} +.byg_post_sort .byg_td2{ width: .7rem; padding: .1rem; color: #999; font-size: .13rem;} +.byg_post_sort .psi_ipt{ width: 1rem; opacity: 0;} +.byg_post_sort .input_text{ width: 1.4rem; height: .2rem; line-height: .2rem; margin: .05rem; padding: .02rem .05rem; border: 1px solid #eaeaea; border-radius: .04rem; vertical-align: top; font-size: .14rem; color: #444;} +.byg_post_sort .input_textarea_box{ padding: .05rem;} +.byg_post_sort .input_textarea{ height: .5rem; font-size: .14rem;} +.byg_post_sort .input_radio_box li{ padding: 0; line-height: .2rem;} +.byg_post_sort label{ float: left; margin: .05rem; font-size: .14rem; color: #444; display: block;} +.byg_post_sort select{ margin: .05rem; padding: .02rem; border-color: #eaeaea; color: #444; font-size: .14rem; border-radius: .04rem;} +.post_sort_img_btn{ position: relative; margin: .05rem; height: .24rem;} +.post_sort_img_btn .psi_ipt{ position: absolute; top: 0; left: 0; z-index: 2; width: .66rem; height: .24rem; opacity: 0;} +.byg_post_sort .post_sort_img{ margin: .05rem;} +.byg_post_sort .post_sort_img img{ max-width: 100%; vertical-align: top;} + +.face_button{ float: left;} +.face_button img{ width: .22rem; height: .22rem; margin: .05rem .1rem; vertical-align: top;} +.post_from .face_box{ padding: .05rem .07rem;} +#face_box{ margin:0 auto; width: 100%; clear: both;} +.home_face img{ float: left; width: .2rem; height: .2rem; margin: .05rem; display: block; text-align: center;} + +.post_footer{ padding-top: .6rem;} +.post_fixed{ width: 100%; height: .3rem; padding: .1rem 0; background: #fff; border-top: 1px solid #ddd; position: fixed; left: 0; bottom: 0; z-index: 95;} +.post_fixed a{ position: relative; float: left; margin-left: .04rem;} +.post_fixed a img{ width: .24rem; height: .24rem; margin: .03rem .1rem; vertical-align: top;} +.post_fixed a span{ position: absolute; top: 0; left: .28rem; display: block; max-width: .25rem; height: .16rem; padding: 0 .04rem; line-height: .16rem; background: #ed4040; font-size: .12rem; color: #fff; border-radius: .08rem; overflow: hidden;} +.post_fixed .post_avatar{ margin-left: .1rem;} +.post_fixed .post_avatar img{ width: .26rem; height: .26rem; margin: .02rem; border-radius: 50%;} +.post_fixed .post_edit{ width: 1.6rem; height: .28rem; line-height: .28rem; margin: 0 .12rem 0 .05rem; padding-left: .1rem; border: .01rem solid #eaeaea; color: #aaa; font-size: 12px; border-radius: .2rem;} + +.portal_content_b .post_fixed .post_edit{ width: 1.9rem; margin: 0 0 0 .06rem} +.portal_content_b .post_fixed .post_sidenav{ margin-left: .1rem;} +.portal_content_b .post_fixed .post_favorite{ margin-left: .08rem;} +.portal_content_b .post_fixed .post_return{ margin-left: .08rem;} +.portal_content_b .post_fixed a img{ width: .3rem; height: .3rem; margin: 0;} + +.fast_post{ width: 100%; height: 6rem; background: #fff;} +.fast_post ul{ height: 100%;} +.fast_post li{ float: left; width: 1.2rem; height: 100%; overflow-x: hidden; overflow-y: auto;} +.fast_post #block_group{ background: #f7f7f7;} +#block_group .over_one{ width: 1rem; height: .3rem; line-height: .3rem; padding: .1rem; display: block; font-size: .16rem; border-bottom: 1px solid #eee;} +#block_group .pbls a{ background: #fff; font-weight: 700;} +.fast_post #block_forum{ width: 2.34rem; padding: 0 .1rem;} +#block_forum p{ padding: .12rem 0; border-bottom: 1px solid #eee;} +#block_forum img{ width: .4rem; height: .4rem; vertical-align: top; border-radius: .08rem;} +#block_forum .over_one{ float: right; width: 1.65rem; height: .4rem; line-height: .4rem; padding-right: .2rem; display: block; font-size: .16rem;} +#block_forum .fast_post_subforum{ width: 2.03rem; margin-left: .2rem; padding: .12rem 0 .12rem .1rem; border-left: 1px solid #eee;} +#block_forum .fast_post_subforum .over_one{ width: 1.35rem;} + + +/* home */ +#uhd .user_avatar{ position: absolute; top: .1rem; left: 0; z-index: 10; width: 100%; margin: 0;} +.user_avatar{ margin: 0;} +.user_avatar .avatar_m{ position: relative; width: .8rem; height: .8rem; margin: 0 auto; border-radius: 50%; overflow: hidden; box-shadow: .01rem .02rem .02rem rgba(0, 0, 0, 0.3);} +.user_avatar .avatar_m img{ width: .8rem; height: .8rem; border: 0; vertical-align: top;} +.user_avatar .avatar_m span{ position: absolute; bottom: 0; left: 0; display: block; width: 100%; padding: .01rem 0 .08rem .01rem; text-align: center; background: rgba(0,0,0,.3); color: #eee; font-size: .12rem; letter-spacing: .01rem;} +.user_avatar .name{ display: block; line-height: .3rem; text-align: center; color: #fff; text-shadow: .01rem .01rem .01rem #000;} +.user_avatar .home_user_group{ display: inline-block; padding: .02rem .06rem; background: rgba(0,0,0,.3); border-radius: .04rem; color: #fff; font-size: .12rem;} +.user_avatar .home_user_group font{ color: #fff;} + +.myinfo_sige_ul{ margin: .1rem .09rem .1rem .1rem; border-radius: .08rem; overflow: hidden; background: #fff;} +.myinfo_sige_ul li{ position: relative; float: left; width: 24.99%;} +.myinfo_sige_ul a{ display: block; padding: .12rem 0; text-align: center; border-right: 1px solid #f1f1f1; border-bottom: 1px solid #f1f1f1;} +.myinfo_sige_ul img{ display: block !important; height: .26rem; margin: 0 auto;} +.myinfo_sige_ul p{ font-size: .15rem;} +.myinfo_sige_ul .new_pm{ position: absolute; top: .12rem; left: .25rem; width: .06rem; height: .06rem; border-radius: 50%;} + +.myinfo_list{ width: 3.55rem; margin: .1rem; border-radius: .08rem; overflow: hidden; background: #fff;} +.myinfo_list li{ width: 100%; background: #fff; height: auto; margin: 0; padding: .12rem 0; border-bottom: 1px solid #f1f1f1;} +.myinfo_list li a{ display: block; margin: 0 .15rem; height: .3rem; line-height: .3rem; text-align: left; font-size: .16rem;} +.myinfo_list li img{ height: .26rem; margin: .02rem .04rem .02rem 0; vertical-align: top;} +.myinfo_list li .myinfo_list_jinru{ float: right; width: .16rem; height: .16rem; margin: .07rem 0;} + +.coll_list{ margin: 0; padding: 0; border: 0; border-radius: 0;} +.coll_list li{ border-bottom: 1px solid #f1f1f1;} +.pmbox li{ height: 52px; background: #fff;} +.pmbox li .avatar_img img{ height: 32px; width: 32px;} +.msgbox.b_m img{ max-width: 100% !important;} +.my_threadlist.threadlist li a{ padding: 10px; line-height: 25px;} +.user_box{ border: 0; border-radius: 0; margin: 0;} +.user_box li{ line-height: 30px; border-bottom: 1px solid #eee; padding: 15px 20px; font-size: 16px; font-weight: 400;} +.btn_exit a{ width: 290px; margin: 10px auto; line-height: 41px; color: #fff; text-align: center; font-size: .18rem;} + +.post_notice_list li{ padding: .12rem .1rem; border-bottom: 1px solid #eee; background: #fff;} +.post_notice_list_z{ float: left;} +.post_notice_list_z img{ vertical-align: top; width: .4rem; height: .4rem; border-radius: 50%;} +.post_notice_list_yt, .post_notice_list_yb{ float: right; width: 3.05rem; font-size: .15rem; color: #999 !important;} +.post_notice_list_yt span a:first-child{ display: none;} +.post_notice_list_yt .lit{ font-weight: 700;} +.post_notice_list_yb, .post_notice_list_yt i{ font-size: .12rem;} + +.home_no_data{ margin: .1rem 0; padding: .1rem; background: #fff; text-align: center; font-size: .16rem; color: #999;} + + +/* search */ +.forumdisplay_tab{ width: 100%; height: .32rem; line-height: .2rem; margin-bottom: .1rem; padding: .06rem 0; background: #fff; border-bottom: 1px solid #eee; overflow-y: hidden; overflow-x: auto; white-space: nowrap;} +.forumdisplay_tab a{ width: auto; height: .2rem; margin: 0 .09rem 0 .01rem; padding: .06rem .1rem; display: inline-block; font-size: .16rem; position: relative; vertical-align: middle;} +.forumdisplay_tab a h2{ font-size: .16rem;} +.forumdisplay_tab a:last-child{ margin-right: 0;} + +.search{ padding: .2rem .1rem; background: #fff;} +.search .input{ margin: 0; border-radius: .02rem; height: .34rem; line-height: .34rem; vertical-align: top; text-indent: .1rem; border: .01rem solid #ddd;} +.search .scbar_btn_td{ width: .6rem;} +.search .button2{ width: .5rem; margin: 0; height: .36rem; line-height: .36rem; font-size: .14rem; vertical-align: top;} +.scbar_hot{ padding: 0 .1rem .1rem; background: #fff; font-size: .14rem;} +.scbar_hot span{ float: left; height: .25rem; margin: .05rem; line-height: .25rem; font-size: .15rem; font-weight: 700;} +.scbar_hot a{ float: left; height: .25rem; margin: .05rem; padding: 0 .08rem; line-height: .25rem; background: #f7f7f7; display: block; border-radius: .02rem; font-size: .14rem;} +.threadlist .thread_tit{ margin: .05rem 0; padding: 0 .1rem; border: 0; line-height: .3rem; font-size: .15rem; color: #888;} +.threadlist .thread_tit a{ color: #06c;} +.threadlist .threadlist_search .list_top a{ font-size: .16rem;} + + +/* member */ +.loginbox{ margin: .1rem; padding: .1rem; border-radius: .1rem;} +.login_from{ background: transparent; border-radius: 0; border: 0; margin-bottom: .1rem;} +.login_from li{ line-height: .45rem; margin-bottom: .1rem; padding: 0; background: #fff; border: 0; font-size: .16rem;} +.login_from .p_fre{ width: 3.15rem !important; line-height: .25rem; padding: .1rem; border: 0; font-size: .16rem;} +.login_select .login-btn-inner{ padding: 0 .1rem; font-size: .16rem; font-weight: 400; color: #999;} +.login_select .icon-arrow{ background: #fff;} +.login_from > p, .login_from form > p{ margin: .1rem 0; padding: .1rem; background: #fff; font-size: .16rem; line-height: .3rem; color: #999;} +.login_from > p .xg2, .login_from form > p .xg2{ vertical-align: top;} +.login_from > p input, .login_from form > p input{ border: 1px solid #ddd;} +.login_from .sec_code{ margin: .1rem 0; padding: .1rem .05rem; border: 0; background: #fff;} +.login_from .sec_code .px{ height: .2rem; line-height: .2rem; padding: .05rem; border: 0; font-size: .16rem;} +.btn_login, .btn_register, .reg_link, .btn_qqlogin{ margin: .1rem 0;} +.btn_login .pn, .btn_register .pn{ width: 100%; height: .45rem; line-height: .45rem; font-size: .18rem; font-weight: 400;} +.loginbox .reg_link a{ width: 3.33rem; height: .45rem; padding: 0; line-height: .45rem; display: block; border: .01rem solid #ddd; border-radius: 2px; background: #fff; color: #888; text-align: center; font-size: .18rem;} +.btn_qqlogin a, .btn_qqlogin a:hover{ width: 100%; height: .45rem; background: #09a3dc; line-height: .45rem; color: #fff; text-align: center; border-radius: 2px; font-size: .18rem;} + +.byg_reg_getpassword a{ font-size: .14rem; color: #555;} +.byg_getpassword_pop{ display: none; position: fixed; top: 1rem; left: .2rem; z-index: 97; width: 3.35rem; border-radius: .1rem; background: #f1f1f1;} +.byg_getpassword_c{ padding: .2rem .07rem;} +.byg_getpassword_c .px{ display: inline-block; width: 2.75rem; line-height: .25rem; margin: 0 0 .15rem .07rem; padding: .1rem; border: 0; font-size: .16rem; background: #fff;} +.byg_getpassword_c button{ margin-left: .14rem; width: 2.95rem; height: .45rem; line-height: .45rem; font-size: .18rem; font-weight: 400;} diff --git a/template/bygsjw_sj/image/swiper.jquery.min.js b/template/bygsjw_sj/image/swiper.jquery.min.js new file mode 100644 index 0000000..7f756fc --- /dev/null +++ b/template/bygsjw_sj/image/swiper.jquery.min.js @@ -0,0 +1,13 @@ +/** + * Swiper 4.5.0 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: February 22, 2019 + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Swiper=t()}(this,function(){"use strict";var f="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,J="undefined"==typeof window?{document:f,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,l=function(e){for(var t=0;t")){var o="div";for(0===n.indexOf(":~]/)?(t||f).querySelectorAll(e.trim()):[f.getElementById(e.trim().split("#")[1])],i=0;ia.slides.length)break;i.push(a.slides.eq(r)[0])}else i.push(a.slides.eq(a.activeIndex)[0]);for(t=0;t=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(n),i.eq(n).addClass(a.slideVisibleClass))}o.progress=s?-l:l}t.visibleSlides=L(t.visibleSlides)}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,a=t.params,i=t.maxTranslate()-t.minTranslate(),s=t.progress,r=t.isBeginning,n=t.isEnd,o=r,l=n;0===i?n=r=!(s=0):(r=(s=(e-t.minTranslate())/i)<=0,n=1<=s),ee.extend(t,{progress:s,isBeginning:r,isEnd:n}),(a.watchSlidesProgress||a.watchSlidesVisibility)&&t.updateSlidesProgress(e),r&&!o&&t.emit("reachBeginning toEdge"),n&&!l&&t.emit("reachEnd toEdge"),(o&&!r||l&&!n)&&t.emit("fromEdge"),t.emit("progress",s)},updateSlidesClasses:function(){var e,t=this,a=t.slides,i=t.params,s=t.$wrapperEl,r=t.activeIndex,n=t.realIndex,o=t.virtual&&i.virtual.enabled;a.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=o?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+r+'"]'):a.eq(r)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass));var l=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=a.eq(0)).addClass(i.slideNextClass);var d=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=a.eq(-1)).addClass(i.slidePrevClass),i.loop&&(l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,a=this,i=a.rtlTranslate?a.translate:-a.translate,s=a.slidesGrid,r=a.snapGrid,n=a.params,o=a.activeIndex,l=a.realIndex,d=a.snapIndex,p=e;if(void 0===p){for(var c=0;c=s[c]&&i=s[c]&&i=s[c]&&(p=c);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if((t=0<=r.indexOf(i)?r.indexOf(i):Math.floor(p/n.slidesPerGroup))>=r.length&&(t=r.length-1),p!==o){var u=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);ee.extend(a,{snapIndex:t,realIndex:u,previousIndex:o,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),l!==u&&a.emit("realIndexChange"),a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this,a=t.params,i=L(e.target).closest("."+a.slideClass)[0],s=!1;if(i)for(var r=0;r=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(d||0)&&a&&s.emit("beforeSlideChangeStart");var h,v=-o[u];if(s.updateProgress(v),n.normalizeSlideIndex)for(var f=0;f=Math.floor(100*l[f])&&(r=f);if(s.initialized&&r!==p){if(!s.allowSlideNext&&vs.translate&&v>s.maxTranslate()&&(p||0)!==r)return!1}return h=pt.slides.length-t.loopedSlides+s/2?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),ee.nextTick(function(){t.slideTo(r)})):t.slideTo(r):r>t.slides.length-s?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),ee.nextTick(function(){t.slideTo(r)})):t.slideTo(r)}else t.slideTo(r)}};var h={loopCreate:function(){var i=this,e=i.params,t=i.$wrapperEl;t.children("."+e.slideClass+"."+e.slideDuplicateClass).remove();var s=t.children("."+e.slideClass);if(e.loopFillGroupWithBlank){var a=e.slidesPerGroup-s.length%e.slidesPerGroup;if(a!==e.slidesPerGroup){for(var r=0;rs.length&&(i.loopedSlides=s.length);var o=[],l=[];s.each(function(e,t){var a=L(t);e=s.length-i.loopedSlides&&o.push(t),a.attr("data-swiper-slide-index",e)});for(var d=0;d=s.length-r)&&(e=-s.length+i+r,e+=r,t.slideTo(e,0,!1,!0)&&0!==p&&t.setTranslate((d?-t.translate:t.translate)-p));t.allowSlidePrev=n,t.allowSlideNext=o},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,a=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass+",."+t.slideClass+"."+t.slideBlankClass).remove(),a.removeAttr("data-swiper-slide-index")}};var v={setGrabCursor:function(e){if(!(te.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){te.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}};var m={appendSlide:function(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s=J.screen.width-d)){if(ee.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),s.startX=n,s.startY=o,a.touchStartTime=ee.now(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,0s.startY&&t.translate>=t.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(os.startX&&t.translate>=t.minTranslate())return;if(a.isTouchEvent&&f.activeElement&&n.target===f.activeElement&&L(n.target).is(a.formElements))return a.isMoved=!0,void(t.allowClick=!1);if(a.allowTouchCallbacks&&t.emit("touchMove",n),!(n.targetTouches&&1i.touchAngle:90-d>i.touchAngle)),a.isScrolling&&t.emit("touchMoveOpposite",n),void 0===a.startMoving&&(s.currentX===s.startX&&s.currentY===s.startY||(a.startMoving=!0)),a.isScrolling)a.isTouched=!1;else if(a.startMoving){t.allowClick=!1,n.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&n.stopPropagation(),a.isMoved||(i.loop&&t.loopFix(),a.startTranslate=t.getTranslate(),t.setTransition(0),t.animating&&t.$wrapperEl.trigger("webkitTransitionEnd transitionend"),a.allowMomentumBounce=!1,!i.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",n)),t.emit("sliderMove",n),a.isMoved=!0;var u=t.isHorizontal()?p:c;s.diff=u,u*=i.touchRatio,r&&(u=-u),t.swipeDirection=0t.minTranslate()?(h=!1,i.resistance&&(a.currentTranslate=t.minTranslate()-1+Math.pow(-t.minTranslate()+a.startTranslate+u,v))):u<0&&a.currentTranslatea.startTranslate&&(a.currentTranslate=a.startTranslate),0i.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);if(!a.allowThresholdMove)return a.allowThresholdMove=!0,s.startX=s.currentX,s.startY=s.currentY,a.currentTranslate=a.startTranslate,void(s.diff=t.isHorizontal()?s.currentX-s.startX:s.currentY-s.startY)}i.followFinger&&((i.freeMode||i.watchSlidesProgress||i.watchSlidesVisibility)&&(t.updateActiveIndex(),t.updateSlidesClasses()),i.freeMode&&(0===a.velocities.length&&a.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:a.touchStartTime}),a.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:ee.now()})),t.updateProgress(a.currentTranslate),t.setTranslate(a.currentTranslate))}}}}else a.startMoving&&a.isScrolling&&t.emit("touchMoveOpposite",n)}.bind(e),e.onTouchEnd=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,d=e;if(d.originalEvent&&(d=d.originalEvent),a.allowTouchCallbacks&&t.emit("touchEnd",d),a.allowTouchCallbacks=!1,!a.isTouched)return a.isMoved&&i.grabCursor&&t.setGrabCursor(!1),a.isMoved=!1,void(a.startMoving=!1);i.grabCursor&&a.isMoved&&a.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=ee.now(),u=c-a.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap",d),u<300&&300-t.maxTranslate())return void(t.slides.lengtht.minTranslate())i.freeModeMomentumBounce?(w-t.minTranslate()>E&&(w=t.minTranslate()+E),y=t.minTranslate(),T=!0,a.allowMomentumBounce=!0):w=t.minTranslate(),i.loop&&i.centeredSlides&&(x=!0);else if(i.freeModeSticky){for(var S,C=0;C-w){S=C;break}w=-(w=Math.abs(l[S]-w)=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,z=t.slidesSizesGrid[0],P=0;P=o[P]&&p=o[P]&&(M=P,z=o[o.length-1]-o[o.length-2]);var k=(p-o[M])/z;if(u>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(k>=i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(k>1-i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+i.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}}.bind(e),e.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(e);var r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(te.touch||!te.pointerEvents&&!te.prefixedPointerEvents){if(te.touch){var o=!("touchstart"!==a.start||!te.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(a.start,e.onTouchStart,o),r.addEventListener(a.move,e.onTouchMove,te.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!te.touch&&g.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),f.addEventListener("mousemove",e.onTouchMove,n),f.addEventListener("mouseup",e.onTouchEnd,!1))}else r.addEventListener(a.start,e.onTouchStart,!1),f.addEventListener(a.move,e.onTouchMove,n),f.addEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),e.on(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b,!0)},detachEvents:function(){var e=this,t=e.params,a=e.touchEvents,i=e.el,s=e.wrapperEl,r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(te.touch||!te.pointerEvents&&!te.prefixedPointerEvents){if(te.touch){var o=!("onTouchStart"!==a.start||!te.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(a.start,e.onTouchStart,o),r.removeEventListener(a.move,e.onTouchMove,n),r.removeEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!te.touch&&g.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),f.removeEventListener("mousemove",e.onTouchMove,n),f.removeEventListener("mouseup",e.onTouchEnd,!1))}else r.removeEventListener(a.start,e.onTouchStart,!1),f.removeEventListener(a.move,e.onTouchMove,n),f.removeEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),e.off(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b)}},breakpoints:{setBreakpoint:function(){var e=this,t=e.activeIndex,a=e.initialized,i=e.loopedSlides;void 0===i&&(i=0);var s=e.params,r=s.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var n=e.getBreakpoint(r);if(n&&e.currentBreakpoint!==n){var o=n in r?r[n]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var l=o||e.originalParams,d=l.direction&&l.direction!==s.direction,p=s.loop&&(l.slidesPerView!==s.slidesPerView||d);d&&a&&e.changeDirection(),ee.extend(e.params,l),ee.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=n,p&&a&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-i+e.loopedSlides,0,!1)),e.emit("breakpoint",l)}}},getBreakpoint:function(e){if(e){var t=!1,a=[];Object.keys(e).forEach(function(e){a.push(e)}),a.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var i=0;i=J.innerWidth&&!t&&(t=s)}return t||"max"}}},checkOverflow:{checkOverflow:function(){var e=this,t=e.isLocked;e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),t&&t!==e.isLocked&&(e.isEnd=!1,e.navigation.update())}},classes:{addClasses:function(){var t=this.classNames,a=this.params,e=this.rtl,i=this.$el,s=[];s.push("initialized"),s.push(a.direction),a.freeMode&&s.push("free-mode"),te.flexbox||s.push("no-flexbox"),a.autoHeight&&s.push("autoheight"),e&&s.push("rtl"),1'+e+"
    ");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){if("object"==typeof e&&"length"in e)for(var t=0;tMath.abs(n.pixelY)))return!0;s=n.pixelX*r}else{if(!(Math.abs(n.pixelY)>Math.abs(n.pixelX)))return!0;s=n.pixelY}else s=Math.abs(n.pixelX)>Math.abs(n.pixelY)?-n.pixelX*r:-n.pixelY;if(0===s)return!0;if(i.invert&&(s=-s),a.params.freeMode){a.params.loop&&a.loopFix();var o=a.getTranslate()+s*i.sensitivity,l=a.isBeginning,d=a.isEnd;if(o>=a.minTranslate()&&(o=a.minTranslate()),o<=a.maxTranslate()&&(o=a.maxTranslate()),a.setTransition(0),a.setTranslate(o),a.updateProgress(),a.updateActiveIndex(),a.updateSlidesClasses(),(!l&&a.isBeginning||!d&&a.isEnd)&&a.updateSlidesClasses(),a.params.freeModeSticky&&(clearTimeout(a.mousewheel.timeout),a.mousewheel.timeout=ee.nextTick(function(){a.slideToClosest()},300)),a.emit("scroll",t),a.params.autoplay&&a.params.autoplayDisableOnInteraction&&a.autoplay.stop(),o===a.minTranslate()||o===a.maxTranslate())return!0}else{if(60a-1-2*e.loopedSlides&&(r-=a-2*e.loopedSlides),n-1s.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=s.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),o=r-e.pagination.dynamicBulletIndex,d=((l=o+(Math.min(p.length,s.dynamicMainBullets)-1))+o)/2),p.removeClass(s.bulletActiveClass+" "+s.bulletActiveClass+"-next "+s.bulletActiveClass+"-next-next "+s.bulletActiveClass+"-prev "+s.bulletActiveClass+"-prev-prev "+s.bulletActiveClass+"-main"),1";i.html(s),e.pagination.bullets=i.find("."+t.bulletClass)}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):' / ',i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'',i.html(s)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var a=this,e=a.params.pagination;if(e.el){var t=L(e.el);0!==t.length&&(a.params.uniqueNavElements&&"string"==typeof e.el&&1'),s.append(r)),ee.extend(t,{$el:s,el:s[0],$dragEl:r,dragEl:r[0]}),i.draggable&&t.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},B={setTransform:function(e,t){var a=this.rtl,i=L(e),s=a?-1:1,r=i.attr("data-swiper-parallax")||"0",n=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y"),l=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(n||o?(n=n||"0",o=o||"0"):this.isHorizontal()?(n=r,o="0"):(o=r,n="0"),n=0<=n.indexOf("%")?parseInt(n,10)*t*s+"%":n*t*s+"px",o=0<=o.indexOf("%")?parseInt(o,10)*t+"%":o*t+"px",null!=d){var p=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=p}if(null==l)i.transform("translate3d("+n+", "+o+", 0px)");else{var c=l-(l-1)*(1-Math.abs(t));i.transform("translate3d("+n+", "+o+", 0px) scale("+c+")")}},setTranslate:function(){var i=this,e=i.$el,t=i.slides,s=i.progress,r=i.snapGrid;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,t){i.parallax.setTransform(t,s)}),t.each(function(e,t){var a=t.progress;1i.maxRatio&&(a.scale=i.maxRatio-1+Math.pow(a.scale-i.maxRatio+1,.5)),a.scales.touchesStart.x))return void(s.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.ys.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentXs.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentYs.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=s.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=s.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(s.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(s.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(s.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(s.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=s.touchesCurrent.x,r.prevPositionY=s.touchesCurrent.y,r.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,a=e.image,i=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var s=300,r=300,n=i.x*s,o=a.currentX+n,l=i.y*r,d=a.currentY+l;0!==i.x&&(s=Math.abs((o-a.currentX)/i.x)),0!==i.y&&(r=Math.abs((d-a.currentY)/i.y));var p=Math.max(s,r);a.currentX=o,a.currentY=d;var c=a.width*e.scale,u=a.height*e.scale;a.minX=Math.min(t.slideWidth/2-c/2,0),a.maxX=-a.minX,a.minY=Math.min(t.slideHeight/2-u/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),t.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,a,i,s,r,n,o,l,d,p,c,u,h,v,f,m,g=this,b=g.zoom,w=g.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=g.clickedSlide?L(g.clickedSlide):g.slides.eq(g.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,a="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,a=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(f=y.$slideEl[0].offsetWidth,m=y.$slideEl[0].offsetHeight,i=y.$slideEl.offset().left+f/2-t,s=y.$slideEl.offset().top+m/2-a,o=y.$imageEl[0].offsetWidth,l=y.$imageEl[0].offsetHeight,d=o*b.scale,p=l*b.scale,h=-(c=Math.min(f/2-d/2,0)),v=-(u=Math.min(m/2-p/2,0)),(r=i*b.scale)>1]<=t?i=s:a=s;return a};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new V.LinearSpline(t.slidesGrid,e.slidesGrid):new V.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){var a,i,s=this,r=s.controller.control;function n(e){var t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),i=-s.controller.spline.interpolate(-t)),i&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),i=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(i=e.maxTranslate()-i),e.updateProgress(i),e.setTranslate(i,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o'),i.append(e)),e.css({height:r+"px"})):0===(e=a.find(".swiper-cube-shadow")).length&&(e=L('
    '),a.append(e)));for(var h=0;h'),v.append(E)),0===S.length&&(S=L('
    '),v.append(S)),E.length&&(E[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(p)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(u)-90*Math.floor(Math.abs(u)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),z=d.shadowScale,P=d.shadowScale/M,k=d.shadowOffset;e.transform("scale3d("+z+", 1, "+P+") translate3d(0px, "+(n/2+k)+"px, "+-n/2/P+"px) rotateX(-90deg)")}var $=I.isSafari||I.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(t.isHorizontal()?0:u)+"deg) rotateY("+(t.isHorizontal()?-u:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},K={setTranslate:function(){for(var e=this,t=e.slides,a=e.rtlTranslate,i=0;i'),s.append(p)),0===c.length&&(c=L('
    '),s.append(c)),p.length&&(p[0].style.opacity=Math.max(-r,0)),c.length&&(c[0].style.opacity=Math.max(r,0))}s.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var a=this,t=a.slides,i=a.activeIndex,s=a.$wrapperEl;if(t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),a.params.virtualTranslate&&0!==e){var r=!1;t.eq(i).transitionEnd(function(){if(!r&&a&&!a.destroyed){r=!0,a.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],t=0;t'),v.append(E)),0===S.length&&(S=L('
    '),v.append(S)),E.length&&(E[0].style.opacity=0')}}),Object.keys(F).forEach(function(e){t.a11y[e]=F[e].bind(t)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){var e=this;ee.extend(e,{history:{init:R.init.bind(e),setHistory:R.setHistory.bind(e),setHistoryPopState:R.setHistoryPopState.bind(e),scrollToSlide:R.scrollToSlide.bind(e),destroy:R.destroy.bind(e)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){var e=this;ee.extend(e,{hashNavigation:{initialized:!1,init:q.init.bind(e),destroy:q.destroy.bind(e),setHash:q.setHash.bind(e),onHashCange:q.onHashCange.bind(e)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var t=this;ee.extend(t,{autoplay:{running:!1,paused:!1,run:W.run.bind(t),start:W.start.bind(t),stop:W.stop.bind(t),pause:W.pause.bind(t),onTransitionEnd:function(e){t&&!t.destroyed&&t.$wrapperEl&&e.target===this&&(t.$wrapperEl[0].removeEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].removeEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd),t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){ee.extend(this,{fadeEffect:{setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){ee.extend(this,{cubeEffect:{setTranslate:U.setTranslate.bind(this),setTransition:U.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){ee.extend(this,{flipEffect:{setTranslate:K.setTranslate.bind(this),setTransition:K.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("flip"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"flip"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){ee.extend(this,{coverflowEffect:{setTranslate:_.setTranslate.bind(this),setTransition:_.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){ee.extend(this,{thumbs:{swiper:null,init:Z.init.bind(this),update:Z.update.bind(this),onThumbClick:Z.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===T.use&&(T.use=T.Class.use,T.installModule=T.Class.installModule),T.use(Q),T}); +// diff --git a/template/bygsjw_sj/image/swiper.min.css b/template/bygsjw_sj/image/swiper.min.css new file mode 100644 index 0000000..c4a633d --- /dev/null +++ b/template/bygsjw_sj/image/swiper.min.css @@ -0,0 +1,12 @@ +/** + * Swiper 4.5.0 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: February 22, 2019 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s opacity;-o-transition:.3s opacity;transition:.3s opacity;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:.2s top,.2s -webkit-transform;transition:.2s top,.2s -webkit-transform;-o-transition:.2s transform,.2s top;transition:.2s transform,.2s top;transition:.2s transform,.2s top,.2s -webkit-transform}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s left,.2s -webkit-transform;transition:.2s left,.2s -webkit-transform;-o-transition:.2s transform,.2s left;transition:.2s transform,.2s left;transition:.2s transform,.2s left,.2s -webkit-transform}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s right,.2s -webkit-transform;transition:.2s right,.2s -webkit-transform;-o-transition:.2s transform,.2s right;transition:.2s transform,.2s right;transition:.2s transform,.2s right,.2s -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:'';width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} \ No newline at end of file diff --git a/template/bygsjw_sj/image/threadsort.js b/template/bygsjw_sj/image/threadsort.js new file mode 100644 index 0000000..72991c8 --- /dev/null +++ b/template/bygsjw_sj/image/threadsort.js @@ -0,0 +1,246 @@ +/* + [Discuz!] (C)2001-2099 Discuz Team. + This is NOT a freeware, use is subject to license terms + + $Id: threadsort.js 30962 2012-07-04 07:57:45Z zhangjie $ +*/ + +function byg_id(id) { + return !id ? null : document.getElementById(id); +} + +function mb_strlen(str) { + var len = 0; + for(var i = 0; i < str.length; i++) { + len += str.charCodeAt(i) < 0 || str.charCodeAt(i) > 255 ? (charset == 'utf-8' ? 3 : 2) : 1; + } + return len; +} + +function xmlobj() { + var obj = new Object(); + obj.createXMLDoc = function(xmlstring) { + var xmlobj = false; + if(window.DOMParser && document.implementation && document.implementation.createDocument) { + try{ + var domparser = new DOMParser(); + xmlobj = domparser.parseFromString(xmlstring, 'text/xml'); + } catch(e) { + } + } else if(window.ActiveXObject) { + var versions = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0", "MSXML2.DOMDocument.3.0", "MSXML2.DOMDocument", "Microsoft.XmlDom"]; + for(var i=0; i'; + for(var i in choicesarr) { + nameid = ''; + if((choicesarr[sselectchoiceoptionid]['slevel'] == 1 || type == 'search') && choicesarr[i]['scount'] == choicesarr[sselectchoiceoptionid]['scount']) { + nameid = name + ' ' + id; + } + if(choicesarr[i]['sfoptionid'] != '0') { + var patrn1 = new RegExp("^" + choicesarr[i]['sfoptionid'] + "\\.", 'i'); + var patrn2 = new RegExp("^" + choicesarr[i]['sfoptionid'] + "$", 'i'); + if(selectchoiceoptionid.match(patrn1) == null && selectchoiceoptionid.match(patrn2) == null) { + continue; + } + } + if(choicesarr[i]['scount'] != lastcount) { + if(parseInt(choicesarr[i]['scount']) >= (parseInt(choicesarr[sselectchoiceoptionid]['scount']) + parseInt(choicesarr[sselectchoiceoptionid]['slevel']))) { + break; + } + selectoption += '' + "\r\n" + ''; + + lastcount = parseInt(choicesarr[i]['scount']); + } + var patrn1 = new RegExp("^" + choicesarr[i]['soptionid'] + "\\.", 'i'); + var patrn2 = new RegExp("^" + choicesarr[i]['soptionid'] + "$", 'i'); + var isnext = ''; + if(parseInt(choicesarr[i]['slevel']) != 1) { + isnext = '»'; + } + if(selectchoiceoptionid.match(patrn1) != null || selectchoiceoptionid.match(patrn2) != null) { + selectoption += "\r\n" + ''; + } else { + selectoption += "\r\n" + ''; + } + } + selectoption += ''; + if(type == 'search') { + selectoption += "\r\n" + ''; + } + byg_id('select_' + forum_optionlist[soptionid]['sidentifier']).innerHTML = selectoption; +} + +function checkoption(identifier, required, checktype, checkmaxnum, checkminnum, checkmaxlength) { + if(checktype != 'image' && checktype != 'select' && !byg_id('typeoption_' + identifier) || !byg_id('check' + identifier)) { + return true; + } + + var ce = byg_id('check' + identifier); + ce.innerHTML = ''; + + if(checktype == 'select') { + if(required != '0' && (byg_id('typeoption_' + identifier) == null || byg_id('typeoption_' + identifier).value == '0')) { + warning(ce, '必填项目没有填写'); + return false; + } else if(required == '0' && (byg_id('typeoption_' + identifier) == null || byg_id('typeoption_' + identifier).value == '0')) { + ce.innerHTML = ' 请选择下一级'; + ce.className = "warning"; + return true; + } + } + + if(checktype == 'radio' || checktype == 'checkbox') { + var nodes = byg_id('typeoption_' + identifier).parentNode.parentNode.parentNode.getElementsByTagName('INPUT'); + var nodechecked = false; + for(var i=0; i'; + } + } + + if(checkvalue) { + if(checktype == 'email' && !(/^[\-\.\w]+@[\.\-\w]+(\.\w+)+$/.test(checkvalue))) { + warning(ce, '邮件地址不正确'); + return false; + } else if((checktype == 'text' || checktype == 'textarea') && checkmaxlength != '0' && mb_strlen(checkvalue) > checkmaxlength) { + warning(ce, '填写项目长度过长'); + return false; + } else if((checktype == 'number' || checktype == 'range')) { + if(isNaN(checkvalue)) { + warning(ce, '数字填写不正确'); + return false; + } else if(checkmaxnum != '0' && parseInt(checkvalue) > parseInt(checkmaxnum)) { + warning(ce, '大于设置最大值'); + return false; + } else if(checkminnum != '0' && parseInt(checkvalue) < parseInt(checkminnum)) { + warning(ce, '小于设置最小值'); + return false; + } + } else if(checktype == 'url' && !(/(http[s]?|ftp):\/\/[^\/\.]+?\..+\w[\/]?$/i.test(checkvalue))) { + warning(ce, '请正确填写以http://开头的URL地址'); + return false; + } + ce.innerHTML = ''; + } + return true; +} \ No newline at end of file diff --git a/template/bygsjw_sj/image/today.png b/template/bygsjw_sj/image/today.png new file mode 100644 index 0000000..dfec3f0 Binary files /dev/null and b/template/bygsjw_sj/image/today.png differ diff --git a/template/bygsjw_sj/image/touming.png b/template/bygsjw_sj/image/touming.png new file mode 100644 index 0000000..4f75bf2 Binary files /dev/null and b/template/bygsjw_sj/image/touming.png differ diff --git a/template/bygsjw_sj/image/wei_fatie.png b/template/bygsjw_sj/image/wei_fatie.png new file mode 100644 index 0000000..e8f855b Binary files /dev/null and b/template/bygsjw_sj/image/wei_fatie.png differ diff --git a/template/bygsjw_sj/image/wei_luntan.png b/template/bygsjw_sj/image/wei_luntan.png new file mode 100644 index 0000000..146cd61 Binary files /dev/null and b/template/bygsjw_sj/image/wei_luntan.png differ diff --git a/template/bygsjw_sj/image/wei_shouye.png b/template/bygsjw_sj/image/wei_shouye.png new file mode 100644 index 0000000..e9cbe05 Binary files /dev/null and b/template/bygsjw_sj/image/wei_shouye.png differ diff --git a/template/bygsjw_sj/image/wei_sousuo.png b/template/bygsjw_sj/image/wei_sousuo.png new file mode 100644 index 0000000..7b9e4d1 Binary files /dev/null and b/template/bygsjw_sj/image/wei_sousuo.png differ diff --git a/template/bygsjw_sj/image/wei_wode.png b/template/bygsjw_sj/image/wei_wode.png new file mode 100644 index 0000000..b26d445 Binary files /dev/null and b/template/bygsjw_sj/image/wei_wode.png differ diff --git a/template/bygsjw_sj/image/xiala.png b/template/bygsjw_sj/image/xiala.png new file mode 100644 index 0000000..c523902 Binary files /dev/null and b/template/bygsjw_sj/image/xiala.png differ diff --git a/template/bygsjw_sj/image/xiugai.png b/template/bygsjw_sj/image/xiugai.png new file mode 100644 index 0000000..440a39d Binary files /dev/null and b/template/bygsjw_sj/image/xiugai.png differ diff --git a/template/bygsjw_sj/image/yesterday.png b/template/bygsjw_sj/image/yesterday.png new file mode 100644 index 0000000..94e8f66 Binary files /dev/null and b/template/bygsjw_sj/image/yesterday.png differ diff --git a/template/bygsjw_sj/image/zan.png b/template/bygsjw_sj/image/zan.png new file mode 100644 index 0000000..61726ed Binary files /dev/null and b/template/bygsjw_sj/image/zan.png differ diff --git a/template/bygsjw_sj/preview.jpg b/template/bygsjw_sj/preview.jpg new file mode 100644 index 0000000..936c4a6 Binary files /dev/null and b/template/bygsjw_sj/preview.jpg differ diff --git a/template/bygsjw_sj/preview_large.jpg b/template/bygsjw_sj/preview_large.jpg new file mode 100644 index 0000000..57a113d Binary files /dev/null and b/template/bygsjw_sj/preview_large.jpg differ diff --git a/template/bygsjw_sj/touch/common/buyinvitecode.php b/template/bygsjw_sj/touch/common/buyinvitecode.php new file mode 100644 index 0000000..50709e4 --- /dev/null +++ b/template/bygsjw_sj/touch/common/buyinvitecode.php @@ -0,0 +1,97 @@ + + + + + +
    +
    +

    {lang invitecode_succeed_title}

    +
    +
    +
    + + +
    +
      +
    • + +
    • +
    • {lang invitecode_email}
    • +
    +
    +
    + +
    + + + + +
    +
    +
    + + 头像 + + 提醒 + + + + {lang invitecode_buycode} +
    + + 返回 +
    +
    + + +
    + + + + +
    +
      + +
    • + {$_G['setting'][inviteconfig][invitecodeprompt]} +
    • + +
    • + +
    • +
    • + +

      {lang active_email_comment}

      +

      {lang invitecode_expiration}  {$maxinviteday}

      +
    • +
    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/common/faq.php b/template/bygsjw_sj/touch/common/faq.php new file mode 100644 index 0000000..0b7e2ea --- /dev/null +++ b/template/bygsjw_sj/touch/common/faq.php @@ -0,0 +1,144 @@ + + + + +
    +
    +
    + + 头像 + + 提醒 + + + + {lang faq} +
    + + 返回 +
    +
    + + + +
    + + +
    + + + + + + +
    + +

    {lang all}{lang faq}

    + + +

    $ctitle

    +
      + +
    • +
      +

      {$faq[title]}

      + 开关 +
      +
      + {$faq[message]} +
      +
    • + +
    + +

    {lang keyword_faq}

    +
      + + +
    • +
      +

      {$faq[title]}

      + 开关 +
      +
      + {$faq[message]} +
      +
    • + + +
    • {lang faq_search_nomatch}
    • + +
    + + +
    + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/common/footer.php b/template/bygsjw_sj/touch/common/footer.php new file mode 100644 index 0000000..ace977f --- /dev/null +++ b/template/bygsjw_sj/touch/common/footer.php @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +{$stats_code} + + + + + + + + + + + + +
    + + 排序排序 + + + 排序排序 + + 导航 + 顶部 +
    + + + + +
    +
    列表排序
    +
    + +
    +
    +
    + + + +
    +
    列表排序
    + +
    +
    + + + + +
    +
    + + + 头像{$_G['username']} + +
    + 退出登录 + + + 头像游客 + + + +
    +
    +
    +
    +
    + +
    +
    + + + +
    +
    +

    您还未登录,立即登录?

    +
    + 确定 + 取消 +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $forum_gg_num = 0; + if($forum_gg1){ $forum_gg_num++;} + if($forum_gg2){ $forum_gg_num++;} + if($forum_gg3){ $forum_gg_num++;} + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/common/header.php b/template/bygsjw_sj/touch/common/header.php new file mode 100644 index 0000000..3b3ccf0 --- /dev/null +++ b/template/bygsjw_sj/touch/common/header.php @@ -0,0 +1,54 @@ + + + + + + + + + +<!--{if !empty($navtitle)}-->$navtitle - <!--{/if}--><!--{if empty($nobbname)}--> $_G['setting']['bbname']<!--{/if}--> {lang waptitle} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if(isset($_COOKIE["bygsjw"])){ + $byg_index_bg = true; + setcookie("bygsjw", 1, time()+3600); + }else{ + $byg_index_bg = false; + setcookie("bygsjw", 1, time()+3600); + } + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/common/header_nav.php b/template/bygsjw_sj/touch/common/header_nav.php new file mode 100644 index 0000000..9dc0b82 --- /dev/null +++ b/template/bygsjw_sj/touch/common/header_nav.php @@ -0,0 +1,79 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/common/showmessage.php b/template/bygsjw_sj/touch/common/showmessage.php new file mode 100644 index 0000000..8c6edd8 --- /dev/null +++ b/template/bygsjw_sj/touch/common/showmessage.php @@ -0,0 +1,105 @@ + + + + + + + + + + + +
    +
    +

    $show_message

    + +

    + 继续访问
    + 返回上一页 +

    + + + + + +

    + +
    +
    + + + + +
    +
    +
    + + + 返回 +
    + +
    +
    + + +
    +
    +

    {lang mobtishi}

    +
    +
    + +
    +
    + + {eval $nav = 'http://'.$_G['setting']['domain']['app']['mobile'];} + + {eval $nav = "forum.php";} + +

    logo

    + +
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/announcement.php b/template/bygsjw_sj/touch/forum/announcement.php new file mode 100644 index 0000000..12262ff --- /dev/null +++ b/template/bygsjw_sj/touch/forum/announcement.php @@ -0,0 +1,68 @@ + + + + +
    +
    +
    +

    + + 头像 + + 提醒 + + + + 公告 +

    + + 返回 +
    +
    +
    + + + + +
      + +
    • +
      +

      {$ann[subject]}

      + 开关 +
      +
      + {lang author}: {$ann[author]} + {$ann[starttime]} +
      +
      + {$ann[message]} +
      +
    • + +
    + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/attachpay.php b/template/bygsjw_sj/touch/forum/attachpay.php new file mode 100644 index 0000000..981d546 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/attachpay.php @@ -0,0 +1,85 @@ + + + + + + +
    +
    +
    + + 头像 + + 提醒 + + + + 购买详情 +
    + + 返回 +
    +
    + + + +
    +
    +

    + {lang pay_attachment} + + {lang close} + +

    + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {lang author} $attach[author]
    {lang attachment} 
    $attach[filename] ($attach[description])
    {lang price}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}) $attach[price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
    {lang pay_author_income}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}) $attach[netprice] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
    {lang pay_balance}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}) $balance {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
     {lang status_insufficient} (点击查看我的积分)
     {lang status_download}, {lang download}
    + +
    + + + + + +
    + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/discuz.php b/template/bygsjw_sj/touch/forum/discuz.php new file mode 100644 index 0000000..6760bbd --- /dev/null +++ b/template/bygsjw_sj/touch/forum/discuz.php @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    {lang zsltmobileclient}

    +

    {lang visitbbsanytime} + +

    +

    {lang iphoneandriodmobile}

    +

    {lang visitwapmobile} + +

    +
    +
    + + + + + +
    {lang downloadnow} +

    {lang downloadzslttoshareview}

    +
    + + + + +
    + + +
    +
    + +

    + + + LOGO + + LOGO + + +

    + +
    + +
    +
    +
    + + + + + +
    +
    +
    +
      + +
    • {$forum_gg1}
    • + + +
    • {$forum_gg2}
    • + + +
    • {$forum_gg3}
    • + +
    +
    +
    +
    + + + + + + + + + + + + +
    + +
    +
    + + + + + +
    +

    {lang mobredian}{lang mobtuijian}

    + + +
    + + + + +
    + + + +
    + + + + + + +
    + {lang announcement} +
    +
      $announcements
    +
    + + + +
    + + + + + +
    +
      +
    • +
      + {lang index_today} + +

      {lang index_today}

      +

      {$todayposts}

      +
      +
      +
    • +
    • +
      + {lang index_posts} + +

      {lang index_posts}

      +

      {$posts}

      +
      +
      +
    • +
    • +
      + {lang index_members} + +

      {lang index_members}

      +

      {$_G['cache']['userstats']['totalmembers']}

      +
      +
      +
    • +
    +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/discuzcode.php b/template/bygsjw_sj/touch/forum/discuzcode.php new file mode 100644 index 0000000..92ac069 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/discuzcode.php @@ -0,0 +1,154 @@ + + +{eval +function tpl_hide_credits_hidden($creditsrequire) { +global $_G; +} +
    {$_G[username]}{lang guest}{lang post_hide_credits_hidden}
    + +{eval +} + +function tpl_hide_credits($creditsrequire, $message) { +} +
    {lang post_hide_credits}
    +$message

    + + +{eval +} + +function tpl_codedisp($code) { +} +
    1. $code
    + +{eval +} + +function tpl_quote() { +} +
    {lang e_quote}: \\1
    + +{eval +} + +function tpl_free() { +} +
    \\1
    + +{eval +} + +function tpl_hide_reply() { +global $_G; +} +

    {lang post_hide}

    \\1
    + + +{eval +} + +function tpl_hide_reply_hidden() { +global $_G; +} +
    {$_G[username]}{lang guest}{lang post_hide_reply_hidden}
    + +{eval +} + +function attachlist($attach) { +global $_G; +$attach['refcheck'] = (!$attach['remote'] && $_G['setting']['attachrefcheck']) || ($attach['remote'] && ($_G['setting']['ftp']['hideurl'] || ($attach['isimage'] && $_G['setting']['attachimgpost'] && strtolower(substr($_G['setting']['ftp']['attachurl'], 0, 3)) == 'ftp'))); +$aidencode = packaids($attach); +$is_archive = $_G['forum_thread']['is_archived'] ? "&fid=".$_G['fid']."&archiveid=".$_G[forum_thread][archiveid] : ''; +} + +
    +
    +

    + + $attach[attachicon] + + + $attach[filename] + + $attach[filename] + + ($attach[attachsize]) +

    +

    {$attach[description]}

    +

    ( {lang readperm}: $attach[readperm], $attach[dateline]{lang upload}, {lang downloads}: $attach[downloads], {lang price}: $attach[price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}, {lang attachcredits}: $_G[getattachcredits] )

    +
    +
    + + +{eval +} + +function imagelist($attach) { +global $_G, $post; +$fix = count($post['imagelist']) == 1 ? 600 : 600; +$fixtype = count($post['imagelist']) == 1 ? 'fixnone' : 'fixwr'; +$attach['refcheck'] = (!$attach['remote'] && $_G['setting']['attachrefcheck']) || ($attach['remote'] && ($_G['setting']['ftp']['hideurl'] || ($attach['isimage'] && $_G['setting']['attachimgpost'] && strtolower(substr($_G['setting']['ftp']['attachurl'], 0, 3)) == 'ftp'))); +$mobilethumburl = $attach['attachimg'] && $_G['setting']['showimages'] && (!$attach['price'] || $attach['payed']) && ($_G['group']['allowgetimage'] || $_G['uid'] == $attach['uid']) ? $attach['url'].$attach['attachment'] : '' ; +$aidencode = packaids($attach); +$is_archive = $_G['forum_thread']['is_archived'] ? "&fid=".$_G['fid']."&archiveid=".$_G[forum_thread][archiveid] : ''; +$guestviewthumb = !empty($_G['setting']['guestviewthumb']['flag']) && !$_G['uid']; +$mobileguestviewthumburl = $guestviewthumb ? ($attach['attachimg'] && $_G['setting']['showimages'] && (((!$attach['price'] || $attach['payed']) && ($_G['group']['allowgetimage'] || $_G['uid'] == $attach['uid'])) || ($guestviewthumb)) ? getforumimg($attach['aid'], 0, $_G['setting']['guestviewthumb']['width'], $_G['setting']['guestviewthumb']['height'], 1) : '') : ''; +} + + + + +
  • + $attach['imgalt'] + + {lang guestviewthumb} + +
  • + + + + + +{eval +} + +function attachinpost($attach) { +global $_G; +$attach['refcheck'] = (!$attach['remote'] && $_G['setting']['attachrefcheck']) || ($attach['remote'] && ($_G['setting']['ftp']['hideurl'] || ($attach['isimage'] && $_G['setting']['attachimgpost'] && strtolower(substr($_G['setting']['ftp']['attachurl'], 0, 3)) == 'ftp'))); +$mobilethumburl = $attach['attachimg'] && $_G['setting']['showimages'] && (!$attach['price'] || $attach['payed']) && ($_G['group']['allowgetimage'] || $_G['uid'] == $attach['uid']) ? $attach['url'].$attach['attachment'] : '' ; +$aidencode = packaids($attach); +$is_archive = $_G['forum_thread']['is_archived'] ? '&fid='.$_G['fid'].'&archiveid='.$_G['forum_thread']['archiveid'] : ''; +$guestviewthumb = !empty($_G['setting']['guestviewthumb']['flag']) && !$_G['uid']; +$mobileguestviewthumburl = $guestviewthumb ? ($attach['attachimg'] && $_G['setting']['showimages'] && (((!$attach['price'] || $attach['payed']) && ($_G['group']['allowgetimage'] || $_G['uid'] == $attach['uid'])) || ($guestviewthumb)) ? getforumimg($attach['aid'], 0, $_G['setting']['guestviewthumb']['width'], $_G['setting']['guestviewthumb']['height'], 1) : '') : ''; +} + + + + $attach['imgalt'] + + {lang guestviewthumb} + + + +
    + + $attach[attachicon] + + + $attach[filename] + + $attach[filename] + + ($attach[attachsize]) +

    {$attach[description]}

    +

    ( {lang readperm}: $attach[readperm], $attach[dateline]{lang upload}, {lang downloads}: $attach[downloads], {lang price}: $attach[price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}, {lang attachcredits}: $_G[getattachcredits] )

    +
    + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/forumdisplay.php b/template/bygsjw_sj/touch/forum/forumdisplay.php new file mode 100644 index 0000000..3824b74 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/forumdisplay.php @@ -0,0 +1,343 @@ + + + + + +
    +
    +
    +

    + + 头像 + + 提醒 + + +
    $navigation
    + + + + +

    + + 返回 +
    + +
    +
    + + + + +
    +
    +
    +
    + + {$_G['forum'][icon]}{$_G['setting']['attachurl']}common/{$_G['forum'][icon]}" alt="{$_G['forum'][name]}" class="z"/> + + {$_G['forum'][name]} + +
    +

    {$_G['forum'][name]}

    +
    +
    + + +
    +
      +
    • {lang index_today}

      {$_G[forum][todayposts]}
    • +
    • {lang index_threads}

      {$_G[forum][threads]}
    • +
    • {lang rank}

      {$_G[forum][rank]}
    • +
    • 收藏

      {$_G[forum][favtimes]}
    • +
    + +
    {lang forum_modedby}:
    + + +
    $_G['forum'][rules]
    + + +
    +
    +
    +
    +
    +
    + + + + + + + +
    + + + + + + + +
    + + + + + + + +
    {$forum_list_gg}
    + + + +
    + + + +
    + {lang announcement} + + + {$f_a[subject]} + + {$f_a[subject]} + + +
    + + +
      + + + + +
    • {lang forum_nothreads}
    • + + +
    • {lang forum_nothreads}
    • + + +
    + + + + + + + +
    +
      +
        +
        + + + + + +
        +
        + {$sorttemplate['body']} +
        +
        + + +
        $multipage
        + + + + + +
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/forumdisplay_fastpost.php b/template/bygsjw_sj/touch/forum/forumdisplay_fastpost.php new file mode 100644 index 0000000..1e17c84 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/forumdisplay_fastpost.php @@ -0,0 +1,172 @@ + + + + + + + +
        + + {lang send_reply_fast_tip} + 回复 + 收藏 + 返回 +
        + + + +
        +
        +
        +
        + +
        +
          + +
        • + +
        • + +
        • + + 取消 + 高级 + +
        • +
        • + + +
        • +
        +
        +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/forumdisplay_list.php b/template/bygsjw_sj/touch/forum/forumdisplay_list.php new file mode 100644 index 0000000..89f5f12 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/forumdisplay_list.php @@ -0,0 +1,233 @@ + + + + + + + + {eval continue;} + + + {eval $displayorder_thread = 1;} + + + + + + if ($_G['style']['bankuai_y2'] == "on" || in_array($_G['fid'], $bankuai_y2)) { + if (in_array($thread['displayorder'], array(1, 2, 3, 4))) { + $img_number = 0; + } elseif ($_G['style']['liebiaotu'] == "on") { + $list_img1 = byg_threadlist_img($thread['tid'], $thread['authorid'], 9); + $img_number = count($list_img1); + } else { + $img_number = 0; + } + } else { + if ($_G['style']['liebiaotu'] == "on") { + $list_img1 = byg_threadlist_img($thread['tid'], $thread['authorid'], 3); + $img_number = count($list_img1); + } else { + $img_number = 0; + } + } + + +
      • + +
        + + +
        +

        {$thread['author']}

        +

        {$thread['dateline']}

        +
        + + {$_G['setting']['anonymoustext']} +
        +

        {$_G['setting']['anonymoustext']}

        +

        {$thread[dateline]}

        +
        + + + #{$thread[typename]} + +
        + + + + +
      • + +
      • + + + + + +
        + +
        + + +
          + +
        • + +
        • + +
        + +
        + + 精华 + + + 图片 + + + + {$thread[author]} + + {$_G[setting][anonymoustext]} + +    {$thread[dateline]}   + + 回复数{$thread[allreplies]} + + + 查看数{$thread[views]}{$groupnames[$thread[tid]][views]}   + +
        + + +
      • + + + + + + + + + + + + +
      • +
        + +

        + $thread[subject] +

        +
        + + {$thread[author]}{$thread[author]} + + {$_G[setting][anonymoustext]}{$_G[setting][anonymoustext]} + + 查看{$thread[views]}{$groupnames[$thread[tid]][views]} +
        +
        +
      • + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/forumdisplay_passwd.php b/template/bygsjw_sj/touch/forum/forumdisplay_passwd.php new file mode 100644 index 0000000..d0d5ad6 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/forumdisplay_passwd.php @@ -0,0 +1,38 @@ + + + + +
        +
        +
        +
        + + 头像 + + 提醒 + + + $navigation +
        + + 返回 +
        + +
        +
        + + + +
        +

        {lang forum_password_require}

        +
        +
        + + + +
        +
        +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/forumdisplay_pay.php b/template/bygsjw_sj/touch/forum/forumdisplay_pay.php new file mode 100644 index 0000000..806fbdb --- /dev/null +++ b/template/bygsjw_sj/touch/forum/forumdisplay_pay.php @@ -0,0 +1,37 @@ + + + + +
        +
        +
        +
        + + 头像 + + 提醒 + + + $navigation +
        + + 返回 +
        + +
        +
        + + + +
        +

        {lang youneedpay} $paycredits {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]]['unit']}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]]['title']} {lang onlyintoforum}

        +
        +
        + + + +
        +
        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/guide.php b/template/bygsjw_sj/touch/forum/guide.php new file mode 100644 index 0000000..815e061 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/guide.php @@ -0,0 +1,100 @@ + + + + +
        +
        +
        +

        + + 头像 + + 提醒 + + + + 导读 +

        + + 返回 +
        + +
        +
        + + + + + +
        {$forum_guide_gg}
        + + + +
        + + + + +
          + + + +
        • {lang guide_nothreads}
        • + +
        + +
        $multipage
        + + + + + + +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/guide_list_row.php b/template/bygsjw_sj/touch/forum/guide_list_row.php new file mode 100644 index 0000000..331bb49 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/guide_list_row.php @@ -0,0 +1,73 @@ + + + + + + if ($_G['style']['liebiaotu'] == "on") { + $list_img1 = byg_threadlist_img($thread['tid'], $thread['authorid'], 3); + $img_number = count($list_img1); + } + +
      • + + + + +
        + +
        + + +
          + +
        • + +
        • + +
        + +
        + + {$thread[author]} + + {$_G[setting][anonymoustext]} + +     {$thread[dateline]}   + + 回复数{$thread[replies]} + + + 查看数{$thread[views]}   + +
        +
      • + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/pay.php b/template/bygsjw_sj/touch/forum/pay.php new file mode 100644 index 0000000..462228e --- /dev/null +++ b/template/bygsjw_sj/touch/forum/pay.php @@ -0,0 +1,64 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 购买详情 +
        + + 返回 +
        +
        + + + +
        +
        +

        + {lang pay} + + {lang close} + +

        + + + + +
        + + + + + + + + + + + + + + + + + +
        {lang author}$thread[author]
        {lang price}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]})$thread[price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
        {lang pay_author_income}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]})$thread[netprice] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
        {lang pay_balance}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]})$balance {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}
        +
        +
        +
        + +
        +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/pay_view.php b/template/bygsjw_sj/touch/forum/pay_view.php new file mode 100644 index 0000000..e787c13 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/pay_view.php @@ -0,0 +1,56 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 购买记录 +
        + + 返回 +
        +
        + + + +
        +

        + {lang pay_view} + + {lang close} + +

        +
        + + + + + + + + + + + + + + + + + + + +
        {lang username} {lang time} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}
        $log[username] $log[dateline] {$log[$extcreditname]} {$_G[setting][extcredits][$_G[setting][creditstransextra][1]][unit]}
        {lang pay_nobuyers}
        +
        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post.php b/template/bygsjw_sj/touch/forum/post.php new file mode 100644 index 0000000..3a395f3 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post.php @@ -0,0 +1,397 @@ + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        +

        + + 头像 + + 提醒 + + +
        $navigation{lang edit}{lang send_threads}
        + + + + +

        + + 返回 +
        +
        + + + + +
        + + + + + + +
        + +
          +
        • + + + + RE: $thread['subject'] + $quotemessage + +
        • + +
        • + +
        • + + +
        • + {lang post_delpost}{if $thread[special] == 3}{lang reward_price_back}{/if} +
        • + + +
        • + +
        • + + + + + + + + +
        • + +
        • + +
        + + + + + + +
        + +
        + +
        + + +
        +
        +
        + + +
        + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_activity.php b/template/bygsjw_sj/touch/forum/post_activity.php new file mode 100644 index 0000000..0b625b9 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_activity.php @@ -0,0 +1,231 @@ + + +
        + +
        +
        +
        +
        *{lang post_event_time}:
        +
        + +
        +
        +
        +
        + + +
        +
        + ~ + +
        +
        +
        +
        +
        *
        +
        + +
        +
        +
        + +
        +
        + +
        +
        +
        *
        +
        + + + + +
        +
        +
        +
        +
        + +
        +
        +
        +
        +
        + +
        +
        + +
        +
        {lang optional_data}:
        +
        +
          + +
        • + +
        +
        +
        + + +
        +
        +
        + +

        {lang post_activity_message} $_G['setting']['activityextnum'] {lang post_option}

        +
        +
        + + +
        +
        +
        + + {$_G['setting']['extcredits'][$_G['setting']['activitycredit']][title]} +

        {lang user_consumption_money}

        +
        +
        + +
        +
        +
        + + {lang payment_unit} +
        +
        +
        +
        +
        + + +
        +
        + +
        +
        {lang post_topic_image}:
        +
        + +
        +
        + + +
        + + + +
        +
        +
        + +
        + +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_debate.php b/template/bygsjw_sj/touch/forum/post_debate.php new file mode 100644 index 0000000..71fe98d --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_debate.php @@ -0,0 +1,44 @@ + + +
        + +
        +
        +
        *
        +
        +
        *
        +
        +
        +
        +
        +
        +
        +
        + + + +
        +
        +
        +
        +
        + +
        +
        +
        + +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_editor_attribute.php b/template/bygsjw_sj/touch/forum/post_editor_attribute.php new file mode 100644 index 0000000..ed0c0e1 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_editor_attribute.php @@ -0,0 +1,658 @@ + + +
      • + + +
        + + +
        +
        +
        +
        +
        表情
        + +
        附件
        + +
        插入
        +
        附加
        + + +
        权限
        + + + + + + + + + +
        奖励
        + + + +
        抢楼
        + + +
        售价
        + + +
        标签
        + + +
        定时
        + + +
        +
        +
        +
        +
        +
        +
        :)
        +
        :(
        +
        :D
        +
        :\
        +
        :@
        +
        :o
        +
        :P
        +
        :$
        +
        ;P
        +
        :L
        +
        :Q
        +
        :lol
        +
        :loveliness:
        +
        :funk:
        +
        :curse:
        +
        :dizzy:
        +
        :shutup:
        +
        :sleepy:
        +
        :hug:
        +
        :victory:
        +
        :time:
        +
        :kiss:
        +
        :handshake
        +
        :call:
        +
        +
        + +
        +
        + {lang upload_attach} + 文件尺寸限制 : {$maxattachsize_mb} +
        +
          + + +
        • + {$attach[filetype]} {$attach[filename]} + + + + + + + + + + 插入{$attach[aid]} +

          + +

          描述 :

          +

          + + + 阅读权限 : + + + + {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]} : + +

          + +
        • + +
        +
        + +
        +
        + +
        +
        +
        +
        +

        + 链接地址: +

        +

        + 链接文字: +

        +

        + +

        +
        +
        +
        +
        +

        + 图片地址: +

        +

        + +

        +
        +
        + +
        +
        +

        + 音乐地址: +

        +

        + +

        +
        +
        +
        +
        +

        + 视频地址: +

        +

        + 宽:  +    高:  + +

        +
        +
        + +
        +
        +

        请输入要插入的引用:

        +

        + +

        +

        + +

        +
        +
        +
        +
        +

        请输入要插入的代码:

        +

        + +

        +

        + +

        +
        +
        + +
        +
        +

        如果您设置了帖子售价,请输入购买前免费可见的信息内容:

        +

        + +

        +

        + +

        +
        +
        + +
        +
        +

        请输入要隐藏的信息内容:

        +

        + +

        +

        + +

        +

        + 时才显示 +

        +

        + 有效天数: + 距离发帖日期大于这个天数时标签自动失效 +

        +

        + +

        +
        +
        + + +
        +
        +
        +
        +
        +
        + + + + + + + + + + + + + + + + + + +
        {lang basic_attr} + + + + + + + + + + + + + + + + + + + +
        {lang manage_operation} + + + + + + +
        {lang manage_operation} + +
        +
        +
        + + +
        + + + + + +
        {lang readperm} + +

        {lang post_select_usergroup_readacces}

        +
        +
        + + + +
        +
        + + + + +

        {lang you_have} {$_G['setting']['extcredits'][$extcreditstype][title]} $userextcredit {$_G['setting']['extcredits'][$extcreditstype][unit]}

        +
        +
        + + + +
        +
        +
        +
        {lang rushreply_time}
        +
        +
        +
        + ~ + + +
        +
        +
        +
        +
        +
        + +
        +

        {lang rushreply_rewardfloor_comment}

        +
        +
        +
        +
        + +
        +

        {lang replylimit}

        +
        +
        +
        +
        + +
        +
        +
        +
        +
        + +
        +
        +

        ({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][11]][title]}){lang total_credits}{lang post_rushreply_credit}

        +
        +
        +
        +
        + + +
        +
        + {lang price}: {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]} ({lang post_price_comment}) + +

        {lang post_price_income_comment}

        +

        {lang post_price_charge_comment}{lang post_price_free_chargehours}

        + +
        +
        + + +
        +
        +
        {lang post_tag}:
        +
        + +
        +

        {lang posttag_comment}

        +
        +
        + + +
        +
        +
        +
        + +
        +
        +
        + + + + +
        +
        + + + + + +
        + + +
      • \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_forumselect.php b/template/bygsjw_sj/touch/forum/post_forumselect.php new file mode 100644 index 0000000..5f75221 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_forumselect.php @@ -0,0 +1,114 @@ + + + + + + +
        +
        +

        + + 头像 + + 提醒 + + + + 请选择版块发帖 +

        + + 返回 +
        +
        + + + +
        +
          $grouplist
        +
          $commonlist
        + +
          $forum
        + + + + +
        {$fs_forum_icon}{$_G['setting']['attachurl']}common/{$fs_forum_icon}
        + + + + +
          $forum
        + + + + +
        {$fs_subforum_icon}{$_G['setting']['attachurl']}common/{$fs_subforum_icon}
        + + + +
        + +
        +
          +
        • +
        • +
        +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_poll.php b/template/bygsjw_sj/touch/forum/post_poll.php new file mode 100644 index 0000000..c4fc392 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_poll.php @@ -0,0 +1,276 @@ + + + +
        + +
        + + + +
        +

        + {lang post_poll_options}: + {lang post_poll_comment}   + +

        +
        +
        + + + +
        + + +
        +

        + {lang post_poll_options}: + {lang post_poll_comment}   +

        +
        +
        + + +

        + + + + + + + + + + +

        + + + + +
        + +
        +
        +

        + + {lang post_option} +

        +

        + + {lang days} +

        +

        + +

        +

        + +

        +
        + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_reward.php b/template/bygsjw_sj/touch/forum/post_reward.php new file mode 100644 index 0000000..c185bce --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_reward.php @@ -0,0 +1,79 @@ + + +
        + + +
        + + + {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +
        +

        + {lang reward_tax_after} 0 {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +

        +

        + {lang reward_price_min} {$_G['group']['minrewardprice']} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]} + , {lang reward_price_max} {$_G['group']['maxrewardprice']} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]} + , {lang you_have} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +

        + + + +
        + + + {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +
        +

        + {lang reward_tax_add} 0 {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +

        +

        + {lang reward_price_min} {$_G['group']['minrewardprice']} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]} + , {lang reward_price_max} {$_G['group']['maxrewardprice']} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]} + , {lang you_have} {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +

        + +

        {lang post_reward_resolved}

        + + + + +

        {lang reward_price}: $rewardprice {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]}

        + +

        {lang post_reward_resolved}

        + + + + +

        $_G['setting']['rewardexpiration'] {lang post_reward_message}

        + + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_sortoption.php b/template/bygsjw_sj/touch/forum/post_sortoption.php new file mode 100644 index 0000000..237b381 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_sortoption.php @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang threadtype_description}$_G[forum][threadsorts][description][$_G[forum_selectsortid]]
        {lang threadtype_expiration} +
        + +
        + {lang valid_before}: $_G[forum_optiondata][expiration] +
        $option[title]
        *(必填)
        +
        + + + + + + + +
        +
        {lang update}图片{lang upload}图片
        + +
        + + + + + +
        + + + +
        + + + + + + + + + + + + + + + + + +
          + +
        • + +
        + +
          + +
        • + +
        + + +
        + +
        + +
        +
        +
        {$option[unit]}
        + +
        + + {lang maxnum} $option[maxnum]  + + + {lang minnum} $option[minnum]  + + + {lang maxlength} $option[maxlength]  + + + {lang unchangeable}  + + + $option[description] + +
        + + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/post_trade.php b/template/bygsjw_sj/touch/forum/post_trade.php new file mode 100644 index 0000000..910f564 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/post_trade.php @@ -0,0 +1,196 @@ + + + + +
        + +
        +
        +
        *
        +
        +
        +
        +
        *
        +
        +
        +
        +
        *
        +
        + +
        +
        +
        +
        +
        + +
        +
        +
        +
        *{lang post_trade_price}:
        +
        + + {lang post_current_price} +
        +
        + + {lang post_original_price} +
        + +
        + + {lang post_current_credit}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]][title]}) +
        +
        + + {lang post_original_credit}({$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]][title]}) +
        + +
        +
        + + {lang post_trade_transport_mail} +
        +
        + + {lang post_trade_transport_express} +
        +
        + + EMS +
        +
        +
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        + + + +
        +
        + +
        +
        {lang post_trade_picture}:
        +
        + +
        +
        + + +
        + + + +
        +
        +
        + +
        + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/rate.php b/template/bygsjw_sj/touch/forum/rate.php new file mode 100644 index 0000000..cf5aee8 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/rate.php @@ -0,0 +1,105 @@ + + + + + + + + +
        +

        + 打赏评分,给作者增加点动力吧 +

        +
        + + + + + +
        + + + + + + + + + + + + + + + +
         {lang rate_raterange}{lang rate_todayleft}
        {$_G['setting']['extcredits'][$id][title]} {$_G['group']['raterange'][$id]['min']} ~ {$_G['group']['raterange'][$id]['max']}$maxratetoday[$id]
        +
        + +
        +
        +
        + + + + ({lang admin_rate}) + +
        +
        +
        + + + +
        +

        + {lang thread_removerate} +

        +
        + + + + + +
        + + + + + + + + + + + + + + + + + +
         {lang username}{lang time}{lang credits}{lang reason}
        $ratelog[username]$ratelog[dateline]{$_G['setting']['extcredits'][$ratelog[extcredits]][title]} $ratelog[scoreview] {$_G['setting']['extcredits'][$ratelog[extcredits]][unit]}$ratelog[reason]
        +
        +
        + + + {lang admin_operation_explain}: +
        +
        +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/rate_view.php b/template/bygsjw_sj/touch/forum/rate_view.php new file mode 100644 index 0000000..803cad7 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/rate_view.php @@ -0,0 +1,51 @@ + + + + + +
        +
        +
        +
        + + 头像 + + 提醒 + + + + {lang rate_view} +
        + + 返回 +
        +
        +
        + + + +
        + {lang total}: + + {$_G['setting']['extcredits'][$id][title]}+$count{$_G['setting']['extcredits'][$id][unit]}  + +
        + +
        +
          + +
        • +
          +
          +
          + {$log[username]} + {$log[dateline]} +
          +

          {$_G['setting']['extcredits'][$log[extcredits]][title]} $log[score] {$_G['setting']['extcredits'][$log[extcredits]][unit]}{$log[reason]}

          +
          +
        • + +
        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/search_sortoption.php b/template/bygsjw_sj/touch/forum/search_sortoption.php new file mode 100644 index 0000000..73ec6c5 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/search_sortoption.php @@ -0,0 +1,143 @@ + + + + + + + + + + + $option[title]: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $option[title]: + + + + + + + + + + + +
        向下筛选
        +
        + + + + $fontsearch_html + +
        + + + + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/topicadmin.php b/template/bygsjw_sj/touch/forum/topicadmin.php new file mode 100644 index 0000000..8e8b30c --- /dev/null +++ b/template/bygsjw_sj/touch/forum/topicadmin.php @@ -0,0 +1,111 @@ + + + +
        + +
        + + + + + + + + + + + +
        +
        +

        {lang expire}: 

        +

        + +

        +

        {lang admin_close_expire_comment}

        +
        + + + +
        +
        +
        {lang cancel}
        +
        + + +
        +
        +

        {lang expire}: 

        +

        + +

        +

        {lang admin_close_expire_comment}

        +
        + + + +
        +
        +
        {lang cancel}
        +
        + + + + +
        + + +
        {lang admin_delthread_confirm}
        +
        {lang cancel}
        + +
        {lang admin_delthread_nopermission}
        + +
        + + +
        +
        +

        {lang expire}: 

        +

        + +

        +

        {lang admin_close_expire_comment}

        +

        +

        +

        +

        +
        +
        {lang cancel}
        +
        + +
        + +
        +
        {lang admin_threadtopicadmin_error}
        +
        +
        + +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/topicadmin_action.php b/template/bygsjw_sj/touch/forum/topicadmin_action.php new file mode 100644 index 0000000..70a4a9e --- /dev/null +++ b/template/bygsjw_sj/touch/forum/topicadmin_action.php @@ -0,0 +1,47 @@ + + + +
        + +
        + + + + + + +
        {lang admin_delpost_confirm}
        + $deleteid +
        {lang cancel}
        + +
        +

        {lang admin_banpost_confirm}

        + $banid +

        +

        +
        +
        {lang cancel}
        + +
        +

        {lang admin_warn_confirm}

        + $warnpid +

        +

        +
        +
        {lang cancel}
        + +
        +

        您要进行置顶操作

        + $stickpid +

        +

        +
        +
        {lang cancel}
        + +
        + +
        {lang admin_threadtopicadmin_error}
        +
        + +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread.php b/template/bygsjw_sj/touch/forum/viewthread.php new file mode 100644 index 0000000..6736853 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread.php @@ -0,0 +1,189 @@ + + + + + + +
        +
        +
        +
        + + 头像 + + 提醒 + + +
        $navigation内容
        + + + + +
        + + 返回 +
        + +
        +
        + + + + + +
        +

        + + [{$_G['forum']['threadtypes']['types'][$_G['forum_thread']['typeid']]}] + + + [{$_G['forum']['threadsorts']['types'][$_G['forum_thread']['sortid']]}] + + $_G[forum_thread][subject] + ({lang moderating}) + ({lang have_ignored}) + ({lang draft}) + +

        + + +
        + +
        + +
        + +
        $multipage
        + + + + + + + + +
        + + + + + +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_activity.php b/template/bygsjw_sj/touch/forum/viewthread_activity.php new file mode 100644 index 0000000..664ac4a --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_activity.php @@ -0,0 +1,178 @@ + + +
        + +
        +
        {lang activity_type}: $activity[class]
        +
        {lang activity_starttime}: + + {lang activity_start_between} + + $activity[starttimefrom] + +
        +
        {lang activity_space}: $activity[place]
        +
        {lang gender}: + + {lang male} + + {lang female} + + {lang unlimited} + +
        + +
        {lang activity_payment}: $activity[cost] {lang payment_unit}
        + +
        + +
        +
        {lang activity_already}: + $allapplynum {lang activity_member_unit} + + {lang activity_mod} + +
        +
        +
        + +
        {lang activity_about_member}: + $aboutmembers {lang activity_member_unit} +
        + + +
        {lang post_closing}: $activity[expiration]
        + +
        + + +

        {lang activity_wait}{lang activity_join_audit}

        + + + + + +

        + +

        + + + +
        +
        + +
        + + + + + +
        + +
        {lang activity_join}
        + +

        {lang activity_no_member}

        +

        {lang activity_join_group}

        + +
        + + +

        {lang activity_need_credit} $activity[credit] {$_G['setting']['extcredits'][$_G['setting']['activitycredit']][title]}

        + + +
        +

        {lang activity_paytype}

        +
        +

        + +

        +

        + {lang payment_unit} +

        +
        +
        + + + + +
        + $settings[$fieldid][title]* + $htmls[$fieldid] +
        + + + + + +
        + $extname +
        + + +
        + +
        +
        + +

        {$_G['setting']['extcredits'][$_G['setting']['activitycredit']][title]} {lang not_enough}$activity['credit']

        + + + + + +
        +
        + +
        + +
        + +
        {lang activity_join_cancel}
        +
        + + +
        + +
        +
        +
        + + +
        $post[message]
        + + +
        +

        {lang activity_new_join} ($applynumbers {lang activity_member_unit})

        + + + + + + + + + + + + + + + + + +
         {lang activity_payment}{lang activity_jointime}
        + $apply[username]    + $apply[payment] {lang payment_unit}{lang activity_self}$apply[dateline]
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_debate.php b/template/bygsjw_sj/touch/forum/viewthread_debate.php new file mode 100644 index 0000000..a50f980 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_debate.php @@ -0,0 +1,53 @@ + + +
        +
        + {lang debate_square_point} ($debate[affirmvotes]) ({lang debater}:$debate[affirmdebaters]) +

        $debate[affirmpoint]

        +

        + {lang debate_support}{lang debate_square_point}

        +
        +
        + {lang debate_opponent_point} ($debate[negavotes]) ({lang debater}:$debate[negadebaters]) +

        $debate[negapoint]

        +

        {lang debate_support}{lang debate_opponent_point}

        +
        +
        + +

        {lang endtime}: $debate[endtime] {lang debate_umpire}: $debate[umpire]

        + + + +

        + + {lang debate_umpire_end} + + {lang debate_umpirepoint_edit} + +

        + +
        +
        + +
        $post[message]
        + + + +
        +
        + + + + + + + + + + {lang debate_comment_dateline}: $debate[endtime] +
        +

        {lang debate_umpirepoint}: $debate[umpirepoint]

        +

        {lang debate_bestdebater}: $debate[bestdebater]

        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_list.php b/template/bygsjw_sj/touch/forum/viewthread_list.php new file mode 100644 index 0000000..db80356 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_list.php @@ -0,0 +1,417 @@ + + + + + + + + + +
        $_G[forum_threadstamp][text]
        + +
        +
        + +
        + + {lang warn_get} + + +

        $post[subject]

        + + +
        {lang message_banned}
        + +
        {lang message_single_banned}
        + +
        {lang message_ishidden_hiddenreplies}
        + + + + + +
        {lang admin_message_banned}
        + +
        {lang admin_message_single_banned}
        + + + +
        {lang thread_replycredit_tips1} {lang thread_replycredit_tips2}{lang thread_replycredit_tips3}
        + + + +
        {lang pay_threads}: $_G[forum_thread][price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]} {lang pay_view}
        + + + + + {$threadsortshow[typetemplate]} + + + {lang has_expired} + + + + + + + + + + + + + +
        {$_G[forum][threadsorts][types][$_G[forum_thread][sortid]]}
        {$option[title]}: + + + + {$option[title]} + + {$option[value]} + + {$option[unit]} + + - + +
        + + + + + + + +
        +
        +

        + + {$_G['setting']['guesttipsinthread']['text']} + + {lang guesttipsinthread_text} + +

        +

        {lang attach_nopermission_login}

        +
        +
        + + $post[message] + + + + + + + + + + + + $threadplughtml + $post[message] + + $post[message] + + + $post[message] + + + +
        + + +
        + {lang attachment}: {lang attach_nopermission}{lang attach_nopermission_login} +
        + + + +
          {echo showattach($post, 1)}
        + +
          {echo showattach($post, 1)}
        + + + +
          {echo showattach($post)}
        + + + + + + +
        +

        打赏打赏评分

        + + {lang removerate} + +
          + +
        • + +
        • + +
        + 查看全部 +
        + + + + + + + + + + +
        {lang member_signature_banned}
        + +
        {$post['signature']}
        + +
        {$_G['setting']['globalsightml']}
        + + +
        + + + + + + + + +
        + + + {lang rate} + + + + $_G['setting']['recommendthread'][addtext]$post[postreview][support] + + + + + {lang edit} + + + + + {lang reply} + + {lang reply} + + + + + {lang reward_set_bestanswer} + +
        + + +
        + +
        +
        + + + + + + +
        +
        {$forum_view_gg}
        +
        + + +
        + + + + +
        +
        +

        相关推荐

        +
        +
          + + + if ($_G['style']['liebiaotu'] == "on") { + $list_img1 = byg_threadlist_img($var['tid'], $var['authorid'], 3); + $img_number = count($list_img1); + } + +
        • + + + + +
          + +
          + + +
          + +
          + +
          + +
          + +
          + + {$var[author]} + + {$_G[setting][anonymoustext]} + + + 阅读{$var[views]} +
          +
        • + +
        +
        查看更多
        +
        + + +
        + + + +
        + 没有回复 +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_node.php b/template/bygsjw_sj/touch/forum/viewthread_node.php new file mode 100644 index 0000000..d1396ec --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_node.php @@ -0,0 +1,126 @@ + + + + + +
        + 头像 +
        + +
        + + {lang warn_get} + + +

        $post[subject]

        + + +
        {lang message_banned}
        + +
        {lang message_single_banned}
        + +
        {lang message_ishidden_hiddenreplies}
        + + + + + +
        {lang admin_message_banned}
        + +
        {lang admin_message_single_banned}
        + + +
        {lang pay_threads}: $_G[forum_thread][price] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]} {lang pay_view}
        + + + + + + {lang has_expired} + +
        +

        $_G[forum][threadsorts][types][$_G[forum_thread][sortid]]

        + + + $option[title]: $option[value] $option[unit]--
        + + +
        + + + + + + $post[message] + + + + + + + + + + + + $threadplughtml + $post[message] + + $post[message] + + + $post[message] + + + +
        + + +
        + {lang attachment}: {lang attach_nopermission}{lang attach_nopermission_login} +
        + + + +
          {echo showattach($post, 1)}
        + +
          {echo showattach($post, 1)}
        + + + +
          {echo showattach($post)}
        + + + +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_pay.php b/template/bygsjw_sj/touch/forum/viewthread_pay.php new file mode 100644 index 0000000..978be6a --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_pay.php @@ -0,0 +1,19 @@ + + + +
        $thread[freemessage]
        + + +
        + {lang pay} + + {lang have} $thread[payers] {lang people_buy}  + + {lang pay_comment} +
        {lang pay_free_time} +
        + + {lang have} $thread[payers] {lang people_buy}  + {lang pay_comment} +
        {lang pay_free_time} + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_poll.php b/template/bygsjw_sj/touch/forum/viewthread_poll.php new file mode 100644 index 0000000..b10f064 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_poll.php @@ -0,0 +1,76 @@ + + +
        $post[message]
        + +
        +
        + +
        + {lang poll_multiple}{lang thread_poll}: ( {lang poll_more_than} ){lang poll_single}{lang thread_poll} , {lang poll_after_result}, {lang poll_voterscount} +
        + + +

        + {lang poll_count_down}: + + $_G[forum_thread][remaintime][0] {lang days} + $_G[forum_thread][remaintime][1] {lang poll_hour} + $_G[forum_thread][remaintime][2] {lang poll_minute} + +

        + +

        {lang poll_end}

        + + +
        + +
        + + + + $imginfo[filename] + + 没有图片 + + + + + + + +
        +
        +
        +
        + $option[percent]% ($option[votes]) +
        + +
        + + +
        + + + ({lang poll_msg_overt}) + +
        + +
        + + {lang poll_msg_allwvote_user} + + {lang poll_msg_allwvoteusergroup} + +
        + +
        + {lang poll_msg_allowvotepolled} +
        + +
        + {lang poll_msg_allowvotethread} +
        + +
        +
        +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_reward.php b/template/bygsjw_sj/touch/forum/viewthread_reward.php new file mode 100644 index 0000000..e40c30b --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_reward.php @@ -0,0 +1,43 @@ + + +
        +
        + {lang thread_reward}{$rewardprice}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} + {if $_G['forum_thread']['price'] > 0}({lang unresolved}){elseif $_G['forum_thread']['price'] < 0}({lang resolved}){/if} +
        + +
        + 我来回答 + 您的回答被采纳后将获得{$rewardprice}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][2]][title]} +
        + +
        +
        $post[message]
        + + +
        {lang attachment}: {lang attach_nopermission}{lang attach_nopermission_login}
        + + + {echo showattach($post, 1)} + + + {echo showattach($post)} + + + + + +
        +

        {lang reward_bestanswer}

        +
        +
        $bestpost[avatar]
        +
        +

        + $bestpost[author] + {lang view_full_content} +

        +
        $bestpost[message]
        +
        +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/forum/viewthread_trade.php b/template/bygsjw_sj/touch/forum/viewthread_trade.php new file mode 100644 index 0000000..1186711 --- /dev/null +++ b/template/bygsjw_sj/touch/forum/viewthread_trade.php @@ -0,0 +1,79 @@ + + + + + +
        + {$post[message]} +
        + + +
        + +
        + {lang post_trade_totalnumber}: $tradenum + + {lang trade_mod} + +
        + + + + +
        +
        + + $trade[subject] + + $trade[subject] + +
        +
        +

        $trade[subject]

        +
        +
        {lang trade_type_viewthread}: + {lang trade_new} + {lang trade_old} + {lang trade_type_buy} +
        +
        {lang trade_remaindays}: + + {lang trade_timeout} + + {$trade[expiration]}{lang days}{$trade[expirationhour]}{lang trade_hour} + + {lang trade_timeout} + +   + +
        +
        +
        + + $trade[price] {lang payment_unit}   + + + {lang trade_additional} $trade[credit] {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]][unit]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][5]][title]} + +

        + + $trade[costprice] {lang payment_unit} + + + {lang trade_additional} $trade[costcredit] {$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][unit]}{$_G[setting][extcredits][$_G['setting']['creditstransextra'][5]][title]} + +

        +
        +
        +
        + + +
        {$post[counterdesc]}
        + + {lang trade_nogoods} + +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group.php b/template/bygsjw_sj/touch/group/group.php new file mode 100644 index 0000000..1ca8e7f --- /dev/null +++ b/template/bygsjw_sj/touch/group/group.php @@ -0,0 +1,130 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + {$_G[setting][navs][3][navname]} + + {$groupnav} + + {lang group_create} + +
        + 返回 +
        +
        + + + + +
        +
        +
        +
        + $_G[forum][name] +
        +
        + {$_G[forum][name]} + {lang favorite}{lang favorite} + +
        + + + 退出退组退群 + +
        + + 待审核 + +
        + + + +
        + +
        +

        {lang posts} {$_G[forum][posts]}/{lang member} {$_G[forum][membernum]}/{lang credits} {$_G[forum][commoncredits]}/{lang group_member_rank} {$groupcache[ranking][data][today]}

        +
        +
        + +
        $_G[forum][description]
        + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_attentiongroup.php b/template/bygsjw_sj/touch/group/group_attentiongroup.php new file mode 100644 index 0000000..9a3606b --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_attentiongroup.php @@ -0,0 +1,132 @@ + + + + + +
        + +
        + + + + + + + + +
        +
        +

        {lang select_focus_group}

        +
        +
        + + + +
        +
        +
          + + +
        • + + +
        • +
        +
        +
        +
          + + +
        • + + +
        • +
        +
        +
        +

        + + +

        + +
        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_create.php b/template/bygsjw_sj/touch/group/group_create.php new file mode 100644 index 0000000..38c20a3 --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_create.php @@ -0,0 +1,103 @@ + + + +
        +
        +

        {lang group_create_new} +  ({lang group_create_mod}) +

        +
        +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        *{lang group_name}: + +
        *{lang group_category}: + + +
        {lang group_description}: +
        +
        + +
        +
        +
        *{lang group_perm_visit}: + + +
        *{lang group_join_type}: + + + +
        +
        +

        {lang group_create_buildcredits} $_G['group']['buildgroupcredits'] $_G['setting']['extcredits'][$creditstransextra]['unit']{$_G['setting']['extcredits'][$creditstransextra]['title']}

        + +
        +
        +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_index.php b/template/bygsjw_sj/touch/group/group_index.php new file mode 100644 index 0000000..87d79aa --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_index.php @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + +
        {lang forum_nothreads}
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_invite.php b/template/bygsjw_sj/touch/group/group_invite.php new file mode 100644 index 0000000..cb5b90a --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_invite.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_list.php b/template/bygsjw_sj/touch/group/group_list.php new file mode 100644 index 0000000..d2895b2 --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_list.php @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + {$multipage} + +
        {lang forum_nothreads}
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_manage.php b/template/bygsjw_sj/touch/group/group_manage.php new file mode 100644 index 0000000..03f6c80 --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_manage.php @@ -0,0 +1,420 @@ + + + + + + + + + + +
        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        *{lang group_name}:
        *{lang group_category}: + + +
        {lang group_description}: +
        +
        + +
        +
        +
        {lang group_perm_visit}: + + +
        {lang group_join_type}: + + + + + +

        {lang group_close_notice}

        + +
        {lang subdomain}: + http://.{$_G['setting']['domain']['root']['group']} +

        + {lang group_domain_message}
        + {lang group_edit_domain_message} +

        +
        {lang group_icon}: + +

        + {lang group_icon_resize} + +
        {lang group_image_filesize_limit} + +

        + + + +
        +
        + +
        +
        + +
        + + +

        + + {lang pass_all}|{lang ignore_all} + +

        +
        + +
        +
        +
        + $user[username] +

        $user['joindateline']

        +
        +
        +   +
        +
        + +
        + $multipage + +

        {lang group_no_member_moderated}

        + + + + +
        + + + +
        +
        +

        {lang group_admin_member}

        +
        + +
        + + +
        +
        +

        {lang member}

        +
        + +
        + +
        + + + + + +
        + $multipage +
        + + +

        {lang group_level_cannot_do}

        + + +
        +
        + +
        + + + + + + + + + + + + + + + +
        {lang threadtype_turn_on}: + + +

        {lang threadtype_turn_on_comment}

        +
        {lang threadtype_required}: + + +

        {lang threadtype_required_force}

        +
        {lang threadtype_prefix}: + + +

        {lang threadtype_prefix_comment}

        +
        +
        +
        +

        {lang threadtype}

        + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang delete}{lang enable}{lang displayorder}{lang threadtype_name}
        {lang threadtype_add}
        +
        +
        + +
        +
        +
        + + + +
        +
        + {lang group_demise_comment} +
        {lang group_demise_notice}
        +
        +
        + +
        +
        +

        {lang transfer_group_to}:

        +
        + +
        +
        + {lang group_input_password} + +
        +
        + +
        +
        +
        + +

        {lang group_no_admin_member}

        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_memberlist.php b/template/bygsjw_sj/touch/group/group_memberlist.php new file mode 100644 index 0000000..c5f8fd2 --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_memberlist.php @@ -0,0 +1,55 @@ + + + + + +
        +
        +

        {lang group_admin_member}

        +
        + +
        + + +
        +
        +

        {lang member}

        +
        + +
        + + $multipage + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_my.php b/template/bygsjw_sj/touch/group/group_my.php new file mode 100644 index 0000000..0ef8f1a --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_my.php @@ -0,0 +1,245 @@ + + + + + + +
        + +
        + + + + + + + + + + + + +
        + +
        + + + + +
        +
        +

        {$usergroups['groups'][$groupid]}

        + {lang more}› +
        +
          + + + if ($_G['style']['liebiaotu'] == "on") { + $thread_authorid = byg_thread_authorid($tid); + $list_img1 = byg_threadlist_img($tid, $thread_authorid, 3); + $img_number = count($list_img1); + } + +
        • + + + + +
          + +
          + + +
            + +
          • + +
          • + +
          + +
          + {$thread[lastpost]}   + + 回复数{$thread[replies]} + + + 查看数{$thread[views]}   + +
          +
        • + +
        +
        + + + +
        +
        +

        {lang last_topic_in_group}{lang my_last_topic_in_group}

        +
        + +
          + + + if ($_G['style']['liebiaotu'] == "on") { + $thread_authorid = byg_thread_authorid($tid); + $list_img1 = byg_threadlist_img($tid, $thread_authorid, 3); + $img_number = count($list_img1); + } + +
        • + + + + +
          + +
          + + +
            + +
          • + +
          • + +
          + +
          + {$thread[groupname]} + + 回复数{$thread[replies]} + + +   查看数{$thread[views]}   + +
          +
        • + +
        + +
        {lang no_related_posts}
        + +
        + $multipage + + + +
        +
        +

        {lang my_manage_group} {lang my_join_group}

        +
        + +
        + $multipage + +
        {lang no_group_create_now} {lang no_group_join}
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_recommend.php b/template/bygsjw_sj/touch/group/group_recommend.php new file mode 100644 index 0000000..cb5b90a --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_recommend.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/group_right.php b/template/bygsjw_sj/touch/group/group_right.php new file mode 100644 index 0000000..cb5b90a --- /dev/null +++ b/template/bygsjw_sj/touch/group/group_right.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/index.php b/template/bygsjw_sj/touch/group/index.php new file mode 100644 index 0000000..4118c5e --- /dev/null +++ b/template/bygsjw_sj/touch/group/index.php @@ -0,0 +1,85 @@ + + + + + +
        + +
        + + + + + +
        +
        +

        {lang recommend_group}

        + {lang my_group}› +
        + +
        + +
        +
        +

        {lang group_categories}

        + + + {lang group_create}› + + {lang group_create}› + + +
        + +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/group/type.php b/template/bygsjw_sj/touch/group/type.php new file mode 100644 index 0000000..ad676bb --- /dev/null +++ b/template/bygsjw_sj/touch/group/type.php @@ -0,0 +1,102 @@ + + + + + +
        + +
        + + + + + +
        +
        +

        $curtype[name]

        + + + {lang group_create}› + + {lang group_create}› + + +
        + + + + + + + +
        + + + + {lang group_total_numbers} +
        + + $multipage + +
        {lang group_category_no_groups}
        + +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/follow_feed.php b/template/bygsjw_sj/touch/home/follow_feed.php new file mode 100644 index 0000000..df6593d --- /dev/null +++ b/template/bygsjw_sj/touch/home/follow_feed.php @@ -0,0 +1,409 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang follow_add}{lang follow_follower}{lang follow} +
        + + 返回 +
        +
        + + + + + + + + +
        + + + + + + + + + +
        +
          + +
        + + + + +
        + + + + + + + +
        + +
        +

        + {lang follow_following_null}{lang follow_no_content} + +
        + {lang follow_add_special_tip}{lang follow_add_special_following} +
        + +

        + + + +
        +
        +

        {lang follow_recommend}

        +
        + +
        + +
        + + + + +
        + +
        + +
        +
        + +

        {lang follow_del}

        + + +

        {lang follow_follower_mutual}|{lang did_not_follow_to_me}|{lang follow_del}

        + +

        {lang follow_add}

        + + +
        +
        $fuser['fusername'] ( {$fuser['bkname']} )
        +

        {lang follow_recent_note}: $fuser['recentnote']

        +

        + {lang comefrom}: $memberprofile[$fuid]['residecountry'] $memberprofile[$fuid]['resideprovince'] $memberprofile[$fuid]['residecity']   + {lang follow_follower}: $memberinfo[$fuid]['follower']{lang person}   + {lang follow_add}: $memberinfo[$fuid]['following']{lang person}   + + | + {lang follow_mod_bkname}{lang follow_add_bkname} + + | + {lang follow_del_special_following}{lang follow_add_special_following} + + +

        + +
        +
        + + +

        {lang follow_follower_mutual}|{lang did_not_follow_to_me}|{lang follow_del}

        + +

        {lang follow_add}

        + + +
        +
        $fuser['username']
        +

        {lang follow_recent_note}: $fuser['recentnote']

        +

        + {lang comefrom}: $memberprofile[$fuid]['residecountry'] $memberprofile[$fuid]['resideprovince'] $memberprofile[$fuid]['residecity']   + {lang follow_follower}: $memberinfo[$fuid]['follower']{lang person}   + {lang follow_add}: $memberinfo[$fuid]['following']{lang person} +

        + +
        + +
        +
        $multi
        +
        + +
        +
        +
          +
        • +
          +

          + + + {lang follow_you_following_none}{lang follow_hall}{lang follow_fetch_interested_user} + + {lang follow_you_follower_none1}{lang follow_add_feed}{lang follow_you_follower_none2} + + + + {lang follow_user_following_none} + + {lang follow_user_follower_none} + + + +

          +
          +
        • +
        +
        +
        + + +
        + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/follow_feed_li.php b/template/bygsjw_sj/touch/home/follow_feed_li.php new file mode 100644 index 0000000..e293207 --- /dev/null +++ b/template/bygsjw_sj/touch/home/follow_feed_li.php @@ -0,0 +1,72 @@ + + + + + + + + + +
      • +
        + + +
        +
        + +
        + $feed['note'] +
        +
        + + + + + + + + + + +
        +
        + + +
      • + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_blog_list.php b/template/bygsjw_sj/touch/home/space_blog_list.php new file mode 100644 index 0000000..8ed5842 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_blog_list.php @@ -0,0 +1,173 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang blog} +
        + + {lang post_new_blog} + + + 返回 + +
        +
        + + + + + + + + + + + + +
        +
        +
        + +
        +
        +
        + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_blog_view.php b/template/bygsjw_sj/touch/home/space_blog_view.php new file mode 100644 index 0000000..58d816b --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_blog_view.php @@ -0,0 +1,126 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang blog} + + 内容 +
        + + {lang post_new_blog} + + + 返回 + +
        +
        + + + +
        +
        + + [{$classarr['classname']}] + + + [$blog['catname']] + + $blog['subject'] + ({lang pending}) +
        +
        +
        +
        +
          +
        • + + + {$friendsname[$blog[friend]]} + + + + + $space['username'] + + +
        • +
        • + $blog['viewnum']$blog['replynum'] + +
        • +
        +
        + $blog[message] +
        +
        + +
        +
        +
        +
        +
        + {lang blog_comment} +
        +
        +
          + + + +
        +
        + + +
        +
        +
        +
          +
        • + + + +
        • +
        • + +
        • +
        + + + + + + + + +
        +
        +
        + + +
        $multi
        +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_click.php b/template/bygsjw_sj/touch/home/space_click.php new file mode 100644 index 0000000..4444d84 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_click.php @@ -0,0 +1,48 @@ + + + + + + + + + + + +
        + + +
        +
        + {$value[clicknum]} +
        +
        + + $value[name]
        $value[name] +
        +
        + + + +

        {lang position_friend}

        +
        +
          + +
        • + +
          + +
          $value[clickname]
          + +
        • + +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_comment_li.php b/template/bygsjw_sj/touch/home/space_comment_li.php new file mode 100644 index 0000000..8ed1af3 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_comment_li.php @@ -0,0 +1,45 @@ + + +
      • +
        + + + + + + + hidden + + +
        +

        + + {$value['author']} + + $_G['setting']['anonymoustext'] + +

        +
        + ({lang moderate_need}) +
        + + {lang reply} + + + + {lang edit} + + + {lang delete} + + +
        +
        +
        +
        + +
        $value['message'] {lang moderate_not_validate}
        + + + +
      • \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_favorite.php b/template/bygsjw_sj/touch/home/space_favorite.php new file mode 100644 index 0000000..aaa0d82 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_favorite.php @@ -0,0 +1,80 @@ + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的收藏 +
        + + 返回 +
        +
        + + + + + + + + + + +$multi + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_friend.php b/template/bygsjw_sj/touch/home/space_friend.php new file mode 100644 index 0000000..27ee4de --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_friend.php @@ -0,0 +1,93 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的好友 +
        + + 返回 +
        +
        + + + + + + + + + + +

        + {lang count_member} +

        + +
        + +
        + $multi + + +
        {lang count_member}
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_menu.php b/template/bygsjw_sj/touch/home/space_menu.php new file mode 100644 index 0000000..a24bcae --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_menu.php @@ -0,0 +1,88 @@ + + + + +
        +
        +
        +
        头像
        +

        $space[username]

        + +
        + + + + 关注{lang follow_add}TA + + 关注{lang follow_del} + + + + + 好友{lang add_friend} + + 好友{lang ignore_friend} + + + 消息发消息 +
        + +
        +
        + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_notice.php b/template/bygsjw_sj/touch/home/space_notice.php new file mode 100644 index 0000000..ebf2dc2 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_notice.php @@ -0,0 +1,84 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的提醒 +
        + + 返回 +
        +
        + + + + + + + +
        +
          + +
        • +
          + + + + 头像 + +
          +
          + + {$value[author]} + {$value[note]} + + {$value[note]} + +
          + +
          {lang ignore_same_notice_message}
          + +
        • + +
        +
        +
        $multi
        + + + + +
        {lang no_notice}
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_pm.php b/template/bygsjw_sj/touch/home/space_pm.php new file mode 100644 index 0000000..ef2426d --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_pm.php @@ -0,0 +1,205 @@ + + + + + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的消息 +
        + + 发消息 +
        +
        + + + + + + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的消息 + + {lang viewmypm} +
        + + 返回 +
        +
        + + + + + +
        +
        + +

        {lang no_corresponding_pm}

        + + + + + $multi + +
        +
        + + + + + + +
        +
        +
        +
        + + + +
        +
        +
        + + + + + +
        +

        {lang sendmultipmwho}{lang sendmultipmsystem}

        +

        +
        +
        +
        +

        $grouppm[message]

        + +

        + {lang reply} $grouppm[author] +

        + +
        +
        +
        + +
        + {lang no_corresponding_pm} +
        + + + + +
        + {lang user_mobile_pm_error} +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_pm_node.php b/template/bygsjw_sj/touch/home/space_pm_node.php new file mode 100644 index 0000000..4ea8095 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_pm_node.php @@ -0,0 +1,25 @@ + + + +
        +
        头像
        +
        +
        +
        $value[message]
        +
        +
        +
        +
        +
        + +
        +
        头像
        +
        +
        +
        $value[message]
        +
        +
        +
        +
        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_profile.php b/template/bygsjw_sj/touch/home/space_profile.php new file mode 100644 index 0000000..fb95f36 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_profile.php @@ -0,0 +1,269 @@ + + + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + + 个人中心 + 我的资料 + + {$space[username]} 的资料 + +
        + + 返回 +
        +
        + + + + + + + + + + + + $byg_avatar = false; + if(isset($_COOKIE["byg_avatar"])){ + $byg_avatar = true; + }else{ + setcookie("byg_avatar", 1, time()+5); + } + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 +
        + + 返回 +
        +
        + + + + +
        + +
        +
        + +
        + +
          +
        • $space['credits']{lang credits}
        • + + +
        • {$space["extcredits$key"]}{$value['unit']}$value['title']
        • + + +
        + + + + +
        {$home_gg}
        + + + + + +
        + + + + + + +
        + + + +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_profile_body.php b/template/bygsjw_sj/touch/home/space_profile_body.php new file mode 100644 index 0000000..d59876f --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_profile_body.php @@ -0,0 +1,183 @@ + + +
        + + +
        +

        + {$space[username]} + + 在线  + + (UID: {$space[uid]} + + + , $_G[$isfriendinfo][note] + + ) +

        +
          + + +
        • {lang second_domain}:$spaceurl
        • + + +
        • {lang space_visits}:$space[views]
        • + + +
        • Email:$space[email]
        • + +
        • {lang email_status}:{lang profile_verified}{lang profile_no_verified}
        • +
        +
          +
        • {lang spacenote}:$space[spacenote]
        • +
        • {lang permission_basic_status}:$space[customstatus]
        • +
        • {lang personal_signature}:
          $space[sightml]
        • +
        + +
          + +
        • $value[title]:$value[value]
        • + +
        +
        + + +
        +

        {lang medals}

        +

        + + + $medal[name] + + +

        +
        + + + + + + + +
        +

        {lang profile_verify}

        + + + + + $verify[title]{$verify[title]}  + + $verify[title]{$verify[title]}  + + + + +
        + + + +
        +

        {lang manage_forums}

        + + {$value}   + +
        + + +
        +

        {lang joined_group}

        + + {$value['name']}   + +
        + + +
        +

        {lang active_profile}

        + +
          +
        • {lang online_time}:$space[oltime] {lang hours}
        • +
        • {lang regdate}:$space[regdate]
        • +
        • {lang last_visit}:$space[lastvisit]
        • + +
        • {lang register_ip}:$space[regip] - $space[regip_loc]
        • +
        • {lang last_visit_ip}:$space[lastip]:$space[port] - $space[lastip_loc]
        • + +
        • {lang last_activity_time}:$space[lastactivity]
        • +
        • {lang last_post_time}:$space[lastpost]
        • +
        • {lang last_send_email}:$space[lastsendmail]
        • +
        • {lang time_offset}: + + $timeoffset[$space[timeoffset]] +
        • +
        +
        + +
        +

        {lang stat_info}

        +
          +
        • {lang used_space}:$space[attachsize]
        • + +
        • {lang eccredit_sellerinfo}:$space[buyercredit]
        • + + +
        • {lang eccredit_buyerinfo}:$space[sellercredit]
        • + +
        • {lang credits}:$space[credits]
        • + + +
        • $value[title]:{$space["extcredits$key"]} $value[unit]
        • + + +
        +
        +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_task.php b/template/bygsjw_sj/touch/home/space_task.php new file mode 100644 index 0000000..03e9b2d --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_task.php @@ -0,0 +1,136 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang task} +
        + + 返回 +
        +
        + + + + + +
        + + + + + + +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_task_detail.php b/template/bygsjw_sj/touch/home/space_task_detail.php new file mode 100644 index 0000000..cee6d1b --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_task_detail.php @@ -0,0 +1,125 @@ + + +
        +
        +
        $task['name']
        +
        +
        $task['name']
        + + + + ( {lang task_period_hour} ) + + ( {lang task_period_day} ) + + + ( {lang task_period_week} ) + + ( {lang task_period_month} ) + + + +
        $task['description']
        +
        +
        +
        +
        + +
        + 要求 +

        $task['viewmessage']

        +
        + +
        + {lang task_complete_condition} + +
          + +
        • $taskvar['name'] : $taskvar['value']
        • + +
        + +

        + {lang unlimited} +

        + +
        + +
        + {lang task_reward} +

        + + $_G['setting']['extcredits'][$task['prize']]['title'] $task['bonus'] $_G['setting']['extcredits'][$task['prize']]['unit'] + + {lang magics_title} $task['rewardtext'] $task['bonus'] {lang magics_unit} + + {lang medals} $task['rewardtext'] {lang expire} $task['bonus'] {lang days} + + {lang invite_code} $task['prize'] {lang expire} $task['bonus'] {lang days} + + {lang usergroup} $task['rewardtext'] $task['bonus'] {lang days} + + {lang nothing} + +

        +
        +
        + {lang task_apply_condition} + +
          +
        • {lang usergroup}: $task['grouprequired'] {lang task_general_users}{lang task_admins}
        • +
        • {lang task_relatedtask}: $_G['taskrequired']
        • +
        • {lang task_numlimit}: $task['tasklimits']
        • + + +
        • $taskvar['name']: $taskvar['value']
        • + + +
        + +

        + {lang unlimited} +

        + +
        +
        +
        + +
        +
        +
        +
        {lang task_complete} $task['csc']%
        +
        +
        +

        + 领取奖励 + {lang task_quit} +

        + +

        {lang task_group_nopermission}

        + {lang task_newbie_apply} + +

        {lang task_applies_full}

        + {lang task_newbie_apply} + +

        {lang task_lose_on}$task['dateline']

        + +

        {lang task_complete_on}$task['dateline']

        + +

        {lang task_complete_on}$task['dateline']   {$task['t']}{lang task_applyagain}

        + {lang task_newbie_apply} + +

        {lang task_lose_on}$task['dateline']   {$task['t']}{lang task_reapply}

        + {lang task_newbie_apply} + +

        {lang task_complete_on}$task['dateline']   {lang task_applyagain_now}

        + +

        {lang task_lose_on}$task['dateline']   {lang task_reapply_now}

        + + + + {lang task_newbie_apply} + +
        +
        +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_task_list.php b/template/bygsjw_sj/touch/home/space_task_list.php new file mode 100644 index 0000000..b7e1308 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_task_list.php @@ -0,0 +1,65 @@ + + + +
          + +
        • +
          +
          + $task['name'] +
          +
          +

          $task['name']

          + + + {lang credits} $_G['setting']['extcredits'][$task['prize']]['title'] $task['bonus'] $_G['setting']['extcredits'][$task['prize']]['unit'] + + {lang magics_title} $listdata[$task['prize']] $task['bonus'] {lang magics_unit} + + {lang medals} $listdata[$task['prize']] {lang expire} $task['bonus'] {lang days} + + {lang invite_code} $task['prize'] {lang expire} $task['bonus'] {lang days} + + {lang usergroup} $listdata[$task['prize']] $task['bonus'] {lang days} + + +
          +
          + + + {lang task_newbie_apply} + + {lang task_newbie_apply} + + {lang task_newbie_apply} + + + 领取奖励 + + {lang task_complete_on} $task['dateline'] +
          {lang task_applyagain_now}{$task['t']}{lang task_applyagain}
          + + {lang task_lose_on} $task['dateline'] +
          {lang task_applyagain_now}{$task['t']}{lang task_reapply}
          + +
          +
          +
          +

          $task['description']

          +
          + +
          +
          +
          +
          {lang task_complete} $task['csc']%
          +
          +
          + +
        • + +
        + +
        +

        {lang task_nonew}{lang task_nodoing}{lang data_nonexistence}

        +
        + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/space_thread.php b/template/bygsjw_sj/touch/home/space_thread.php new file mode 100644 index 0000000..03d7214 --- /dev/null +++ b/template/bygsjw_sj/touch/home/space_thread.php @@ -0,0 +1,106 @@ + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + {$space[username]} 的回复{$space[username]} 的主题 +
        + + 返回 +
        +
        + + + + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的回复我的主题 +
        + + 返回 +
        +
        + + + +
        +

        主题

        +

        回复

        +
        + + + + +
        + + + + +
        {lang no_related_posts}
        + + $multi +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_avatar.php b/template/bygsjw_sj/touch/home/spacecp_avatar.php new file mode 100644 index 0000000..271d839 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_avatar.php @@ -0,0 +1,209 @@ + + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 修改头像 +
        + + 返回 +
        +
        + + + +
        +

        等待图片上传中,预计时间:*s

        + 如果没有自动返回,请点击这里 +
        +
        + +
        +
        +
        +
        + +
        ×
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        +
        + + + + +
        +
        +
        +
        + + + + +
        + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_blog.php b/template/bygsjw_sj/touch/home/spacecp_blog.php new file mode 100644 index 0000000..eee6dac --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_blog.php @@ -0,0 +1,211 @@ + + + + + +
        +
        {lang delete_blog}
        +
        {lang sure_delete_blog}?
        +
        + + + +
        + + {lang close} +
        +
        +
        + +
        +
        {lang stick_blog}{lang cancel_stick_blog}
        +
        {lang sure_stick_blog}{lang sure_cancel_stick_blog}?
        +
        + + + + +
        + + {lang close} +
        +
        +
        + +

        + {lang create_category} + {lang close} +

        +
        +

        +
        +

        + +

        + + + +

        + {lang adjust_hot} + {lang close} +

        +
        + + + +
        + {lang new_hot}: +
        +

        + +

        +
        + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang blog} + + {lang edit_blog}{lang memcp_blog} +
        + + 返回 +
        +
        + + + +
        + + +
        + +
          +
        • + +
        • +
        • + +
        • + +
          + +
        • + {lang select_site_blog_categories} +
        • +
        • + $categoryselect +
        • + +
        • + +
        • +
        • + +
        • + +
        • + +
        • + + + + + + + + +
        +
        + +
        +
        +
        + +
        +
        +
        +
        + + + +
        +
        +
        +
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_comment.php b/template/bygsjw_sj/touch/home/spacecp_comment.php new file mode 100644 index 0000000..d0b6d80 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_comment.php @@ -0,0 +1,84 @@ + + + + + +
        +
        +
        + + + + +
        + +
        +
        + + {lang cancel} +
        +
        +
        +
        + + + +
        +
        + + + + +
        +

        {lang delete_reply_message}

        +
        +
        + + {lang cancel} +
        +
        +
        + + +
        +
        + + + + + + + +
        + +
        + +
        + + {lang cancel} +
        +
        +
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_credit_base.php b/template/bygsjw_sj/touch/home/spacecp_credit_base.php new file mode 100644 index 0000000..1358c83 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_credit_base.php @@ -0,0 +1,458 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + + 我的积分 + + 充值 + + 转账 + + 兑换 + + 积分规则 + +
        + + 返回 +
        +
        + + + + + + + + + +
          + + + + + +
        • {$credit[title]} : {$credit[unit]}
        • + + + + +
        • {$credit[title]} : {$credit[unit]}
        • + + + +
        • {lang credits} : $_G['member']['credits'] ( $creditsformulaexp )
        • + +
        + + + +
        + + + + + + + + + + + + + + + + + + + + + +
        +

        + 近期记录 +

        +
        {lang operation}{lang logs_credit}{lang detail}{lang changedateline}
        $value['optype']$value['title']$value['credit']$value['opinfo']$value['text']$value['dateline']

        {lang memcp_credits_log_none}

        +
        + + + + + + + +
        style="display:none"> +
        + + + +
        +
          +
        • +  充值的{$_G[setting][extcredits][$_G[setting][creditstrans]][title]}数量 :  + +
        • +
        +
        +
        + {lang memcp_credits_addfunds_rules_ratio} = $_G[setting][ec_ratio] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} +
        {lang memcp_credits_addfunds_rules_min} $_G[setting][ec_mincredits] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} +
        {lang memcp_credits_addfunds_rules_max} $_G[setting][ec_maxcredits] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} +
        {lang memcp_credits_addfunds_rules_month} $_G[setting][ec_maxcreditspermonth] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} +
        +
        + +
        +
        +
        + + + +
        + +
        + + + + + + + + + + + + + + + + + + +
        {lang mode_of_payment} : + +
        {lang card} : + +
        +
        + + + + + + + +
        + + + + + +
        +
        + + + + {$buy_card['text']} + +
        + + + + + + +
        + + + +
        +
          +
        • +
          {lang memcp_credits_transfer} 
          +
          + {$_G[setting][extcredits][$_G[setting][creditstransextra][9]][title]} +
        • +
        • +
          {lang credits_give} 
          +
          +
        • +
        • + +
        • +
        • + +
        • +
        +
        +
        + {lang memcp_credits_transfer_min_balance} $_G[setting][transfermincredits] {$_G[setting][extcredits][$_G[setting][creditstransextra][9]][unit]}
        + {lang credits_tax} $taxpercent +
        +
        + + +
        +
        + + + + +
        + + + + +
        +
          +
        • +
          {lang memcp_credits_exchange} 
          +
          +
          + +
          +
        • +
        • +
          {lang credits_need} 
          +
          +
          + + + + + + +
          +
        • +
        • + +
        • +
        +
        +
        + + {lang memcp_credits_exchange_min_balance} $_G[setting][exchangemincredits]
        + + + + {lang credits_tax} $taxpercent + + +
        +
        + +
        +
        + + + + +{eval + $_TPL['cycletype'] = array( + '0' => '{lang one_time}', + '1' => '{lang everyday}', + '2' => '{lang the_time}', + '3' => '{lang interval_minutes}', + '4' => '{lang open_cycle}' + ); +} +
        +
        +
          +
        • + +
        • +
        +
        +
        +

        {lang activity_award_message}

        +
        + + + + + + + + + + + + + + + + + + + + + + +
        {lang action_name}{lang cycle_range}{lang max_award_per_week}$value[title]
        $value[rulename]$_TPL[cycletype][$value[cycletype]]$value[rewardnum]{lang unlimited_time}+$value[$creditkey]$value[$creditkey]0
        +
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_credit_header.php b/template/bygsjw_sj/touch/home/spacecp_credit_header.php new file mode 100644 index 0000000..99fcb90 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_credit_header.php @@ -0,0 +1,28 @@ + + +
        + +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_credit_log.php b/template/bygsjw_sj/touch/home/spacecp_credit_log.php new file mode 100644 index 0000000..68124ca --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_credit_log.php @@ -0,0 +1,124 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 积分记录 +
        + + 返回 +
        +
        + + + + + + + + + + + + +
        +
          + + +
        • +

          + + + $value['optype'] + + $value['title'] + + + {$value['credit']} +

          +

          + + + $value['opinfo'] + + $value['text'] + + + $value['dateline'] +

          +
        • + +
        +
        + +
        {lang doing_no_replay}
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang action_name}{lang total_time}{lang cycles_num}$value[title]{lang last_award_time}
        $log[rulename]$log[total]$log[cyclenum]$log[$creditkey]
        +
        + + +$multi + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_favorite.php b/template/bygsjw_sj/touch/home/spacecp_favorite.php new file mode 100644 index 0000000..3e0ddf9 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_favorite.php @@ -0,0 +1,52 @@ + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 管理收藏 +
        + + 返回 +
        +
        + + + + +
        + +
        + + + +
        {lang delete_favorite_message}
        +
        {lang cancel}
        +
        + +
        + + + +
        +

        {lang favorite_forum_confirm} {lang favorite_thread_confirm}{$title}

        +

        {lang favorite_description}:

        + +
        +
        {lang cancel}
        +
        + +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_follow.php b/template/bygsjw_sj/touch/home/spacecp_follow.php new file mode 100644 index 0000000..9df254c --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_follow.php @@ -0,0 +1,129 @@ + + + + + +

        + {lang follow_for}$followuser['fusername']{lang follow_add_bkname} + {lang close} +

        + +
        + + + + +
        + + + + + +
        {lang follow_editnote}: +
        +
        +

        + +

        +
        + + + + +
        +

         {lang follow_reply}

        +
        + + + + + +
          +
          + +
          + +
        • +
          +
          +
        • + + +
        + +
        +
        + +
        +
        +
        + + + + +
        + +
        + + + +
        + + +
        +
        + +
        + +
        + +
        + +
        +
        + +
        +
        + + + + + + + false + + +
        +
        + + + + +
        +

        {lang follow_del_feed_confirm}

        +
        +
        + + {lang cancel} +
        +
        +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_footer.php b/template/bygsjw_sj/touch/home/spacecp_footer.php new file mode 100644 index 0000000..aa965b4 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_footer.php @@ -0,0 +1,16 @@ + + +
      • {lang memcp_privacy}
      • +
      • {lang password_security}
      • + +
      • {lang memcp_promotion}
      • + + + + + +
      • $module[name]
      • + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_friend.php b/template/bygsjw_sj/touch/home/spacecp_friend.php new file mode 100644 index 0000000..0338179 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_friend.php @@ -0,0 +1,169 @@ + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的好友 +
        + + 返回 +
        +
        + + + + + + + + + +
        +
        + + + + + +
        {lang determine_lgnore_friend}
        +
        + + {lang cancel} +
        +
        +
        + +
        +
        + + + + +
        +

        {lang friend_note_message}

        + +
        +
        + + {lang cancel} +
        +
        +
        + + +
        + {lang select_friend_application_do} + {lang confirm_all_applications} +
        + + $multi + +
        {lang no_new_friend_application}
        + + +
        +
        + + + + +
        +

        {lang add_friend}

        +
        + + + + +
        {lang add} {$tospace[username]} {lang add_friend_note}:
        + +

        ({lang view_note_message})

        +

        + {lang friend_group}: +

        +
        +
        +
        +
        + + {lang cancel} +
        +
        +
        + +
        +
        + + + + + +
        +

        {lang approval_the_request}

        + + + + + + + +
        +
        +
        + + {lang cancel} +
        +
        +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_header.php b/template/bygsjw_sj/touch/home/spacecp_header.php new file mode 100644 index 0000000..51c38cd --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_header.php @@ -0,0 +1,30 @@ + + + +
        +
        +
        +
          + +
        +
        +
        +
        + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_payment_pay.php b/template/bygsjw_sj/touch/home/spacecp_payment_pay.php new file mode 100644 index 0000000..4e9c074 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_payment_pay.php @@ -0,0 +1,90 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 充值 + + {lang payment_pay} +
        + + 返回 +
        +
        + + + +
        + + + + + +
        {lang payment_pay_order_info}
        +
        +
        +
        {lang payment_pay_order_id}
        +
        {$order['out_biz_no']}
        +
        +
        +
        {lang payment_pay_subject}
        +
        {$order['subject']}
        +
        + +
        +
        {lang payment_pay_description}
        +
        {$order['description']}
        +
        + +
        +
        {lang payment_pay_amount}
        +
        + {lang payment_unit_yang}{$order['amount']} + + ({$order['total_amount']}) + +
        +
        +
        +
        {lang payment_pay_type}
        +
        + +
        +
        + +
        +
        + checked name="pay_channel" type="radio" value="{$channel['id']}"> +
        +
        + +
        + +
        + +
        +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_pm.php b/template/bygsjw_sj/touch/home/spacecp_pm.php new file mode 100644 index 0000000..5d72f23 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_pm.php @@ -0,0 +1,92 @@ + + + + +
        {lang user_mobile_pm_error}
        + + +
        + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 我的消息 + + {lang send_pm} +
        + + 返回 +
        +
        + + + +
        +
        +
          + +
        • + +
        • + +
        • +
        +
        + + +
        +
        +
        + +
        + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_privacy.php b/template/bygsjw_sj/touch/home/spacecp_privacy.php new file mode 100644 index 0000000..116bd02 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_privacy.php @@ -0,0 +1,359 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang memcp_privacy} +
        + + 返回 +
        +
        + + + + + + + + + + + + +
        + + + +

        {lang you_control_see_content}

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang friend_list} + +
        {lang message_board} + +
        {lang personal_feed} + +
        {lang doing} + +

        {lang privacy_setting_message}
        {lang site_might_your_log}

        +
        {lang blog} + +

        {lang privacy_setting_message}
        {lang view_right_setting_effective}

        +
        {lang album} + +

        {lang privacy_setting_message}
        {lang view_right_setting_effective}

        +
        {lang share} + +

        {lang privacy_setting_message}
        {lang view_right_setting_effective}

        +
        + + +

        {lang system_depend_action_message}

        + + + + + + + + + +
          + + + + + + + + + + + + + + +
        + + +

        {lang you_control_other_operation}

        + + + + + + + + + + + + + + + + + +
        {lang add_friends} + +
        {lang add_follow} + +
        + + + + {eval + $iconnames['wall'] = '{lang message}'; + $iconnames['piccomment'] = '{lang pic_comment}'; + $iconnames['blogcomment'] = '{lang blog_comment}'; + $iconnames['sharecomment'] = '{lang share_comment}'; + $iconnames['magic'] = '{lang magics_title}'; + $iconnames['sharenotice'] = '{lang share_notification}'; + $iconnames['clickblog'] = '{lang blog_position}'; + $iconnames['clickpic'] = '{lang pic_position}'; + $iconnames['credit'] = '{lang credits}'; + $iconnames['doing'] = '{lang doing}'; + $iconnames['pcomment'] = '{lang topic_comment}'; + $iconnames['post'] = '{lang topic_reply}'; + $iconnames['show'] = '{lang friend_top}'; + $iconnames['task'] = '{lang task}'; + $iconnames['goods'] = '{lang trade}'; + $iconnames['group'] = $_G['setting']['navs'][3]['navname']; + $iconnames['thread'] = '{lang theme}'; + $iconnames['system'] = '{lang system}'; + $iconnames['friend'] = '{lang friends}'; + $iconnames['debate'] = '{lang debate}'; + $iconnames['album'] = '{lang album}'; + $iconnames['blog'] = '{lang blog}'; + $iconnames['poll'] = '{lang poll}'; + $iconnames['activity'] = '{lang activity}'; + $iconnames['reward'] = '{lang reward}'; + $iconnames['share'] = '{lang share}'; + $iconnames['profile'] = '{lang update_presonal_profile}'; + $iconnames['pusearticle'] = '{lang article_push}'; + } + + + + + + + + + + +
        +

        {lang filtering_rules_title_1}

        +

        {lang filtering_rules_message_1}

        +
          + + + +
        + + +
        + + + + + + + + + + + + + + + + + +
        +

        {lang filtering_rules_title_2}

        +

        {lang filtering_rules_message_2}

        +
          + + + + +
         {lang no_shield_feed_cat}
        + + + + + + + + + + + + + + + + + +
        +

        {lang filtering_rules_title_3}

        +

        {lang filtering_rules_message_3}

        +
          + + + + +
         {lang no_shield_feed_cat}
        + +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_profile.php b/template/bygsjw_sj/touch/home/spacecp_profile.php new file mode 100644 index 0000000..dd5bf6e --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_profile.php @@ -0,0 +1,369 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 密码安全修改资料 +
        + + 返回 +
        +
        + + + + + + + + + +

        + + {lang old_password_comment}{lang wechat_config_newpassword_comment}{lang connect_config_newpassword_comment} + + {lang freeze_pw_tips} + + {lang freeze_email_tips} + + {lang freeze_admincp_tips} + +

        +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        *{lang old_password}
        {lang new_password} + +

        {lang memcp_profile_passwd_comment}

        +
        {lang new_password_confirm} + +

        {lang memcp_profile_passwd_comment}

        +
        {lang email} + +

        + + {lang freeze_email_tips} + + {lang email_been_active} + + $acitvemessage + +

        +

        {lang memcp_profile_email_comment}

        +
        {lang secmobile} + + +

        {lang memcp_profile_secmobile_comment}

        +
        {lang secmobseccode} + + +

        {lang memcp_profile_secmobseccode_comment}

        +
        {lang freeze_reason} + +

        {lang freeze_reason_comment}

        +

        {lang freeze_reason_admincp_comment}

        +
        {lang freeze_remark} + +

        {lang freeze_remark_comment}

        +
        {lang security_question} + +

        {lang memcp_profile_security_comment}

        +
        {lang security_answer} + +

        {lang memcp_profile_security_answer_comment}

        +
        + + + + + +
        + + + +
        +
        +
        + +

        {$_G[username]}

        +
        +
        + + + +

        {lang spacecp_profile_message1}{lang spacecp_profile_message2}

        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang username}$_G[member][username] 
        *$value[title] + $htmls[$key] + + + + + + +
        {lang permission_basic_status} + +
        +
         
        {lang personal_signature} +
        +
        + +
        +
        +
         
        {lang time_zone} + + +

        {lang current_time} :

        +

        {lang time_zone_message}

        +
         
        Email$space[email] 
        + +
        + + +
        + + +
        + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_profile_nav.php b/template/bygsjw_sj/touch/home/spacecp_profile_nav.php new file mode 100644 index 0000000..34578f2 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_profile_nav.php @@ -0,0 +1,20 @@ + + +
        +
        + + + + $value[title] + + + + + + + $module[name] + + + +
        +
        \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_promotion.php b/template/bygsjw_sj/touch/home/spacecp_promotion.php new file mode 100644 index 0000000..77df811 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_promotion.php @@ -0,0 +1,75 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + {lang memcp_promotion} +
        + + 返回 +
        +
        + + + + + + + +
        + +
        +

        + {lang post_promotion_url} +

        + + +

        + + {lang post_promotion_reg} + + {lang post_promotion} + +

        + +
        +
          +
        • +
          {lang post_promotion_url1} :
          +
          + + +
          +
        • +
        • +
          {lang post_promotion_url2} :
          +
          + + +
          +
        • +
        + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_usergroup.php b/template/bygsjw_sj/touch/home/spacecp_usergroup.php new file mode 100644 index 0000000..1d5044f --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_usergroup.php @@ -0,0 +1,469 @@ + + + + +
        + +

        + {lang memcp_usergroups_joinbuy}{lang memcp_usergroups_joinexit} + {lang close} +

        + +
        + + + + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {lang memcp_usergroups_dailyprice} $group[dailyprice] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]}
        {lang memcp_usergroups_credit}$usermaxdays {lang days}
        {lang memcp_usergroups_span} {lang days}
        {lang credits_need}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} + {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]} + +
        {lang memcp_usergroups_explain}: + + {lang memcp_usergroups_join_comment} + + {lang memcp_usergroups_exit_comment} + +
        {lang memcp_usergroups_explain}: {lang memcp_usergroups_free_comment}
        {lang memcp_usergroups_explain}: + + {lang memcp_usergroups_admin_exit_comment} + + {lang memcp_usergroups_exit_comment} + + {lang memcp_usergroups_open_exit_comment} + +
        +
        +

        + +

        +
        + +
        + + +
        + +

        + {lang memcp_usergroups_switch} + {lang close} +

        +
        + + + + + + +
        + + + + + + + +
        {lang memcp_usergroups_main_old}$_G[group][grouptitle]
        {lang memcp_usergroups_main_new}$group[grouptitle]
        +
        +

        + +

        +
        + +
        + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 用户组 +
        + + 返回 +
        +
        + + + +
        + + + + + + + + + + + + + + $forum[name] + + + + + + +
        {lang forum_name}$permlang['perms_'.$perm]
        + + + + + + +  $verifyperm[$fid][$perm] + + + +
        + {lang usergroup_right_message1}  + {lang usergroup_right_message2}  + + {lang usergroup_right_message3} + + +
        + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 用户组 +
        + + 返回 +
        +
        + + + +
        + + +

        + {lang youhave} $usermoney {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} + {lang yourusergroup}: {$_G['cache']['usergroups'][$_G[groupid]]['grouptitle']} +

        + +
        {lang usergroup_expired}
        + + + + + + + + + + + + + + + + + + + + + +
        {lang usergroup}{lang memcp_usergroups_dailyprice}{lang group_expiry_time}
        $group[grouptitle] + + $group[dailyprice] {$_G[setting][extcredits][$_G[setting][creditstrans]][unit]}{$_G[setting][extcredits][$_G[setting][creditstrans]][title]} + + {lang free} + + $group[time] + + + + {lang memcp_usergroups_set_main} + + + + {lang renew} + + {lang memcp_usergroups_exit} + + + + {lang renew} + + {lang main_usergroup} + + + {lang free_buy} + + {lang memcp_usergroups_buy} + +
        + +

        {lang memcp_usergroup_unallow}

        + + +
        + + +
        +
        +
        + + 头像 + + 提醒 + + + + 个人中心 + + 用户组 +
        + + 返回 +
        +
        + + + +
        + + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
         
         
        {lang user_level}
        $permlang['perms_'.$perm]
        {lang permission_menu_post}
        $permlang['perms_'.$perm]
        {lang about_space}
        $permlang['perms_'.$perm]
        {lang permission_menu_attachment}
        $permlang['perms_'.$perm]
        + + + + + + + + +

        {lang my_main_usergroup} - $maingroup[grouptitle]

        {lang credits}: $space[credits]
        + + + + +
          +
        • $tlang - $currentgrouptitle
        • +
        +
        + + + + + +
        + + + + 升级还需积分 $v + + {lang spacecp_usergroup_message2} $group[groupcreditshigher] + + + + 到期: + +
        +
        + +
        + {lang usergroup_right_message1}  + {lang usergroup_right_message2} + + + + + +
        + +{eval +function permtbody($maingroup) { +global $_G, $bperms, $pperms, $sperms, $aperms; +} + + + + + + + $maingroup[$groupbperm] + + {lang permission_basic_disable_sarch}{lang permission_basic_search_title}{lang permission_basic_search_content} + + + + + + + + + + $maingroup[grouptitle] + + + + + + + $maingroup[$grouppperm] {lang bytes} + + +$maingroup[allowrecommend] + + + + + + + + + + + + $maingroup[grouptitle] + + + + + + + $maingroup[$perm]{lang permission_attachment_nopermission} + + + + + + + + + + $maingroup[grouptitle] + + + + + + + $maingroup[$groupaperm]{lang permission_attachment_nopermission} + +

        $maingroup[attachextensions]

        {lang permission_attachment_nopermission} + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/home/spacecp_usergroup_header.php b/template/bygsjw_sj/touch/home/spacecp_usergroup_header.php new file mode 100644 index 0000000..7131108 --- /dev/null +++ b/template/bygsjw_sj/touch/home/spacecp_usergroup_header.php @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/member/getpasswd.php b/template/bygsjw_sj/touch/member/getpasswd.php new file mode 100644 index 0000000..6f92585 --- /dev/null +++ b/template/bygsjw_sj/touch/member/getpasswd.php @@ -0,0 +1,47 @@ + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + {lang getpassword} +
        + + 返回 +
        +
        + + + +
        + +
        + +
        +

        {lang username} : $member[username]

        +

        + {lang register_password_tips}, {lang register_password_length_tips1} $_G['setting']['pwlength'] {lang register_password_length_tips2} +

        + + +
        + +
        +
        + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/member/login.php b/template/bygsjw_sj/touch/member/login.php new file mode 100644 index 0000000..a4a82d6 --- /dev/null +++ b/template/bygsjw_sj/touch/member/login.php @@ -0,0 +1,134 @@ + + + + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 登录 +
        + + 返回 +
        +
        + + + + + + + + + +
        + +

         {lang login}

        + +
        + + + + + + + + + + +
        + + + + +
        +
        {lang getpassword}
        +
        +
        + + +
        + * +
        +
        + * +
        + +
        +
        +
        +
        + + + +
        + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/member/register.php b/template/bygsjw_sj/touch/member/register.php new file mode 100644 index 0000000..8158925 --- /dev/null +++ b/template/bygsjw_sj/touch/member/register.php @@ -0,0 +1,108 @@ + + + + +
        +
        +
        + + 头像 + + 提醒 + + + + 注册 +
        + + 返回 +
        +
        + + + + + +
        +
        + + + + + + + + + +
        +
        + +
        + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/block_update.php b/template/bygsjw_sj/touch/php/block_update.php new file mode 100644 index 0000000..383567a --- /dev/null +++ b/template/bygsjw_sj/touch/php/block_update.php @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/footer_url.php b/template/bygsjw_sj/touch/php/footer_url.php new file mode 100644 index 0000000..55e4d22 --- /dev/null +++ b/template/bygsjw_sj/touch/php/footer_url.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/forum_discuz.php b/template/bygsjw_sj/touch/php/forum_discuz.php new file mode 100644 index 0000000..7375a45 --- /dev/null +++ b/template/bygsjw_sj/touch/php/forum_discuz.php @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/forum_forumdisplay.php b/template/bygsjw_sj/touch/php/forum_forumdisplay.php new file mode 100644 index 0000000..8d24483 --- /dev/null +++ b/template/bygsjw_sj/touch/php/forum_forumdisplay.php @@ -0,0 +1,31 @@ + $v) { + if ($v['endtime'] < time()) { + unset($forum_an[$k]); + } + } +} + +?> \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/forum_forumdisplay_list.php b/template/bygsjw_sj/touch/php/forum_forumdisplay_list.php new file mode 100644 index 0000000..9d6ca80 --- /dev/null +++ b/template/bygsjw_sj/touch/php/forum_forumdisplay_list.php @@ -0,0 +1,46 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/forum_post_forumselect.php b/template/bygsjw_sj/touch/php/forum_post_forumselect.php new file mode 100644 index 0000000..b403f62 --- /dev/null +++ b/template/bygsjw_sj/touch/php/forum_post_forumselect.php @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/function_bygsjw.php b/template/bygsjw_sj/touch/php/function_bygsjw.php new file mode 100644 index 0000000..bfd0be1 --- /dev/null +++ b/template/bygsjw_sj/touch/php/function_bygsjw.php @@ -0,0 +1,53 @@ +fetch_all_by_id($biaoid, 'tid', $tid, 'dateline ASC', array('1','-1')); + foreach ($list_img as $k => $v) { + if ($v['uid'] != $uid) { + unset($list_img[$k]); + } elseif ($v['readperm'] > 0 || $v['price'] > 0) { + unset($list_img[$k]); + } + } + array_splice($list_img, $num); + return $list_img; +} + +function byg_article_img($aid, $num) { + $list_img = C::t('portal_attachment')->fetch_all_by_aid($aid); + foreach ($list_img as $k => $v) { + if ($v['isimage'] != 1) { + unset($list_img[$k]); + } + } + ksort($list_img); + array_splice($list_img, $num); + return $list_img; +} + + +?> \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/header.php b/template/bygsjw_sj/touch/php/header.php new file mode 100644 index 0000000..35759dd --- /dev/null +++ b/template/bygsjw_sj/touch/php/header.php @@ -0,0 +1,131 @@ +fetch_all_by_bid($bids); + foreach ($block as $k => $v) { + foreach ($block_tpl as $k2 => $v2) { + if ($v['bid'] == $v2['bid']) { + $block[$k]['targettplname'] = $v2['targettplname']; + } + } + } + $block1 = $block; + foreach ($block1 as $k => $v) { + if ($v['targettplname'] == $tplname) { + foreach ($block1 as $k2 => $v2) { + if ($k != $k2 && $v['name'] == $v2['name'] && $v2['targettplname'] != $tplname) { + unset($block[$k2]); + } + } + } + } + return $block; +} + +function byg_block_del_unwanted($block) { + $block1 = $block; + foreach ($block1 as $k => $v) { + foreach ($block1 as $k2 => $v2) { + if ($k != $k2 && $v['name'] == $v2['name']) { + if ($v['bid'] >= $v2['bid']) { + unset($block[$k2]); + } else { + unset($block[$k]); + } + } + } + } + $block2 = $block; + foreach ($block2 as $k => $v) { + foreach ($block2 as $k2 => $v2) { + if ($k != $k2 && '0'.$v['name'] == $v2['name']) { + if ($v['bid'] < $v2['bid']) { + unset($block[$k],$block[$k2]); + } else { + unset($block[$k2]); + } + } + } + } + foreach ($block as $k => $v) { + if (substr($v['name'],0,1) == '0') { + unset($block[$k]); + } + } + return $block; +} + +function byg_block_fetch_value($block,$name,$value) { + foreach ($block as $v) { + if ($v['name'] == $name) { + if ($value == 'param') { + $val = unserialize($v[$value]); + } else { + $val = $v[$value]; + } + + } + } + return $val; +} + +function byg_block_filter_class($block) { + $block1 = $block; + foreach ($block1 as $k => $v) { + if (!($v['blockclass'] == 'forum_thread' || $v['blockclass'] == 'portal_article')) { + unset($block[$k]); + } + } + return $block; +} + +$bygsjw_name = ",'简约通用手机版门户首页顶部文字导航1','简约通用手机版门户首页顶部文字导航2','简约通用手机版门户首页顶部文字导航3','简约通用手机版门户首页顶部文字导航4','简约通用手机版门户首页顶部文字导航5','简约通用手机版门户首页顶部文字导航6','简约通用手机版门户首页顶部文字导航7','简约通用手机版门户首页顶部文字导航8','简约通用手机版门户首页顶部文字导航9','简约通用手机版门户首页顶部文字导航10','简约通用手机版门户首页顶部文字导航11','简约通用手机版门户首页顶部文字导航12','简约通用手机版论坛列表页广告','简约通用手机版论坛内容页广告','简约通用手机版论坛导读页广告','简约通用手机版搜索页广告','简约通用手机版门户内容页广告','简约通用手机版统计代码','简约通用手机版尾部导航1','简约通用手机版尾部导航2','简约通用手机版尾部导航3','简约通用手机版尾部导航4','简约通用手机版尾部导航5','简约通用手机版侧边导航1','简约通用手机版侧边导航2','简约通用手机版侧边导航3','简约通用手机版侧边导航4','简约通用手机版侧边导航5','简约通用手机版侧边导航6','简约通用手机版侧边导航7','简约通用手机版侧边导航8','简约通用手机版购买充值卡密'"; +if (CURSCRIPT == 'portal' && CURMODULE == 'index') { + $bygsjw_name = $bygsjw_name . ",'简约通用手机版LOGO','简约通用手机版门户首页欢迎图片','简约通用手机版首页自定义导航1','简约通用手机版首页自定义导航2','简约通用手机版首页自定义导航3','简约通用手机版首页自定义导航4','简约通用手机版首页自定义导航5','简约通用手机版首页自定义导航6','简约通用手机版首页自定义导航7','简约通用手机版首页自定义导航8','简约通用手机版首页自定义导航9','简约通用手机版首页自定义导航10','简约通用手机版门户首页广告','简约通用手机版门户首页广告2','简约通用论坛首页幻灯片','简约通用论坛首页头条','简约通用论坛首页最新','简约通用论坛首页热门','简约通用论坛首页精华','简约通用论坛首页图文推荐','简约通用论坛首页最新活动','简约通用手机版加载更多'"; +} elseif (CURSCRIPT == 'forum' && CURMODULE == 'index') { + $bygsjw_name = $bygsjw_name . ",'简约通用手机版LOGO','简约通用手机版论坛首页广告','简约通用手机版论坛首页广告2','简约通用手机版论坛首页广告3'"; +} elseif (CURSCRIPT == 'home' && CURMODULE == 'space') { + $bygsjw_name = $bygsjw_name . ",'简约通用手机版个人中心页广告','简约通用手机版个人中心导航1','简约通用手机版个人中心导航2','简约通用手机版个人中心导航3','简约通用手机版个人中心导航4','简约通用手机版个人中心导航5','简约通用手机版个人中心导航6'"; +} elseif (CURSCRIPT == 'portal' && CURMODULE == 'list') { + $bygsjw_name = $bygsjw_name . ",'简约通用手机版门户列表页广告','关于我们-介绍','关于我们-愿景','联系我们-位置图片','联系我们-联系方式','加入我们-职位1','加入我们-职位2'"; +} +$bygsjw_name = $bygsjw_name . str_replace(",'",",'0",$bygsjw_name); +$bygsjw_name = "WHERE b.name IN ('简约设计'" . $bygsjw_name . ")"; +$bygsjw_blocks = C::t('common_block')->fetch_all_by_where($bygsjw_name,"","","",",b.title,b.summary,b.cachetime,b.dateline"); +if (CURSCRIPT == 'portal' && CURMODULE == 'index' && !empty($bygsjw_blocks)) { + $bygsjw_blocks = byg_block_first_pc($bygsjw_blocks,'forum/discuz'); +} +$bygsjw_blocks = byg_block_del_unwanted($bygsjw_blocks); + + +?> \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/header_nav.php b/template/bygsjw_sj/touch/php/header_nav.php new file mode 100644 index 0000000..901e3d4 --- /dev/null +++ b/template/bygsjw_sj/touch/php/header_nav.php @@ -0,0 +1,34 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/portal_index.php b/template/bygsjw_sj/touch/php/portal_index.php new file mode 100644 index 0000000..9fda431 --- /dev/null +++ b/template/bygsjw_sj/touch/php/portal_index.php @@ -0,0 +1,70 @@ + $v) { + if ($v['endtime'] < time()) { + unset($forum_an[$k]); + } + } +} + +$bygsjw_update_blocks = $bygsjw_batch_blocks = byg_block_filter_class($bygsjw_blocks); +$bygsjw_batch_block_bids = byg_block_fetch_bids($bygsjw_batch_blocks); +if (!empty($bygsjw_batch_block_bids)){ + include_once libfile('function/block'); + block_get_batch($bygsjw_batch_block_bids); +} + +usort($bygsjw_update_blocks, function($a, $b) { + if ($a['dateline'] == $b['dateline']) return 0; + return ($a['dateline'] < $b['dateline']) ? -1 : 1; +}); +foreach($bygsjw_update_blocks as $block_update) { + if(($block_update['dateline'] < $_G['timestamp'] - $block_update['cachetime']) && ($block_update['cachetime'] > 0)) { + $block_update_bid = $block_update['bid']; + break; + } +} + +?> \ No newline at end of file diff --git a/template/bygsjw_sj/touch/php/portal_list.php b/template/bygsjw_sj/touch/php/portal_list.php new file mode 100644 index 0000000..57fb5af --- /dev/null +++ b/template/bygsjw_sj/touch/php/portal_list.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/comment_li.php b/template/bygsjw_sj/touch/portal/comment_li.php new file mode 100644 index 0000000..eeb2dfa --- /dev/null +++ b/template/bygsjw_sj/touch/portal/comment_li.php @@ -0,0 +1,31 @@ + + + +
      • +
        + + + + 头像 + +
        + + $comment[username] + + {lang guest} + +
        +
        + + + 回复 + + + {lang edit} + {lang delete} + + +
        +
        +

        $comment[message] {lang moderate_not_validate}

        +
      • \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/index.php b/template/bygsjw_sj/touch/portal/index.php new file mode 100755 index 0000000..8cc7986 --- /dev/null +++ b/template/bygsjw_sj/touch/portal/index.php @@ -0,0 +1,654 @@ + + + + + + + + + + + + + + + +
        + +
        跳过
        5s
        +
        + + + + + +
        + + +
        +
        + +

        + + + LOGO + + LOGO + + +

        + +
        + +
        +
        +
        + + + + + + + +
        +
        +
        +
          + + + +
        • + + + + + + + + +
        • + +
        +
        +
        +
        +
        + +

        幻灯片模块:无数据,请看教程【第6步】

        + + + + + + + + + + +
        +
        +
          + + + +
        • +

          +
        • + +
        +
        +
        + +

        头条模块:无数据,请看教程【第6步】

        + + + + + + + $diy_nav_num = 0; + if($diy_nav1){ $diy_nav_num++;} + if($diy_nav2){ $diy_nav_num++;} + if($diy_nav3){ $diy_nav_num++;} + if($diy_nav4){ $diy_nav_num++;} + if($diy_nav5){ $diy_nav_num++;} + if($diy_nav6){ $diy_nav_num++;} + if($diy_nav7){ $diy_nav_num++;} + if($diy_nav8){ $diy_nav_num++;} + if($diy_nav9){ $diy_nav_num++;} + if($diy_nav10){ $diy_nav_num++;} + +
        + + +
        + + + + +
        + {lang announcement} +
        + +
        + + + +
        + + + + + +
        {$portal_gg1}
        + + + + +
        + +
        + +
        + +
        + + +
        + +
        + + +
        + +
        + +
        +
        + + + +
        {$portal_gg2}
        + + + + + + +
        +
        + +

        {$b5_title1}图文推荐

        +
        + +
        + +

        图文推荐模块:无数据,请看教程【第6步】

        + + + + + + + +
        +
        + +

        {$b6_title1}最新活动

        + +
          + +
          +
          +
          +
            + + + +
          • +
            + + + + + + + +
            +

            HOT 

            +
            +
          • + +
          +
          +
          +
          + +

          最新活动模块:无数据,请看教程【第6步】

          + + + + + +
          + + + +
            + + + +

            加载更多模块:无数据,请看教程【第6步】

            + +
            + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/index.php.bak250619 b/template/bygsjw_sj/touch/portal/index.php.bak250619 new file mode 100755 index 0000000..5366e89 --- /dev/null +++ b/template/bygsjw_sj/touch/portal/index.php.bak250619 @@ -0,0 +1,628 @@ + + + + + + + + + + + + + +
            + +
            跳过
            5s
            +
            + + + + + +
            + + +
            +
            + +

            + + + LOGO + + LOGO + + +

            + +
            + +
            +
            +
            + + + + + + + +
            +
            +
            +
              + + + +
            • + + + + + + + + +
            • + +
            +
            +
            +
            +
            + +

            幻灯片模块:无数据,请看教程【第6步】

            + + + + + + + + + + +
            +
            +
              + + + +
            • +

              +
            • + +
            +
            +
            + +

            头条模块:无数据,请看教程【第6步】

            + + + + + + + $diy_nav_num = 0; + if($diy_nav1){ $diy_nav_num++;} + if($diy_nav2){ $diy_nav_num++;} + if($diy_nav3){ $diy_nav_num++;} + if($diy_nav4){ $diy_nav_num++;} + if($diy_nav5){ $diy_nav_num++;} + if($diy_nav6){ $diy_nav_num++;} + if($diy_nav7){ $diy_nav_num++;} + if($diy_nav8){ $diy_nav_num++;} + if($diy_nav9){ $diy_nav_num++;} + if($diy_nav10){ $diy_nav_num++;} + +
            + + +
            + + + + +
            + {lang announcement} +
            + +
            + + + +
            + + + + + +
            {$portal_gg1}
            + + + + +
            + +
            + +
            + +
            + + +
            + +
            + + +
            + +
            + +
            +
            + + + +
            {$portal_gg2}
            + + + + + + +
            +
            + +

            {$b5_title1}图文推荐

            +
            + +
            + +

            图文推荐模块:无数据,请看教程【第6步】

            + + + + + + + +
            +
            + +

            {$b6_title1}最新活动

            + +
              + +
              +
              +
              +
                + + + +
              • +
                + + + + + + + +
                +

                HOT 

                +
                +
              • + +
              +
              +
              +
              + +

              最新活动模块:无数据,请看教程【第6步】

              + + + + + +
              + + + +
                + + + +

                加载更多模块:无数据,请看教程【第6步】

                + +
                + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/list.php b/template/bygsjw_sj/touch/portal/list.php new file mode 100644 index 0000000..258d0fa --- /dev/null +++ b/template/bygsjw_sj/touch/portal/list.php @@ -0,0 +1,180 @@ + + + + + + + + + +
                +
                +
                + + 头像 + + 提醒 + + + + {lang portal} + + + {$value[catname]} + + + {$cat[catname]} +
                + + 返回 +
                +
                + + + +
                + + + + +
                + +
                + + + + +
                +
                + + + $value[catname] + +
                +
                + + +
                + + + +
                +

                关于我们

                + {$about_block_sum1} + {$about_block_sum2} +

                联系我们

                + {$about_block_sum3} + {$about_block_sum4} +

                加入我们

                + {$about_block_sum5} + {$about_block_sum6} +
                + + + +
                {$portal_list_gg}
                + + + +
                +
                + +
                +
                {$list['multi']}
                + + + + +
                + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/list_list.php b/template/bygsjw_sj/touch/portal/list_list.php new file mode 100644 index 0000000..0e91ff8 --- /dev/null +++ b/template/bygsjw_sj/touch/portal/list_list.php @@ -0,0 +1,24 @@ + + + + + +
                +
                + +
                +
                + + + + + +
                +
                + +
                +
                + $value[dateline] +
                +
                + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/portal_comment.php b/template/bygsjw_sj/touch/portal/portal_comment.php new file mode 100644 index 0000000..dc96b7a --- /dev/null +++ b/template/bygsjw_sj/touch/portal/portal_comment.php @@ -0,0 +1,92 @@ + + +
                +
                + {$data[commentnum]}条评论 +

                {lang latest_comment}

                +
                + +
                + +
                  + + + + + + + +
                + +
                + 没有回复 +
                + + + +
                + 头像 + {lang send_reply_fast_tip} + 导航 + 收藏 + 返回 +
                +
                +
                +
                +
                + + 取消 + +
                +
                + + +
                + + + + + + + + + + + + + + + + + +
                +
                \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/portalcp_comment.php b/template/bygsjw_sj/touch/portal/portalcp_comment.php new file mode 100644 index 0000000..5a03040 --- /dev/null +++ b/template/bygsjw_sj/touch/portal/portalcp_comment.php @@ -0,0 +1,78 @@ + + + + + + [quote]{$comment[username]}: {$comment[message]}[/quote] + + +
                +
                +
                + + 头像 + + 提醒 + + + + {lang portal} + + 编辑内容 +
                + + 返回 +
                +
                + + +
                + + + + +
                + +
                +

                + + +

                +
                + + +
                +
                +
                + + 头像 + + 提醒 + + + + {lang portal} + + 删除回复 +
                + + 返回 +
                +
                + + +
                + + + + +
                {lang comment_delete_confirm}
                +

                + + +

                +
                + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/portal/view.php b/template/bygsjw_sj/touch/portal/view.php new file mode 100644 index 0000000..5436a01 --- /dev/null +++ b/template/bygsjw_sj/touch/portal/view.php @@ -0,0 +1,141 @@ + + + + + +
                +
                +
                + + 头像 + + 提醒 + + + + {lang portal} + + + $value[catname] + + + $cat[catname] + + 内容 +
                + + 返回 +
                +
                + + + +
                + + + + +
                + +
                + + + + +
                +
                + + + $value[catname] + +
                +
                + + +
                + + + +
                +
                +

                $article[title] ({lang moderate_need})({lang ignored})

                +

                + + $article[dateline] + {lang view_publisher} : $article[username]    + {lang view_views} : $article[viewnum]0    + {lang view_comments} : $article[commentnum]0    + {lang view_author_original} : $article[author]    + {lang from} : $article[from]$article[from] + +

                +
                + +
                {lang article_description}: $article[summary]
                + +
                $content[content]
                +
                $multi
                + + +
                + +
                + + +
                + {lang pre_article} + {lang next_article} +
                + +
                + + + +
                {$portal_view_gg}
                + + + + +
                +
                +

                {lang view_related}

                +
                +
                +
                  + + +
                • + +
                +
                +
                + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/forum.php b/template/bygsjw_sj/touch/search/forum.php new file mode 100644 index 0000000..a9687a8 --- /dev/null +++ b/template/bygsjw_sj/touch/search/forum.php @@ -0,0 +1,62 @@ + + + + +
                +
                +
                + + 头像 + + 提醒 + + + + 论坛搜索 +
                + + 返回 +
                +
                + + + +
                + + + + + + + $_G['setting']['extcredits'][$id][img] $_G['setting']['extcredits'][$id][title] $policy $_G['setting']['extcredits'][$id][unit] + + +

                {lang search_credit_msg}

                +
                + + +
                + {lang hot_search}: + + + + + + $val + + $val + + + + + +
                + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/group.php b/template/bygsjw_sj/touch/search/group.php new file mode 100644 index 0000000..89b0ff9 --- /dev/null +++ b/template/bygsjw_sj/touch/search/group.php @@ -0,0 +1,40 @@ + + + + +
                +
                +
                + + 头像 + + 提醒 + + + + {$_G['setting']['navs'][3]['navname']}搜索 +
                + + 返回 +
                +
                + + + +
                + + + + +
                + + + + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/group_list.php b/template/bygsjw_sj/touch/search/group_list.php new file mode 100644 index 0000000..2dfa380 --- /dev/null +++ b/template/bygsjw_sj/touch/search/group_list.php @@ -0,0 +1,94 @@ + + +
                +

                {lang search_group_result_keyword} {lang search_group_viewgroup}{lang search_group_result}{lang search_result}

                + + + + +
                {lang search_nomatch}
                + + + $multipage + + + + + + + + + + $multipage + +
                \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/portal.php b/template/bygsjw_sj/touch/search/portal.php new file mode 100644 index 0000000..a5d5286 --- /dev/null +++ b/template/bygsjw_sj/touch/search/portal.php @@ -0,0 +1,38 @@ + + + + +
                +
                +
                + + 头像 + + 提醒 + + + + 门户搜索 +
                + + 返回 +
                +
                + + + + +
                + + + + +
                + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/portal_list.php b/template/bygsjw_sj/touch/search/portal_list.php new file mode 100644 index 0000000..b38bf6b --- /dev/null +++ b/template/bygsjw_sj/touch/search/portal_list.php @@ -0,0 +1,52 @@ + + +
                +

                {lang search_result_keyword}{lang search_result}

                + +
                {lang search_nomatch}
                + + + + + $multipage +
                \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/pubsearch.php b/template/bygsjw_sj/touch/search/pubsearch.php new file mode 100644 index 0000000..bd2d477 --- /dev/null +++ b/template/bygsjw_sj/touch/search/pubsearch.php @@ -0,0 +1,38 @@ + + + + + + + +
                {$search_gg}
                + + + + + + + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/search/thread_list.php b/template/bygsjw_sj/touch/search/thread_list.php new file mode 100644 index 0000000..512aaa8 --- /dev/null +++ b/template/bygsjw_sj/touch/search/thread_list.php @@ -0,0 +1,56 @@ + + +
                +

                {lang search_result_keyword} {lang goto_memcp}{lang search_result}

                + +
                {lang search_nomatch}
                + + + + + $multipage +
                \ No newline at end of file diff --git a/template/bygsjw_sj/touch/tag/tag.php b/template/bygsjw_sj/touch/tag/tag.php new file mode 100644 index 0000000..d959cc6 --- /dev/null +++ b/template/bygsjw_sj/touch/tag/tag.php @@ -0,0 +1,45 @@ + + + + +
                +
                +
                +

                + + 头像 + + 提醒 + + + + 全部标签 +

                + + 返回 +
                +
                +
                + + + + + + + +
                + + + $tag[tagname] + + +

                没有标签

                + +
                + + \ No newline at end of file diff --git a/template/bygsjw_sj/touch/tag/tagitem.php b/template/bygsjw_sj/touch/tag/tagitem.php new file mode 100644 index 0000000..4cbfda0 --- /dev/null +++ b/template/bygsjw_sj/touch/tag/tagitem.php @@ -0,0 +1,97 @@ + + + + +
                +
                +
                +

                + + 头像 + + 提醒 + + + + 相关标签 +

                + + 返回 +
                +
                +
                + + + + + + + +
                  + + + + + + if ($_G['style']['liebiaotu'] == "on") { + $list_img1 = byg_threadlist_img($thread['tid'], $thread['authorid'], 3); + $img_number = count($list_img1); + } + +
                • + + + + +
                  + +
                  + + +
                    + +
                  • + +
                  • + +
                  + +
                  + + {$thread[author]} + + {$_G[setting][anonymoustext]} + +     {$thread[dateline]}   + + 回复数{$thread[replies]} + + + 查看数{$thread[views]}   + +
                  +
                • + + +
                • + 查看更多 +
                • + + $multipage + +
                + +

                {lang no_content}

                + + + \ No newline at end of file diff --git a/template/default/common/block_forumtree.htm b/template/default/common/block_forumtree.htm old mode 100644 new mode 100755 diff --git a/template/default/common/block_thread.htm b/template/default/common/block_thread.htm old mode 100644 new mode 100755 diff --git a/template/default/common/block_userinfo.htm b/template/default/common/block_userinfo.htm old mode 100644 new mode 100755 diff --git a/template/default/common/buyinvitecode.htm b/template/default/common/buyinvitecode.htm old mode 100644 new mode 100755 diff --git a/template/default/common/common.css b/template/default/common/common.css old mode 100644 new mode 100755 diff --git a/template/default/common/css_diy.css b/template/default/common/css_diy.css old mode 100644 new mode 100755 diff --git a/template/default/common/css_sample.htm b/template/default/common/css_sample.htm old mode 100644 new mode 100755 index 7e28b96..874a606 --- a/template/default/common/css_sample.htm +++ b/template/default/common/css_sample.htm @@ -69,7 +69,7 @@
                - 文章列表: + 帖子列表:
                diff --git a/template/default/common/css_space.css b/template/default/common/css_space.css old mode 100644 new mode 100755 diff --git a/template/default/common/editor.css b/template/default/common/editor.css old mode 100644 new mode 100755 diff --git a/template/default/common/editor.htm b/template/default/common/editor.htm old mode 100644 new mode 100755 diff --git a/template/default/common/editor_menu.htm b/template/default/common/editor_menu.htm old mode 100644 new mode 100755 diff --git a/template/default/common/extcredits.htm b/template/default/common/extcredits.htm old mode 100644 new mode 100755 diff --git a/template/default/common/extgroups.htm b/template/default/common/extgroups.htm old mode 100644 new mode 100755 diff --git a/template/default/common/faq.htm b/template/default/common/faq.htm old mode 100644 new mode 100755 diff --git a/template/default/common/footer.htm b/template/default/common/footer.htm old mode 100644 new mode 100755 diff --git a/template/default/common/footer_ajax.htm b/template/default/common/footer_ajax.htm old mode 100644 new mode 100755 diff --git a/template/default/common/forum_calendar.css b/template/default/common/forum_calendar.css old mode 100644 new mode 100755 diff --git a/template/default/common/forum_moderator.css b/template/default/common/forum_moderator.css old mode 100644 new mode 100755 diff --git a/template/default/common/getatuser.htm b/template/default/common/getatuser.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header.htm b/template/default/common/header.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header_ajax.htm b/template/default/common/header_ajax.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header_common.htm b/template/default/common/header_common.htm old mode 100644 new mode 100755 index a575a74..0594bf8 --- a/template/default/common/header_common.htm +++ b/template/default/common/header_common.htm @@ -4,7 +4,7 @@ - <!--{if !empty($navtitle)}-->$navtitle - <!--{/if}--><!--{if empty($nobbname)}--> $_G['setting']['bbname'] - <!--{/if}--> Powered by Discuz! + <!--{if !empty($navtitle) && $navtitle != '论坛'}-->$navtitle - $_G['setting']['bbname']<!--{else}-->$_G['setting']['bbname']<!--{/if}--> $_G['setting']['seohead'] diff --git a/template/default/common/header_diy.htm b/template/default/common/header_diy.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header_diynav.htm b/template/default/common/header_diynav.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header_qmenu.htm b/template/default/common/header_qmenu.htm old mode 100644 new mode 100755 diff --git a/template/default/common/header_userstatus.htm b/template/default/common/header_userstatus.htm old mode 100644 new mode 100755 index f653823..721ccff --- a/template/default/common/header_userstatus.htm +++ b/template/default/common/header_userstatus.htm @@ -29,7 +29,8 @@

                - {lang credits}: $_G[member][credits] + 糖果: + |{lang credits}: $_G[member][credits] |{lang usergroup}: $_G[group][grouptitle]({lang freeze})

                diff --git a/template/default/common/iefix.css b/template/default/common/iefix.css old mode 100644 new mode 100755 diff --git a/template/default/common/index.htm b/template/default/common/index.htm old mode 100644 new mode 100755 diff --git a/template/default/common/invite.htm b/template/default/common/invite.htm old mode 100644 new mode 100755 diff --git a/template/default/common/ipnotice.htm b/template/default/common/ipnotice.htm old mode 100644 new mode 100755 diff --git a/template/default/common/misc_imgcropper.htm b/template/default/common/misc_imgcropper.htm old mode 100644 new mode 100755 index fe798ff..3ced856 --- a/template/default/common/misc_imgcropper.htm +++ b/template/default/common/misc_imgcropper.htm @@ -5,7 +5,7 @@ - <!--{if !empty($navtitle)}-->$navtitle - <!--{/if}--><!--{if empty($nobbname)}--> $_G['setting']['bbname'] - <!--{/if}--> Powered by Discuz! + <!--{if !empty($navtitle) && $navtitle != '论坛'}-->$navtitle - $_G['setting']['bbname']<!--{else}-->$_G['setting']['bbname']<!--{/if}--> diff --git a/template/default/common/module.css b/template/default/common/module.css old mode 100644 new mode 100755 index 65164df..874cfef --- a/template/default/common/module.css +++ b/template/default/common/module.css @@ -24,13 +24,13 @@ Created & Modified by Alice, Monkey, Lushnis, Pony, Dfox & DragonLee. 1. 广场版块、圈子分类列表 2. 房屋列表 3. 主题列表 -4. 文章内容区域样式 +4. 帖子内容区域样式 1. 结构 2. 作者、时间、楼层等一些属性 - 3. 文章正文 + 3. 帖子正文 1. 回帖推荐、点评等 2. 用户详细信息 - 3. 文章附件及一些特殊样式(如锁定、引用、代码等) + 3. 帖子附件及一些特殊样式(如锁定、引用、代码等) 4. 特殊帖样式 5. 广场和空间共用的商品、辩论等样式 6. 显示原始图片弹出层样式 @@ -565,7 +565,7 @@ Created & Modified by Alice, Monkey, Lushnis, Pony, Dfox & DragonLee. .xst { font-family: {THREADTITLEFONT}; font-size: {THREADTITLEFONTSIZE}; } .xst i { font-style: italic; } - /* threadtype 文章类型 */ + /* threadtype 帖子类型 */ .ttp { margin-bottom: 5px; padding-top: 10px; border-width: 2px 0 0; background: transparent; } .ttp li { float: left; padding-bottom: 5px; } .ttp a, .ttp strong { float: left; margin-right: 5px; padding: 4px 8px 3px; height: 18px; border: 1px solid {COMMONBORDER}; background: {WRAPBG}; white-space: nowrap; } @@ -677,7 +677,7 @@ Created & Modified by Alice, Monkey, Lushnis, Pony, Dfox & DragonLee. /* Name: mod_thread_type Level: Function - Explain: 论坛圈子的文章主题分类分类信息等的筛选样式 + Explain: 论坛圈子的帖子主题分类分类信息等的筛选样式 Author: lushnis Last Modify: Pony */ @@ -687,7 +687,7 @@ Created & Modified by Alice, Monkey, Lushnis, Pony, Dfox & DragonLee. -/* ----------------------------------------------------------------------- 文章内容区域样式 */ +/* ----------------------------------------------------------------------- 帖子内容区域样式 */ /** forum::viewthread,group::viewthread **/ .plh { line-height: 46px; } .plh .plc { padding-bottom: 0; } @@ -719,7 +719,7 @@ Created & Modified by Alice, Monkey, Lushnis, Pony, Dfox & DragonLee. /* Name: mod_cp_pls Level: Function - Explain: 文章页每个楼层用户信息下方的管理链接 + Explain: 帖子页每个楼层用户信息下方的管理链接 Author: Pony 12010414 */ .cp_pls a { float: left; margin-right: 4px; line-height: 1.231; } @@ -776,7 +776,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 /** end **/ /** forum::forumdisplay,group::forumdisplay **/ -/* 文章列表“新窗”、“图片模式”等按钮样式 modified by Pony */ +/* 帖子列表“新窗”、“图片模式”等按钮样式 modified by Pony */ #atarget, .unchk, .chked { line-height: 16px; color: {HIGHLIGHTLINK}; cursor: pointer; } #atarget:before, .unchk:before, .chked:before { font-family: dzicon; display: inline-block; width: 14px; height: 14px; line-height: 14px; font-size: 14px; margin-right: 2px; color: {LIGHTTEXT}; } #atarget:before, .unchk:before { content: "\f12e"; } @@ -797,7 +797,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 Name: mod_media_list_thread Level: Global depentend: .ml - Explain: 图片模式的文章列表 + Explain: 图片模式的帖子列表 Author: lushnis Last Modify: Pony 11121511 */ @@ -817,7 +817,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 /* Name: mod_threadlist_last-child Level: Function - Explain: 文章列表页支持 last-child 的浏览器不显示最后一条线 + Explain: 帖子列表页支持 last-child 的浏览器不显示最后一条线 Last Modify: Pony */ .tl tbody:last-child th, .tl tbody:last-child td { border-bottom: none; } @@ -825,7 +825,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 /* Name: closeprev Level: Function - Explain: 文章列表页隐藏置顶帖的按钮样式 + Explain: 帖子列表页隐藏置顶帖的按钮样式 Last Modify: Jane */ .closeprev { width: 12px; height: 12px; background: transparent; line-height: 12px; text-align: center; cursor: pointer; overflow: hidden; margin: 5px 5px 0px 5px; } @@ -877,7 +877,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 #pl_top .ad .pls, #pl_top .ad .plc { height: 1px;overflow: hidden; } #pl_top .pls { text-indent: 15px; } -/* 文章作者、时间、楼层等一些属性所在区块 */ +/* 帖子作者、时间、楼层等一些属性所在区块 */ .pi { overflow: hidden; margin-bottom: 10px; padding: 10px 0; height: 16px; border-bottom: 1px dashed {COMMONBORDER}; } .pi strong a { float: right; margin-top: -6px; padding: 4px 6px; border: 1px solid {WRAPBG}; font-weight: 400; } .pi strong a:hover { border-color: {COMMONBORDER}; } @@ -894,7 +894,7 @@ a.thread_mod { height: 19px; line-height: 19px; display: inline-block; color: #4 /* 贴子掌上论坛弹窗 */ .code_bg {background: url({IMGDIR}/code_bg.png) no-repeat 0 0; display:inline-block; padding:4px; margin:10px 20px; } -/* 文章正文区块 */ +/* 帖子正文区块 */ .pcb { clear: left; margin-right: 130px; } .pcb h1, .pcb h2 { margin: 8px 0; font-size: 1.17em; } .pcb h1 a { font-weight: 400; } @@ -1039,7 +1039,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c /* Name: mod_user_interaction Level: Function - Explain: 文章左侧用户互动操作 + Explain: 帖子左侧用户互动操作 Last Modify: Pony */ .pls .o li { background-position: 0 50%; background-repeat: no-repeat; } @@ -1049,13 +1049,13 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c .pls .o .poke2:before { content: "\f146"; } .pls .o .pm2:before { content: "\f119"; } .pls .o .addflw:before { content: "\f11e"; } - /* 文章左侧用户组升级提示细微调整 Last Modify Pony */ + /* 帖子左侧用户组升级提示细微调整 Last Modify Pony */ .pls .tip_4 { margin-left: -5px; } /* Name: mod_thread_attr Level: Function - Explain: 文章中类似“游客,如果您要查看本帖隐藏内容请”等地方的样式 + Explain: 帖子中类似“游客,如果您要查看本帖隐藏内容请”等地方的样式 Last Modify: Pony 11060209 */ .locked { overflow: hidden; margin: 10px 0; padding: 8px 8px 8px 24px; border: 1px dashed #FF9A9A; background: {WRAPBG} url({IMGDIR}/locked.gif) no-repeat 6px 50%; font-size: 12px; zoom: 1; } @@ -1077,7 +1077,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c /* Name: mod_thread_code_quote Level: Function - Explain: 文章代码/引用等样式 + Explain: 帖子代码/引用等样式 Author: lushnis Last Modify: Pony 1205241556 */ @@ -1236,7 +1236,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c /* Name: mod_visited_t&b Level: Function - Explain: 返回列表中显示的访问过的文章和版块 + Explain: 返回列表中显示的访问过的帖子和版块 Last Modify: Pony */ #visitedforums_menu { width: 150px; } @@ -1258,7 +1258,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c /* Name: mod_trade_list Level: Function - Explain: 文章以及交易单中的商品列表 + Explain: 帖子以及交易单中的商品列表 Last Modify: Pony 11060710 */ .tradl {} @@ -1319,7 +1319,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c /** forum::viewthread,group::viewthread,forum::trade,portal::view **/ -/* 文章附件 by dfox */ +/* 帖子附件 by dfox */ .pattl { overflow: hidden; padding: 1em 0; width: 100%; font-size: 12px; } .tatt, .t_attach_img { padding: 5px; color: {LIGHTTEXT}; font-size: 12px; } .tatt { width: 240px; } @@ -1345,7 +1345,7 @@ i.pstatus { display: block; margin-bottom: -30px; font-size: 12px; text-align: c .attp { width: 180px; text-align: left; } .tattl .attp { width: 240px; } - /* 版主浏览包含收费附件的文章,且附件插入到文章内容中去的时候 by Pony */ + /* 版主浏览包含收费附件的帖子,且附件插入到帖子内容中去的时候 by Pony */ .attprice { padding: 5px; border: 1px dashed #FF9A9A; } /** end **/ diff --git a/template/default/common/preview.htm b/template/default/common/preview.htm old mode 100644 new mode 100755 diff --git a/template/default/common/pubsearchform.htm b/template/default/common/pubsearchform.htm old mode 100644 new mode 100755 diff --git a/template/default/common/report.htm b/template/default/common/report.htm old mode 100644 new mode 100755 diff --git a/template/default/common/rss.css b/template/default/common/rss.css old mode 100644 new mode 100755 diff --git a/template/default/common/seccheck.htm b/template/default/common/seccheck.htm old mode 100644 new mode 100755 diff --git a/template/default/common/secmobseccode.htm b/template/default/common/secmobseccode.htm old mode 100644 new mode 100755 diff --git a/template/default/common/seditor.htm b/template/default/common/seditor.htm old mode 100644 new mode 100755 diff --git a/template/default/common/sendmail.htm b/template/default/common/sendmail.htm old mode 100644 new mode 100755 diff --git a/template/default/common/showmessage.htm b/template/default/common/showmessage.htm old mode 100644 new mode 100755 diff --git a/template/default/common/stat.htm b/template/default/common/stat.htm old mode 100644 new mode 100755 diff --git a/template/default/common/upload.htm b/template/default/common/upload.htm old mode 100644 new mode 100755 diff --git a/template/default/common/userabout.htm b/template/default/common/userabout.htm old mode 100644 new mode 100755 diff --git a/template/default/common/widthauto.css b/template/default/common/widthauto.css old mode 100644 new mode 100755 diff --git a/template/default/common/wysiwyg.css b/template/default/common/wysiwyg.css old mode 100644 new mode 100755 diff --git a/template/default/discuz_style_default.xml b/template/default/discuz_style_default.xml old mode 100644 new mode 100755 diff --git a/template/default/email/add_member.htm b/template/default/email/add_member.htm old mode 100644 new mode 100755 diff --git a/template/default/email/adv_expiration.htm b/template/default/email/adv_expiration.htm old mode 100644 new mode 100755 diff --git a/template/default/email/birthday.htm b/template/default/email/birthday.htm old mode 100644 new mode 100755 diff --git a/template/default/email/default.htm b/template/default/email/default.htm old mode 100644 new mode 100755 diff --git a/template/default/email/email_register.htm b/template/default/email/email_register.htm old mode 100644 new mode 100755 diff --git a/template/default/email/email_reset.htm b/template/default/email/email_reset.htm old mode 100644 new mode 100755 diff --git a/template/default/email/email_to_friend.htm b/template/default/email/email_to_friend.htm old mode 100644 new mode 100755 diff --git a/template/default/email/email_to_invite.htm b/template/default/email/email_to_invite.htm old mode 100644 new mode 100755 diff --git a/template/default/email/email_verify.htm b/template/default/email/email_verify.htm old mode 100644 new mode 100755 diff --git a/template/default/email/footer.htm b/template/default/email/footer.htm old mode 100644 new mode 100755 diff --git a/template/default/email/get_passwd.htm b/template/default/email/get_passwd.htm old mode 100644 new mode 100755 diff --git a/template/default/email/header.htm b/template/default/email/header.htm old mode 100644 new mode 100755 diff --git a/template/default/email/index.htm b/template/default/email/index.htm old mode 100644 new mode 100755 diff --git a/template/default/email/invitemail.htm b/template/default/email/invitemail.htm old mode 100644 new mode 100755 diff --git a/template/default/email/moderate_member.htm b/template/default/email/moderate_member.htm old mode 100644 new mode 100755 diff --git a/template/default/email/password_reset.htm b/template/default/email/password_reset.htm old mode 100644 new mode 100755 diff --git a/template/default/email/secmobile_reset.htm b/template/default/email/secmobile_reset.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/activity_applist_more.htm b/template/default/forum/activity_applist_more.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/activity_applylist.htm b/template/default/forum/activity_applylist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/activity_export.htm b/template/default/forum/activity_export.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax.htm b/template/default/forum/ajax.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_albumlist.htm b/template/default/forum/ajax_albumlist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_attachlist.htm b/template/default/forum/ajax_attachlist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_followpost.htm b/template/default/forum/ajax_followpost.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_forumlist.htm b/template/default/forum/ajax_forumlist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_imagelist.htm b/template/default/forum/ajax_imagelist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_quickreply.htm b/template/default/forum/ajax_quickreply.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_secondgroup.htm b/template/default/forum/ajax_secondgroup.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/ajax_threadlist.htm b/template/default/forum/ajax_threadlist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/announcement.htm b/template/default/forum/announcement.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/attachpay.htm b/template/default/forum/attachpay.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/attachpay_view.htm b/template/default/forum/attachpay_view.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_add.htm b/template/default/forum/collection_add.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_all.htm b/template/default/forum/collection_all.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_comment.htm b/template/default/forum/collection_comment.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_commentpop.htm b/template/default/forum/collection_commentpop.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_followers.htm b/template/default/forum/collection_followers.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_index.htm b/template/default/forum/collection_index.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_invite.htm b/template/default/forum/collection_invite.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_list.htm b/template/default/forum/collection_list.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_mycollection.htm b/template/default/forum/collection_mycollection.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_nav.htm b/template/default/forum/collection_nav.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_recommend.htm b/template/default/forum/collection_recommend.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_select.htm b/template/default/forum/collection_select.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/collection_view.htm b/template/default/forum/collection_view.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/comment.htm b/template/default/forum/comment.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/comment_more.htm b/template/default/forum/comment_more.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/darkroom.htm b/template/default/forum/darkroom.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/debate_umpire.htm b/template/default/forum/debate_umpire.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/discuz.htm b/template/default/forum/discuz.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/discuzcode.htm b/template/default/forum/discuzcode.htm old mode 100644 new mode 100755 index f6b3e15..c443873 --- a/template/default/forum/discuzcode.htm +++ b/template/default/forum/discuzcode.htm @@ -144,7 +144,7 @@ function imagelist($attach, $firstpost = 0) {

                - $attach[filename] + $attach[filename]下载附件 ($attach[attachsize], {lang downloads}: $attach['downloads'])

                +
                {$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}{$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][1]][title]}(0~5)
                diff --git a/template/default/forum/forumdisplay.htm b/template/default/forum/forumdisplay.htm old mode 100644 new mode 100755 index 7f43ccf..7a4210e --- a/template/default/forum/forumdisplay.htm +++ b/template/default/forum/forumdisplay.htm @@ -38,7 +38,12 @@ {lang forum_favorite} - |{lang rss_subscribe_this} + + + + + + |$forumarchive[$_GET['archiveid']]['displayname']{lang forum_archive} diff --git a/template/default/forum/forumdisplay_fastpost.htm b/template/default/forum/forumdisplay_fastpost.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_leftside.htm b/template/default/forum/forumdisplay_leftside.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_list.htm b/template/default/forum/forumdisplay_list.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_passwd.htm b/template/default/forum/forumdisplay_passwd.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_pay.htm b/template/default/forum/forumdisplay_pay.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_sort.htm b/template/default/forum/forumdisplay_sort.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/forumdisplay_subforum.htm b/template/default/forum/forumdisplay_subforum.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/guide.htm b/template/default/forum/guide.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/guide_list_row.htm b/template/default/forum/guide_list_row.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/hiderecover.htm b/template/default/forum/hiderecover.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/index.htm b/template/default/forum/index.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/index_navbar.htm b/template/default/forum/index_navbar.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp.htm b/template/default/forum/modcp.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_announcement.htm b/template/default/forum/modcp_announcement.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_forum.htm b/template/default/forum/modcp_forum.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_forumaccess.htm b/template/default/forum/modcp_forumaccess.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_home.htm b/template/default/forum/modcp_home.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_log.htm b/template/default/forum/modcp_log.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_login.htm b/template/default/forum/modcp_login.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_member.htm b/template/default/forum/modcp_member.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_moderate.htm b/template/default/forum/modcp_moderate.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_moderate_float.htm b/template/default/forum/modcp_moderate_float.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_post.htm b/template/default/forum/modcp_post.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_recyclebin.htm b/template/default/forum/modcp_recyclebin.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_recyclebinpost.htm b/template/default/forum/modcp_recyclebinpost.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_report.htm b/template/default/forum/modcp_report.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/modcp_thread.htm b/template/default/forum/modcp_thread.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/pay.htm b/template/default/forum/pay.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/pay_view.htm b/template/default/forum/pay_view.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post.htm b/template/default/forum/post.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_activity.htm b/template/default/forum/post_activity.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_attachlimit.htm b/template/default/forum/post_attachlimit.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_debate.htm b/template/default/forum/post_debate.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_editor_attribute.htm b/template/default/forum/post_editor_attribute.htm old mode 100644 new mode 100755 index 2709e68..c18c89d --- a/template/default/forum/post_editor_attribute.htm +++ b/template/default/forum/post_editor_attribute.htm @@ -229,7 +229,8 @@ - + + {lang post_delpost} diff --git a/template/default/forum/post_editor_body.htm b/template/default/forum/post_editor_body.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_editor_extra.htm b/template/default/forum/post_editor_extra.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_forumselect.htm b/template/default/forum/post_forumselect.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_infloat.htm b/template/default/forum/post_infloat.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_poll.htm b/template/default/forum/post_poll.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_reward.htm b/template/default/forum/post_reward.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_sortoption.htm b/template/default/forum/post_sortoption.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/post_trade.htm b/template/default/forum/post_trade.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/postappend.htm b/template/default/forum/postappend.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/rate.htm b/template/default/forum/rate.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/rate_view.htm b/template/default/forum/rate_view.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/recommend.htm b/template/default/forum/recommend.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/relatekw.htm b/template/default/forum/relatekw.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/search_sortoption.htm b/template/default/forum/search_sortoption.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/seccheck_post.htm b/template/default/forum/seccheck_post.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_main.htm b/template/default/forum/stat_main.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_memberlist.htm b/template/default/forum/stat_memberlist.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_misc.htm b/template/default/forum/stat_misc.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_misc_export.htm b/template/default/forum/stat_misc_export.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_team.htm b/template/default/forum/stat_team.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/stat_trade.htm b/template/default/forum/stat_trade.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/tag.htm b/template/default/forum/tag.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/topicadmin.htm b/template/default/forum/topicadmin.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/topicadmin_action.htm b/template/default/forum/topicadmin_action.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/topicadmin_getip.htm b/template/default/forum/topicadmin_getip.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/topicadmin_modlayer.htm b/template/default/forum/topicadmin_modlayer.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/trade.htm b/template/default/forum/trade.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/trade_displayorder.htm b/template/default/forum/trade_displayorder.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/trade_info.htm b/template/default/forum/trade_info.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/trade_view.htm b/template/default/forum/trade_view.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/upload.htm b/template/default/forum/upload.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/usertag.htm b/template/default/forum/usertag.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread.htm b/template/default/forum/viewthread.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_activity.htm b/template/default/forum/viewthread_activity.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_album.htm b/template/default/forum/viewthread_album.htm old mode 100644 new mode 100755 index 8e2e4b8..a839c7d --- a/template/default/forum/viewthread_album.htm +++ b/template/default/forum/viewthread_album.htm @@ -234,10 +234,10 @@ $_G['setting']['recommendthread'][addtext]$_G[forum_thread][recommend_add] - $_G['setting']['recommendthread'][subtracttext]$_G[forum_thread][recommend_sub] + - + {lang rate} diff --git a/template/default/forum/viewthread_debate.htm b/template/default/forum/viewthread_debate.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_fastpost.htm b/template/default/forum/viewthread_fastpost.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_from_node.htm b/template/default/forum/viewthread_from_node.htm old mode 100644 new mode 100755 index 93c8d89..3e810ef --- a/template/default/forum/viewthread_from_node.htm +++ b/template/default/forum/viewthread_from_node.htm @@ -22,7 +22,7 @@ {lang reward_set_bestanswer} - + {lang rate} diff --git a/template/default/forum/viewthread_mod.htm b/template/default/forum/viewthread_mod.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_node.htm b/template/default/forum/viewthread_node.htm old mode 100644 new mode 100755 index c22cc66..29fff37 --- a/template/default/forum/viewthread_node.htm +++ b/template/default/forum/viewthread_node.htm @@ -322,7 +322,7 @@ $postshowavatars = !($_G['setting']['bannedmessages'] & 2 && ($post['memberstatu {lang thread_favorite} - + {lang rate} @@ -340,7 +340,7 @@ $postshowavatars = !($_G['setting']['bannedmessages'] & 2 && ($post['memberstatu $_G['setting']['recommendthread'][addtext] - $_G['setting']['recommendthread'][subtracttext] + @@ -412,7 +412,7 @@ $postshowavatars = !($_G['setting']['bannedmessages'] & 2 && ($post['memberstatu {lang modmenu_blockrecommend} $_G['setting']['recommendthread'][addtext] $post[postreview][support] - $_G['setting']['recommendthread'][subtracttext] $post[postreview][against] + @@ -427,7 +427,7 @@ $postshowavatars = !($_G['setting']['bannedmessages'] & 2 && ($post['memberstatu {lang reward_set_bestanswer} - + {lang rate} diff --git a/template/default/forum/viewthread_node_body.htm b/template/default/forum/viewthread_node_body.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_pay.htm b/template/default/forum/viewthread_pay.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_poll.htm b/template/default/forum/viewthread_poll.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_poll_voter.htm b/template/default/forum/viewthread_poll_voter.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_portal.htm b/template/default/forum/viewthread_portal.htm old mode 100644 new mode 100755 index c8e312a..abeeae7 --- a/template/default/forum/viewthread_portal.htm +++ b/template/default/forum/viewthread_portal.htm @@ -82,10 +82,10 @@ $_G['setting']['recommendthread'][addtext]$_G['setting']['recommendthread'][addtext]$_G[forum_thread][recommend_add] - $_G['setting']['recommendthread'][subtracttext]$_G['setting']['recommendthread'][subtracttext]$_G[forum_thread][recommend_sub] + - + {lang rate}{lang rate} diff --git a/template/default/forum/viewthread_preview.htm b/template/default/forum/viewthread_preview.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_preview_node.htm b/template/default/forum/viewthread_preview_node.htm old mode 100644 new mode 100755 diff --git a/template/default/forum/viewthread_printable.htm b/template/default/forum/viewthread_printable.htm old mode 100644 new mode 100755 index ae073b3..a31f08c --- a/template/default/forum/viewthread_printable.htm +++ b/template/default/forum/viewthread_printable.htm @@ -4,7 +4,7 @@ -$_G[forum_thread][subject] - $_G['setting']['bbname'] - Powered by Discuz! +$_G[forum_thread][subject] - $_G['setting']['bbname']