@Override public void render(SecurityContext securityContext, RenderContext renderContext, int depth) throws FrameworkException { if (isDeleted() || isHidden() || !displayForLocale(renderContext) || !displayForConditions(securityContext, renderContext)) { return; } String id = getUuid(); EditMode edit = renderContext.getEditMode(securityContext.getUser(false)); boolean inBody = renderContext.inBody(); StringBuilder buffer = renderContext.getBuffer(); String _contentType = getProperty(contentType); // fetch content with variable replacement String _content = getPropertyWithVariableReplacement(securityContext, renderContext, Content.content); if (!(EditMode.RAW.equals(edit)) && (_contentType == null || ("text/plain".equals(_contentType)))) { _content = escapeForHtml(_content); } if (EditMode.CONTENT.equals(edit) && inBody && securityContext.isAllowed(this, Permission.write)) { if ("text/javascript".equals(_contentType)) { // Javascript will only be given some local vars // TODO: Is this neccessary? buffer .append("// data-structr-type='") .append(getType()) .append("'\n// data-structr-id='") .append(id) .append("'\n"); } else if ("text/css".equals(_contentType)) { // CSS will only be given some local vars // TODO: Is this neccessary? buffer .append("/* data-structr-type='") .append(getType()) .append("'*/\n/* data-structr-id='") .append(id) .append("'*/\n"); } else { // // In edit mode, add an artificial 'span' tag around content nodes within body to make // them editable // buffer.append("<span data-structr-raw-value=\"").append(getProperty(Content.content)) // //.append("\" // data-structr-content-type=\"").append(StringUtils.defaultString(getProperty(Content.contentType), "")) // .append("\" data-structr-type=\"").append(getType()) // .append("\" data-structr-id=\"").append(id).append("\">"); // int l = buffer.length(); // buffer.replace(l-1, l, " data-structr-raw-value=\"" // .concat(getProperty(Content.content)) // .concat("\" data-structr-type=\"").concat(getType()) // .concat("\" data-structr-id=\"").concat(id).concat("\">")); buffer.append( "<!--data-structr-id=\"" .concat(id) .concat("\" data-structr-raw-value=\"") .concat(getProperty(Content.content).replaceAll("\n", "\\\\n")) .concat("\"-->")); // .concat("\" // data-structr-raw-value=\"").concat(getProperty(Content.content)).concat("\"-->")); } } // No contentType-specific rendering in DATA edit mode // if (!edit.equals(EditMode.DATA)) { // examine content type and apply converter if (_contentType != null) { Adapter<String, String> converter = contentConverters.get(_contentType); if (converter != null) { try { // apply adapter _content = converter.adapt(_content); } catch (FrameworkException fex) { logger.log(Level.WARNING, "Unable to convert content: {0}", fex.getMessage()); } } } // replace newlines with <br /> for rendering if (((_contentType == null) || _contentType.equals("text/plain")) && (_content != null) && !_content.isEmpty()) { _content = _content.replaceAll("[\\n]{1}", "<br>"); } // } if (_content != null) { // buffer.append(indent(depth, true)).append(_content); // insert whitespace to make element clickable if (EditMode.CONTENT.equals(edit) && _content.length() == 0) { _content = "--- empty ---"; } buffer.append(_content); } if (EditMode.CONTENT.equals(edit) && inBody && !("text/javascript".equals(getProperty(contentType))) && !("text/css".equals(getProperty(contentType)))) { // buffer.append("</span>"); buffer.append("<!---->"); } }