|
@@ -304,16 +304,22 @@ yzPage.prototype = {
|
|
|
contentIndex++;
|
|
|
});
|
|
|
// 更新栏高 结束
|
|
|
- let rowIndex = 0;
|
|
|
- $(updateNextPara).find('.js-options-row').forEach(row => {
|
|
|
- if (rowIndex > 0) {
|
|
|
- $(row).css('border-top', '1px solid #000');
|
|
|
- }
|
|
|
- rowIndex++;
|
|
|
- })
|
|
|
+ this._updateObjectColumnBorder(updateNextPara);
|
|
|
}
|
|
|
},
|
|
|
/**
|
|
|
+ * function 更新客观题栏行线
|
|
|
+ */
|
|
|
+ _updateObjectColumnBorder: function (border) {
|
|
|
+ let rowIndex = 0;
|
|
|
+ $(border).find('.js-options-row').forEach(row => {
|
|
|
+ if (rowIndex > 0) {
|
|
|
+ $(row).css('border-top', '1px solid #000');
|
|
|
+ }
|
|
|
+ rowIndex++;
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
* function 插入段落
|
|
|
* @param {DomElement} $insertParagraph 需要插入的段落
|
|
|
* @param {DomElement} $firsParagraph 插入该段之前
|
|
@@ -386,9 +392,11 @@ yzPage.prototype = {
|
|
|
$(objectLastRow).remove();
|
|
|
this._insertDomBeforeByFirst($(insertLast), objectFirstRow);
|
|
|
} else {
|
|
|
- this._insertDomBeforeByFirst($(insertLast), objectFirstRow);
|
|
|
+ if (!this.isObjectEmpty(insertLast)) {
|
|
|
+ this._insertDomBeforeByFirst($(insertLast), objectFirstRow);
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
+ } else if (borderType === 2) {
|
|
|
let insertLastQuestion = insertLast.firstChild.lastChild;
|
|
|
let firstFirstQuestion = firstFirst.firstChild.firstChild;
|
|
|
this._mergeSplitBorder(insertLastQuestion, firstFirstQuestion, $(insertLast));
|
|
@@ -410,6 +418,33 @@ yzPage.prototype = {
|
|
|
}
|
|
|
},
|
|
|
/**
|
|
|
+ * function 判断客观题框是否为空
|
|
|
+ * @param {node} object 客观题框
|
|
|
+ */
|
|
|
+ isObjectEmpty: function (object) {
|
|
|
+ let $object = $(object);
|
|
|
+ $object.childNodes().forEach(row => {
|
|
|
+ if(this.isObjectRowEmpty(row)) {
|
|
|
+ $(row).remove();
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return isEmptyElement(object);
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * function 判断客观题框行是否为空
|
|
|
+ * @param {node} objectRow 客观题行
|
|
|
+ */
|
|
|
+ isObjectRowEmpty: function (objectRow) {
|
|
|
+ let $objectRow = $(objectRow);
|
|
|
+ let status = true;
|
|
|
+ $objectRow.childNodes().forEach(colum => {
|
|
|
+ if (!isEmptyElement(colum.firstChild)) {
|
|
|
+ status = false;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ return status;
|
|
|
+ },
|
|
|
+ /**
|
|
|
* function 合并框
|
|
|
* @param {node} lQuestion 上一段最后一个问题
|
|
|
* @param {node} fQuestion 下一段第一个问题
|
|
@@ -593,75 +628,103 @@ yzPage.prototype = {
|
|
|
let currentBorderId = $item.attr('data-id');
|
|
|
|
|
|
if (currentBorderId === borderId) {
|
|
|
- $($item[0].firstChild).childNodes().forEach(borderItem => {
|
|
|
- if (borderItem.className) {
|
|
|
- if (borderItem.className.indexOf('js-lsiten-question') > -1) {
|
|
|
- let qustionType = parseInt(borderItem.getAttribute('data-type'));
|
|
|
- let lastQuestionItem = lastBorderItem.lastChild;
|
|
|
- let lastQuestionId = lastQuestionItem.getAttribute('data-id');
|
|
|
- let currentQuestionId = borderItem.getAttribute('data-id');
|
|
|
- if (lastQuestionId && currentQuestionId && currentQuestionId === lastQuestionId) {
|
|
|
- if (qustionType === 3) {
|
|
|
- $(borderItem).childNodes().forEach(subjectItem => {
|
|
|
- lastQuestionItem.appendChild(subjectItem);
|
|
|
- })
|
|
|
-
|
|
|
- } else if (qustionType === 4) {
|
|
|
- $(borderItem).childNodes().forEach(writtingItem => {
|
|
|
- if (writtingItem.className.indexOf('lsiten-title') > -1) {
|
|
|
- let $prevWrittingTitleItem = $(lastQuestionItem).find('.lsiten-title');
|
|
|
- let needMergeItem = true;
|
|
|
- if (!$prevWrittingTitleItem.length) {
|
|
|
- needMergeItem = false;
|
|
|
- $prevWrittingTitleItem = $($prevWrittingTitleItem);
|
|
|
- } else {
|
|
|
- needMergeItem = false;
|
|
|
- $prevWrittingTitleItem = $(writtingItem).clone(false);
|
|
|
- }
|
|
|
- $(writtingItem).childNodes().forEach(writtingTitleItem => {
|
|
|
- $prevWrittingTitleItem[0].appendChild(writtingTitleItem);
|
|
|
- })
|
|
|
-
|
|
|
- if (needMergeItem && !isEmptyElement($prevWrittingTitleItem[0])) {
|
|
|
- lastQuestionItem.appendChild($prevWrittingTitleItem[0]);
|
|
|
- }
|
|
|
- } else if (writtingItem.className.indexOf('lsiten-border-box') > -1) {
|
|
|
- let $prevWrittingRowsItem = $(lastQuestionItem).find('.lsiten-border-box');
|
|
|
- let needMergeItem = true;
|
|
|
- if (!$prevWrittingRowsItem.length) {
|
|
|
- needMergeItem = false;
|
|
|
- $prevWrittingRowsItem = $($prevWrittingRowsItem);
|
|
|
- } else {
|
|
|
- needMergeItem = false;
|
|
|
- $prevWrittingRowsItem = $(writtingItem).clone(false);
|
|
|
- }
|
|
|
- $(writtingItem).childNodes().forEach(writtingRowItem => {
|
|
|
- $prevWrittingRowsItem[0].appendChild(writtingRowItem);
|
|
|
- })
|
|
|
-
|
|
|
- if (needMergeItem && !isEmptyElement($prevWrittingRowsItem[0])) {
|
|
|
- lastQuestionItem.appendChild($prevWrittingRowsItem[0]);
|
|
|
+ let borderType = parseInt($item.attr('data-id'));
|
|
|
+ if (borderType === 1) {
|
|
|
+ // 客观题处理
|
|
|
+ $item.childNodes().forEach(objectRow => {
|
|
|
+ if (!objectRow.previousSibling) {
|
|
|
+ let lastRow = lastBorderItem.lastChild;
|
|
|
+ let firstRowId = objectRow.getAttribute('data-id');
|
|
|
+ let lastRowId = lastRow.getAttribute('data-id');
|
|
|
+ if (firstRowId === lastRowId) {
|
|
|
+ let objectColumns = $(objectRow).find('.js-option-column');
|
|
|
+ // 以第一栏的为基准
|
|
|
+ let objectFirstColumn = objectColumns[0];
|
|
|
+ let questionIndex = 0;
|
|
|
+ $(objectFirstColumn.firstChild).childNodes().forEach(objectQuestion => {
|
|
|
+ if (!objectQuestion.previousSibling) {
|
|
|
+ this._mergeObjectRow(questionIndex, objectFirstColumn, lastRow);
|
|
|
+ }
|
|
|
+ questionIndex++;
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ lastBorderItem.append(objectRow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ $item.remove();
|
|
|
+ this._updateObjectColumnBorder(lastBorderItem);
|
|
|
+ } else if (borderType === 2) {
|
|
|
+ $($item[0].firstChild).childNodes().forEach(borderItem => {
|
|
|
+ if (borderItem.className) {
|
|
|
+ if (borderItem.className.indexOf('js-lsiten-question') > -1) {
|
|
|
+ let qustionType = parseInt(borderItem.getAttribute('data-type'));
|
|
|
+ let lastQuestionItem = lastBorderItem.lastChild;
|
|
|
+ let lastQuestionId = lastQuestionItem.getAttribute('data-id');
|
|
|
+ let currentQuestionId = borderItem.getAttribute('data-id');
|
|
|
+ if (lastQuestionId && currentQuestionId && currentQuestionId === lastQuestionId) {
|
|
|
+ if (qustionType === 3) {
|
|
|
+ $(borderItem).childNodes().forEach(subjectItem => {
|
|
|
+ lastQuestionItem.appendChild(subjectItem);
|
|
|
+ })
|
|
|
+
|
|
|
+ } else if (qustionType === 4) {
|
|
|
+ $(borderItem).childNodes().forEach(writtingItem => {
|
|
|
+ if (writtingItem.className.indexOf('lsiten-title') > -1) {
|
|
|
+ let $prevWrittingTitleItem = $(lastQuestionItem).find('.lsiten-title');
|
|
|
+ let needMergeItem = true;
|
|
|
+ if (!$prevWrittingTitleItem.length) {
|
|
|
+ needMergeItem = false;
|
|
|
+ $prevWrittingTitleItem = $($prevWrittingTitleItem);
|
|
|
+ } else {
|
|
|
+ needMergeItem = false;
|
|
|
+ $prevWrittingTitleItem = $(writtingItem).clone(false);
|
|
|
+ }
|
|
|
+ $(writtingItem).childNodes().forEach(writtingTitleItem => {
|
|
|
+ $prevWrittingTitleItem[0].appendChild(writtingTitleItem);
|
|
|
+ })
|
|
|
+
|
|
|
+ if (needMergeItem && !isEmptyElement($prevWrittingTitleItem[0])) {
|
|
|
+ lastQuestionItem.appendChild($prevWrittingTitleItem[0]);
|
|
|
+ }
|
|
|
+ } else if (writtingItem.className.indexOf('lsiten-border-box') > -1) {
|
|
|
+ let $prevWrittingRowsItem = $(lastQuestionItem).find('.lsiten-border-box');
|
|
|
+ let needMergeItem = true;
|
|
|
+ if (!$prevWrittingRowsItem.length) {
|
|
|
+ needMergeItem = false;
|
|
|
+ $prevWrittingRowsItem = $($prevWrittingRowsItem);
|
|
|
+ } else {
|
|
|
+ needMergeItem = false;
|
|
|
+ $prevWrittingRowsItem = $(writtingItem).clone(false);
|
|
|
+ }
|
|
|
+ $(writtingItem).childNodes().forEach(writtingRowItem => {
|
|
|
+ $prevWrittingRowsItem[0].appendChild(writtingRowItem);
|
|
|
+ })
|
|
|
+
|
|
|
+ if (needMergeItem && !isEmptyElement($prevWrittingRowsItem[0])) {
|
|
|
+ lastQuestionItem.appendChild($prevWrittingRowsItem[0]);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- })
|
|
|
- } else {
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ $(borderItem).remove();
|
|
|
+ }
|
|
|
$(borderItem).remove();
|
|
|
+ } else {
|
|
|
+ lastBorderItem.firstChild.appendChild(borderItem);
|
|
|
}
|
|
|
- $(borderItem).remove();
|
|
|
- } else {
|
|
|
+ } else if (itemClass && itemClass.indexOf('js-lsiten-options-box') > -1) {
|
|
|
+ // 选作题组【回退】
|
|
|
+ lastBorderItem.firstChild.appendChild(borderItem);
|
|
|
+ } else if (borderItem.className.indexOf('js-lsiten-line') > -1) {
|
|
|
lastBorderItem.firstChild.appendChild(borderItem);
|
|
|
+ } else {
|
|
|
+ $(borderItem).remove();
|
|
|
}
|
|
|
- } else if (itemClass && itemClass.indexOf('js-lsiten-options-box') > -1) {
|
|
|
- // 选作题组【回退】
|
|
|
- lastBorderItem.firstChild.appendChild(borderItem);
|
|
|
- } else if (borderItem.className.indexOf('js-lsiten-line') > -1) {
|
|
|
- lastBorderItem.firstChild.appendChild(borderItem);
|
|
|
- } else {
|
|
|
- $(borderItem).remove();
|
|
|
}
|
|
|
- }
|
|
|
- })
|
|
|
- $item.remove();
|
|
|
+ })
|
|
|
+ $item.remove();
|
|
|
+ }
|
|
|
} else {
|
|
|
$lastParagraph.append($item);
|
|
|
}
|
|
@@ -681,6 +744,7 @@ yzPage.prototype = {
|
|
|
// 跨栏符检测
|
|
|
this._updateCrossColumn($column);
|
|
|
this._updateCrossColumn(nextColumn.column);
|
|
|
+ this._updateObjectColumnHeight(nextColumn.column[0]);
|
|
|
}
|
|
|
}
|
|
|
},
|
|
@@ -815,7 +879,94 @@ yzPage.prototype = {
|
|
|
let $prevBorder = $border.clone(false);
|
|
|
if (isMerge) {
|
|
|
$prevBorder = $($prevParagraph[0].lastChild);
|
|
|
-
|
|
|
+ }
|
|
|
+
|
|
|
+ $border.childNodes().forEach(row => {
|
|
|
+ debugger;
|
|
|
+ if (!row.previousSibling) {
|
|
|
+ let lastRow = lastCentent.lastChild;
|
|
|
+ let firstRowId = row.getAttribute('data-id');
|
|
|
+ let lastRowId = lastRow.getAttribute('data-id');
|
|
|
+ if (firstRowId === lastRowId) {
|
|
|
+ let columns = $(row).find('.js-option-column');
|
|
|
+ // 以第一栏的为基准计算
|
|
|
+ let firstColumn = columns[0];
|
|
|
+ let questionIndex = 0;
|
|
|
+ $(firstColumn.firstChild).childNodes().forEach(question => {
|
|
|
+ if (!question.previousSibling) {
|
|
|
+ let height = $(question).getSizeData().height;
|
|
|
+ if (height < size.diff) {
|
|
|
+ this._mergeObjectRow(questionIndex, columns, lastRow);
|
|
|
+ size.diff -= height;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ questionIndex++;
|
|
|
+ })
|
|
|
+ if (isEmptyElement(firstColumn.firstChild)) {
|
|
|
+ $(row).remove();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 客观题每一个row的高度
|
|
|
+ let rowOutsize = 24;
|
|
|
+ size.diff -= rowOutsize;
|
|
|
+ let columns = $(row).find('.js-option-column');
|
|
|
+ // 以第一栏的为基准计算
|
|
|
+ let firstColumn = columns[0];
|
|
|
+ let questionIndex = 0;
|
|
|
+ let prevRow = row.cloneNode(false)
|
|
|
+ $(firstColumn.firstChild).childNodes().forEach(question => {
|
|
|
+ if (!question.previousSibling) {
|
|
|
+ let height = $(question).getSizeData().height;
|
|
|
+ if (height < size.diff) {
|
|
|
+ this._mergeObjectRow(questionIndex, columns, prevRow);
|
|
|
+ size.diff -= height;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ questionIndex++;
|
|
|
+ })
|
|
|
+
|
|
|
+ if (!isEmptyElement(prevRow)) {
|
|
|
+ $prevBorder[0].appendChild(prevRow);
|
|
|
+ }
|
|
|
+ size.diff += rowOutsize;
|
|
|
+ if (isEmptyElement(firstColumn.firstChild)) {
|
|
|
+ $(row).remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ if (!isMerge && !isEmptyElement($prevBorder[0])) {
|
|
|
+ $prevParagraph.append($prevBorder);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isEmptyElement($border[0])) {
|
|
|
+ $border.remove();
|
|
|
+ }
|
|
|
+ this._updateObjectColumnBorder(lastCentent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * function 合并主观题行
|
|
|
+ * @param {number} questionIndex 第几个question的index
|
|
|
+ * @param {Array} columns 需要处理的栏
|
|
|
+ * @param {node} lastRow 上一段最后一框最后一行
|
|
|
+ */
|
|
|
+ _mergeObjectRow: function (questionIndex, columns, lastRow) {
|
|
|
+ let lastColumns = $(lastRow).find('.js-option-column');
|
|
|
+ let length = columns.length;
|
|
|
+ for (let i =0; i < length; i++) {
|
|
|
+ if (columns[i].firstChild.childNodes[questionIndex]) {
|
|
|
+ if (lastColumns[i]) {
|
|
|
+ lastColumns[i].firstChild.appendChild(columns[i].firstChild.childNodes[questionIndex]);
|
|
|
+ } else {
|
|
|
+ let prevColumn = columns[i].cloneNode(false);
|
|
|
+ let prevColumnContent = columns[i].firstChild.cloneNode(false);
|
|
|
+ prevColumn.appendChild(prevColumnContent);
|
|
|
+ prevColumnContent.appendChild(columns[i].firstChild.childNodes[questionIndex]);
|
|
|
+ lastRow.appendChild(prevColumn);
|
|
|
}
|
|
|
}
|
|
|
}
|