/**
* <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.gui.components.form.flexible.impl.elements.richText;
/**
*
* Initial date: 16.10.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class TinyConfig {
protected static final TinyConfig editorConfig;
protected static final TinyConfig editorFullConfig;
protected static final TinyConfig editorCompactConfig;
protected static final TinyConfig fileEditorConfig;
protected static final TinyConfig minimalisticConfig;
protected static final TinyConfig veryMinimalisticConfig;
//min profile
static {
String plugins = "lists,colorpicker,textcolor,hr,olatsmileys,paste,link,quotespliter,tabfocus,visualchars,noneditable";
String toolbar1 = "undo redo | bold italic underline | alignjustify alignright aligncenter alignleft | forecolor backcolor | bullist numlist | link unlink olatsmileys";
minimalisticConfig = new TinyConfig(plugins, null, toolbar1);
}
//standard profile
static {
String plugins = "lists,contextmenu,colorpicker,textcolor,hr,olatsmileys,paste,link,charmap,quotespliter,olatmatheditor,tabfocus,visualchars,visualblocks,noneditable";
String[] menu = {
"edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall searchreplace'}",
"insert: {title: 'Insert', items: 'olatmovieviewer media image link | olatmatheditor hr charmap insertdatetime olatsmileys'}",
"view: {title: 'View', items: 'visualblocks visualchars | preview fullscreen'}",
"format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | removeformat'}"
};
String tools1 = "bold italic underline | alignjustify alignright aligncenter alignleft | formatselect | fontselect fontsizeselect | forecolor backcolor | bullist numlist indent outdent | olatqtifibtext olatqtifibnumerical olatqtihottext olatmovieviewer image charmap olatsmileys hr link";
editorConfig = new TinyConfig(plugins, menu, tools1);
}
//compact profile
static {
String plugins = "lists,contextmenu,colorpicker,textcolor,hr,charmap,image,insertdatetime,table,visualchars,visualblocks,noneditable,olatsmileys,paste,link,quotespliter,olatmatheditor,olatmovieviewer,tabfocus,visualchars,visualblocks,noneditable,media";
String[] menu = {
"edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall searchreplace'}",
"insert: {title: 'Insert', items: 'olatmovieviewer media image link | olatmatheditor hr charmap insertdatetime olatsmileys'}",
"view: {title: 'View', items: 'visualblocks visualchars visualaid | preview fullscreen'}",
"format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'}",
"table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'}"
};
String tools1 = "bold italic underline | alignjustify alignright aligncenter alignleft | styleselect | fontsizeselect | forecolor backcolor | bullist numlist indent outdent | olatqtifibtext olatqtifibnumerical olatqtihottext olatmovieviewer image charmap hr link";
editorCompactConfig = new TinyConfig(plugins, menu, tools1);
}
//invisible
static {
String plugins = "contextmenu,colorpicker,textcolor,hr,charmap,image,insertdatetime,table,visualchars,visualblocks,noneditable,olatsmileys,paste,link,quotespliter,olatmatheditor,olatmovieviewer,tabfocus,visualchars,visualblocks,noneditable,media";
String tools1 = "bold italic underline | image olatmatheditor";
veryMinimalisticConfig = new TinyConfig(plugins, null, tools1);
}
//full profile
static {
String plugins = "advlist,lists,contextmenu,colorpicker,textcolor,hr,olatsmileys,paste,link,charmap,quotespliter,olatmatheditor,tabfocus,visualchars,visualblocks,noneditable,table";
String[] menu = {
"edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall searchreplace'}",
"insert: {title: 'Insert', items: 'olatmovieviewer media image link | olatmatheditor hr charmap insertdatetime olatsmileys'}",
"view: {title: 'View', items: 'visualblocks visualchars visualaid | preview fullscreen'}",
"format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | removeformat'}",
"table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'}"
};
String tools1 = "bold italic underline | alignjustify alignright aligncenter alignleft | formatselect | fontselect fontsizeselect | forecolor backcolor | bullist numlist indent outdent | olatqtifibtext olatqtifibnumerical olatqtihottext olatmovieviewer image charmap olatsmileys hr link";
editorFullConfig = new TinyConfig(plugins, menu, tools1);
}
//file profile
static {
String plugins = "advlist,lists,colorpicker,textcolor,hr,link,charmap,image,importcss,insertdatetime,code,table,tabfocus,visualchars,visualblocks,noneditable,fullscreen,contextmenu,anchor,olatmatheditor,olatmovieviewer,searchreplace,olatsmileys,paste,media";
String[] menu = {
"edit: {title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall searchreplace'}",
"insert: {title: 'Insert', items: 'olatmovieviewer media image link | olatmatheditor hr charmap anchor insertdatetime olatsmileys'}",
"view: {title: 'View', items: 'visualblocks visualchars visualaid | preview fullscreen'}",
"format: {title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat'}",
"table: {title: 'Table', items: 'inserttable tableprops deletetable | cell row column'}"
};
String tools1 = "bold italic underline | styleselect | fontselect fontsizeselect | forecolor backcolor | bullist numlist indent outdent | olatqtifibtext olatqtifibnumerical olatqtihottext olatmovieviewer image charmap olatmatheditor olatsmileys hr link | code";
fileEditorConfig = new TinyConfig(plugins, menu, tools1);
}
private final String plugins;
private final String[] menu;
private final String tool1;
public TinyConfig(String plugins, String[] menu, String tool1) {
this.plugins = plugins;
this.menu = menu;
this.tool1 = tool1;
}
public String getPlugins() {
return plugins;
}
public boolean hasMenu() {
return menu != null && menu.length > 0;
}
public String[] getMenu() {
return menu == null ? new String[0] : menu;
}
public String getTool1() {
return tool1;
}
public boolean isMathEnabled() {
return plugins != null && plugins.indexOf("olatmatheditor") >= 0;
}
public TinyConfig enableCode() {
return enableFeature("code");
}
public TinyConfig enableAutoResize() {
return enableFeature("autoresize");
}
public TinyConfig disableAutoResize() {
return disableFeature("autoresize");
}
public TinyConfig enableImageAndMedia() {
return enableFeature("image")
.enableFeature("media")
.enableFeature("olatmovieviewer");
}
public TinyConfig enableQTITools(boolean textEntry, boolean numericalInput, boolean hottext) {
TinyConfig config = enableFeature("olatqti");
if(!textEntry) {
config = config.disableButtons("olatqtifibtext");
}
if(!numericalInput) {
config = config.disableButtons("olatqtifibnumerical");
}
if(!hottext) {
config = config.disableButtons("olatqtihottext");
}
return config;
}
/**
* Disable image, media and movie plugins.
* @return
*/
public TinyConfig disableImageAndMedia() {
return disableFeature("image")
.disableFeature("media")
.disableFeature("olatmovieviewer");
}
public TinyConfig disableMenuAndMenuBar() {
return new TinyConfig(plugins, new String[0], null);
}
public TinyConfig disableTinyMedia() {
return disableFeature("media");
}
/**
* Remove media + olatmovie
* @return
*/
public TinyConfig disableMedia() {
return disableFeature("media").disableFeature("olatmovieviewer");
}
public TinyConfig disableMathEditor() {
return disableFeature("olatmatheditor");
}
public TinyConfig disableButtons(String button) {
TinyConfig config = this;
if(tool1.contains(button)) {
String clonedTools = tool1.replace(button, "");
config = new TinyConfig(plugins, menu, clonedTools);
}
return config;
}
public TinyConfig enableFeature(String feature) {
if(plugins.contains(feature)) {
return this;
} else {
String clonedPlugins = plugins + "," + feature;
return new TinyConfig(clonedPlugins, menu, tool1);
}
}
private TinyConfig disableFeature(String feature) {
if(plugins.contains(feature)) {
String clonedPlugins = plugins.replace("," + feature, "");
return new TinyConfig(clonedPlugins, menu, tool1);
} else {
return this;
}
}
@Override
public TinyConfig clone() {
return new TinyConfig(plugins, menu, tool1);
}
}