tb_borer

tba_style

目前为 2014-08-02 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name tb_borer
  3. // @namespace http://wp.stf.iaceob.name
  4. // @description tba_style
  5. // @include http://tieba.baidu.com/*
  6. // @version 1.9 alpha
  7. // @grant none
  8. // @author 生物烯丙菊
  9. // ==/UserScript==
  10.  
  11.  
  12. String.prototype.format = function () {
  13. var txt = this.toString();
  14. for (var i = 0; i < arguments.length; i++) {
  15. var exp = getStringFormatPlaceHolderRegEx(i);
  16. txt = txt.replace(exp, (arguments[i] == null ? "" : arguments[i]));
  17. }
  18. return cleanStringFormatResult(txt);
  19. }
  20. function getStringFormatPlaceHolderRegEx(placeHolderIndex) {
  21. return new RegExp('({)?\\{' + placeHolderIndex + '\\}(?!})', 'gm');
  22. }
  23. function cleanStringFormatResult(txt) {
  24. if (txt == null) return "";
  25. return txt.replace(getStringFormatPlaceHolderRegEx("\\d+"), "");
  26. }
  27.  
  28. Array.prototype.remove=function(dx) {
  29. if(isNaN(dx)||dx>this.length){ return false; }
  30. for(var i=0,n=0;i<this.length;i++) {
  31. if(this[i]!=this[dx]) {
  32. this[n++]=this[i]
  33. }
  34. }
  35. this.length-=1
  36. return true;
  37. }
  38.  
  39.  
  40. !(function(window, $, undefined){
  41. var topic = $('#thread_topic');
  42. var h_posts = $('#thread_list li.j_thread_list');
  43. var h_paging = $('#frs_list_pager');
  44. var me = $('#balv_mod');
  45. var html = '';
  46.  
  47. var document = window.document;
  48. var history = window.history;
  49. var pd = window.PageData;
  50. var tpl = {};
  51.  
  52. if (!pd) {
  53. return;
  54. }
  55.  
  56. var config = {
  57. history: {
  58. title: '',
  59. url: ''
  60. },
  61. posts: {
  62. page_url: '',
  63. handle_url: 'http://tieba.baidu.com/f/commit/thread/add',
  64. forum_id: 0,
  65. forum_name: 0,
  66. tbs: '',
  67. floor_num: 0,
  68. content: '',
  69. title: ''
  70. },
  71. post: {
  72. page_url: '',
  73. handle_url: 'http://tieba.baidu.com/f/commit/post/add',
  74. forum_id: 0,
  75. thread_id: 0,
  76. forum_name: '',
  77. tbs: '',
  78. floor_num: 1,
  79. lzl_url: 'http://tieba.baidu.com/p/comment',
  80. lzl_pn: 1,
  81. post_id: '',
  82. see_lz: false
  83. },
  84. captcha: {
  85. url4: 'http://tieba.baidu.com/cgi-bin/genimg',
  86. url4_get: 'http://tieba.baidu.com/f/commit/commonapi/getVcode',
  87. url_check: 'http://tieba.baidu.com/f/commit/commonapi/checkVcode',
  88. type: 0,
  89. code: '',
  90. input: '',
  91. value: []
  92. },
  93. user: {
  94. id: 0,
  95. name: ''
  96. },
  97. depend: [
  98. {url: 'http://idc.iaceob.name/tba_style/tba_v1.7_alpha.css', type: 'css'},
  99. {url: 'http://idc.iaceob.name/tba_style/jquery.omniwindow.js', type: 'js'},
  100. {url: 'http://idc.iaceob.name/um/gbk/themes/default/css/umeditor.css', type: 'css'},
  101. {url: 'http://idc.iaceob.name/um/gbk/umeditor.config.js', type: 'js'},
  102. {url: 'http://idc.iaceob.name/um/gbk/umeditor.min.js', type: 'js'},
  103. {url: 'http://idc.iaceob.name/um/gbk/lang/zh-cn/zh-cn.js', type: 'js'}
  104. ],
  105. editor: null
  106. };
  107. config.user.id = pd.user.user_id;
  108. config.user.name = pd.user.user_name;
  109. window.cfg = config;
  110. tpl.html_header = '<header id="header" class="loop-12"></header>';
  111. tpl.html_container = '<div class="span container">{0}</div>';
  112. tpl.html_footer = '<footer id="footer" class="loop-12">Footer</footer>';
  113. tpl.html_footer += '<div class="ow-overlay ow-closed"></div><div class="tba-modal ow-closed">Hello, human!</div>';
  114. tpl.html_box_posts = '<div class="loop-4 box_posts" id="box_posts"></div>';
  115. tpl.html_box_post = '<div class="loop-8 post_container" id="post_container"></div>';
  116. // tpl.css = 'http://idc.iaceob.name/tba_style/tba_v1.6_alpha.css';
  117. // tpl.js_omniwindow = 'http://idc.iaceob.name/tba_style/jquery.omniwindow.js';
  118.  
  119. if (location.href === 'http://tieba.baidu.com/') {
  120. return;
  121. }
  122.  
  123.  
  124. function initBorer() {
  125. if (!!pd.forum.id) {
  126. setPostsConfig($('body').text());
  127. var postsPage = parsePosts($('body'));
  128. initPage();
  129. initPosts(postsPage);
  130. return;
  131. }
  132. if (!!pd.forum.forum_id) {
  133. $.ajax({
  134. url: 'http://tieba.baidu.com/' + pd.forum.forum_name,
  135. dataType: 'html'
  136. }).done(function(data){
  137. config.post.page_url = window.location.href;
  138. setPostConfig($('body').text());
  139. setPostsConfig($(data).text());
  140. var postPage = parsePost($('body'));
  141. initPage();
  142. initPosts(parsePosts($(data)));
  143. initPost(postPage);
  144. });
  145. return;
  146. }
  147. };
  148.  
  149. function initPage() {
  150. var fhtml = parseFooter();
  151. html = tpl.html_header;
  152. html += tpl.html_container.format(tpl.html_box_posts+tpl.html_box_post);
  153. html += tpl.html_footer;
  154. $('body').empty();
  155. $('body').html(html);
  156. // $('#head').html(html);
  157. initHeader();
  158. initFooter(fhtml);
  159. initImport();
  160. bindEvent();
  161. };
  162.  
  163. function initPosts(body) {
  164. $('.posts_paging a').unbind('click');
  165. $('#post_container').empty();
  166. $('#box_posts').html(body);
  167. $('#box_posts').scrollTop(0);
  168. monitorHPage();
  169. };
  170.  
  171. function initPost(body) {
  172. $('.post-page a').unbind('click');
  173. $('#post_container').html(body);
  174. $('#post_container').scrollTop(0);
  175. mointorPPage();
  176. };
  177. function initHeader() {
  178. var hhtml = '<div class="loop-2 tiebalogo"><img src="http://tb2.bdstatic.com/tb/static-common/img/search_logo_7098cbef.png"></div>';
  179. hhtml += '<div class="loop-8">\
  180. <div class="select_box">\
  181. <input type="text" name="query" id="query" class="keyipt">\
  182. <div id="search_list" style="display: none"></div>\
  183. </div>\
  184. </div>';
  185. $('#header').html(hhtml);
  186. };
  187.  
  188. function initFooter(fhtml) {
  189. $('#footer').html(fhtml);
  190. };
  191.  
  192. function initImport(){
  193. for(var i=0; i<config.depend.length; i++) {
  194. loadFile(config.depend[i].url, config.depend[i].type);
  195. }
  196. };
  197.  
  198. function monitorHPage() {
  199. $('#btn_posting').bind('click', function(){
  200. var pshtml = '';
  201. pshtml += '<div class="box_modal">\
  202. <div class="modal_container">\
  203. <div class="loop-12"><textarea id="posts_editor" name="content"style="width:100%;height:360px;"></textarea></div>\
  204. <div class="loop-2">贴吧:</div>\
  205. <div class="loop-10 forum_name">' + config.posts.forum_name + '</div>\
  206. <div class="loop12">标题:</div>\
  207. <div class="loop-12"><input type="text" id="posts_title" name="title" autocomplete="off"></div>\
  208. </div>\
  209. <div class="loop-12" id="modal_other"></div>\
  210. <div class="loop-12 modal_result"></div>\
  211. <div class="loop-12"><button class="btn" id="btn_submit">提交</button></div>\
  212. </div>';
  213. $('.tba-modal').html(pshtml);
  214. window.UM.delEditor('posts_editor');
  215. var editor_posts = window.UM.getEditor('posts_editor');
  216. config.editor = editor_posts;
  217. $('.tba-modal').omniWindow().trigger('show');
  218. $('#btn_submit').bind('click', function(){
  219. var title = $('#posts_title').val();
  220. var content = formatEditor(editor_posts.getContent());
  221. executePosting(title, content);
  222. });
  223. });
  224. $('.posts_paging a').bind('click', function(){
  225. handleGetPosts(this.href);
  226. return false;
  227. });
  228. $('.posts_list li').bind('click', function(){
  229. handleGetPost($(this).data('href'));
  230. });
  231. };
  232.  
  233. function mointorPPage() {
  234. $('.post-page a').bind('click', function(){
  235. handleGetPost(this.href);
  236. return false;
  237. });
  238. $('#post_replay').bind('click', function(){
  239. var pshtml = '';
  240. pshtml += '<div class="box_modal">\
  241. <div class="modal_container">\
  242. <div class="loop-12"><textarea id="post_editor" name="content"></textarea></div>\
  243. <div class="loop-2">贴吧:</div>\
  244. <div class="loop-10 forum_name">' + config.posts.forum_name + '</div>\
  245. </div>\
  246. <div class="loop-12" id="modal_other"></div>\
  247. <div class="loop-12 modal_result"></div>\
  248. <div class="loop-12"><button class="btn" id="btn_submit">提交</button></div>\
  249. </div>';
  250. $('.tba-modal').html(pshtml);
  251. window.UM.delEditor('post_editor');
  252. var editor_post = window.UM.getEditor('post_editor');
  253. config.editor = editor_post;
  254. $('.tba-modal').omniWindow().trigger('show');
  255. $('#btn_submit').bind('click', function(){
  256. var content = formatEditor(editor_post.getContent());
  257. executPostReplay(content);
  258. });
  259. });
  260. $('.btn_replay_lzl').bind('click', function(){
  261. if(!$(this).data('index')) {
  262. $('#post_replay').click();
  263. return;
  264. }
  265. config.post.lzl_pn = 1;
  266. config.post.floor_num = $(this).data('floor');
  267. config.post.post_id = $(this).data('pid');
  268. handleGetLzlReplay();
  269. });
  270. $('#see_lz').bind('click', function(){
  271. if (config.post.see_lz) {
  272. config.post.see_lz = false;
  273. handleGetPost(config.post.page_url.split('?')[0]);
  274. return;
  275. }
  276. config.post.see_lz = true;
  277. handleGetPost(config.post.page_url.split('?')[0] + '?see_lz=1');
  278. return;
  279. });
  280. };
  281.  
  282. function mointorSearch(){
  283. $.ajax({
  284. url: 'http://tieba.baidu.com/suggestion',
  285. data: $('#query').serialize(),
  286. dataType: 'json',
  287. }).done(function(data){
  288. $('#search_list').html(parseSearch(data));
  289. });
  290. };
  291.  
  292. function mointorLzlReplay(pid, html) {
  293. $('.tba-modal').html(html);
  294. $('.tba-modal').omniWindow().trigger('show');
  295. $('.lzl-page a').bind('click', function(){
  296. config.post.lzl_pn = this.href.split('#')[1];
  297. config.post.post_id = pid;
  298. handleGetLzlReplay();
  299. });
  300. $('.btn_lzl_replay').bind('click', function(){
  301. $('.box_lzl_replay').empty();
  302. var pid = $(this).data('spid');
  303. var aur = $(this).data('author');
  304. var lrp = '<div id="box_lzl_replay_' + pid + '" class="span box_lzl_replay">\
  305. <div class="loop-12 lzl_editor"><textarea id="lzl-editor-' + pid + '">' + (!aur ? '' : '@'+aur+' ') + '</textarea></div>\
  306. <div class="loop-12 lzl_operate">\
  307. <button class="btn" id="btn_handle_replay_lzl" data-pid="' + pid + '">回复</button>\
  308. </div>\
  309. <div class="lzl_replay_other"></div>\
  310. </div>';
  311. $('#box_lzl_rep-' + pid).html(lrp);
  312. monitorBtnLzlReplay();
  313. });
  314. };
  315.  
  316. function monitorBtnLzlReplay() {
  317. $('#btn_handle_replay_lzl').bind('click', function(){
  318. var pid = $(this).data('pid');
  319. var content = $('#lzl-editor-' + pid).val();
  320. $.ajax({
  321. url: config.post.handle_url,
  322. type: 'post',
  323. data: {
  324. anonymous: 0,
  325. fid: config.post.forum_id,
  326. floor_num: config.post.floor_num,
  327. ie: 'utf-8',
  328. kw: config.post.forum_name,
  329. quote_id: config.post.post_id,
  330. repostid: config.post.post_id,
  331. rich_text: 1,
  332. // tag: 11,
  333. tbs: config.post.tbs,
  334. tid: config.post.thread_id,
  335. new_vcode: 1,
  336. content: content,
  337. vcode_md5: config.captcha.code,
  338. vcode: config.captcha.input
  339. },
  340. dataType: 'json'
  341. }).done(function(data){
  342. parseLzlReplay(data, pid);
  343. });
  344. });
  345. };
  346. window.handleSearchResult = function(forum){
  347. var url = 'http://tieba.baidu.com/' + forum;
  348. handleGetPosts(url);
  349. window.history.pushState(config.history, null, url);
  350. };
  351.  
  352. function handleGetPosts(postsUrl) {
  353. // config.posts.page_url = postsUrl;
  354. window.history.pushState(config.history, null, postsUrl);
  355. $.ajax({
  356. url: postsUrl,
  357. dataType: 'html'
  358. }).done(function(data){
  359. setPostsConfig($(data).text());
  360. initPosts(parsePosts($(data)));
  361. });
  362. };
  363.  
  364. function handleGetLzlReplay() {
  365. $.ajax({
  366. url: config.post.lzl_url,
  367. data: {tid: config.post.thread_id, pid: config.post.post_id, pn: config.post.lzl_pn},
  368. dataType: 'html'
  369. }).done(function(data){
  370. window.da = $(data);
  371. var lhtml = parsePostLzl($(data));
  372. mointorLzlReplay(config.post.post_id, lhtml);
  373. });
  374. };
  375.  
  376. function handleGetPost(postUrl) {
  377. config.post.page_url = postUrl;
  378. window.history.pushState(config.history, null, postUrl);
  379. $.ajax({
  380. url: postUrl,
  381. dataType: 'html'
  382. }).done(function(data){
  383. initPost(parsePost($(data)));
  384. setPostConfig($(data).text());
  385. });
  386. };
  387.  
  388.  
  389.  
  390. function setPostsConfig(text) {
  391. var tbs = text.match(/PageData.tbs([ ]*)=([ ]*)"(.*?)"/);//[3]
  392. var fid = text.match(/PageData.forum([ ]*)=([ ]*){(.*?)"forum_id":(\d+)/);
  393. var fe = text.match(/PageData.forum([ ]*)=([ ]*){(.*?)"forum_name":"(.*?)"/);
  394. config.posts.tbs = !tbs ? '' : tbs[3];
  395. config.posts.forum_id = !fid ? 0 : fid[4];
  396. config.posts.forum_name = !fe ? '' : decodeUnicode(fe[4]);
  397. config.posts.page_url = 'http://tieba.baidu.com/' + config.posts.forum_name;
  398. };
  399.  
  400. function setPostConfig(text){
  401. var tbs1 = text.match(/PageData([ ]*)=([ ]*){(.*?)'tbs'(.*?):(.*?)"(.*?)"/);
  402. var tbs2 = text.match(/PageData([ ]*)=([ ]*){(.*?)tbs(.*?):(.*?)'(.*?)'/);
  403. var fid = text.match(/PageData.forum([ ]*)=([ ]*){(.*?)"forum_id":(\d+)/);
  404. var fe = text.match(/PageData.forum([ ]*)=([ ]*){(.*?)"forum_name":"(.*?)"/);
  405. var tid = text.match(/PageData.thread([ ]*)=([ ]*){(.*?)thread_id(.*?):(\d+)/);
  406. config.post.tbs = !tbs1 ? tbs2[6] : tbs1[6];
  407. config.post.forum_id = !fid ? 0 : fid[4];
  408. config.post.forum_name = !fe ? '' : decodeUnicode(fe[4]);
  409. config.post.thread_id = !tid ? 0 : tid[5];
  410. };
  411. function bindEvent() {
  412. $('#query').bind('keyup', function(event){
  413. $('#search_list').show();
  414. if (event.keyCode != 13) {
  415. mointorSearch();
  416. return;
  417. }
  418. event.cancelBubble = true;
  419. event.returnValue = false;
  420. window.handleSearchResult($(this).val());
  421. });
  422. $('#query').bind('click', function(){
  423. $('#search_list').show();
  424. mointorSearch();
  425. });
  426. $('#search_list').hover(function(){
  427. $(this).show();
  428. }, function(){
  429. $(this).hide();
  430. });
  431. };
  432. function parseFooter() {
  433. var tf = $('#footer').html();
  434. var fhtml = '<div class="loop-12">' + tf + '</div>';
  435. return fhtml;
  436. };
  437. function parseSearch(data) {
  438. var qms = data.query_match.search_data;
  439. if (qms.length==0) {
  440. return '<p>无数据';
  441. }
  442. var qhtml = '<ul>';
  443. for(var i=0; i<qms.length; i++) {
  444. qhtml += '<li onclick="handleSearchResult(&quot;' + qms[i].fname + '&quot;)">\
  445. <div class="sh_forum_name">' + qms[i].fname + '</div>\
  446. <div class="sh_forum_desc">' + qms[i].forum_desc + '</div>';
  447. }
  448. qhtml += '</ul>';
  449. return qhtml;
  450. };
  451. function parsePosts(postsDom) {
  452. var h_posts = postsDom.find('li.j_thread_list');
  453. var h_paging = postsDom.find('#frs_list_pager');
  454. var h_cur_page = postsDom.find('#frs_list_pager .cur');
  455. var h_cur_url = !h_cur_page.length ? '#?' + window.Math.random() : '/f?kw=' + config.posts.forum_name + '&pn=' + (h_cur_page.text()*50-50);
  456. var ho_pobj = {}, posts_html='';
  457. posts_html='<div class="span"><div class="loop-12 posts_list"><ul>';
  458. for(var i=0; i<h_posts.length; i++) {
  459. var hp = h_posts[i];
  460. var hp_rep_num = $(hp).find('.threadlist_rep_num')[0].textContent;
  461. var hp_title = $(hp).find('.j_th_tit')[1].textContent;
  462. var hp_href = $(hp).find('.j_th_tit')[1].href;
  463. var hp_detail = !$(hp).find('.threadlist_text')[1] ? '' : $(hp).find('.threadlist_text')[1].textContent;
  464. var hp_author = !$(hp).find('.j_user_card')[0] ? '' : $(hp).find('.j_user_card')[0].textContent;
  465. var hp_last_repuser = !$(hp).find('.j_user_card')[1] ? '' : $(hp).find('.j_user_card')[1].textContent;
  466. var hp_last_time = !$(hp).find('.j_reply_data')[0] ? '' : $(hp).find('.j_reply_data')[0].textContent;
  467. posts_html += '<li data-href="' + hp_href + '">\
  468. <div class="span">\
  469. <div class="loop-10 post_title hidefont" title="' + hp_title + '">' + hp_title + '</div>\
  470. <div class="loop-2 post_author hidefont" title="' + hp_author + '">' + hp_author + '</div>\
  471. <div class="loop-12 box_posts_detail">' + hp_detail + '</div>\
  472. <div class="loop-5 post_repuser hidefont">最后回复人:' + hp_last_repuser + '</div>\
  473. <div class="loop-5 post_lasttime">最后回复时间:' + hp_last_time + '</div></div>';
  474. }
  475. posts_html += '</ul></div>';
  476. posts_html += '<div class="loop-4 posts_paging">' + (!h_paging.length ? '' : h_paging.html()) + '<a href="' + h_cur_url + '">刷新</a><span id="btn_posting">发帖</span></div></div>';
  477. return posts_html;
  478. };
  479. function parsePost(postDom) {
  480. var post_title = postDom.find('.core_title_txt').html()
  481. var post_info = postDom.find('.l_post');
  482. var post_content = postDom.find('.p_content cc');
  483. var author_avatar = postDom.find('.p_author_face img');
  484. var lzlbox = postDom.find('j_lzl_c_b_a');
  485. var ppage = postDom.find('.pb_list_pager')[0];
  486. var post_html = '';
  487. post_html += '<div class="loop-12 post_title">' + post_title + '</div>';
  488. for(var i=0; i<post_info.length; i++) {
  489. var pi = $(post_info[i]).data('field');
  490. var pc = post_content[i];
  491. post_html += '<section data-post="' + pi.content.post_id + '" >';
  492. post_html += '<div class="loop-2 post_info">\
  493. <div class="loop-12 post_author" data-user="' + pi.author.user_id + '">\
  494. <div><img src="http://tb.himg.baidu.com/sys/portrait/item/' + pi.author.portrait + '"></div>\
  495. <span>' + pi.author.user_name + '</span>\
  496. </div>\
  497. <div class="loop-12 post_author_level">\
  498. <span>' + (pi.author.level_name||'*') + '</span>\
  499. <span>' + (pi.author.level_id||'0') + '</span>\
  500. </div>\
  501. </div>';
  502. post_html += '<div class="loop-10 post_article">' + pc.innerHTML + '</div>';
  503. post_html += '<div class="loop-10 post_msg"><div class="loop-2 btn_replay_lzl" data-pid="' + pi.content.post_id + '" data-floor="' + pi.content.post_no + '" data-index="' + i + '">楼中楼(' + pi.content.comment_num + ')</div><div class="loop-2">' + pi.content.post_no + '楼</div><div class="loop-2">' + pi.content.date + '</div></div>';
  504. post_html += '</section>';
  505. }
  506. post_html += '<div class="loop-4 post-page">' + ppage.innerHTML + '<span id="post_replay">回复</span><span id="see_lz">楼主模式</span></div>';
  507. post_html += '<div class="loop-4 post-url"><span>' + config.post.page_url + '</span></div>';
  508. post_html='<div class="span box_post">' +post_html+ '</div>';
  509. return post_html;
  510. };
  511. function parsePostLzl(data) {
  512. var lzlhtml = '<div class="box_lzl"><ul>';
  513. for(var i=0; i<data.length; i++) {
  514. var lzlinfo = $(data[i]).data('field');
  515. var lzltext = $(data[i]).find('.lzl_cnt span.lzl_content_main').html();
  516. var lzltime = $(data[i]).find('.lzl_cnt span.lzl_time').html();
  517. if (!lzlinfo.spid) {
  518. break;
  519. }
  520. lzlhtml += '<li id="lzl-'+lzlinfo.spid+'">\
  521. <div class="span">\
  522. <div class="loop-4 lzl_author">' + lzlinfo.user_name + '</div>\
  523. <div class="loop-8 lzl_cnt">' + lzltext + '</div>\
  524. <div class="loop-12 lzl_info">\
  525. <span>' + lzltime + '</span>\
  526. <span class="btn_lzl_replay" data-spid="' + lzlinfo.spid + '" data-author="' + lzlinfo.user_name + '">回复</span></div>\
  527. </div>\
  528. <div id="box_lzl_rep-' + lzlinfo.spid + '"></div>';
  529. }
  530. lzlhtml += '</ul>';
  531. lzlhtml += '<div class="span">\
  532. <div class="loop-12">\
  533. <span class="btn_lzl_replay" data-spid="1">回复</span></div>\
  534. </div>\
  535. </div>\
  536. <div id="box_lzl_rep-1"></div>';
  537. var lzlp = $(data[data.length-1]).find('.j_pager');
  538. lzlhtml += !lzlp.length ? '' : '<div class="loop-12 lzl-page">' + lzlp.html() + '</div>';
  539. lzlhtml += '</div>';
  540. return lzlhtml;
  541. };
  542.  
  543.  
  544. function executePosting(title, content){
  545. $.ajax({
  546. url: config.posts.handle_url,
  547. type: 'post',
  548. data: {
  549. content: content,
  550. fid: config.posts.forum_id,
  551. floor_num: config.posts.floor_num,
  552. ie: 'utf-8',
  553. kw: config.posts.forum_name,
  554. rich_text: 1,
  555. tbs: config.posts.tbs,
  556. tid: 0,
  557. title: title,
  558. vcode: config.captcha.input,
  559. vcode_md5: config.captcha.code
  560. },
  561. dataType: 'json'
  562. }).done(function(data){
  563. parsePosting(data);
  564. });
  565. };
  566.  
  567.  
  568. function executPostReplay(content) {
  569. $.ajax({
  570. url: config.post.handle_url,
  571. type: 'post',
  572. data: {
  573. kw: config.post.forum_name,
  574. ie: 'utf-8',
  575. rich_text: 1,
  576. floor_num: config.post.floor_num,
  577. fid: config.post.forum_id,
  578. tid: config.post.thread_id,
  579. content: content,
  580. anonymous: 0,
  581. tbs: config.post.tbs,
  582. vcode_md5: config.captcha.code,
  583. vcode: config.captcha.input
  584. },
  585. dataType: 'json'
  586. }).done(function(data){
  587. parsePostReplay(data);
  588. });
  589. };
  590.  
  591. function parsePosting(data) {
  592. if (!data.no) {
  593. handleGetPosts(config.posts.page_url);
  594. $('.tba-modal').omniWindow().trigger('hide');
  595. return;
  596. }
  597. var vhtml = '', da = data.data;
  598. var captHtml = parsePostCaptcha(da);
  599. if (!captHtml) {
  600. return;
  601. }
  602. $('#modal_other').html(captHtml);
  603. mointorCaptcha();
  604. };
  605.  
  606. function parsePostReplay(data) {
  607. if (!data.no) {
  608. handleGetPost(config.post.page_url);
  609. $('.tba-modal').omniWindow().trigger('hide');
  610. return;
  611. }
  612. var vhtml = '', da = data.data;
  613. var captHtml = parsePostCaptcha(da);
  614. if (!captHtml) {
  615. return;
  616. }
  617. $('#modal_other').html(captHtml);
  618. mointorCaptcha();
  619. };
  620.  
  621. function parseLzlReplay(data, mark) {
  622. if (!data.no) {
  623. handleGetLzlReplay();
  624. return;
  625. }
  626. var vhtml = '', da = data.data;
  627. var captHtml = parsePostCaptcha(da);
  628. if (!captHtml) {
  629. return;
  630. }
  631. $('.lzl_replay_other').html(captHtml);
  632. mointorCaptcha();
  633. };
  634.  
  635. function parsePostCaptcha(data) {
  636. config.captcha.value = [];
  637. var vhtml = '';
  638. if (!data.vcode.need_vcode) {
  639. return null;
  640. }
  641. config.captcha.code = data.vcode.captcha_vcode_str;
  642. config.captcha.type = data.vcode.captcha_code_type;
  643. var img = config.captcha.url4 + '?' + data.vcode.captcha_vcode_str;
  644. vhtml += '<div class="box_captcha">';
  645. vhtml += '<div class="loop-12 captcha"><img src="' + img + '"></div>';
  646. vhtml += '<div class="loop-12 captcha-input">\
  647. <input type="checkbox" class="cait cait-1" data-index="1" value="00000000">\
  648. <input type="checkbox" class="cait cait-2" data-index="2" value="00010000">\
  649. <input type="checkbox" class="cait cait-3" data-index="3" value="00020000">\
  650. <input type="checkbox" class="cait cait-4" data-index="4" value="00000001">\
  651. <input type="checkbox" class="cait cait-5" data-index="5" value="00010001">\
  652. <input type="checkbox" class="cait cait-6" data-index="6" value="00020001">\
  653. <input type="checkbox" class="cait cait-7" data-index="7" value="00000002">\
  654. <input type="checkbox" class="cait cait-8" data-index="8" value="00010002">\
  655. <input type="checkbox" class="cait cait-9" data-index="9" value="00020002">\
  656. </div>';
  657. // vhtml += '<div class="loop-12"><button type="button" id="btn_refre_captcha">换一张</button></div>';
  658. vhtml += '<div class="loop-12"><div class="loop-10" id="captchackr"></div><div class="loop-2" id="delcaptchar">X</div></div>';
  659. vhtml += '<div class="loop-12" id="post-result"></div>';
  660. vhtml += '</div>';
  661. return vhtml;
  662. };
  663.  
  664. function mointorCaptcha() {
  665. $('.cait').bind('click', function(){
  666. if (config.captcha.value.length<4) {
  667. $(this).prop({disabled: true});
  668. config.captcha.value.push({val: $(this).val(), index: $(this).data('index')});
  669. $('#captchackr').append('<span id="checkcaptchar-' + $(this).data('index') + '">' + $(this).data('index') + '</span>');
  670. if (config.captcha.value.length==4) {
  671. var captVal = '';
  672. for(var i=0; i<config.captcha.value.length; i++) {
  673. captVal += config.captcha.value[i].val;
  674. }
  675. config.captcha.input = captVal;
  676. }
  677. return;
  678. }
  679. });
  680. $('#delcaptchar').bind('click', function(){
  681. for(var i=0; i<config.captcha.value.length; i++) {
  682. if ((i+1)==config.captcha.value.length) {
  683. $('#checkcaptchar-' + config.captcha.value[i].index).remove();
  684. $('.cait-' + config.captcha.value[i].index).prop({disabled: false, checked: false});
  685. config.captcha.value.remove((i+1));
  686. }
  687. }
  688. });
  689. /*
  690. $('#btn_refre_captcha').bind('click', function(){
  691. // $('#btn_post').click();
  692. });
  693. */
  694. };
  695.  
  696. function loadFile(filename,filetype){
  697. if ('js' == filetype) {
  698. var fileref = document.createElement('script');
  699. fileref.setAttribute("type","text/javascript");
  700. fileref.setAttribute("src",filename);
  701. }
  702. if ('css' == filetype) {
  703. var fileref = document.createElement('link');
  704. fileref.setAttribute("rel","stylesheet");
  705. fileref.setAttribute("type","text/css");
  706. fileref.setAttribute("href",filename);
  707. }
  708. if(typeof fileref != "undefined"){
  709. document.getElementsByTagName("head")[0].appendChild(fileref);
  710. }
  711. };
  712.  
  713. function encodeUnicode(str){
  714. return escape(str).toLocaleLowerCase().replace(/%u/gi,'\\u');
  715. };
  716.  
  717. function decodeUnicode(str){
  718. return unescape(str.replace(/\\u/gi,'%u'));
  719. };
  720.  
  721. function formatEditor(content) {
  722. return content.replace(/<p>|<br\/>/gi, '').replace(/<\/p>/gi, '[br]').replace(/_src=".*?"/gi, 'class="BDE_Smiley"');
  723. };
  724.  
  725. initBorer();
  726. })(window, jQuery);