示例#1
0
  /**
   * @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>");
  }
  @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>");
  }