border.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import $ from '../../util/dom-core.js';
  2. import { gennerOneLine } from '../../util/lineUtil.js';
  3. function _addParagraph (editor) {
  4. let currentPage = editor.page.currentPage;
  5. if (!currentPage) {
  6. return false;
  7. }
  8. let $para = currentPage.addParagraph();
  9. return $para;
  10. }
  11. // 客观题框
  12. function objectBorder (editor, data) {
  13. // 加一段,再插入框
  14. let $para = _addParagraph(editor);
  15. if (!$para) {
  16. editor.message.showMessage('请在编辑器内编辑');
  17. return false;
  18. }
  19. let sortIndex = data.sort;
  20. let border = $('<div class="js-lsiten-border lsiten-question-object"></div>');
  21. border.attr('data-type', 1);
  22. border.attr('data-sort', sortIndex);
  23. border.attr('tabindex', 1);
  24. border.attr('data-current-row', 0);
  25. border.attr('contenteditable', false);
  26. // style start
  27. border.css('border', '1px solid #000')
  28. .css('padding', '0')
  29. .css('margin', '10px 0')
  30. .css('overflow', 'hidden')
  31. .css('height', 'auto')
  32. .css('width', '100%')
  33. .css('box-sizing', 'border-box')
  34. .css('outline', 'none')
  35. .css('border-color', '#000');
  36. // style end
  37. // 生成行列
  38. let row = parseInt(data.row);
  39. let column = parseInt(data.column);
  40. border.attr('data-row', row);
  41. border.attr('data-column', column);
  42. let cWidth = 100 / column + '%';
  43. let lastColumn = column - 1;
  44. let columnIndex = 1;
  45. for (let i = 0; i < row; i++) {
  46. let $row = $('<div class = "js-options-row"></div>');
  47. $row.css('float', 'left')
  48. // .css('min-height', '100px')
  49. .css('height', 'auto')
  50. .css('width', '100%');
  51. $row.attr('data-current-column', 0);
  52. i > 0 && ($row.css('border-top', '1px solid #000').css('box-sizing', 'border-box'));
  53. for (let j = 0; j < column; j++) {
  54. let $column = $('<div class = "js-option-column"><div style="padding: 12px 0"></div></div>');
  55. $column.attr('data-question-count', 0);
  56. $column.attr('data-Index', columnIndex++);
  57. $column.attr('data-sort', sortIndex);
  58. $column.css('width', cWidth)
  59. .css('float', 'left')
  60. // .css('min-height', '100px')
  61. .css('height', 'auto');
  62. j < lastColumn && ($column.css('border-right', '1px solid #000').css('box-sizing', 'border-box'));
  63. $row.append($column);
  64. }
  65. border.append($row);
  66. }
  67. $para.append(border);
  68. }
  69. // 主观题框
  70. function subjectBorder (editor, data) {
  71. // 加一段,再插入框
  72. let $para = _addParagraph(editor);
  73. if (!$para) {
  74. editor.message.showMessage('请在编辑器内编辑');
  75. return false;
  76. }
  77. let group = parseInt(data.group);
  78. let sortIndex = data.sort;
  79. let border = $('<div class="js-lsiten-border lsiten-question-subject"><div class="border-content"></div></div>');
  80. border.attr('data-type', 2);
  81. border.attr('data-sort', sortIndex);
  82. border.attr('tabindex', 1);
  83. $(border[0].firstChild).append(gennerOneLine());
  84. // style start
  85. border.css('border', '1px solid #000')
  86. .css('padding', '10px 15px')
  87. .css('height', 'auto')
  88. .css('margin', '10px 0')
  89. .css('width', '100%')
  90. .css('box-sizing', 'border-box')
  91. .css('outline', 'none')
  92. .css('border-color', '#000');
  93. // style end
  94. if (group > 0) {
  95. let problems = data.pros;
  96. let problemsLength = problems.length;
  97. let $optional = $('<div class="js-lsiten-options-box" contenteditable="false"></div>');
  98. $optional.css('margin-bottom', '10px');
  99. let $optionalTips = $('<div>选做题</div>')
  100. $optional.append($optionalTips);
  101. let $optionalBody = $('<div></div>');
  102. let $optionTitle = $('<div>题号:</div>');
  103. $optionTitle.css('display', 'inline-block').css('width', 'auto').css('height', 'auto');
  104. $optionalBody.append($optionTitle);
  105. for (let i = 0; i < problemsLength; i++) {
  106. let $problemBox = $('<div></div>');
  107. $problemBox.css('display', 'inline-block').css('width', 'auto').css('height', 'auto').css('margin', '0 10px');
  108. let pnum = problems[i].pnum;
  109. // 如果小问没有pnum,则显示小问pnum
  110. if (!pnum) {
  111. let qutions = problems[i].qus;
  112. let pnumArr = [];
  113. for (let k = 0; k < qutions.length; k++) {
  114. pnumArr.push(qutions[k].pnum);
  115. }
  116. pnum = '[' + pnumArr.join(',') + ']';
  117. }
  118. let $optionPnum = $('<div>' + pnum + '</div>');
  119. $optionPnum.css('display', 'inline-block').css('width', 'auto').css('height', 'auto').css('margin', '0 3px');
  120. let $optionBorder = $('<div>&#8203;</div>');
  121. $optionBorder.css('border', '1px solid #000')
  122. .css('text-align', 'center')
  123. .css('width', '19px')
  124. .css('height', 'auto')
  125. .css('box-sizing', 'border-box')
  126. .css('font-size', '12px')
  127. .css('display', 'inline-block')
  128. .css('line-height', '11px')
  129. .css('margin', '0 0 0 5px');
  130. $problemBox.append($optionPnum);
  131. $problemBox.append($optionBorder);
  132. $optionalBody.append($problemBox);
  133. }
  134. $optional.append($optionalBody);
  135. border[0].firstChild.insertBefore($optional[0], border[0].firstChild.firstChild);
  136. }
  137. $para.append(border);
  138. }
  139. let Border = function (params) {
  140. let editor = this.editor;
  141. let type = params.type;
  142. let data = params.data;
  143. switch (parseInt(type)) {
  144. case 1:
  145. objectBorder(editor, data);
  146. break;
  147. case 2:
  148. subjectBorder(editor, data);
  149. break;
  150. }
  151. }
  152. export default {
  153. _border: Border
  154. }