Bangumi-Index-Batch-Edit

批量添加目录条目,直接修改条目排序和评论,批量保存已修改的条目,按当前列表顺序排序

目前为 2017-12-20 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Bangumi-Index-Batch-Edit
  3. // @namespace https://github.com/bangumi/scripts/liaune
  4. // @author binota,Liaune
  5. // @description 批量添加目录条目,直接修改条目排序和评论,批量保存已修改的条目,按当前列表顺序排序
  6. // @include /^https?:\/\/((bgm|bangumi)\.tv|chii\.in)\/index\/\d+/
  7. // @version 1.1
  8. // @grant none
  9. // @require https://code.jquery.com/ui/1.11.4/jquery-ui.min.js
  10. // ==/UserScript==
  11.  
  12. //Check the owner of index, then insert the button for modify orders
  13. if($('.idBadgerNeue a.avatar').attr('href').search($('.grp_box a.avatar').attr('href')) >= 0) {
  14. $('.grp_box .tip_j').append(' / <a id="modifyOrder" class="chiiBtn" href="#">批量编辑</a>');
  15. $('#indexCatBox ul').append('<li><a id="addRelateBatch" class="add thickbox" title="批量添加" href="#TB_inline?tb&height=500&width=420&inlineId=newIndexRelatedBatch"><span>+批量添加</span></a></li>');
  16. $('<div style="display:none;" id="newIndexRelatedBatch"><div class="bibeBox" style="padding:10px"><label>输入条目URL或ID,如 http://bgm.tv/subject/265 或 265,一行一个</label><textarea rows="25" class="quick" name="urls"></textarea><input type="button" class="inputBtn" value="批量添加关联" name="submit" onclick="addRelateBatch()"></div></div>').insertBefore('#indexCatBox');
  17.  
  18. //Re-init the element we just inserted.
  19. tb_init('a.thickbox');
  20. }
  21.  
  22. //Get formhash
  23. var formhash = $('input[name="formhash"]').val();
  24.  
  25. var totalItems = 0;
  26. var saveItems = 0;
  27.  
  28. $('#modifyOrder').click(function() {
  29. $(this).remove();
  30. $('.grp_box .tip_j').append('<a id="saveOrder" class="chiiBtn" href="#">保存修改</a>');
  31. $('.grp_box .tip_j').append('<a id="savenowOrder" class="chiiBtn" href="#">按当前列表顺序保存</a>');
  32.  
  33. //make items sortable.
  34. $('#browserItemList').sortable({
  35. handle: ".cover"
  36. });
  37.  
  38. //insert comment_box if needs.
  39. $('#browserItemList .tools').each(function() {
  40. var order0=parseInt($(this).find('a').attr('order'));
  41. if($(this).parent().find('.text').length === 0)
  42. $('<div id="comment_box"><div class="item"><div style="float:none;" class="text_main_even"><div class="text"><br></div><div class="text_bottom"></div></div></div></div>').insertBefore($(this));
  43. $('<span class="tip">排序:</span><input id="modify_order" name="order" type="text" value='+order0+' class="inputtext">').insertAfter($(this));
  44. });
  45. $('#browserItemList .text').attr('contenteditable', 'true');
  46. var content={};
  47. var itemid={};
  48. var order={};
  49. $('#browserItemList > li').each(function(i) {
  50. content[i] = $(this).find('.text').text().trim();
  51. itemid[i] = $(this).find('.tools :first-child').attr('id').match(/modify_(\d+)/)[1];
  52. order[i]=parseInt($(this).find('input').attr('value'));
  53. });
  54. $('#saveOrder').click(function() {
  55. if(!confirm('确定要保存么?')) return;
  56. $(this).attr('disabled', 'disabled');
  57. $(this).html('保存中...');
  58. // totalItems = $('#browserItemList > li').length;
  59. totalItems=0;
  60. savedItems = 0;
  61. $('#browserItemList > li').each(function(i) {
  62. var content1 = $(this).find('.text').text().trim();
  63. var itemid1 = $(this).find('.tools :first-child').attr('id').match(/modify_(\d+)/)[1];
  64. var order1=parseInt($(this).find('input').attr('value'));
  65. if((order1!=order[i])|(content1!=content[i])){
  66. saveRelateItem(itemid1, content1, order1);
  67. totalItems++;}
  68. });
  69. });
  70.  
  71. $('#savenowOrder').click(function() {
  72. if(!confirm('确定按当前列表顺序保存么?')) return;
  73. $(this).attr('disabled', 'disabled');
  74. $(this).html('保存中...');
  75. // totalItems = $('#browserItemList > li').length;
  76. totalItems=0;
  77. savedItems = 0;
  78. var itemsList = document.querySelectorAll('#browserItemList li.item');
  79. $('#browserItemList > li').each(function(i) {
  80. var content1 = $(this).find('.text').text().trim();
  81. var itemid1 = $(this).find('.tools :first-child').attr('id').match(/modify_(\d+)/)[1];
  82. var order1=parseInt($(this).css("order"));
  83. saveRelateItem(itemid1, content1, order1);
  84. totalItems++;
  85. });
  86. });
  87. });
  88.  
  89. var saveRelateItem = function(id, content, order) {
  90. var postData = {
  91. content: content.trim(),
  92. formhash: formhash,
  93. order: order,
  94. submit: '提交'
  95. };
  96.  
  97. $.post('/index/related/' + id + '/modify', postData, function() {
  98. if(++savedItems == totalItems){ location.reload(); return $('#saveOrder').html('保存完毕...!');}
  99. $('#savenowOrder').html('保存中... (' + savedItems + '/' + totalItems +')');
  100. });
  101. };
  102.  
  103. window.addRelateBatch = function() {
  104. $('.bibeBox input[name="submit"]').val('添加关联中...');
  105. var url = $('#indexCatBox a')[0].href + '/add_related';
  106. var items = $('.bibeBox textarea').val();
  107. items = items.split("\n");
  108. for(var i = 0;i < items.length; i++) {
  109. $.post(url, {add_related: items[i].trim(), formhash: formhash, submit: '添加新关联'},function() {
  110. $('.bibeBox input[name="submit"]').val('添加中... (' + i + '/' + items.length +')');
  111. if(i == items.length -1) $('.bibeBox input[name="submit"]').val('添加完毕...!');
  112. });
  113. }
  114. // $('.bibeBox input[name="submit"]').val('添加完毕...!');
  115. };
  116.