Skip to content
Snippets Groups Projects
Commit b074a8b5 authored by srosse's avatar srosse
Browse files

OO-1068: bootstrapify cp editor part. 2

parent 0538f88f
No related branches found
No related tags found
No related merge requests found
Showing
with 217 additions and 68 deletions
package org.olat.core.commons.contextHelp;
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
import java.util.Locale;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.AbstractComponent;
import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.util.Util;
/**
*
* A link to the context help
*
* Initial date: 17.06.2014<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class ContextHelpComponent extends AbstractComponent {
private static final ComponentRenderer RENDERER = new ContextHelpComponentRenderer();
private final String hoverTextKey;
private final String packageName;
private final String pageName;
/**
*
* @param name Name of the component
* @param packageName Package name where the help is
* @param pageName The name of the page of this specific context help
* @param hoverTextKey i18n key of the tooltip
* @param locale Locale of the user
*/
public ContextHelpComponent(String name, String packageName, String pageName, String hoverTextKey, Locale locale) {
super(name, Util.createPackageTranslator(packageName, locale, null));
setDomReplacementWrapperRequired(false);
this.pageName = pageName;
this.packageName = packageName;
this.hoverTextKey = hoverTextKey;
}
public String getHoverTextKey() {
return hoverTextKey;
}
public String getPackageName() {
return packageName;
}
public String getPageName() {
return pageName;
}
@Override
protected void doDispatchRequest(UserRequest ureq) {
//
}
@Override
public ComponentRenderer getHTMLRendererSingleton() {
return RENDERER;
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.commons.contextHelp;
import org.apache.commons.lang.StringEscapeUtils;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.DefaultComponentRenderer;
import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;
/**
* Draw the link to the context help.
*
*
* Initial date: 17.06.2014<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class ContextHelpComponentRenderer extends DefaultComponentRenderer {
@Override
public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu,
Translator translator, RenderResult renderResult, String[] args) {
ContextHelpComponent cmp = (ContextHelpComponent)source;
String hoverTextKey = cmp.getHoverTextKey();
String packageName = cmp.getPackageName();
String pageName = cmp.getPageName();
String cId = cmp.getDispatchID();
String hooverText = translator.translate(hoverTextKey);
if (hooverText != null) {
hooverText = StringEscapeUtils.escapeHtml(hooverText);
}
sb.append("<a id='").append(cId).append("' href=\"javascript:contextHelpWindow('");
Renderer.renderNormalURI(sb, "help/");
sb.append(translator.getLocale().toString()).append("/").append(packageName).append("/").append(pageName)
.append("')\" title=\"").append(hooverText).append("\" class=\"o_chelp\"><i class='o_icon o_icon_help'></i> ")
.append(translator.translate("help"))
.append("</a>");
}
}
......@@ -48,7 +48,7 @@ public class TooledStackedPanelRenderer extends DefaultComponentRenderer {
TooledStackedPanel panel = (TooledStackedPanel) source;
List<Link> breadCrumbs = panel.getBreadCrumbs();
List<Tool> tools = panel.getTools();
if(breadCrumbs.size() > 1 || tools.size() > 0) {
if(breadCrumbs.size() > panel.getInvisibleCrumb() || tools.size() > 0) {
String mainCssClass = panel.getCssClass();
sb.append("<div id='o_main_toolbar' class='o_toolbar clearfix ").append(mainCssClass, mainCssClass != null).append("'>")
.append("<div class='container-fluid'>");
......
......@@ -26,6 +26,7 @@
package org.olat.ims.cp.ui;
import org.olat.core.commons.contextHelp.ContextHelpComponent;
import org.olat.core.commons.editor.htmleditor.HTMLEditorController;
import org.olat.core.commons.editor.htmleditor.WysiwygFactory;
import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController;
......@@ -33,6 +34,10 @@ import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.panel.SimpleStackedPanel;
import org.olat.core.gui.components.panel.StackedPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
......@@ -55,7 +60,6 @@ public class CPContentController extends BasicController {
private static final String FILE_SUFFIX_HTM = "htm";
private IFrameDisplayController iframeCtr;
private HTMLEditorController mceCtr; // WYSIWYG
private VelocityContainer contentVC;
private ContentPackage cp;
private CPPage currentPage;
private CPMetadataEditController editMetadataCtr;
......@@ -63,6 +67,7 @@ public class CPContentController extends BasicController {
private LayoutMain3ColsPreviewController previewCtr;
private Link editMetadataLink, previewLink;
private DeliveryOptions deliveryOptions;
private StackedPanel mainPanel;
protected CPContentController(UserRequest ureq, WindowControl control, ContentPackage cp) {
super(ureq, control);
......@@ -73,31 +78,37 @@ public class CPContentController extends BasicController {
if(packageConfig != null) {
deliveryOptions = packageConfig.getDeliveryOptions();
}
contentVC = createVelocityContainer("cpContent");
// set initial page to display
iframeCtr = new IFrameDisplayController(ureq, control, cp.getRootDir());
listenTo(iframeCtr);
}
protected void init(UserRequest ureq) {
editMetadataLink = LinkFactory.createCustomLink("contentcontroller.editlink", "contentcontroller.editlink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
mainPanel = putInitialPanel(new SimpleStackedPanel("cpContent"));
CPManagerImpl cpMgm = (CPManagerImpl) CPManager.getInstance();
currentPage = cpMgm.getFirstPageToDisplay(cp);
displayPage(ureq, currentPage.getIdentifier());
}
void initToolbar(TooledStackedPanel toolbar) {
editMetadataLink = LinkFactory.createToolLink("contentcontroller.editlink", "contentcontroller.editlink",
translate("contentcontroller.editlink_title"), this);
editMetadataLink.setIconLeftCSS("o_icon o_icon-lg o_icon_edit");
editMetadataLink.setTooltip(translate("contentcontroller.editlink_title"));
toolbar.addTool(editMetadataLink, Align.right);
previewLink = LinkFactory.createCustomLink("contentcontroller.previewlink", "contentcontroller.previewlink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
previewLink = LinkFactory.createToolLink("contentcontroller.previewlink", "contentcontroller.previewlink",
translate("contentcontroller.previewlink_title"), this);
previewLink.setIconLeftCSS("o_icon o_icon-lg o_icon_preview");
previewLink.setTooltip(translate("contentcontroller.previewlink_title"));
putInitialPanel(contentVC);
CPManagerImpl cpMgm = (CPManagerImpl) CPManager.getInstance();
currentPage = cpMgm.getFirstPageToDisplay(cp);
displayPage(ureq, currentPage.getIdentifier());
toolbar.addTool(previewLink, Align.right);
ContextHelpComponent contextHelp = new ContextHelpComponent("cpeditorhelp",
"org.olat.ims.cp.ui", "cpeditorhelp.html", "chelp.cpeditorhelp.hover", getLocale());
toolbar.addTool(contextHelp, Align.right);
}
/**
......@@ -146,7 +157,7 @@ public class CPContentController extends BasicController {
private void setContent(UserRequest ureq, String filePath) {
if (filePath.toLowerCase().lastIndexOf(FILE_SUFFIX_HTM) >= (filePath.length() - 4)) {
if (mceCtr != null) mceCtr.dispose();
//fxdiff FXOLAT-125: virtual file system for CP
VFSContainer rootDir = currentPage.getRootDir();
String virtualRootFolderName = translate("cpfileuploadcontroller.virtual.root");
VFSContainer pseudoContainer = new VFSRootCPContainer(virtualRootFolderName, cp, rootDir, getTranslator());
......@@ -158,10 +169,10 @@ public class CPContentController extends BasicController {
mceCtr.setShowMetadataEnabled(false);
}
listenTo(mceCtr);
contentVC.put("content", mceCtr.getInitialComponent());
mainPanel.setContent(mceCtr.getInitialComponent());
} else {
iframeCtr.setCurrentURI(filePath);
contentVC.put("content", iframeCtr.getInitialComponent());
mainPanel.setContent(iframeCtr.getInitialComponent());
}
}
......@@ -175,7 +186,7 @@ public class CPContentController extends BasicController {
if (currentPage != null) currentPage.setFile(null);
VelocityContainer infoVC = createVelocityContainer("infoPage");
infoVC.contextPut("infoChapterpage", translate("contentcontroller.infoChapterpage"));
contentVC.put("content", infoVC);
mainPanel.setContent(infoVC);
}
/**
......@@ -189,7 +200,7 @@ public class CPContentController extends BasicController {
VelocityContainer nfVC = createVelocityContainer("notFoundPage");
// Don't display the file name. It's too much information.
nfVC.contextPut("not_found_message", translate("contentcontroller.page.not.found"));
contentVC.put("content", nfVC);
mainPanel.setContent(nfVC);
}
/**
......
......@@ -30,6 +30,7 @@ import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.components.tree.TreeEvent;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
......@@ -56,6 +57,7 @@ public class CPEditMainController extends MainLayoutBasicController {
private final ContentPackage cp;
private LockResult lock;
private DeliveryOptions deliveryOptions;
private TooledStackedPanel all;
public CPEditMainController(UserRequest ureq, WindowControl wControl, VFSContainer cpContainer, OLATResourceable ores) {
super(ureq, wControl);
......@@ -68,6 +70,10 @@ public class CPEditMainController extends MainLayoutBasicController {
if(packageConfig != null) {
deliveryOptions = packageConfig.getDeliveryOptions();
}
// set up the components
all = new TooledStackedPanel("courseStackPanel", getTranslator(), this);
all.setInvisibleCrumb(-1);
putInitialPanel(all);
String errorString = cp.getLastError();
if (errorString == null) {
......@@ -104,6 +110,7 @@ public class CPEditMainController extends MainLayoutBasicController {
* @param cp
*/
private void initDefaultView(UserRequest ureq, WindowControl wControl) {
treeCtr = new CPTreeController(ureq, wControl, cp);
listenTo(treeCtr);
......@@ -119,8 +126,10 @@ public class CPEditMainController extends MainLayoutBasicController {
"cptestmain");
columnLayoutCtr.addCssClassToMain("b_menu_toolbar");
listenTo(columnLayoutCtr); // auto dispose
putInitialPanel(columnLayoutCtr.getInitialComponent());
all.pushController("Editor", columnLayoutCtr);
treeCtr.initToolbar(all);
contentCtr.initToolbar(all);
if (!cp.isOLATContentPackage()) {
showWarning("maincontroller.cp.created.with.third.party.editor");
......@@ -138,7 +147,7 @@ public class CPEditMainController extends MainLayoutBasicController {
private void initErrorView(UserRequest ureq, WindowControl wControl) {
Panel p = new Panel("errorPanel");
columnLayoutCtr = new LayoutMain3ColsController(ureq, wControl, null, p, "cptestmain");
putInitialPanel(columnLayoutCtr.getInitialComponent());
all.pushController("Editor", columnLayoutCtr);
}
@Override
......
......@@ -109,10 +109,13 @@ public class CPMetadataEditController extends FormBasicController {
@Override
protected void formOK(UserRequest ureq) {
metadata.setTitle(title.getValue());
page.setTitle(title.getValue());
page.setMetadata(metadata);
fireEvent(ureq, Event.DONE_EVENT);
}
@Override
protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
}
\ No newline at end of file
......@@ -36,6 +36,8 @@ import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.stack.TooledStackedPanel;
import org.olat.core.gui.components.stack.TooledStackedPanel.Align;
import org.olat.core.gui.components.tree.MenuTree;
import org.olat.core.gui.components.tree.TreeDropEvent;
import org.olat.core.gui.components.tree.TreeEvent;
......@@ -101,36 +103,35 @@ public class CPTreeController extends BasicController {
treeCtr.setExpandSelectedNode(false);
treeCtr.addListener(this);
setLinks();
contentVC.put("cptreecontroller.tree", treeCtr);
contentVC.contextPut("treeId", treeCtr.getDispatchID());
putInitialPanel(contentVC);
}
private void setLinks() {
importLink = LinkFactory.createCustomLink("cptreecontroller.importlink", "cptreecontroller.importlink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
void initToolbar(TooledStackedPanel toolbar) {
importLink = LinkFactory.createToolLink("cptreecontroller.importlink", "cptreecontroller.importlink",
translate("cptreecontroller.importlink_title"), this);
importLink.setTooltip(translate("cptreecontroller.importlink_title"));
importLink.setTitle(translate("cptreecontroller.importlink_title"));
importLink.setIconLeftCSS("o_icon o_icon-lg o_icon_import");
toolbar.addTool(importLink, Align.left);
newLink = LinkFactory.createCustomLink("cptreecontroller.newlink", "cptreecontroller.newlink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
newLink = LinkFactory.createToolLink("cptreecontroller.newlink", "cptreecontroller.newlink",
translate("cptreecontroller.newlink_title"), this);
newLink.setTooltip(translate("cptreecontroller.newlink_title"));
newLink.setTitle(translate("cptreecontroller.newlink_title"));
newLink.setIconLeftCSS("o_icon o_icon-lg o_icon_add");
toolbar.addTool(newLink, Align.left);
copyLink = LinkFactory.createCustomLink("cptreecontroller.copylink", "cptreecontroller.copylink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
copyLink = LinkFactory.createToolLink("cptreecontroller.copylink", "cptreecontroller.copylink",
translate("cptreecontroller.copylink_title"), this);
copyLink.setTooltip(translate("cptreecontroller.copylink_title"));
copyLink.setTitle(translate("cptreecontroller.copylink_title"));
copyLink.setIconLeftCSS("o_icon o_icon-lg o_icon_copy");
toolbar.addTool(copyLink, Align.left);
deleteLink = LinkFactory.createCustomLink("cptreecontroller.deletelink", "cptreecontroller.deletelink", null,
Link.NONTRANSLATED | Link.BUTTON, contentVC, this);
deleteLink = LinkFactory.createToolLink("cptreecontroller.deletelink", "cptreecontroller.deletelink",
translate("cptreecontroller.deletelink_title"), this);
deleteLink.setTooltip(translate("cptreecontroller.deletelink_title"));
deleteLink.setTitle(translate("cptreecontroller.deletelink_title"));
deleteLink.setIconLeftCSS("o_icon o_icon-lg o_icon_delete");
toolbar.addTool(deleteLink, Align.left);
}
/**
......
<div id="o_cpeditor_content">
<div class="btn-toolbar">
<div class="pull-right">
$r.render("contentcontroller.editlink")
$r.render("contentcontroller.previewlink")
$r.contextHelp("org.olat.ims.cp.ui","cpeditorhelp.html","chelp.cpeditorhelp.hover")
</div>
</div>
<div class="o_cpeditor_content_page clearfix">
$r.render("content")
</div>
</div>
$r.render("content")
<div id="o_cpeditor_menu">
<div class="btn-toolbar">
<div class="btn-group">
$r.render("cptreecontroller.deletelink")
$r.render("cptreecontroller.importlink")
$r.render("cptreecontroller.copylink")
$r.render("cptreecontroller.newlink")
</div>
</div>
<div class="o_cpeditor_menu_tree">
$r.render("cptreecontroller.tree")
</div>
......
......@@ -182,7 +182,7 @@ public class InstantMessagingMainController extends BasicController implements G
public void event(UserRequest ureq, Component source, Event event) {
if (source == available || source == dnd || source == unavailable) {
Link link = (Link) source;
doChangeStatus(ureq, (String) link.getUserObject());
doChangeStatus((String)link.getUserObject());
} else if (source == onlineOfflineCount) {
doOpenRoster(ureq);
} else if (source instanceof Link) {
......@@ -281,7 +281,7 @@ public class InstantMessagingMainController extends BasicController implements G
onlineOfflineCount.setDirty(false);
}
private void doChangeStatus(UserRequest ureq, String status) {
private void doChangeStatus(String status) {
imService.updateStatus(getIdentity(), status);
updateStatusCss(status);
......
#o_cpeditor_menu div.o_cpeditor_menu_tree, #o_cpeditor_content div.o_cpeditor_content_page {
padding: 10px 0 0 0;
}
\ No newline at end of file
......@@ -51,6 +51,10 @@
}
}
.o_chelp {
@include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
}
.o_tools {
@extend .list-inline;
margin-top: $o-toolbar-margin-top-md;
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment