view.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. $(document).ready(function()
  2. {
  3. function saveOrders(orders)
  4. {
  5. $.post(createLink('doc','sortBookOrder'),
  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 = $('.bookTree > dl, .bookTree > .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. $('.bookTree dl').append('<dd class="catalog catalog-empty">&nbsp;</dd>');
  52. $('.bookTree > dl > .catalog .catalog, .bookTree > dl > .catalog').not('.catalog-empty').droppable(
  53. {
  54. trigger: function($e){return $e.children('.actions').find('.sort-handle')},
  55. target: function($e){return $e.siblings('.catalog');},
  56. container: '.bookTree',
  57. nested: true,
  58. flex: true,
  59. sensorOffsetY: -10,
  60. start: function()
  61. {
  62. $('.bookTree').addClass('show-empty-catalog');
  63. },
  64. drag: function(e)
  65. {
  66. if(e.target)
  67. {
  68. $('.drop-area').removeClass('drop-area');
  69. e.target.closest('dl').addClass('drop-area');
  70. }
  71. },
  72. drop: function(e)
  73. {
  74. e.target.before(e.element);
  75. updateOrders();
  76. },
  77. finish: function()
  78. {
  79. $('.drop-area').removeClass('drop-area');
  80. $('.bookTree').removeClass('show-empty-catalog');
  81. }
  82. });
  83. 'use strict';
  84. var NAME = 'zui.splitRow'; // model name
  85. // File input list
  86. // The SplitRow model class
  87. var SplitRow = function(element, options)
  88. {
  89. var that = this;
  90. that.name = NAME;
  91. var $element = that.$ = $(element);
  92. options = that.options = $.extend({}, SplitRow.DEFAULTS, this.$.data(), options);
  93. var id = options.id || $element.attr('id') || $.zui.uuid();
  94. var $cols = $element.children('.side-col,.main-col');
  95. var $firstCol = $cols.first();
  96. var $secondCol = $cols.eq(1);
  97. var $spliter = $firstCol.next('.col-spliter');
  98. if (!$spliter.length)
  99. {
  100. $spliter = $(options.spliter);
  101. if (!$spliter.parent().length)
  102. {
  103. $spliter.insertAfter($firstCol);
  104. }
  105. }
  106. var spliterWidth = $spliter.width();
  107. var minFirstColWidth = $firstCol.data('minWidth');
  108. var minSecondColWidth = $secondCol.data('minWidth');
  109. var setFirstColWidth = function(width)
  110. {
  111. var rowWidth = $element.width();
  112. var maxFirstWidth = rowWidth - minSecondColWidth - spliterWidth;
  113. width = Math.max(minFirstColWidth, Math.min(width, maxFirstWidth));
  114. $firstCol.width(width);
  115. $.zui.store.set('splitRowFirstSize:' + id, width);
  116. };
  117. var defaultWidth = $.zui.store.get('splitRowFirstSize:' + id);
  118. if(typeof(defaultWidth) == 'undefined')
  119. {
  120. defaultWidth = 0;
  121. $firstCol.find('.tabs ul.nav-tabs li').each(function(){defaultWidth += $(this).outerWidth()});
  122. defaultWidth += ($firstCol.find('.tabs ul.nav-tabs li').length - 1) * 10;
  123. defaultWidth += 30;
  124. }
  125. setFirstColWidth(defaultWidth);
  126. var documentEventName = '.' + id;
  127. var mouseDownX, isMouseDown, startFirstWidth;
  128. $spliter.on('mousedown', function(e)
  129. {
  130. startFirstWidth = $firstCol.width();
  131. mouseDownX = e.pageX;
  132. isMouseDown = true;
  133. $element.addClass('row-spliting');
  134. e.preventDefault();
  135. $(document).on('mousemove' + documentEventName, function(e)
  136. {
  137. if (isMouseDown)
  138. {
  139. var deltaX = e.pageX - mouseDownX;
  140. setFirstColWidth(startFirstWidth + deltaX);
  141. e.preventDefault();
  142. } else {
  143. $(document).off(documentEventName);
  144. $element.removeClass('row-spliting');
  145. }
  146. }).on('mouseup' + documentEventName + ' mouseleave' + documentEventName, function(e)
  147. {
  148. isMouseDown = false;
  149. $(document).off(documentEventName);
  150. $element.removeClass('row-spliting');
  151. });
  152. });
  153. var fixColClass = function($col)
  154. {
  155. if (options.smallSize) $col.toggleClass('col-sm-size', $col.width() < options.smallSize);
  156. if (options.middleSize) $col.toggleClass('col-md-size', $col.width() < options.middleSize);
  157. };
  158. var resizeCols = function() {
  159. var cellHeight = $(window).height() - $('#footer').outerHeight() - $('#header').outerHeight() - 42;
  160. $cols.children('.panel').height(cellHeight).css('maxHeight', cellHeight).find('.panel-body').css('position', 'absolute');
  161. var sideHeight = cellHeight - $cols.find('.nav-tabs').height() - $cols.find('.side-footer').height() - 35;
  162. $cols.find('.tab-content').height(sideHeight).css('maxHeight', sideHeight).css('overflow-y', 'auto');
  163. };
  164. $(window).on('resize', resizeCols);
  165. $firstCol.on('resize', function(e) {fixColClass($firstCol);});
  166. $secondCol.on('resize', function(e) {fixColClass($secondCol);});
  167. fixColClass($firstCol);
  168. fixColClass($secondCol);
  169. resizeCols();
  170. };
  171. // default options
  172. SplitRow.DEFAULTS =
  173. {
  174. spliter: '<div class="col-spliter"></div>',
  175. smallSize: 700,
  176. middleSize: 850
  177. };
  178. // Extense jquery element
  179. $.fn.splitRow = function(option)
  180. {
  181. return this.each(function()
  182. {
  183. var $this = $(this);
  184. var data = $this.data(NAME);
  185. var options = typeof option == 'object' && option;
  186. if(!data) $this.data(NAME, (data = new SplitRow(this, options)));
  187. });
  188. };
  189. SplitRow.NAME = NAME;
  190. $.fn.splitRow.Constructor = SplitRow;
  191. // Auto call splitRow after document load complete
  192. $(function()
  193. {
  194. $('.split-row').splitRow();
  195. });
  196. var $pageSetting = $('#pageSetting');
  197. if($pageSetting.length)
  198. {
  199. $pageSetting.on('click', '.close-dropdown', function()
  200. {
  201. $pageSetting.parent().removeClass('open');
  202. }).on('click', function(e){e.stopPropagation()});
  203. }
  204. $('.ajaxCollect').mousedown(function (event) {
  205. var obj = $(this);
  206. var url = obj.data('url');
  207. $.get(url, function(response)
  208. {
  209. if(response.status == 'yes')
  210. {
  211. obj.children('i').removeClass().addClass('icon icon-star text-yellow');
  212. obj.parent().prev().children('.file-name').children('i').remove('.icon');
  213. obj.parent().prev().children('.file-name').prepend('<i class="icon icon-star text-yellow"></i> ');
  214. }
  215. else
  216. {
  217. obj.children('i').removeClass().addClass('icon icon-star-empty');
  218. obj.parent().prev().children('.file-name').children('i').remove(".icon");
  219. }
  220. }, 'json');
  221. return false;
  222. });
  223. $('dd.catalog[data-id="' + articleID + '"]').addClass('active');
  224. });