/** * Sets a value which indicates whether or not the document can be edited. * * @param mode a value which indicates whether or not the document can be edited */ @JsxSetter public void setDesignMode(final String mode) { final boolean inherit = getBrowserVersion().hasFeature(JS_DOCUMENT_DESIGN_MODE_INHERIT); if (inherit) { if (!"on".equalsIgnoreCase(mode) && !"off".equalsIgnoreCase(mode) && !"inherit".equalsIgnoreCase(mode)) { throw Context.reportRuntimeError("Invalid document.designMode value '" + mode + "'."); } if (!(getWindow().getWebWindow() instanceof FrameWindow) && getBrowserVersion().hasFeature(JS_DOCUMENT_DESIGN_MODE_ONLY_FOR_FRAMES)) { // IE evaluates all designMode changes for documents that aren't in frames as Off designMode_ = "off"; } else if ("on".equalsIgnoreCase(mode)) { designMode_ = "on"; } else if ("off".equalsIgnoreCase(mode)) { designMode_ = "off"; } else if ("inherit".equalsIgnoreCase(mode)) { designMode_ = "inherit"; } if (getBrowserVersion().hasFeature(JS_DOCUMENT_DESIGN_MODE_CAPITAL_FIRST)) { designMode_ = StringUtils.capitalize(designMode_); } } else { if ("on".equalsIgnoreCase(mode)) { designMode_ = "on"; final SgmlPage page = getPage(); if (page != null && page.isHtmlPage()) { final HtmlPage htmlPage = (HtmlPage) page; final DomNode child = htmlPage.getBody().getFirstChild(); final DomNode rangeNode = child == null ? htmlPage.getBody() : child; htmlPage.setSelectionRange(new SimpleRange(rangeNode, 0)); } } else if ("off".equalsIgnoreCase(mode)) { designMode_ = "off"; } } }