Search in sources :

Example 21 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AbstractFlexiTableRenderer method renderHeaderSearch.

protected void renderHeaderSearch(Renderer renderer, StringOutput sb, FlexiTableElementImpl ftE, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) {
    if (ftE.isSearchEnabled()) {
        Form theForm = ftE.getRootForm();
        String dispatchId = ftE.getFormDispatchId();
        sb.append("<div class='o_table_search input-group o_noprint'>");
        renderFormItem(renderer, sb, ftE.getSearchElement(), ubu, translator, renderResult, args);
        sb.append("<div class='input-group-btn'>");
        // reset quick search
        String id = ftE.getSearchElement().getFormDispatchId();
        sb.append("<a href=\"javascript:jQuery('#").append(id).append("').val('');").append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, true, true, true, new NameValuePair("reset-search", "true"))).append("\" class='btn o_reset_quick_search'><i class='o_icon o_icon_remove_filters'> </i></a>");
        renderFormItem(renderer, sb, ftE.getSearchButton(), ubu, translator, renderResult, args);
        if (ftE.getExtendedSearchButton() != null) {
            renderFormItem(renderer, sb, ftE.getExtendedSearchButton(), ubu, translator, renderResult, args);
        }
        StringBuilder filterIndication = new StringBuilder();
        if (ftE.getExtendedFilterButton() != null) {
            ftE.getSelectedExtendedFilters().forEach(filter -> {
                if (filterIndication.length() > 0)
                    filterIndication.append(", ");
                filterIndication.append(filter.getLabel());
            });
            renderFormItem(renderer, sb, ftE.getExtendedFilterButton(), ubu, translator, renderResult, args);
        }
        sb.append("</div>");
        sb.append("</div>");
        if (filterIndication.length() > 0) {
            sb.append("<div class='o_table_tools_indications'>").append(filterIndication).append("<a href=\"javascript:").append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, true, true, true, new NameValuePair("rm-extended-filter", "true"))).append("\" title=\"").append(translator.translate("remove.filters")).append("\">").append("<i class='o_icon o_icon_remove o_icon-fw'> </i></a></div>");
        }
    } else if (ftE.getExtendedSearchButton() != null) {
        renderFormItem(renderer, sb, ftE.getExtendedSearchButton(), ubu, translator, renderResult, args);
    }
}
Also used : NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form)

Example 22 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AbstractFlexiTableRenderer method renderSortDropdown.

protected void renderSortDropdown(StringOutput sb, FlexiTableElementImpl ftE, List<FlexiTableSort> sorts) {
    Form theForm = ftE.getRootForm();
    String dispatchId = ftE.getFormDispatchId();
    sb.append("<div class='btn-group'>").append("<button id='table-button-sorters-").append(dispatchId).append("' type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown'>").append("<i class='o_icon o_icon_sort_menu o_icon-lg'> </i> <b class='caret'></b></button>").append("<div id='table-sorters-").append(dispatchId).append("' class='hide'><ul class='o_dropdown list-unstyled' role='menu'>");
    for (FlexiTableSort sort : sorts) {
        if (FlexiTableSort.SPACER.equals(sort)) {
            sb.append("<li class='divider'></li>");
        } else {
            sb.append("<li><a href=\"javascript:").append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, true, true, true, new NameValuePair("sort", sort.getSortKey().getKey()), new NameValuePair("asc", sort.getSortKey().isAsc() ? "desc" : "asc"))).append("\">");
            if (sort.isSelected()) {
                if (sort.getSortKey().isAsc()) {
                    sb.append("<i class='o_icon o_icon_sort_desc o_icon-fw'> </i> ");
                } else {
                    sb.append("<i class='o_icon o_icon_sort_asc o_icon-fw'> </i> ");
                }
            }
            sb.append(sort.getLabel()).append("</a></li>");
        }
    }
    sb.append("</ul></div></div> ").append("<script type='text/javascript'>\n").append("/* <![CDATA[ */\n").append("jQuery(function() { o_popover('table-button-sorters-").append(dispatchId).append("','table-sorters-").append(dispatchId).append("'); });\n").append("/* ]]> */\n").append("</script>");
}
Also used : NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form) FlexiTableSort(org.olat.core.gui.components.form.flexible.elements.FlexiTableSort)

Example 23 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AbstractFlexiTableRenderer method renderPageBackLink.

private void renderPageBackLink(StringOutput sb, FlexiTableComponent ftC, int page) {
    boolean disabled = (page <= 0);
    FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
    Form theForm = ftE.getRootForm();
    sb.append("<li").append(" class='disabled'", disabled).append("><a href=\"");
    if (disabled) {
        sb.append("#");
    } else {
        sb.append("javascript:").append(FormJSHelper.getXHRFnCallFor(theForm, ftC.getFormDispatchId(), 1, true, true, true, new NameValuePair("page", Integer.toString(page - 1))));
    }
    sb.append("\">").append("&laquo;").append("</a></li>");
}
Also used : NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form)

Example 24 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AbstractFlexiTableRenderer method renderPageSize.

private void renderPageSize(StringOutput sb, FlexiTableComponent ftC, Translator translator) {
    FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
    FlexiTableDataModel<?> dataModel = ftE.getTableDataModel();
    Form theForm = ftE.getRootForm();
    String dispatchId = ftE.getFormDispatchId();
    int pageSize = ftE.getPageSize();
    int firstRow = ftE.getFirstRow();
    int maxRows = ftE.getMaxRows();
    int rows = dataModel.getRowCount();
    int lastRow = Math.min(rows, firstRow + maxRows);
    sb.append("<div class='o_table_rows_infos o_noprint'>");
    sb.append(translator.translate("page.size.a", new String[] { // for humans
    Integer.toString(firstRow + 1), Integer.toString(lastRow), Integer.toString(rows) })).append(" ");
    sb.append("<div class='btn-group dropup'><button type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown' aria-expanded='false'>").append(" <span>");
    if (pageSize < 0) {
        sb.append(translator.translate("show.all"));
    } else {
        sb.append(Integer.toString(pageSize));
    }
    sb.append("</span> <span class='caret'></span></button>").append("<ul class='dropdown-menu' role='menu'>");
    int[] sizes = new int[] { 20, 50, 100, 250 };
    int defaultPageSize = ftE.getDefaultPageSize();
    if (Arrays.binarySearch(sizes, defaultPageSize) < 0) {
        sizes = new int[] { 20, 50, 100, 250, defaultPageSize };
        Arrays.sort(sizes);
    }
    for (int size : sizes) {
        sb.append("<li><a href=\"javascript:").append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, true, true, true, new NameValuePair("pagesize", Integer.toString(size)))).append("\">").append(Integer.toString(size)).append("</a></li>");
    }
    if (ftE.isShowAllRowsEnabled()) {
        sb.append("<li><a href=\"javascript:").append(FormJSHelper.getXHRFnCallFor(theForm, dispatchId, 1, true, true, true, new NameValuePair("pagesize", "all"))).append("\">").append(translator.translate("show.all")).append("</a></li>");
    }
    sb.append("</ul></div>").append(" ").append(translator.translate("page.size.b")).append("</div> ");
}
Also used : NameValuePair(org.olat.core.gui.components.form.flexible.impl.NameValuePair) Form(org.olat.core.gui.components.form.flexible.impl.Form)

Example 25 with Form

use of org.olat.core.gui.components.form.flexible.impl.Form in project openolat by klemens.

the class AssessmentObjectComponentRenderer method renderExtendedTextBox.

/*
	  <xsl:template match="qti:extendedTextInteraction" mode="multibox">
	    <xsl:param name="responseInput" as="element(qw:responseInput)?"/>
	    <xsl:param name="checkJavaScript" as="xs:string?"/>
	    <xsl:param name="stringsCount" as="xs:integer"/>
	    <xsl:param name="allowCreate" select="false()" as="xs:boolean"/>
	    <xsl:variable name="interaction" select="." as="element(qti:extendedTextInteraction)"/>
	    <xsl:for-each select="1 to $stringsCount">
	      <xsl:variable name="i" select="." as="xs:integer"/>
	      <xsl:apply-templates select="$interaction" mode="singlebox">
	        <xsl:with-param name="responseInputString" select="$responseInput/qw:string[position()=$i]"/>
	        <xsl:with-param name="checkJavaScript" select="$checkJavaScript"/>
	        <xsl:with-param name="allowCreate" select="$allowCreate and $i=$stringsCount"/>
	      </xsl:apply-templates>
	      <br />
	    </xsl:for-each>
	  </xsl:template>
	  
	  <xsl:template match="qti:extendedTextInteraction" mode="singlebox">
	    <xsl:param name="responseInputString" as="xs:string?"/>
	    <xsl:param name="checkJavaScript" as="xs:string?"/>
	    <xsl:param name="allowCreate" select="false()" as="xs:boolean"/>
	    <xsl:variable name="is-bad-response" select="qw:is-bad-response(@responseIdentifier)" as="xs:boolean"/>
	    <xsl:variable name="is-invalid-response" select="qw:is-invalid-response(@responseIdentifier)" as="xs:boolean"/>
	    <textarea cols="72" rows="6" name="qtiworks_response_{@responseIdentifier}">
	      <xsl:if test="$isItemSessionEnded">
	        <xsl:attribute name="disabled">disabled</xsl:attribute>
	      </xsl:if>
	      <xsl:if test="$is-bad-response or $is-invalid-response">
	        <xsl:attribute name="class" select="'badResponse'"/>
	      </xsl:if>
	      <xsl:if test="@expectedLines">
	        <xsl:attribute name="rows" select="@expectedLines"/>
	      </xsl:if>
	      <xsl:if test="@expectedLines and @expectedLength">
	        <xsl:attribute name="cols" select="ceiling(@expectedLength div @expectedLines)"/>
	      </xsl:if>
	      <xsl:if test="$checkJavaScript">
	        <xsl:attribute name="onchange" select="$checkJavaScript"/>
	      </xsl:if>
	      <xsl:if test="$allowCreate">
	        <xsl:attribute name="onkeyup" select="'QtiWorksRendering.addNewTextBox(this)'"/>
	      </xsl:if>
	      <xsl:value-of select="$responseInputString"/>
	    </textarea>
	  </xsl:template>
	*/
protected void renderExtendedTextBox(AssessmentRenderer renderer, StringOutput sb, AssessmentObjectComponent component, AssessmentItem assessmentItem, ItemSessionState itemSessionState, ExtendedTextInteraction interaction, String responseInputString) {
    String responseUniqueId = component.getResponseUniqueIdentifier(itemSessionState, interaction);
    boolean ended = component.isItemSessionEnded(itemSessionState, renderer.isSolutionMode());
    int expectedLines = interaction.getExpectedLines() == null ? 6 : interaction.getExpectedLines().intValue();
    if (ended) {
        sb.append("<div id='oo_").append(responseUniqueId).append("' style='min-height:").append(expectedLines * 1.5).append("em;' class='form-control textarea_disabled o_disabled o_form_element_disabled");
    } else {
        sb.append("<textarea id='oo_").append(responseUniqueId).append("' name='qtiworks_response_").append(responseUniqueId).append("'");
        if (StringHelper.containsNonWhitespace(interaction.getPlaceholderText())) {
            sb.append(" placeholder=\"").append(StringHelper.escapeHtml(interaction.getPlaceholderText())).append("\"");
        }
        sb.append(" rows='").append(expectedLines).append("'");
        if (interaction.getExpectedLength() == null) {
            sb.append(" cols='72'");
        } else {
            int cols = interaction.getExpectedLength().intValue() / expectedLines;
            sb.append(" cols='").append(cols).append("'");
        }
        ResponseDeclaration responseDeclaration = getResponseDeclaration(assessmentItem, interaction.getResponseIdentifier());
        String checkJavascript = checkJavaScript(responseDeclaration, interaction.getPatternMask());
        if (StringHelper.containsNonWhitespace(checkJavascript)) {
            sb.append(" onchange=\"").append(checkJavascript).append("\"");
        }
        sb.append(" class='form-control");
    }
    if (isBadResponse(itemSessionState, interaction.getResponseIdentifier()) || isInvalidResponse(itemSessionState, interaction.getResponseIdentifier())) {
        sb.append(" badResponse");
    }
    sb.append("'>");
    if (renderer.isSolutionMode()) {
        String placeholder = interaction.getPlaceholderText();
        if (StringHelper.containsNonWhitespace(placeholder)) {
            sb.append(placeholder);
        }
    } else if (StringHelper.containsNonWhitespace(responseInputString)) {
        sb.append(responseInputString);
    }
    if (ended) {
        sb.append("</div>");
    } else {
        sb.append("</textarea>");
        FormJSHelper.appendFlexiFormDirty(sb, component.getQtiItem().getRootForm(), "oo_" + responseUniqueId);
        sb.append(FormJSHelper.getJSStartWithVarDeclaration("oo_" + responseUniqueId)).append("oo_").append(responseUniqueId).append(".on('keypress', function(event, target){if (13 == event.keyCode) {event.stopPropagation()} })").append(FormJSHelper.getJSEnd());
        Form form = component.getQtiItem().getRootForm();
        sb.append(FormJSHelper.getJSStart()).append("jQuery(function() {\n").append(" jQuery('#").append("oo_").append(responseUniqueId).append("').qtiAutosave({\n").append("  responseUniqueId:'").append(responseUniqueId).append("',\n").append("  formName:'").append(form.getFormName()).append("',\n").append("  dispIdField:'").append(form.getDispatchFieldId()).append("',\n").append("  dispId:'").append(component.getQtiItem().getFormDispatchId()).append("',\n").append("  eventIdField:'").append(form.getEventFieldId()).append("'\n").append(" }).tabOverride();\n").append("})\n").append(FormJSHelper.getJSEnd());
    }
}
Also used : Form(org.olat.core.gui.components.form.flexible.impl.Form) AssessmentRenderFunctions.contentAsString(org.olat.ims.qti21.ui.components.AssessmentRenderFunctions.contentAsString) ResponseDeclaration(uk.ac.ed.ph.jqtiplus.node.item.response.declaration.ResponseDeclaration) AssessmentRenderFunctions.getResponseDeclaration(org.olat.ims.qti21.ui.components.AssessmentRenderFunctions.getResponseDeclaration)

Aggregations

Form (org.olat.core.gui.components.form.flexible.impl.Form)64 NameValuePair (org.olat.core.gui.components.form.flexible.impl.NameValuePair)42 AssessmentRenderFunctions.contentAsString (org.olat.ims.qti21.ui.components.AssessmentRenderFunctions.contentAsString)10 Component (org.olat.core.gui.components.Component)4 FlexiTableFilter (org.olat.core.gui.components.form.flexible.elements.FlexiTableFilter)4 FlexiTableSort (org.olat.core.gui.components.form.flexible.elements.FlexiTableSort)4 StringOutput (org.olat.core.gui.render.StringOutput)4 TestSessionController (uk.ac.ed.ph.jqtiplus.running.TestSessionController)4 File (java.io.File)2 ArrayList (java.util.ArrayList)2 Calendar (java.util.Calendar)2 HashSet (java.util.HashSet)2 Matcher (java.util.regex.Matcher)2 SortKey (org.olat.core.commons.persistence.SortKey)2 TextBoxListElementComponent (org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListElementComponent)2 TextBoxListElementImpl (org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListElementImpl)2 TextModeState (org.olat.core.gui.components.form.flexible.impl.elements.richText.RichTextElementImpl.TextModeState)2 FlexiTableElementImpl (org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableElementImpl)2 VelocityContainer (org.olat.core.gui.components.velocity.VelocityContainer)2 AJAXFlags (org.olat.core.gui.control.winmgr.AJAXFlags)2