/** * used to position help icon inside div-class o_chelp_wrapper * * @param packageName * @param pageName * @param hoverTextKey * @return */ public StringOutput contextHelpWithWrapper( String packageName, String pageName, String hoverTextKey) { StringOutput sb = new StringOutput(100); if (ContextHelpModule.isContextHelpEnabled()) { sb.append("<span class=\"o_chelp_wrapper\">"); sb.append(contextHelp(packageName, pageName, hoverTextKey)); sb.append("</span>"); } return sb; }
/** * Create a js command to open a specific context help page * * @param packageName * @param pageName * @return */ public StringOutput contextHelpJSCommand(String packageName, String pageName) { StringOutput sb = new StringOutput(100); if (ContextHelpModule.isContextHelpEnabled()) { String langCode = renderer.getTranslator().getLocale().toString(); sb.append("contextHelpWindow('"); Renderer.renderNormalURI(sb, "help/"); sb.append(langCode).append("/").append(packageName).append("/").append(pageName); sb.append("')"); } return sb; }
private void render(StringOutput sb, MemberView member) { List<BusinessGroupShort> groups = member.getGroups(); if (groups != null && !groups.isEmpty()) { boolean and = false; for (BusinessGroupShort group : groups) { and = and(sb, and); if (group.getName() == null) { sb.append(group.getKey()); } else { sb.append(StringHelper.escapeHtml(group.getName())); } } } }
public StringOutput contextHelpWithWrapper(String page) { StringOutput sb = new StringOutput(192); if (ContextHelpModule.isContextHelpEnabled()) { HelpModule helpModule = CoreSpringFactory.getImpl(HelpModule.class); Locale locale = renderer.getTranslator().getLocale(); String url = helpModule.getHelpProvider().getURL(locale, page); if (url != null) { sb.append("<span class=\"o_chelp_wrapper\">") .append("<a href=\"") .append(url) .append("\" class=\"o_chelp\" target=\"_blank\"><i class='o_icon o_icon_help'></i> ") .append(renderer.getTranslator().translate("help")) .append("</a></span>"); } } return sb; }
@Override public void render( final StringOutput sb, final Renderer renderer, final Object val, final Locale locale, final int alignment, final String action) { if (renderer == null) { // render for export String value = getCellValue(val); if (!StringHelper.containsNonWhitespace(value)) { value = getHoverText(val); } sb.append(value); } else { sb.append("<i class='").append(getCssClass(val)).append("'> </i> <span"); String hoverText = getHoverText(val); if (StringHelper.containsNonWhitespace(hoverText)) { sb.append(" title=\""); sb.append(StringEscapeUtils.escapeHtml(hoverText)); } sb.append("\">"); sb.append(getCellValue(val)); sb.append("</span>"); } }
private StringOutput doRender(String componentName, String[] args) { Component source = renderer.findComponent(componentName); StringOutput sb; if (source == null) { sb = new StringOutput(128); sb.append( ">>>>>>>>>>>>>>>>>>>>>>>>>> component " + componentName + " could not be found to be rendered!"); } else if (target == null) { sb = new StringOutput(10000); renderer.render(source, sb, args); } else { sb = new StringOutput(1); renderer.render(source, target, args); } return sb; }
private void renderPageNextLink(StringOutput sb, FlexiTableComponent ftC, int page, int maxPage) { boolean disabled = (page >= maxPage); 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, new NameValuePair("page", Integer.toString(page + 1)))); } sb.append("\">").append("»").append("</li></a>"); }
private void renderPagesLinks(StringOutput sb, FlexiTableComponent ftC, Translator translator) { FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); int pageSize = ftE.getPageSize(); FlexiTableDataModel<?> dataModel = ftE.getTableDataModel(); int rows = dataModel.getRowCount(); if (rows > 20) { renderPageSize(sb, ftC, translator); } sb.append("<ul class='pagination'>"); if (pageSize > 0 && rows > pageSize) { int page = ftE.getPage(); int maxPage = (int) Math.ceil(((double) rows / (double) pageSize)); renderPageBackLink(sb, ftC, page); renderPageNumberLinks(sb, ftC, page, maxPage); renderPageNextLink(sb, ftC, page, maxPage); } sb.append("</ul>"); }
/** * Create a link that can be used within a context help page to link to another context help page * from another package. The link text can be specified as a thirt attribute. * * @param bundleName e.g. "org.olat.core" * @param pageName e.g. "my-page.html" * @return */ public StringOutput contextHelpRelativeLink(String bundleName, String pageName, String linkText) { StringOutput sb = new StringOutput(100); if (ContextHelpModule.isContextHelpEnabled()) { sb.append("<a href=\""); if (bundleName == null) { renderer .getUrlBuilder() .buildURI( sb, new String[] {VelocityContainer.COMMAND_ID}, new String[] {pageName}, isIframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); } else { renderer .getUrlBuilder() .buildURI( sb, new String[] {VelocityContainer.COMMAND_ID, PARAM_CHELP_BUNDLE}, new String[] {pageName, bundleName}, isIframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); } sb.append("\" "); if (isIframePostEnabled) { renderer.getUrlBuilder().appendTarget(sb); } sb.append(">"); sb.append(linkText); sb.append("</a>"); } return sb; }
protected void renderFooterButtons( StringOutput sb, FlexiTableComponent ftC, Translator translator) { FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); if (ftE.isSelectAllEnable()) { String formName = ftE.getRootForm().getFormName(); String dispatchId = ftE.getFormDispatchId(); sb.append("<div class='o_table_footer'><div class='o_table_checkall input-sm'>"); sb.append("<label class='checkbox-inline'><a id='") .append(dispatchId) .append("_sa' href=\"javascript:o_table_toggleCheck('") .append(formName) .append("', true);") .append( FormJSHelper.getXHRFnCallFor( ftE.getRootForm(), dispatchId, 1, new NameValuePair("select", "checkall"))) .append("\"><i class='o_icon o_icon-lg o_icon_check_on'> </i> <span>") .append(translator.translate("form.checkall")) .append("</span></a></label>"); sb.append("<label class='checkbox-inline'><a id='") .append(dispatchId) .append("_dsa' href=\"javascript:o_table_toggleCheck('") .append(formName) .append("', false);") .append( FormJSHelper.getXHRFnCallFor( ftE.getRootForm(), dispatchId, 1, new NameValuePair("select", "uncheckall"))) .append("\"><i class='o_icon o_icon-lg o_icon_check_off'> </i> <span>") .append(translator.translate("form.uncheckall")) .append("</span></a></label>"); sb.append("</div></div>"); } if (ftE.getDefaultPageSize() > 0) { renderPagesLinks(sb, ftC, translator); } }
protected void renderHeaderSearch( Renderer renderer, StringOutput sb, FlexiTableElementImpl ftE, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { if (ftE.isSearchEnabled()) { sb.append("<div class='o_table_search input-group'>"); renderFormItem(renderer, sb, ftE.getSearchElement(), ubu, translator, renderResult, args); sb.append("<div class='input-group-btn'>"); renderFormItem(renderer, sb, ftE.getSearchButton(), ubu, translator, renderResult, args); if (ftE.getExtendedSearchButton() != null) { renderFormItem( renderer, sb, ftE.getExtendedSearchButton(), ubu, translator, renderResult, args); } sb.append("</div></div>"); } else if (ftE.getExtendedSearchButton() != null) { renderFormItem( renderer, sb, ftE.getExtendedSearchButton(), ubu, translator, renderResult, args); } }
private void appendPagenNumberLink(StringOutput sb, FlexiTableComponent ftC, int page, int i) { FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); Form theForm = ftE.getRootForm(); sb.append("<li") .append(" class='active'", (page == i)) .append("><a href=\"javascript:") .append( FormJSHelper.getXHRFnCallFor( theForm, ftC.getFormDispatchId(), 1, new NameValuePair("page", Integer.toString(i)))) .append("\">") .append(i + 1) .append("</a></li>"); }
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, 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>"); }
protected String renderFilterDropdown( StringOutput sb, FlexiTableElementImpl ftE, List<FlexiTableFilter> filters) { Form theForm = ftE.getRootForm(); String dispatchId = ftE.getFormDispatchId(); String selected = null; sb.append("<div class='btn-group'>") .append("<button id='table-button-filters-") .append(dispatchId) .append("' type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown'>") .append("<i class='o_icon o_icon_filter o_icon-lg'> </i> <b class='caret'></b></button>") .append("<div id='table-filters-") .append(dispatchId) .append("' class='hide'><ul class='o_dropdown list-unstyled' role='menu'>"); for (FlexiTableFilter filter : filters) { if (FlexiTableFilter.SPACER.equals(filter)) { sb.append("<li class='divider'></li>"); } else { sb.append("<li><a href=\"javascript:") .append( FormJSHelper.getXHRFnCallFor( theForm, dispatchId, 1, new NameValuePair("filter", filter.getFilter()))) .append("\">") .append("<i class='o_icon o_icon_check o_icon-fw'> </i> ", filter.isSelected()); if (filter.getIconLeftCSS() != null) { sb.append("<i class='o_icon ").append(filter.getIconLeftCSS()).append("'> </i> "); } sb.append(filter.getLabel()).append("</a></li>"); if (filter.isSelected()) { selected = filter.getLabel(); } } } sb.append("</ul></div></div> ") .append("<script type='text/javascript'>\n") .append("/* <![CDATA[ */\n") .append("jQuery(function() { o_popover('table-button-filters-") .append(dispatchId) .append("','table-filters-") .append(dispatchId) .append("'); });\n") .append("/* ]]> */\n") .append("</script>"); return selected; }
/** * @param packageName * @param pageName * @param hoverTextKey * @return */ public StringOutput contextHelp(String packageName, String pageName, String hoverTextKey) { StringOutput sb = new StringOutput(100); if (ContextHelpModule.isContextHelpEnabled()) { String hooverText = renderer.getTranslator().translate(hoverTextKey); if (hooverText != null) { hooverText = StringEscapeUtils.escapeHtml(hooverText); } sb.append("<a href=\"javascript:"); sb.append(contextHelpJSCommand(packageName, pageName)); sb.append("\" title=\"") .append(hooverText) .append("\" class=\"o_chelp\"><i class='o_icon o_icon_help'></i> "); sb.append(renderer.getTranslator().translate("help")); sb.append("</a>"); } return sb; }
/** * @see org.olat.core.gui.render.ui.ComponentRenderer#render(org.olat.core.gui.render.Renderer, * org.olat.core.gui.render.StringOutput, org.olat.core.gui.components.Component, * org.olat.core.gui.render.URLBuilder, org.olat.core.gui.translator.Translator, * org.olat.core.gui.render.RenderResult, java.lang.String[]) */ @Override public void render( Renderer renderer, StringOutput target, Component source, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { // Get the model object Choice choice = (Choice) source; ChoiceModel model = choice.getModel(); boolean iframePostEnabled = renderer.getGlobalSettings().getAjaxFlags().isIframePostEnabled(); // form header String id = choice.getComponentName() + "_" + choice.hashCode(); target .append("<form method=\"post\" name=\"") .append(id) .append("\" id=\"") .append(id) .append("\" action=\""); ubu.buildURI( target, null, null, iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); target.append("\""); if (iframePostEnabled) { ubu.appendTarget(target); } if (choice.getElementCssClass() != null) { target.append(" class=\"").append(choice.getElementCssClass()).append("\""); } target.append(">"); target.append("<table class=\"o_choice\">"); int rows = model.getRowCount(); for (int i = 0; i < rows; i++) { Boolean val = model.isEnabled(i); boolean selected = val == null ? false : val.booleanValue(); boolean disabled = model.isDisabled(i); String keyN = "c" + i; target .append("<tr><td class='o_choice_checkrow'><input type='checkbox' class='o_checkbox'") .append(" checked='checked'", selected) .append(" disabled='disabled'", disabled) .append(" name='") .append(keyN) .append("' onchange=\"return setFormDirty('") .append(id) .append("')\" />") .append("</td>"); String label = model.getLabel(i); target.append("<td class='o_choice_textrow'>"); if (choice.isEscapeHtml()) { target.append(StringEscapeUtils.escapeHtml(label)); } else { target.append(label); } target.append("</td></tr>"); } // Toggle all on/off target .append("<tr><td colspan='2' class=\"o_togglecheck\">") .append("<div class=\"o_togglecheck o_block_top\">") .append("<a href=\"#\" onclick=\"javascript:o_choice_toggleCheck('" + id + "', true)\">") .append("<i class='o_icon o_icon_fw o_icon_checkbox_checked'></i> ") .append(translator.translate("checkall")) .append( "</a> <a href=\"#\" onclick=\"javascript:o_choice_toggleCheck('" + id + "', false)\">") .append("<i class='o_icon o_icon_fw o_icon_checkbox'></i> ") .append(translator.translate("uncheckall")) .append("</a></div></td></tr>"); // buttons target.append("<tr><td colspan='2'><div class='btn-group btn-group-xs o_block_top'>"); // Submit button target .append("<input type='submit' name='olat_fosm' value=\"") .append(StringEscapeUtils.escapeHtml(translator.translate(choice.getSubmitKey()))) .append("\" class='btn btn-primary' />"); // Reset button String resetKey = choice.getResetKey(); if (resetKey != null) { target .append("<input type='submit' name='") .append(Choice.RESET_IDENTIFICATION) .append("' value=\"") .append(StringEscapeUtils.escapeHtml(translator.translate(resetKey))) .append("\" class='btn btn-default' />"); } // Cancel button String cancelKey = choice.getCancelKey(); if (cancelKey != null) { target .append("<input type='submit' name='") .append(Choice.CANCEL_IDENTIFICATION) .append("' value=\"") .append(StringEscapeUtils.escapeHtml(translator.translate(cancelKey))) .append("\" class='btn btn-default' />"); } target.append("</div></td></tr></table></form>"); }
/** * Test methods i18nManager inline translation tool and * InlineTranslationInterceptHandlerController */ @Test public void testInlineTranslationReplaceLocalizationMarkupWithHTML() { // enable inline translation markup i18nMgr.setMarkLocalizedStringsEnabled(null, true); Translator inlineTrans = Util.createPackageTranslator( InlineTranslationInterceptHandlerController.class, i18nMgr.getLocaleOrNull("de")); URLBuilder inlineTranslationURLBuilder = new jUnitURLBuilder(); String testBundle = "org.olat.core.util.i18n.junittestdata"; String testKey = "no.need.to.translate.this"; String rawtext1 = "Lorem impsum<b>nice stuff</b>"; String rawtext2 = "Holderadio <ul>lsdfsdf<y asdf blblb"; String combinedKey = testBundle + ":" + testKey; // test method that adds identifyers around the translation items String plainVanillaWrapped = i18nMgr.getLocalizedString( testBundle, testKey, null, i18nMgr.getLocaleOrNull("de"), false, false); String plainVanillaPlain = "just a test"; Pattern plainVanillaWrappedPattern = Pattern.compile( I18nManager.IDENT_PREFIX + combinedKey + ":([0-9]*?)" + I18nManager.IDENT_START_POSTFIX + plainVanillaPlain + I18nManager.IDENT_PREFIX + combinedKey + ":\\1" + I18nManager.IDENT_END_POSTFIX); Matcher m = plainVanillaWrappedPattern.matcher(plainVanillaWrapped); assertTrue(m.find()); // test find-replace translator identifyers with HTML markup StringOutput inlineTransLink = new StringOutput(); String[] args = (combinedKey + ":1000000001").split(":"); InlineTranslationInterceptHandlerController.buildInlineTranslationLink( args, inlineTransLink, inlineTrans, inlineTranslationURLBuilder); // Plain vanilla text String convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( plainVanillaWrapped, inlineTranslationURLBuilder, inlineTrans); assertEquals( "<span class=\"b_translation_i18nitem\">" + inlineTransLink.toString() + plainVanillaPlain + "</span>", convertedToHTMLMarkup); // Simple link String linkOPEN = "<a href=\"http://www.olat.org/bla/blu:bli#bla\" title='funny title' class=\"b_css b_anothercss\">"; String linkCLOSE = "</a>"; String inlineSpanOPEN = "<span class=\"b_translation_i18nitem\">"; String inlineSpanCLOSE = "</span>"; String translatedWithinLink = linkOPEN + plainVanillaWrapped + linkCLOSE + rawtext1; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinLink, inlineTranslationURLBuilder, inlineTrans); String convertedWithinLinkExpected = inlineSpanOPEN + inlineTransLink.toString() + linkOPEN + plainVanillaPlain + linkCLOSE + inlineSpanCLOSE + rawtext1; assertEquals(convertedWithinLinkExpected, convertedToHTMLMarkup); // Simple link with span String linkSpanOPEN = "<span class=\"bluber\">"; String linkSpanCLOSE = "</span>"; String translatedWithinLinkAndSpan = rawtext2 + linkOPEN + linkSpanOPEN + plainVanillaWrapped + linkSpanCLOSE + linkCLOSE; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinLinkAndSpan, inlineTranslationURLBuilder, inlineTrans); String convertedWithinLinkAndSpanExpected = rawtext2 + inlineSpanOPEN + inlineTransLink.toString() + linkOPEN + linkSpanOPEN + plainVanillaPlain + linkSpanCLOSE + linkCLOSE + inlineSpanCLOSE; assertEquals(convertedWithinLinkAndSpanExpected, convertedToHTMLMarkup); // Muliple links String translatedWithinMultipleLinks = translatedWithinLink + translatedWithinLinkAndSpan + translatedWithinLinkAndSpan; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinMultipleLinks, inlineTranslationURLBuilder, inlineTrans); String convertedWithinMultipleLinksExpected = convertedWithinLinkExpected + convertedWithinLinkAndSpanExpected + convertedWithinLinkAndSpanExpected; assertEquals(convertedWithinMultipleLinksExpected, convertedToHTMLMarkup); // Input elements String inputOPEN = "<input type='submit' class=\"bluber\" value=\""; String inputCLOSE = "\" />"; String translatedWithinInput = inputOPEN + plainVanillaWrapped + inputCLOSE + rawtext1; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinInput, inlineTranslationURLBuilder, inlineTrans); String convertedWithinInputExpected = inlineSpanOPEN + inlineTransLink.toString() + inputOPEN + plainVanillaPlain + inputCLOSE + inlineSpanCLOSE + rawtext1; assertEquals(convertedWithinInputExpected, convertedToHTMLMarkup); // checkbox elements String checkboxOPEN = "<input type='submit' class=\"bluber\" type=\"checkbox\" value=\""; String checkboxCLOSE = "\" />"; String translatedWithinCheckbox = checkboxOPEN + plainVanillaWrapped + checkboxCLOSE + rawtext1; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinCheckbox, inlineTranslationURLBuilder, inlineTrans); String convertedWithinCheckboxExpected = checkboxOPEN + plainVanillaPlain + checkboxCLOSE + rawtext1; assertEquals(convertedWithinCheckboxExpected, convertedToHTMLMarkup); // Input and links mixed String translatedWithinMultipleLinksAndInput = translatedWithinLink + rawtext1 + translatedWithinInput + translatedWithinLinkAndSpan + rawtext2 + translatedWithinInput + translatedWithinLinkAndSpan; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinMultipleLinksAndInput, inlineTranslationURLBuilder, inlineTrans); String convertedWithinMultipleLinksAndInputExpected = convertedWithinLinkExpected + rawtext1 + convertedWithinInputExpected + convertedWithinLinkAndSpanExpected + rawtext2 + convertedWithinInputExpected + convertedWithinLinkAndSpanExpected; assertEquals(convertedWithinMultipleLinksAndInputExpected, convertedToHTMLMarkup); // Within element attribute String attributeOPEN = "<a href='sdfsdf' title=\""; String attributeCLOSE = "\" class=\"b_bluber\">hello world</a>"; String translatedWithinAttribute = attributeOPEN + plainVanillaWrapped + attributeCLOSE + rawtext1; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedWithinAttribute, inlineTranslationURLBuilder, inlineTrans); String convertedWithinAttributeExpected = attributeOPEN + plainVanillaPlain + attributeCLOSE + rawtext1; assertEquals(convertedWithinAttributeExpected, convertedToHTMLMarkup); // Ultimate test String translatedUltimate = translatedWithinMultipleLinksAndInput + rawtext1 + translatedWithinAttribute + translatedWithinMultipleLinksAndInput + rawtext2 + translatedWithinInput + translatedWithinLinkAndSpan; convertedToHTMLMarkup = InlineTranslationInterceptHandlerController.replaceLocalizationMarkupWithHTML( translatedUltimate, inlineTranslationURLBuilder, inlineTrans); String convertedUltimateExpected = convertedWithinMultipleLinksAndInputExpected + rawtext1 + convertedWithinAttributeExpected + convertedWithinMultipleLinksAndInputExpected + rawtext2 + convertedWithinInputExpected + convertedWithinLinkAndSpanExpected; assertEquals(convertedUltimateExpected, convertedToHTMLMarkup); // don't do inline translation markup i18nMgr.setMarkLocalizedStringsEnabled(null, false); }
public void buildURI(StringOutput buf, String[] keys, String[] values) { buf.append("http://do.test.com"); }
/** * @see org.olat.core.gui.components.ComponentRenderer#render(org.olat.core.gui.render.Renderer, * org.olat.core.gui.render.StringOutput, org.olat.core.gui.components.Component, * org.olat.core.gui.render.URLBuilder, org.olat.core.gui.translator.Translator, * org.olat.core.gui.render.RenderResult, java.lang.String[]) */ @Override public void render( Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { DateComponent dateC = (DateComponent) source; Date date = dateC.getDate(); Locale locale = translator.getLocale(); sb.append("<div class=\"b_datecomp "); // Optional css class as render arg if (args != null && args.length == 1) { sb.append(args[0]); } sb.append("\">"); // Add year if configured if (dateC.isShowYear()) { SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy", locale); String year = yearFormat.format(date); sb.append("<div class=\"b_year b_year_").append(year); sb.append("\"><span>"); sb.append(year); sb.append("</span>"); sb.append("</div>"); } // Add month. SimpleDateFormat monthNumberFormat = new SimpleDateFormat("MM", locale); sb.append("<div class=\"b_month b_month_").append(monthNumberFormat.format(date)); sb.append("\"><span>"); SimpleDateFormat monthDisplayFormat = new SimpleDateFormat("MMM", locale); sb.append(monthDisplayFormat.format(date).toUpperCase()); sb.append("</span>"); sb.append("</div>"); // Add day SimpleDateFormat dayFormat = new SimpleDateFormat("dd", locale); String day = dayFormat.format(date); sb.append("<div class=\"b_day b_day_").append(day); sb.append("\"><span>"); sb.append(day); sb.append("</span>"); sb.append("</div>"); // sb.append("</div>"); }
/** * @param prefix e.g. abc for "abc647547326" and so on * @return an prefixed id (e.g. f23748932) which is unique in the current render tree. */ public StringOutput getId(String prefix) { StringOutput sb = new StringOutput(16); sb.append("o_s").append(prefix).append(vc.getDispatchID()); return sb; }
@Override public void render( Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { FlexiTableComponent ftC = (FlexiTableComponent) source; FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); String id = ftC.getFormDispatchId(); renderHeaderButtons(renderer, sb, ftE, ubu, translator, renderResult, args); if (ftE.getTableDataModel().getRowCount() == 0 && StringHelper.containsNonWhitespace(ftE.getEmtpyTableMessageKey())) { String emptyMessageKey = ftE.getEmtpyTableMessageKey(); sb.append("<div class='o_info'>") .append(translator.translate(emptyMessageKey)) .append("</div>"); } else { sb.append("<div class='o_table_wrapper o_table_flexi") .append(" o_table_edit", ftE.isEditMode()); String css = ftE.getElementCssClass(); if (css != null) { sb.append(" ").append(css); } switch (ftE.getRendererType()) { case custom: sb.append(" o_rendertype_custom"); break; case classic: sb.append(" o_rendertype_classic"); break; } sb.append("'"); String wrapperSelector = ftE.getWrapperSelector(); if (wrapperSelector != null) { sb.append(" id='").append(wrapperSelector).append("'"); } sb.append("><table id=\"") .append(id) .append("\" class=\"table table-condensed table-striped table-hover\">"); // render headers renderHeaders(sb, ftC, translator); // render body sb.append("<tbody>"); renderBody(renderer, sb, ftC, ubu, translator, renderResult); sb.append("</tbody></table>"); renderFooterButtons(sb, ftC, translator); // draggable if (ftE.getColumnIndexForDragAndDropLabel() > 0) { sb.append("<script type='text/javascript'>") .append("/* <![CDATA[ */ \n") .append("jQuery(function() {\n") .append(" jQuery('.o_table_flexi table tr').draggable({\n") .append(" containment: '#o_main',\n") .append(" zIndex: 10000,\n") .append(" cursorAt: {left: 0, top: 0},\n") .append(" accept: function(event,ui){ return true; },\n") .append(" helper: function(event,ui,zt) {\n") .append(" var helperText = jQuery(this).children('.o_dnd_label').text();\n") .append( " return jQuery(\"<div class='ui-widget-header o_table_drag'>\" + helperText + \"</div>\").appendTo('body').css('zIndex',5).show();\n") .append(" }\n") .append("});\n") .append("});\n") .append("/* ]]> */\n") .append("</script>\n"); } sb.append("</div>"); } // source if (source.isEnabled()) { FormJSHelper.appendFlexiFormDirty(sb, ftE.getRootForm(), id); } }
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'>"); sb.append( translator.translate( "page.size.a", new String[] { Integer.toString(firstRow + 1), // for humans 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}; for (int size : sizes) { sb.append("<li><a href=\"javascript:") .append( FormJSHelper.getXHRFnCallFor( theForm, dispatchId, 1, new NameValuePair("pagesize", Integer.toString(size)))) .append("\" onclick=\"return o2cl();\">") .append(Integer.toString(size)) .append("</a></li>"); } if (ftE.isShowAllRowsEnabled()) { sb.append("<li><a href=\"javascript:") .append( FormJSHelper.getXHRFnCallFor( theForm, dispatchId, 1, new NameValuePair("pagesize", "all"))) .append("\" onclick=\"return o2cl();\">") .append(translator.translate("show.all")) .append("</a></li>"); } sb.append("</ul></div>") .append(" ") .append(translator.translate("page.size.b")) .append("</div> "); }
@Override public void render( Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { AutoCompleterComponent cmp = (AutoCompleterComponent) source; AutoCompleter autoCompleter = cmp.getAutoCompleter(); int inputSize = 72; boolean showDisplayKey = false; String id = autoCompleter.getFormDispatchId(); String mapperUri = autoCompleter.getMapperUri(); StringOutput command = new StringOutput(64); ubu.createCopyFor(cmp) .openXHREvent( command, null, false, false, new NameValuePair(VelocityContainer.COMMAND_ID, "select")); sb.append("<input type='text' class='form-control' size='") .append(inputSize) .append("' id='") .append(id) .append("' name='") .append(id) .append("' value=\""); if (StringHelper.containsNonWhitespace(autoCompleter.getValue())) { sb.append(StringHelper.escapeHtml(autoCompleter.getValue())); } sb.append("\" />"); sb.append("<script type='text/javascript'>\n") .append("/* <![CDATA[ */\n") .append("jQuery(function(){\n") .append(" var fullNameTypeahead = new Bloodhound({\n") .append(" datumTokenizer: function (d) {\n") .append(" return Bloodhound.tokenizers.whitespace(d.value);\n") .append(" },\n") .append(" queryTokenizer: Bloodhound.tokenizers.whitespace,\n") .append(" remote: {\n") .append(" url: '") .append(mapperUri) .append( "/?place=holder&term=%QUERY',\n") // place holder is useless but for tomcat, sometimes // it said that the term parameter is corrupted and // will not be part of the request send to OpenOLAT .append(" wildcard: '%QUERY',\n") .append(" filter: function ( response ) {\n") .append(" return jQuery.map(response, function (object) {\n") .append(" return {\n") .append(" value: '' + object.key,\n"); if (showDisplayKey) { sb.append(" fullName: object.displayKey + ': ' + object.value\n"); } else { sb.append(" fullName: object.value\n"); } sb.append(" };\n") .append(" });\n") .append(" }\n") .append(" }\n") .append(" });\n") .append(" fullNameTypeahead.initialize();\n") .append(" jQuery('#") .append(id) .append("').typeahead({\n") .append(" hint: false,\n") .append(" highlight: false,\n") .append(" minLength: 3\n") .append(" },{\n") .append(" minLength: 3,\n") .append(" displayKey: 'fullName',\n") .append(" source: fullNameTypeahead.ttAdapter()\n") .append(" }).on('typeahead:selected', function (e, object) {\n") .append(" ") .append(command) .append(",'key',object.value,'value',object.fullName);\n") .append(" });\n") .append("});\n") .append("/* ]]> */\n") .append("</script>"); }
protected void renderHeaderButtons( Renderer renderer, StringOutput sb, FlexiTableElementImpl ftE, URLBuilder ubu, Translator translator, RenderResult renderResult, String[] args) { Component searchCmp = ftE.getExtendedSearchComponent(); if (searchCmp == null && !ftE.isExtendedSearchExpanded() && !ftE.isNumOfRowsEnabled() && !ftE.isFilterEnabled() && !ftE.isSortEnabled() && !ftE.isExportEnabled() && !ftE.isCustomizeColumns() && ftE.getAvailableRendererTypes().length <= 1) { return; } if (searchCmp != null && ftE.isExtendedSearchExpanded()) { renderer.render(searchCmp, sb, args); } sb.append("<div class='row clearfix o_table_toolbar'>") .append("<div class='col-sm-6 col-xs-12'>"); if (searchCmp == null || !ftE.isExtendedSearchExpanded()) { renderHeaderSearch(renderer, sb, ftE, ubu, translator, renderResult, args); } sb.append("</div>"); sb.append("<div class='col-sm-3 col-xs-4 o_table_row_count'>"); if (ftE.isNumOfRowsEnabled()) { int rowCount = ftE.getTableDataModel().getRowCount(); if (rowCount == 1) { sb.append(rowCount).append(" ").append(ftE.getTranslator().translate("table.entry")); } else if (rowCount > 1) { sb.append(rowCount).append(" ").append(ftE.getTranslator().translate("table.entries")); } } sb.append( "</div><div class='col-sm-3 col-xs-8'><div class='pull-right'><div class='o_table_tools'>"); boolean empty = ftE.getTableDataModel().getRowCount() == 0; String filterIndication = null; // filter if (ftE.isFilterEnabled()) { List<FlexiTableFilter> filters = ftE.getFilters(); if (filters != null && filters.size() > 0) { filterIndication = renderFilterDropdown(sb, ftE, filters); } } // sort if (ftE.isSortEnabled()) { List<FlexiTableSort> sorts = ftE.getSorts(); if (sorts != null && sorts.size() > 0) { renderSortDropdown(sb, ftE, sorts); } } if (ftE.getExportButton() != null && ftE.isExportEnabled()) { sb.append("<div class='btn-group'>"); ftE.getExportButton().setEnabled(!empty); renderFormItem(renderer, sb, ftE.getExportButton(), ubu, translator, renderResult, args); sb.append("</div> "); } if (ftE.getCustomButton() != null && ftE.isCustomizeColumns()) { sb.append("<div class='btn-group'>"); renderFormItem(renderer, sb, ftE.getCustomButton(), ubu, translator, renderResult, args); sb.append("</div> "); } // switch type of tables FlexiTableRendererType[] types = ftE.getAvailableRendererTypes(); if (types.length > 1) { sb.append("<div class='btn-group'>"); for (FlexiTableRendererType type : types) { renderHeaderSwitchType(type, renderer, sb, ftE, ubu, translator, renderResult, args); } sb.append("</div> "); } sb.append("</div>"); if (StringHelper.containsNonWhitespace(filterIndication)) { sb.append( "<div class='o_table_tools_indications'><i class='o_icon o_icon_filter o_icon-lg'> </i> ") .append(filterIndication) .append("</div>"); } sb.append("</div>"); sb.append("</div></div>"); }
private final boolean and(StringOutput sb, boolean and) { if (and) sb.append(", "); return true; }
/** @return the componentid (e.g.) o_c32645732 */ public StringOutput getCId() { StringOutput sb = new StringOutput(16); sb.append("o_c").append(vc.getDispatchID()); return sb; }
public static String getId(String prefix, VelocityContainer vc) { StringOutput sb = StringOutputPool.allocStringBuilder(24); sb.append("o_s").append(prefix).append(vc.getDispatchID()); return StringOutputPool.freePop(sb); }