/** * * @param {String} PaperOlId the id value of the ol tags indicating pages. * @param {String} ProblemClass the css class name for problem area. * @param {String} DescClass the css class name for description area. * @param {String} ChoicesClass the css class name for choices area. * @param {String} LeftPageId the id of the left page. * @param {String} RightPageId the id of the right page. * @author ExSystem */ function TTestPaperProcessor(PaperOlId, ProblemClass, DescClass, ChoicesClass, LeftPageId, RightPageId) { this.FPaperOlId = PaperOlId; this.FProblemClass = ProblemClass; this.FDescClass = DescClass; this.FChoicesClass = ChoicesClass; this.FLeftPageId = LeftPageId; this.FRightPageId =RightPageId; $('#' + this.FLeftPageId).html(''); $('#' + this.FRightPageId).html(''); this._FormatProblemOptions(); this._DivideIntoPages(); this.setCurrPage(1); }
TTestPaperProcessor.prototype = { FPaperOlId: '', //the id property of the ol tag contains the whole test paper. FProblemClass: '', //the css class name for problem area. FDescClass: '', //the css class name for description area. FChoicesClass: '', //the css class name for choices area. FLeftPageId: '', //the left page. FRightPageId: '', //the right page. CPageClass: 'Page', FIsDisplayTableSupported: null, //whether the browser is the EVIL M$IE6,7 that does not support display: table(-cell). FCurrPage: 0, //start from 1, 0 for no page has been displayed yet. FPageCount: 0, //page count. // /** // * Get external css stylesheet info. // * @param {String} Selector The selector in the css style sheet. // * @param {String} Property The property name. // * @return {String} The value of the property, or null for undefined property. // */ // _GetCssInfo: function(Selector, Property) { // var mCss = document.styleSheets[0].cssRules || document.styleSheets[0].rules; // for (var mIndex = 0; mIndex // if (mCss[mIndex].selectorText.toLowerCase() == Selector) { // return mCss[mIndex].style[Property]; // } // } // return null; // },
/** * Formats radios and checkboxes for the Choices quiz. */ _FormatProblemOptions: function() { var mThis = this; var mSelector = '.' + this.FProblemClass + ' .' + this.FChoicesClass; $(mSelector).each(function() { //Rearrange the options for each problem ordered by offsetWidth of the label tag. var mLabels = new Array(); mLabels = jQuery.makeArray($('label', this)); mLabels.sort(function(First, Second) { return $(Second).outerWidth(true) > $(First).outerWidth(true); }); $(mLabels).appendTo(this);
//Layout the options into the appropreate form. var mSlots = -1; //Force to create a new row, inside the while() loop. var mSlotWidth = $(mSelector).width() / 4.0; var mCellSize = 0; if (mThis._IsDisplayTableSupported()) { while (mLabels.length > 0) { //alert($(mLabels[0]).outerWidth(true) + '::' + $(mLabels[0]).outerHeight(true) + '::' + $(mLabels[0]).html()); if (mSlots mCurrRow = $(''); mCurrRow.appendTo(this); mSlots = 4; mCellSize = 0;
var mRealCellWidth = $(mLabels[0]).outerWidth(true); if (mRealCellWidth mCellSize = 1; } if (mRealCellWidth >= mSlotWidth && mRealCellWidth mCellSize = 2; } if (mRealCellWidth >= mSlotWidth * 2) { mCellSize = 4; } } mSlots -= mCellSize; if (mSlots >= 0) { //If empty slots exists, put the cell into the row. mLabel = mLabels.shift(); $(mLabel).addClass('___cell'); $(mLabel).css('display', 'table-cell'); $(mLabel).appendTo(mCurrRow); } } $('.___table').each(function() { //Align all the tables and cells. $(this).css('width', '100%'); var mCellWidth = 100 / $('.___cell', this).length; $('.___cell', this).css('width', mCellWidth + '%'); }); } else { // for the evil M$IE6, use table, tr, td tags. while (mLabels.length > 0) { if (mSlots mCurrRow = $('
var mRealCellWidth = $(mLabels[0]).attr('offsetWidth'); //The EVIL IE only: //be sure to use this css reset: table { border-collapse: collapse; border-spacing: 0; } //otherwise, 2 lines will be occupied by some long problem options instead of 1. //or use this code instead: var mRealCellWidth = $(mLabels[0]).attr('offsetWidth') * 1.3; if (mRealCellWidth mCellSize = 1; } if (mRealCellWidth > mSlotWidth && mRealCellWidth mCellSize = 2; } if (mRealCellWidth > mSlotWidth * 2) { mCellSize = 4; } } mSlots -= mCellSize; if (mSlots >= 0) { //If empty slots exists, put the cell into the row. mLabel = mLabels.shift(); mCell = $('
'); $(mLabel).appendTo(mCell); mCell.appendTo($('tr', mCurrRow)[0]); } } $('.___table').each(function() { //Align all the tables and cells. $(this).css('width', '100%'); var mCellWidth = 100 / $('tbody tr .___cell', this).length; $('tbody tr .___cell', this).css('width', mCellWidth + '%'); }); } }); },
/** * Create a new page, and add it to the paper. * @return {jQuery} the new page. */ _CreateNewPage: function() { ++this.FPageCount;
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn