managecourse.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. $(document).ready(function()
  2. {
  3. function saveOrders(orders)
  4. {
  5. $.post(createLink('traincourse','sortChapterOrder'),
  6. {sort:orders},
  7. function(data)
  8. {
  9. if(data.result != "success")
  10. {
  11. bootbox.alert(data.message);
  12. }
  13. },'json');
  14. }
  15. function updateOrders(ele, parentOrder, orders)
  16. {
  17. var root = false;
  18. if(typeof ele === 'undefined')
  19. {
  20. ele = $('.courses > dl, .courses > .catalog > dl');
  21. root = true;
  22. orders = {};
  23. }
  24. if(typeof parentOrder === 'undefined')
  25. {
  26. parentOrder = '';
  27. var $parent = ele.closest('.catalog:not(".catalog-empty, .drag-shadow")');
  28. if($parent.length)
  29. {
  30. parentOrder = $parent.children('strong').find('.order').text();
  31. }
  32. }
  33. var index = 1;
  34. ele.children('.catalog:not(".catalog-empty, .drag-shadow")').each(function()
  35. {
  36. var $this = $(this);
  37. var order = (parentOrder === '' ? '' : (parentOrder + '.')) + (index++);
  38. orders[$this.data('id')] = order;
  39. $this.children('strong').find('.order').text(order);
  40. var $dl = $this.children('dl');
  41. if($dl.length)
  42. {
  43. updateOrders($dl, order, orders);
  44. }
  45. });
  46. if(root)
  47. {
  48. saveOrders(orders);
  49. }
  50. };
  51. $('.courses dl').append('<dd class="catalog catalog-empty">&nbsp;</dd>');
  52. $('.courses > .catalog .catalog, .courses > dl .catalog').not('.catalog-empty').droppable(
  53. {
  54. handle: '.sort-handle',
  55. target: function($e){return $e.siblings('.catalog');},
  56. selector: '.catalog',
  57. container: '.courses',
  58. nested: true,
  59. flex: true,
  60. sensorOffsetY: -10,
  61. start: function()
  62. {
  63. $('.courses').addClass('show-empty-catalog');
  64. },
  65. drag: function(e)
  66. {
  67. if(e.target)
  68. {
  69. $('.drop-area').removeClass('drop-area');
  70. e.target.closest('dl').addClass('drop-area');
  71. }
  72. },
  73. drop: function(e)
  74. {
  75. e.target.before(e.element);
  76. updateOrders();
  77. },
  78. finish: function()
  79. {
  80. $('.drop-area').removeClass('drop-area');
  81. $('.courses').removeClass('show-empty-catalog');
  82. }
  83. });
  84. });