From bb740579c7cea110fb8c57e7b0cb9c48759f281a Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Wed, 9 Jul 2014 13:50:34 +0200 Subject: [PATCH] OO-1068: bootstrapify translation tool --- .../flexible/elements/SelectionElement.java | 3 + .../impl/elements/MultiSelectionTree.java | 6 - .../MultipleSelectionElementImpl.java | 15 +- .../elements/MultipleSelectionRenderer.java | 22 +- .../impl/elements/SelectboxSelectionImpl.java | 6 +- .../impl/elements/SingleSelectionImpl.java | 7 +- .../elements/TextAreaElementRenderer.java | 43 ++-- .../progressbar/ProgressBarRenderer.java | 17 +- ...lationToolI18nItemEditCrumbController.java | 60 +++--- .../TranslationToolStartCrumbController.java | 35 ++-- .../_content/translationToolI18nItemEdit.html | 68 +++---- .../_content/translationToolI18nItemList.html | 16 +- .../ui/_content/translationToolLauncher.html | 68 +++---- .../_content/translationToolStartCrumb.html | 191 ++++++------------ .../i18n/ui/_i18n/LocalStrings_de.properties | 2 +- .../static/themes/light/modules/_icons.scss | 4 + src/main/webapp/static/themes/light/theme.css | 2 +- 17 files changed, 250 insertions(+), 315 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/elements/SelectionElement.java b/src/main/java/org/olat/core/gui/components/form/flexible/elements/SelectionElement.java index bc9551cde60..048a1d26934 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/elements/SelectionElement.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/elements/SelectionElement.java @@ -70,4 +70,7 @@ public interface SelectionElement extends FormItem, FormBaseComponentIdProvider{ */ public boolean isMultiselect(); + + public void setDomReplacementWrapperRequired(boolean required); + } \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultiSelectionTree.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultiSelectionTree.java index 6bec055dbef..75f3124a741 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultiSelectionTree.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultiSelectionTree.java @@ -31,7 +31,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.olat.core.gui.components.Component; import org.olat.core.gui.components.tree.TreeModel; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.util.tree.INodeFilter; @@ -96,11 +95,6 @@ public class MultiSelectionTree extends MultipleSelectionElementImpl { ((SelectionTreeComponent)component).setComponents(checkboxitems); } - @Override - protected Component getFormItemComponent() { - return component; - } - /* * Methods below are needed to set the correct component dirty because this * weired construct in this class otherwhise sets an invisible component diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java index 7b196ec77c1..18b96086e56 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionElementImpl.java @@ -33,7 +33,6 @@ import java.util.Set; import org.olat.core.gui.GUIInterna; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.impl.FormItemImpl; import org.olat.core.logging.OLog; @@ -63,6 +62,7 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip private String[] original = null; private boolean originalIsDefined = false; private boolean escapeHtml = true; + private boolean domReplacementWrapperRequired = true; public MultipleSelectionElementImpl(String name) { this(name, Layout.horizontal, 1); @@ -79,6 +79,16 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip this.columns = columns; } + + + @Override + public void setDomReplacementWrapperRequired(boolean required) { + domReplacementWrapperRequired = required; + if(component != null) { + component.setDomReplacementWrapperRequired(required); + } + } + public Layout getLayout() { return layout; } @@ -340,6 +350,7 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip // create and add selectbox element String ssscId = getFormItemId() == null ? null : getFormItemId() + "_SELBOX"; component = new MultipleSelectionComponent(ssscId, this); + component.setDomReplacementWrapperRequired(domReplacementWrapperRequired); component.setCheckComponents(ssecs); } @@ -356,7 +367,7 @@ public class MultipleSelectionElementImpl extends FormItemImpl implements Multip } @Override - protected Component getFormItemComponent() { + protected MultipleSelectionComponent getFormItemComponent() { return component; } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionRenderer.java index 7bb83ff2e0c..fee056d3bf7 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/MultipleSelectionRenderer.java @@ -57,13 +57,21 @@ public class MultipleSelectionRenderer extends DefaultComponentRenderer { } } + private StringOutput appendIdIfRequired(StringOutput sb, MultipleSelectionComponent stC) { + if(!stC.isDomReplacementWrapperRequired()) { + sb.append(" id='").append(stC.getDispatchID()).append("'"); + } + return sb; + } + private void renderVertical(StringOutput sb, MultipleSelectionComponent stC) { for(CheckboxElement check:stC.getCheckComponents()) { - sb.append("<div class='checkbox'>"); + sb.append("<div "); + appendIdIfRequired(sb, stC).append(" class='checkbox'>"); renderCheckbox(sb, check, stC, false); sb.append("</div>"); } - } + } private void renderMultiColumnsVertical(StringOutput sb, MultipleSelectionComponent stC, int columns) { String columnCss; @@ -76,7 +84,8 @@ public class MultipleSelectionRenderer extends DefaultComponentRenderer { columnCss = "col-sm-3"; } - sb.append("<div class='container-fluid'>"); + sb.append("<div "); + appendIdIfRequired(sb, stC).append(" class='container-fluid'>"); CheckboxElement[] checks = stC.getCheckComponents(); for(int i=0; i<checks.length; ) { sb.append("<div class='row'>"); @@ -96,7 +105,8 @@ public class MultipleSelectionRenderer extends DefaultComponentRenderer { } private void renderHorizontal(StringOutput sb, MultipleSelectionComponent stC) { - sb.append("<div class='form-inline'>"); + sb.append("<div "); + appendIdIfRequired(sb, stC).append(" class='form-inline'>"); for(CheckboxElement check:stC.getCheckComponents()) { renderCheckbox(sb, check, stC, true); } @@ -141,12 +151,12 @@ public class MultipleSelectionRenderer extends DefaultComponentRenderer { } sb.append(" />"); if (StringHelper.containsNonWhitespace(value)) { - sb.append(value); + sb.append(" ").append(value); } sb.append("</label>"); if(stC.isEnabled()){ - //add set dirty form only if enabled + //add set dirty form only if enabled sb.append(FormJSHelper.getJSStartWithVarDeclaration(stF.getFormDispatchId())) .append(FormJSHelper.getSetFlexiFormDirtyForCheckbox(stF.getRootForm(), stF.getFormDispatchId())) .append(FormJSHelper.getJSEnd()); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SelectboxSelectionImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SelectboxSelectionImpl.java index 5b71e802b2b..ee6cb270b1a 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SelectboxSelectionImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SelectboxSelectionImpl.java @@ -71,7 +71,11 @@ public class SelectboxSelectionImpl extends FormItemImpl implements SingleSelect String ssscId = getFormItemId() == null ? null : getFormItemId() + "_SELBOX"; component = new SelectboxComponent(ssscId , getName() + "_SELBOX", translator, this); - + } + + @Override + public void setDomReplacementWrapperRequired(boolean required) { + component.setDomReplacementWrapperRequired(required); } /** diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java index 22d5b2e8aa0..d955eb6b2bb 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/SingleSelectionImpl.java @@ -53,7 +53,7 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection private int selectedIndex = -1; private final Layout layout; - private SingleSelectionComponent component; + private final SingleSelectionComponent component; /** * @param name @@ -74,6 +74,11 @@ public class SingleSelectionImpl extends FormItemImpl implements SingleSelection component = new SingleSelectionComponent(id, this); } + @Override + public void setDomReplacementWrapperRequired(boolean required) { + component.setDomReplacementWrapperRequired(required); + } + /** * @see org.olat.core.gui.components.form.flexible.elements.SingleSelectionContainer#getSelected() */ diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextAreaElementRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextAreaElementRenderer.java index 8fe70b3895b..189154872de 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextAreaElementRenderer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextAreaElementRenderer.java @@ -82,31 +82,20 @@ class TextAreaElementRenderer extends DefaultComponentRenderer { // if (!source.isEnabled()) { //read only view - sb.append("<span id=\""); - sb.append(id); - sb.append("\" "); - sb.append(FormJSHelper.getRawJSFor(te.getRootForm(), id, te.getAction())); - sb.append("title=\""); - sb.append(value); //the uncutted value in tooltip - sb.append("\" "); - sb.append(" >"); - sb.append("<textarea id=\""); - sb.append(id); - sb.append("_disabled\" readonly class=\"b_form_element_disabled\""); + sb.append("<span id=\"").append(id).append("\" ") + .append(FormJSHelper.getRawJSFor(te.getRootForm(), id, te.getAction())) + .append(" ><textarea id=\"") + .append(id) + .append("_disabled\" readonly='readonly' class='form-control o_form_element_disabled'"); if (teC.getCols() != -1) { - sb.append(" cols=\""); - sb.append(teC.getCols()); - sb.append("\""); + sb.append(" cols='").append(teC.getCols()).append("'"); } if (rows != -1) { - sb.append(" rows=\""); - sb.append(rows); - sb.append("\""); + sb.append(" rows='").append(rows).append("'"); } - sb.append(">"); - sb.append(value); - sb.append("</textarea>"); - sb.append("</span>"); + sb.append(">") + .append(value) + .append("</textarea></span>"); } else { //read write view @@ -142,17 +131,11 @@ class TextAreaElementRenderer extends DefaultComponentRenderer { sb.append("');while (obj.scrollHeight>obj.offsetHeight && iter < 99){ iter++; obj.rows = obj.rows + 1}} catch(e){}});</script>"); } - if(source.isEnabled()){ //add set dirty form only if enabled - sb.append(FormJSHelper.getJSStartWithVarDeclaration(teC.getFormDispatchId())); - /* deactivated due OLAT-3094 and OLAT-3040 - if(te.hasFocus()){ - sb.append(FormJSHelper.getFocusFor(teC.getFormDispatchId())); - } - */ - sb.append(FormJSHelper.getSetFlexiFormDirty(te.getRootForm(), teC.getFormDispatchId())); - sb.append(FormJSHelper.getJSEnd()); + sb.append(FormJSHelper.getJSStartWithVarDeclaration(teC.getFormDispatchId())) + .append(FormJSHelper.getSetFlexiFormDirty(te.getRootForm(), teC.getFormDispatchId())) + .append(FormJSHelper.getJSEnd()); } } } diff --git a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java index 6fe73d2bba5..e00c313524d 100644 --- a/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java +++ b/src/main/java/org/olat/core/gui/components/progressbar/ProgressBarRenderer.java @@ -48,9 +48,10 @@ public class ProgressBarRenderer extends DefaultComponentRenderer { * 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 urlBuilder, Translator translator, RenderResult renderResult, String[] args) { - // Get the model object + ProgressBar ubar = (ProgressBar) source; boolean renderLabels = (args == null) ? true : false; float percent = 100; @@ -62,10 +63,9 @@ public class ProgressBarRenderer extends DefaultComponentRenderer { .append("px;\"><div class='progress-bar' style=\"width:") .append(Math.round(percent * ubar.getWidth() / 100)) .append("px\" title=\"") - .append(Math.round(percent * ubar.getWidth() / 100)) - .append("%\"></div>"); + .append(Math.round(percent)) + .append("%\">"); if (renderLabels) { - target.append("<div class=\"b_progress_label\">"); if (ubar.isPercentagesEnabled()) { target.append(Math.round(percent)); target.append("% ("); @@ -78,15 +78,12 @@ public class ProgressBarRenderer extends DefaultComponentRenderer { target.append(ubar.getUnitLabel()); if (ubar.isPercentagesEnabled()) { target.append(")"); - } - target.append("</div>"); + } } String info = ubar.getInfo(); if(StringHelper.containsNonWhitespace(info)) { - target.append("<div class=\"b_progress_label\">") - .append(info) - .append("</div>"); + target.append(info); } - target.append("</div>"); + target.append("</div></div>"); } } \ No newline at end of file diff --git a/src/main/java/org/olat/core/util/i18n/ui/TranslationToolI18nItemEditCrumbController.java b/src/main/java/org/olat/core/util/i18n/ui/TranslationToolI18nItemEditCrumbController.java index f956f1cc162..623041283b7 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/TranslationToolI18nItemEditCrumbController.java +++ b/src/main/java/org/olat/core/util/i18n/ui/TranslationToolI18nItemEditCrumbController.java @@ -29,7 +29,6 @@ import org.apache.commons.lang.StringUtils; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; -import org.olat.core.gui.components.form.flexible.FormUIFactory; import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; @@ -80,8 +79,7 @@ public class TranslationToolI18nItemEditCrumbController extends CrumbFormBasicCo private FormLink previousLink, saveLink, saveNextLink, nextLink, annotationAddLink; private ProgressBar progressBarBundle, progressBarKey; - private static final String KEYS_ENABLED = "enabled"; - private static final String KEYS_EMPTY = ""; + private static final String[] KEYS_ENABLED = new String[]{ "enabled" }; // true when the overlay files are edited and not the language files itself private boolean customizingMode = false; @@ -160,7 +158,6 @@ public class TranslationToolI18nItemEditCrumbController extends CrumbFormBasicCo */ @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - FormUIFactory formFactory = FormUIFactory.getInstance(); I18nManager i18nMgr = I18nManager.getInstance(); Preferences guiPrefs = ureq.getUserSession().getGuiPreferences(); flc.contextPut("referenceLanguageKey", referenceLocale.toString()); @@ -178,26 +175,31 @@ public class TranslationToolI18nItemEditCrumbController extends CrumbFormBasicCo } String[] bundlesListArray = ArrayHelper.toArray(bundlesList); String[] keysListArray = ArrayHelper.toArray(keysList); - bundlesSelection = formFactory.addDropdownSingleselect("bundlesSelection", this.flc, bundlesListArray, bundlesListArray, null); + bundlesSelection = uifactory.addDropdownSingleselect("bundlesSelection", this.flc, bundlesListArray, bundlesListArray, null); + bundlesSelection.setDomReplacementWrapperRequired(false); bundlesSelection.addActionListener(FormEvent.ONCHANGE); bundlesSelection.select(currentItem.getBundleName(), true); - keysSelection = formFactory.addDropdownSingleselect("keysSelection", this.flc, keysListArray, keysListArray, null); + keysSelection = uifactory.addDropdownSingleselect("keysSelection", this.flc, keysListArray, keysListArray, null); + keysSelection.setDomReplacementWrapperRequired(false); keysSelection.addActionListener(FormEvent.ONCHANGE); keysSelection.select(currentItem.getKey(), true); // Add reference box - referenceArea = formFactory.addTextAreaElement("referenceArea", "edit.referenceArea", -1, 1, -1, true, null, this.flc); + referenceArea = uifactory.addTextAreaElement("referenceArea", "edit.referenceArea", -1, 1, -1, true, null, this.flc); referenceArea.setEnabled(false); // read only // Add compare box Boolean compareEnabledPrefs = (Boolean) guiPrefs.get(I18nModule.class, I18nModule.GUI_PREFS_COMPARE_LANG_ENABLED, Boolean.FALSE); - compareArea = formFactory.addTextAreaElement("compareArea", "edit.compareArea", -1, 1, -1, true, null, this.flc); + compareArea = uifactory.addTextAreaElement("compareArea", "edit.compareArea", -1, 1, -1, true, null, this.flc); compareArea.setEnabled(false); // read only compareArea.setVisible(compareEnabledPrefs.booleanValue()); - compareSwitch = formFactory.addCheckboxesHorizontal("compareSwitch", null, this.flc, new String[] { KEYS_ENABLED }, - new String[] { KEYS_EMPTY });//i18nLabel set to null -> disabled label - compareSwitch.select(KEYS_ENABLED, compareEnabledPrefs.booleanValue()); + + String[] compareSwitchValues = new String[]{ translate("generic.enable") }; + compareSwitch = uifactory.addCheckboxesVertical("compareSwitch", null, flc, KEYS_ENABLED, compareSwitchValues, 1); + compareSwitch.setDomReplacementWrapperRequired(false); + compareSwitch.select(KEYS_ENABLED[0], compareEnabledPrefs.booleanValue()); compareSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(compareSwitch); - this.flc.contextPut("compareSwitchEnabled", compareEnabledPrefs); + flc.contextPut("compareSwitchEnabled", compareEnabledPrefs); + // Add compare language selection Set<String> availableLangKeys = I18nModule.getAvailableLanguageKeys(); String[] comparelangKeys = ArrayHelper.toArray(availableLangKeys); @@ -216,34 +218,36 @@ public class TranslationToolI18nItemEditCrumbController extends CrumbFormBasicCo .getDefaultLocale().toString()); compareLocale = i18nMgr.getLocaleOrNull(comparePrefs); if (compareLocale == null) compareLocale = I18nModule.getDefaultLocale(); - compareLangSelection = formFactory.addDropdownSingleselect("compareLangSelection", this.flc, comparelangKeys, compareLangValues, + compareLangSelection = uifactory.addDropdownSingleselect("compareLangSelection", this.flc, comparelangKeys, compareLangValues, compareLangCssClasses); + compareLangSelection.setDomReplacementWrapperRequired(false); compareLangSelection.select(i18nMgr.getLocaleKey(compareLocale), true); - this.flc.contextPut("compareLanguageKey", i18nMgr.getLocaleKey(compareLocale)); + flc.contextPut("compareLanguageKey", i18nMgr.getLocaleKey(compareLocale)); compareLangSelection.addActionListener(FormEvent.ONCHANGE); compareLangSelection.setEnabled(compareEnabledPrefs.booleanValue()); + // Add target box - this.flc.contextPut("targetLanguageKey", i18nMgr.getLocaleKey(currentItem.getLocale())); - this.flc.contextPut("targetLanguage", i18nMgr.getLanguageTranslated(i18nMgr.getLocaleKey(currentItem.getLocale()), false)); - targetArea = formFactory.addTextAreaElement("targetArea", "edit.targetArea", -1, 1, -1, true, null, this.flc); + flc.contextPut("targetLanguageKey", i18nMgr.getLocaleKey(currentItem.getLocale())); + flc.contextPut("targetLanguage", i18nMgr.getLanguageTranslated(i18nMgr.getLocaleKey(currentItem.getLocale()), false)); + targetArea = uifactory.addTextAreaElement("targetArea", "edit.targetArea", -1, 5, -1, true, null, flc); // Add annotation box - annotationArea = formFactory.addTextAreaElement("annotationArea", "edit.annotationArea", -1, 1, -1, true, null, this.flc); + annotationArea = uifactory.addTextAreaElement("annotationArea", "edit.annotationArea", -1, 1, -1, true, null, flc); // Add progress bar // init with values - progressBarBundle = new ProgressBar("progressBarBundle", 200, 1, bundlesList.size(), translate("generic.bundles")); + progressBarBundle = new ProgressBar("progressBarBundle", 300, 1, bundlesList.size(), translate("generic.bundles")); progressBarBundle.setPercentagesEnabled(false); - this.flc.put("progressBarBundle", progressBarBundle); - progressBarKey = new ProgressBar("progressBarKey", 200, 1, keysList.size(), translate("generic.keys")); + flc.put("progressBarBundle", progressBarBundle); + progressBarKey = new ProgressBar("progressBarKey", 300, 1, keysList.size(), translate("generic.keys")); progressBarKey.setPercentagesEnabled(false); - this.flc.put("progressBarKey", progressBarKey); + flc.put("progressBarKey", progressBarKey); // Add navigation buttons - previousLink = new FormLinkImpl("previousLink", "previousLink", "edit.button.previous", Link.BUTTON); - formLayout.add(previousLink); - saveLink = new FormLinkImpl("saveLink", "saveLink", "edit.button.save", Link.BUTTON); - formLayout.add(saveLink); - saveNextLink = new FormLinkImpl("saveNextLink", "saveNextLink", "edit.button.saveNext", Link.BUTTON); + previousLink = uifactory.addFormLink("previousLink", "edit.button.previous", null, formLayout, Link.BUTTON); + previousLink.setIconLeftCSS("o_icon o_icon_previous_page"); + saveLink = uifactory.addFormLink("saveLink", "edit.button.save", null, formLayout, Link.BUTTON); + saveNextLink = uifactory.addFormLink("saveNextLink", "edit.button.saveNext", null, formLayout, Link.BUTTON); formLayout.add(saveNextLink); - nextLink = new FormLinkImpl("nextLink", "nextLink", "edit.button.next", Link.BUTTON); + nextLink = uifactory.addFormLink("nextLink", "edit.button.next", null, formLayout, Link.BUTTON); + nextLink.setIconRightCSS("o_icon o_icon_next_page"); formLayout.add(nextLink); // init values from item initOrUpdateCurrentItem(ureq); diff --git a/src/main/java/org/olat/core/util/i18n/ui/TranslationToolStartCrumbController.java b/src/main/java/org/olat/core/util/i18n/ui/TranslationToolStartCrumbController.java index 68802ad76bd..668165d1469 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/TranslationToolStartCrumbController.java +++ b/src/main/java/org/olat/core/util/i18n/ui/TranslationToolStartCrumbController.java @@ -249,7 +249,7 @@ class TranslationToolStartCrumbController extends CrumbFormBasicController { targetLangSelection.addActionListener(FormEvent.ONCHANGE); // Add progress bar as normal component (not a form element) int bundlesCount = i18nMgr.countBundles(null, true); - progressBar = new ProgressBar("progressBar", 200, 0, 0, translate("start.progressBar.unitLabel", bundlesCount + "")); + progressBar = new ProgressBar("progressBar", 300, 0, 0, translate("start.progressBar.unitLabel", bundlesCount + "")); this.flc.put("progressBar", progressBar); } @@ -260,15 +260,17 @@ class TranslationToolStartCrumbController extends CrumbFormBasicController { missingBundlesSelection.addActionListener(FormEvent.ONCHANGE); missingBundlesSelection.select(ALL_BUNDLES_IDENTIFYER, true); // Add missing bundles children switch + String[] missingBundles = new String[] { translate("generic.limit.bundles.includeChildren") }; missingBundlesIncludeBundlesChildrenSwitch = formFactory.addCheckboxesHorizontal("missingBundlesIncludeBundlesChildrenSwitch", null, - this.flc, new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + flc, new String[] { KEYS_ENABLED }, missingBundles);//disabled label by setting i18nLabel to null missingBundlesIncludeBundlesChildrenSwitch.select(KEYS_ENABLED, true); missingBundlesIncludeBundlesChildrenSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(missingBundlesIncludeBundlesChildrenSwitch); missingBundlesIncludeBundlesChildrenSwitch.setEnabled(false); // Add priority sort switch + String[] missingBundlesPrio = new String[] { translate("generic.sort.by.priority") }; missingBundlesPrioritySortSwitch = formFactory.addCheckboxesHorizontal("missingBundlesPrioritySortSwitch", null, this.flc, - new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + new String[] { KEYS_ENABLED }, missingBundlesPrio);//disabled label by setting i18nLabel to null missingBundlesPrioritySortSwitch.select(KEYS_ENABLED, true); missingBundlesPrioritySortSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(missingBundlesPrioritySortSwitch); @@ -286,15 +288,17 @@ class TranslationToolStartCrumbController extends CrumbFormBasicController { existingBundlesSelection.addActionListener(FormEvent.ONCHANGE); existingBundlesSelection.select(ALL_BUNDLES_IDENTIFYER, true); // Add existing bundles children switch + String[] existingBundlesInclude = new String[]{ translate("generic.limit.bundles.includeChildren") }; existingBundlesIncludeBundlesChildrenSwitch = formFactory.addCheckboxesHorizontal("existingBundlesIncludeBundlesChildrenSwitch", null, - this.flc, new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + flc, new String[] { KEYS_ENABLED }, existingBundlesInclude);//disabled label by setting i18nLabel to null existingBundlesIncludeBundlesChildrenSwitch.select(KEYS_ENABLED, true); existingBundlesIncludeBundlesChildrenSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(existingBundlesIncludeBundlesChildrenSwitch); existingBundlesIncludeBundlesChildrenSwitch.setEnabled(false); // Add priority sort switch - existingBundlesPrioritySortSwitch = formFactory.addCheckboxesHorizontal("existingBundlesPrioritySortSwitch", null, this.flc, - new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + String[] existingBundlespPrio = new String[]{ translate("generic.sort.by.priority")}; + existingBundlesPrioritySortSwitch = formFactory.addCheckboxesHorizontal("existingBundlesPrioritySortSwitch", null, + flc, new String[] { KEYS_ENABLED }, existingBundlespPrio);//disabled label by setting i18nLabel to null existingBundlesPrioritySortSwitch.select(KEYS_ENABLED, true); existingBundlesPrioritySortSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(existingBundlesPrioritySortSwitch); @@ -312,15 +316,17 @@ class TranslationToolStartCrumbController extends CrumbFormBasicController { allBundlesSelection.addActionListener(FormEvent.ONCHANGE); allBundlesSelection.select(ALL_BUNDLES_IDENTIFYER, true); // Add all bundles children switch - allBundlesIncludeBundlesChildrenSwitch = formFactory.addCheckboxesHorizontal("allBundlesIncludeBundlesChildrenSwitch", null, this.flc, - new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + String[] allBundlesIncludeBundles = new String[]{ translate("generic.limit.bundles.includeChildren") }; + allBundlesIncludeBundlesChildrenSwitch = formFactory.addCheckboxesHorizontal("allBundlesIncludeBundlesChildrenSwitch", null, + flc, new String[] { KEYS_ENABLED }, allBundlesIncludeBundles);//disabled label by setting i18nLabel to null allBundlesIncludeBundlesChildrenSwitch.select(KEYS_ENABLED, true); allBundlesIncludeBundlesChildrenSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(allBundlesIncludeBundlesChildrenSwitch); allBundlesIncludeBundlesChildrenSwitch.setEnabled(false); // Add priority sort switch - allBundlesPrioritySortSwitch = formFactory.addCheckboxesHorizontal("allBundlesPrioritySortSwitch", null, this.flc, - new String[] { KEYS_ENABLED }, new String[] { KEYS_EMPTY });//disabled label by setting i18nLabel to null + String[] allBundlesIncludePrio = new String[]{ translate("generic.sort.by.priority") }; + allBundlesPrioritySortSwitch = formFactory.addCheckboxesHorizontal("allBundlesPrioritySortSwitch", null, + flc, new String[] { KEYS_ENABLED }, allBundlesIncludePrio);//disabled label by setting i18nLabel to null allBundlesPrioritySortSwitch.select(KEYS_ENABLED, true); allBundlesPrioritySortSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(allBundlesPrioritySortSwitch); @@ -374,13 +380,10 @@ class TranslationToolStartCrumbController extends CrumbFormBasicController { searchBundlesPrioritySortSwitch.addActionListener(FormEvent.ONCLICK); formLayout.add(searchBundlesPrioritySortSwitch); // Add button to trigger search - FormItemContainer searchButtonLayoutContainer = FormLayoutContainer.createHorizontalFormLayout( - "searchButtonLayoutContainer", getTranslator()); + FormItemContainer searchButtonLayoutContainer = FormLayoutContainer.createButtonLayout("searchButtonLayoutContainer", getTranslator()); searchLayoutContainer.add(searchButtonLayoutContainer); - searchListButton = new FormLinkImpl("searchListButton", "searchListButton", "generic.listButton", Link.BUTTON); - searchButtonLayoutContainer.add(searchListButton); - searchTranslateButton = new FormLinkImpl("searchTranslateButton", "searchTranslateButton", "generic.translateButton", Link.BUTTON); - searchButtonLayoutContainer.add(searchTranslateButton); + searchListButton = uifactory.addFormLink("searchListButton", "generic.listButton", null, searchButtonLayoutContainer, Link.BUTTON); + searchTranslateButton = uifactory.addFormLink("searchTranslateButton", "generic.translateButton", null, searchButtonLayoutContainer, Link.BUTTON); } /** diff --git a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemEdit.html b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemEdit.html index b3ef702c9ce..784694a30de 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemEdit.html +++ b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemEdit.html @@ -1,69 +1,65 @@ -<div class="o_translation_edit b_form"> - <div class="o_translation_edit_head"> - <table class="b_table b_table_nohover b_full"> - <tr><td><span class="b_with_small_icon_left o_translation_package_icon"><b>$r.translate("generic.bundle"): </b></span></td><td id="bundlesSelectionContainer">$r.render("bundlesSelection")</td><td width="50%">$r.render("progressBarBundle")</td></tr> - <tr><td><span class="b_with_small_icon_left o_translation_item_icon"><b>$r.translate("generic.key"): </b></span></td><td>$r.render("keysSelection")</td><td>$r.render("progressBarKey")</td></tr> - </table> +<div class="o_translation_edit"> + <div class="o_form form-horizontal"> + <div class="form-group clearfix"> + <div class="col-sm-2"><label class="control-label"><i class="o_icon o_icon_translation_package"> </i> $r.translate("generic.bundle")</label></div> + <div class="col-sm-5">$r.render("bundlesSelection")</div> + <div class="col-sm-3">$r.render("progressBarBundle")</div> + </div> + <div class="form-group clearfix"> + <div class="col-sm-2"><label class="control-label"><i class="o_icon o_icon_translation_item"> </i> $r.translate("generic.key")</label></div> + <div class="col-sm-5">$r.render("keysSelection")</div> + <div class="col-sm-3">$r.render("progressBarKey")</div> + </div> </div> - <div class="o_translation_edit_body"> - <p class="o_info"> - $r.translate("edit.${customizingPrefix}intro") - </p> + <div class="o_translation_edit_body"> + <p class="o_info">$r.translate("edit.${customizingPrefix}intro")</p> - <div class="o_translation_edit_reference b_form_element"> - <div class="o_translation_refKey b_float_right b_with_small_icon_left" style="display: none" onclick="this.style.display='none'"> + <div class="o_translation_edit_reference"> + <div class="o_translation_refKey pull-right" style="display: none" onclick="this.style.display='none'"> <code></code> = <span></span> </div> - <h5> - <i class="o_flag o_flag_$referenceLanguageKey"> </i> - $r.translate("generic.${customizingPrefix}lang.reference"): $referenceLanguage - </h5> + <h5><i class="o_flag o_flag_$referenceLanguageKey"> </i> $r.translate("generic.${customizingPrefix}lang.reference"): $referenceLanguage</h5> $r.render("referenceArea") </div> #if ($r.available("annotationAddLink")) #if (!$customizingMode) - <div class="b_button_group"> + <div class="o_button_group"> $r.render("annotationAddLink") </div> #end #else - <div class="o_translation_edit_annotation b_form_element" title="$r.translateInAttribute("edit.annotation.hover")" > - <h5> - <i class="o_icon o_icon_info"> </i> - $r.translate("generic.annotation") - </h5> + <div class="o_translation_edit_annotation" title="$r.translateInAttribute("edit.annotation.hover")" > + <h5><i class="o_icon o_icon_info"> </i> $r.translate("generic.annotation")</h5> $r.render("annotationArea") </div> #end - <div class="o_translation_edit_compare b_form_element"> + <div class="o_translation_edit_compare"> #if ($compareSwitchEnabled) - <div class="o_translation_refKey pull-right b_with_small_icon_left" style="display: none" onclick="this.style.display='none'"> + <div class="o_translation_refKey pull-right o_icon" style="display: none" onclick="this.style.display='none'"> <code></code> = <span></span> </div> #end - <div class="clearfix"> - <div class="pull-left #if (!$compareSwitchEnabled) text-muted #end"><h5><i class="o_flag o_flag_$compareLanguageKey">$r.translate("generic.lang.compare"): </h5></div> - <div class="pull-left #if (!$compareSwitchEnabled) text-muted #end">$r.render("compareLangSelection") </div> - <div class="pull-left" style="margin-right: 0;">$r.render("compareSwitch")</div> - $r.translate("generic.enable") + <div class="form-inline"> + <div class="form-group"> + <label><i class="o_flag o_flag_$compareLanguageKey"> </i> $r.translate("generic.lang.compare"):</label> + </div> + $r.render("compareLangSelection") + $r.render("compareSwitch") </div> $r.render("compareArea") </div> - <div class="o_translation_edit_target b_form_element" title="$r.translateInAttribute("edit.${customizingPrefix}target.hover")"> + <div class="o_translation_edit_target" title="$r.translateInAttribute("edit.${customizingPrefix}target.hover")"> <div class="o_translation_refKey b_float_right b_with_small_icon_left" style="display: none" onclick="this.style.display='none'"> <code></code> = <span></span> </div> - <a href="#top" onclick="copyFromReference();" class="btn btn-small pull-right"><span>$r.translate('copy')</span></a> - <h5> - <i class="o_flag o_flag_$targetLanguageKey"> </i> - $r.translate("generic.${customizingPrefix}lang.target"): $targetLanguage - </h5> + <h5><i class="o_flag o_flag_$targetLanguageKey"> </i> $r.translate("generic.${customizingPrefix}lang.target"): $targetLanguage</h5> $r.render("targetArea") </div> - <div class="b_button_group"> + <div class="o_button_group"> #if ($hasPrevious) $r.render("previousLink") #end + <a href="#top" onclick="copyFromReference();" class="btn btn-default"><i class="o_icon o_icon_copy"> </i> $r.translate('copy')</a> $r.render("saveLink") #if ($hasNext) $r.render("saveNextLink") diff --git a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html index 96bd69aa738..d52af111eb0 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html +++ b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html @@ -1,11 +1,7 @@ -<div class="b_translation_list"> +<div class="o_translation_list"> ## <h2>$r.translate("list.title")</h2> - <p> - $r.translate("list.found.entries", ["$keysCount","$bundlesCount"]) - </p> - <p class="o_info"> - $r.translate("list.${customizingPrefix}intro") - </p> + <p>$r.translate("list.found.entries", ["$keysCount","$bundlesCount"])</p> + <p class="o_info">$r.translate("list.${customizingPrefix}intro")</p> #if ($i18nItems.size() > 0) <div class="o_button_group"> $r.render("allTranslateButtonTop") @@ -20,9 +16,7 @@ #set ($currentBundle=$item.getBundleName()) <div class="clearfix"> - <div class="pull-right"> - $r.render("translateBundle_$currentBundle") - </div> + <div class="pull-right">$r.render("translateBundle_$currentBundle")</div> <div class="o_tooglebox_wrapper"> <a href="#" data-toggle="collapse" data-target="#$b_translation_item_$velocityCount" class="o_opener" onclick="jQuery(this).toggleClass('o_in')"> <b class="b_with_small_icon_left b_translation_package_icon">$r.translate("generic.bundle"): $currentBundle </b> @@ -31,7 +25,7 @@ </div> <div id="$b_translation_item_$velocityCount" class="collapse"><div class="o_togglebox_content"> #end - <div class="b_translation_list_item b_with_small_icon_left b_translation_item_icon">$item.getKey()</div> + <div class="o_icon o_icon_translation_item">$item.getKey()</div> #end </div></div></div> <div class="o_button_group"> diff --git a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolLauncher.html b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolLauncher.html index 30f3dd5421c..920f91389e0 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolLauncher.html +++ b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolLauncher.html @@ -1,32 +1,28 @@ #if ($transToolEnabled) <fieldset> <legend>$r.translate("launch.title")</legend> - <p> - $r.translate("launch.intro") - </p> - $r.render("start") + <p>$r.translate("launch.intro")</p> + <div class="o_button_group o_button_group_left"> + $r.render("start") + </div> </fieldset> <fieldset> <legend>$r.translate("inline.title")</legend> - <p> - $r.translate("inline.intro") - </p> + <p>$r.translate("inline.intro")</p> #if ($logoutRequired) - <p class="o_warning"> - $r.translate("inline.require.logout") - </p> + <p class="o_warning">$r.translate("inline.require.logout")</p> #end #if ($r.available("inline.enable")) - <p> - <i class="b_with_small_icon_right b_status_disabled_icon">$r.translate("inline.state"): $r.translate("inline.state.disabled")</span> - </p> - $r.render("inline.enable") + <p><i class="o_icon o_icon_disabled"> </i> $r.translate("inline.state"): $r.translate("inline.state.disabled")</span></p> + <div class="o_button_group o_button_group_left"> + $r.render("inline.enable") + </div> #elseif ($r.available("inline.disable")) - <p> - <span class="b_with_small_icon_right b_status_enabled_icon">$r.translate("inline.state"): $r.translate("inline.state.enabled")</span> - </p> - $r.render("inline.disable") + <p><i class="o_icon o_icon_enabled"> </i> $r.translate("inline.state"): $r.translate("inline.state.enabled")</p> + <div class="o_button_group o_button_group_left"> + $r.render("inline.disable") + </div> #end </fieldset> #end @@ -34,32 +30,26 @@ #if ($customizingToolEnabled) <fieldset> <legend>$r.translate("launch.customize.title")</legend> - <p> - $r.translate("launch.customize.intro") - </p> + <p>$r.translate("launch.customize.intro")</p> $r.render("start") </fieldset> <fieldset> <legend>$r.translate("inline.customize.title")</legend> - <p> - $r.translate("inline.customize.intro") - </p> + <p>$r.translate("inline.customize.intro")</p> #if ($logoutRequired) - <p class="o_warning"> - $r.translate("inline.customize.require.logout") - </p> + <p class="o_warning">$r.translate("inline.customize.require.logout")</p> #end #if ($r.available("inline.enable")) - <p> - <span class="b_with_small_icon_right b_status_disabled_icon">$r.translate("inline.state"): $r.translate("inline.state.disabled")</span> - </p> - $r.render("inline.enable") + <p><i class="o_icon o_icon_disabled"> </i> $r.translate("inline.state"): $r.translate("inline.state.disabled")</p> + <div class="o_button_group o_button_group_left"> + $r.render("inline.enable") + </div> #elseif ($r.available("inline.disable")) - <p> - <span class="b_with_small_icon_right b_status_enabled_icon">$r.translate("inline.state"): $r.translate("inline.state.enabled")</span> - </p> - $r.render("inline.disable") + <p><i class="o_icon o_icon_enabled"> </i>$r.translate("inline.state"): $r.translate("inline.state.enabled")</p> + <div class="o_button_group o_button_group_left"> + $r.render("inline.disable") + </div> #end </fieldset> #end @@ -67,13 +57,9 @@ <fieldset> <legend>$r.translate("cache.title")</legend> #if($r.available("cache.flush")) - <p> - $r.translate("cache.intro") - </p> + <p>$r.translate("cache.intro")</p> $r.render("cache.flush") #else - <p class="o_warning"> - $r.translate("cache.disabled") - </p> + <p class="o_warning">$r.translate("cache.disabled")</p> #end </fieldset> diff --git a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolStartCrumb.html b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolStartCrumb.html index 7fbc51cb5f3..36a5436e996 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolStartCrumb.html +++ b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolStartCrumb.html @@ -1,141 +1,82 @@ -<div class="b_translation_start"> - <div class="b_translation_start_head"> - <div class="b_subcolumns"> - <div class="b_c50l"> - <div class="b_subcl b_form clearfix"> - <div class="b_form_element_wrapper clearfix"> - <div class="b_form_element_label"> - $r.render("start.referenceLangSelection_LABEL", $f.getItemId("start.referenceLangSelection"), "false") - </div> - <div class="b_form_element"> - <div class="b_with_small_icon_left b_flag_$referenceLangKey"> - $r.render("start.referenceLangSelection") - </div> - </div> - </div> - <div class="b_form_element_wrapper clearfix"> - <div class="b_form_element_label"> - $r.render("start.targetLangSelection_LABEL", $f.getItemId("start.targetLangSelection"), "false") - </div> - <div class="b_form_element"> - <div class="b_with_small_icon_left b_flag_$targetLangKey"> - $r.render("start.targetLangSelection") - </div> - </div> - </div> +<div class="o_translation_start"> + <div class="container-fluid"> + <div class="row"> + <div class="col-sm-6"> + <div class="form-group"> + $r.render("start.referenceLangSelection_LABEL", $f.getItemId("start.referenceLangSelection"), "false") + <i class="o_icon_left o_flag_$referenceLangKey"> </i> + $r.render("start.referenceLangSelection") </div> - </div> - - <div class="b_c50r"> - <div class="b_subcr"> - $r.translate("start.progressBar"): - $r.render("progressBar") + <div class="form-group"> + $r.render("start.targetLangSelection_LABEL", $f.getItemId("start.targetLangSelection"), "false") + <i class="b_with_small_icon_left b_flag_$targetLangKey"> </i> + $r.render("start.targetLangSelection") </div> </div> + <div class="col-sm-6"> + $r.translate("start.progressBar"): + $r.render("progressBar") + </div> </div> </div> - <div class="b_translation_start_body"> - <p class="o_info"> - $r.translate("start.${customizingPrefix}intro") - </p> + <div class="container-fluid"> + <p class="o_info">$r.translate("start.${customizingPrefix}intro")</p> - <div class="b_subcolumns"> - <div class="b_c50l"> - <div class="b_subcl b_form clearfix"> - <fieldset> - <legend class="b_with_small_icon_left b_translation_item_icon">$r.translate("start.${customizingPrefix}missing.title")</legend> - <p> - $r.translate("start.${customizingPrefix}missing.intro") - </p> - <p> - $r.translate("start.${customizingPrefix}missing.count"): $missingCount - </p> - $r.render("missingBundlesSelection") - <div class="clearfix"> - <div class="b_float_left">$r.render("missingBundlesIncludeBundlesChildrenSwitch") </div> - <div class="b_float_left">$r.translate("generic.limit.bundles.includeChildren")</div> - </div> - <div class="clearfix"> - <div class="b_float_left">$r.render("missingBundlesPrioritySortSwitch") </div> - <div class="b_float_left">$r.translate("generic.sort.by.priority")</div> - </div> - <div class="b_button_group"> - $r.render("missingListButton") - $r.render("missingTranslateButton") - </div> - </fieldset> - </div> + <div class="row"> + <div class="col-sm-6"> + <fieldset class="form"> + <legend><i class="o_icon o_icon_translation_item"> </i> $r.translate("start.${customizingPrefix}missing.title")</legend> + <p>$r.translate("start.${customizingPrefix}missing.intro")</p> + <p>$r.translate("start.${customizingPrefix}missing.count"): $missingCount</p> + $r.render("missingBundlesSelection") + $r.render("missingBundlesIncludeBundlesChildrenSwitch") + $r.render("missingBundlesPrioritySortSwitch") + <div class="o_button_group"> + $r.render("missingListButton") + $r.render("missingTranslateButton") + </div> + </fieldset> </div> - <div class="b_c50r"> - <div class="b_subcr b_form clearfix"> - <fieldset> - <legend class="b_with_small_icon_left b_translation_item_icon">$r.translate("start.${customizingPrefix}existing.title")</legend> - <p> - $r.translate("start.${customizingPrefix}existing.intro") - </p> - <p> - $r.translate("start.${customizingPrefix}existing.count"): $existingCount - </p> - $r.render("existingBundlesSelection") - <div class="clearfix"> - <div class="b_float_left">$r.render("existingBundlesIncludeBundlesChildrenSwitch") </div> - <div class="b_float_left">$r.translate("generic.limit.bundles.includeChildren")</div> - </div> - <div class="clearfix"> - <div class="b_float_left">$r.render("existingBundlesPrioritySortSwitch") </div> - <div class="b_float_left">$r.translate("generic.sort.by.priority")</div> - </div> - <div class="b_button_group"> - $r.render("existingListButton") - $r.render("existingTranslateButton") - </div> - </fieldset> - </div> + <div class="col-sm-6"> + <fieldset class="form"> + <legend><i class="o_icon o_icon_translation_item"> </i> $r.translate("start.${customizingPrefix}existing.title")</legend> + <p>$r.translate("start.${customizingPrefix}existing.intro")</p> + <p>$r.translate("start.${customizingPrefix}existing.count"): $existingCount</p> + $r.render("existingBundlesSelection") + $r.render("existingBundlesIncludeBundlesChildrenSwitch") + $r.render("existingBundlesPrioritySortSwitch") + <div class="o_button_group"> + $r.render("existingListButton") + $r.render("existingTranslateButton") + </div> + </fieldset> </div> </div> - <div class="b_subcolumns"> - <div class="b_c50l"> - <div class="b_subcl b_form clearfix"> - <fieldset> - <legend class="b_with_small_icon_left b_translation_package_icon">$r.translate("start.all.title")</legend> - <p> - $r.translate("start.all.intro") - </p> - <p> - $r.translate("start.all.count"): $allCount - </p> - $r.render("allBundlesSelection") - <div class="clearfix"> - <div class="b_float_left">$r.render("allBundlesIncludeBundlesChildrenSwitch") </div> - <div class="b_float_left">$r.translate("generic.limit.bundles.includeChildren")</div> - </div> - <div class="clearfix"> - <div class="b_float_left">$r.render("allBundlesPrioritySortSwitch") </div> - <div class="b_float_left">$r.translate("generic.sort.by.priority")</div> - </div> - <div class="b_button_group"> - $r.render("allListButton") - $r.render("allTranslateButton") - </div> - </fieldset> - </div> + <div class="row"> + <div class="col-sm-6"> + <fieldset class="form"> + <legend><i class="o_icon o_icon_translation_package"> </i> $r.translate("start.all.title")</legend> + <p>$r.translate("start.all.intro")</p> + <p>$r.translate("start.all.count"): $allCount</p> + $r.render("allBundlesSelection") + $r.render("allBundlesIncludeBundlesChildrenSwitch") + $r.render("allBundlesPrioritySortSwitch") + <div class="o_button_group"> + $r.render("allListButton") + $r.render("allTranslateButton") + </div> + </fieldset> </div> - <div class="b_c50r"> - <div class="b_subcr b_form clearfix"> - <fieldset> - <legend class="b_with_small_icon_left b_translation_search_icon">$r.translate("start.search.title")</legend> - <p> - $r.translate("start.${customizingPrefix}search.intro") - </p> - $r.render("searchLayoutContainer") - </fieldset> - </div> + <div class="col-sm-6"> + <fieldset> + <legend><i class="o_icon o_icon_search"> </i> $r.translate("start.search.title")</legend> + <p>$r.translate("start.${customizingPrefix}search.intro")</p> + $r.render("searchLayoutContainer") + </fieldset> </div> </div> - - </div> - + </div> ## set meaningfull page title <script type="text/javascript"> /* <![CDATA[ */ diff --git a/src/main/java/org/olat/core/util/i18n/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/util/i18n/ui/_i18n/LocalStrings_de.properties index 6d8291522bc..d75b264a21a 100644 --- a/src/main/java/org/olat/core/util/i18n/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/core/util/i18n/ui/_i18n/LocalStrings_de.properties @@ -77,7 +77,7 @@ edit.button.add.annotation=Anmerkung hinzuf\u00FCgen edit.button.next=Weiter edit.button.previous=Zur\u00FCck edit.button.save=Speichern -edit.button.saveNext=Speichern & weiter +edit.button.saveNext=Speichern & weiter edit.crumb.hoover=Formular zur Anpassung eines \u00DCbersetzungsschl\u00FCssels edit.crumb.link=\u00DCbersetzungsschl\u00FCssel edit.customize.crumb.hoover=Formular zum \u00DCbersetzen eines \u00DCbersetzungsschl\u00FCssels diff --git a/src/main/webapp/static/themes/light/modules/_icons.scss b/src/main/webapp/static/themes/light/modules/_icons.scss index 25fb0f3bf1b..4a55f429903 100644 --- a/src/main/webapp/static/themes/light/modules/_icons.scss +++ b/src/main/webapp/static/themes/light/modules/_icons.scss @@ -74,10 +74,12 @@ $fa-css-prefix: "o_icon" !default; .o_icon_delete:before { content: $fa-var-minus-circle; color: #A87E7E;} .o_icon_details:before { content: $fa-var-lightbulb-o; } .o_icon_dev:before { content: $fa-var-bug;} +.o_icon_disabled:before { content: $fa-var-circle-o;} .o_icon_download:before { content: $fa-var-download;} .o_icon_edit:before { content: $fa-var-edit;} .o_icon_edit_file:before { content: $fa-var-edit;} .o_icon_edit_metadata:before { content: $fa-var-gear;} +.o_icon_enabled:before { content: $fa-var-circle; } .o_icon_enlarge:before { content: $fa-var-search-plus;} .o_icon_eportfolio_add:before { content: $fa-var-puzzle-piece;} .o_icon_error:before { content: $fa-var-exclamation-circle; color: $brand-danger;} @@ -180,6 +182,8 @@ $fa-css-prefix: "o_icon" !default; .o_icon_tool:before { content: $fa-var-gear; } .o_icon_tools:before { content: $fa-var-wrench; } .o_icon_top:before { content: $fa-var-chevron-up; } +.o_icon_translation_item:before { content: $fa-var-file-code-o; } +.o_icon_translation_package:before { content: $fa-var-folder-open-o; } .o_icon_user:before { content: $fa-var-user; } .o_icon_user_vip:before { content: $fa-var-graduation-cap; } .o_icon_user_anonymous:before { content: $fa-var-question; } diff --git a/src/main/webapp/static/themes/light/theme.css b/src/main/webapp/static/themes/light/theme.css index 6fcc1a0bcf0..31876356d54 100644 --- a/src/main/webapp/static/themes/light/theme.css +++ b/src/main/webapp/static/themes/light/theme.css @@ -58,7 +58,7 @@ fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100% @media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}} .visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}} .visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}} -@media print{.hidden-print{display:none !important}}body .modal{position:absolute;overflow:visible}body div.tooltip-inner{max-width:400px}body div.popover{max-width:450px}body .modal-body.alert{border-radius:0}body .progress{margin-bottom:0}.panel-body:nth-child(n+2){border-top:1px solid #ddd}.form-control-feedback{top:10px}.form-horizontal .has-feedback .form-control-feedback{top:10px}@font-face{font-family:'FontAwesome';src:url("../../../font-awesome/fonts/fontawesome-webfont.eot?v=4.1.0");src:url("../../../font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.1.0") format("embedded-opentype"),url("../../../font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0") format("woff"),url("../../../font-awesome/fonts/fontawesome-webfont.ttf?v=4.1.0") format("truetype"),url("../../../font-awesome/fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.o_icon{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_icon-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.o_icon-2x{font-size:2em}.o_icon-3x{font-size:3em}.o_icon-4x{font-size:4em}.o_icon-5x{font-size:5em}.o_icon-fw{width:1.28571em;text-align:center}.o_icon-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.o_icon-ul>li{position:relative}.o_icon-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.o_icon-li.o_icon-lg{left:-1.85714em}.o_icon-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.o_icon.pull-left{margin-right:.3em}.o_icon.pull-right{margin-left:.3em}.o_icon-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.o_icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.o_icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.o_icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.o_icon-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.o_icon-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.o_icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.o_icon-stack-1x,.o_icon-stack-2x{position:absolute;left:0;width:100%;text-align:center}.o_icon-stack-1x{line-height:inherit}.o_icon-stack-2x{font-size:2em}.o_icon-inverse{color:#fff}.o_icon_accessibility:before{content:"\f193"}.o_icon_actions:before{content:"\f085"}.o_icon_archive_tool:before{content:"\f019"}.o_icon_assessment_tool:before{content:"\f091"}.o_icon_attempt_limit:before{content:"\f021"}.o_icon_add:before{content:"\f055"}.o_icon_add_search:before{content:"\f00e"}.o_icon_audio:before{content:"\f028"}.o_icon_back:before{content:"\f053"}.o_icon_back_history:before{content:"\f1da"}.o_icon_bold:before{content:"\f032"}.o_icon_booking:before{content:"\f07a"}.o_icon_bookmark:before{content:"\f02e";color:#996633}.o_icon_bookmark_add:before{content:"\f097"}.o_icon_bookmark_header:before{content:"\f02e"}.o_icon_browse:before{content:"\f00e"}.o_icon_browsercheck:before{content:"\f164"}.o_icon_busy:before{content:"\f110"}.o_icon_calendar:before{content:"\f073"}.o_icon_calendar_enabled:before{content:"\f05d"}.o_icon_calendar_disabled:before{content:"\f10c"}.o_icon_calendar:before{content:"\f073"}.o_icon_caret:before{content:"\f0d7"}.o_icon_catalog:before{content:"\f0e8"}.o_icon_certificate:before{content:"\f0a3"}.o_icon_chat:before{content:"\f0e5"}.o_icon_check:before{content:"\f00c"}.o_icon_checkbox:before{content:"\f096"}.o_icon_checkbox_checked:before{content:"\f14a"}.o_icon_cleanup:before{content:"\f0f9"}.o_icon_close:before{content:"\f00d"}.o_icon_close_resource:before{content:"\f011"}.o_icon_close_tab:before{content:"\f00d"}.o_icon_close_tool:before{content:"\f00d"}.o_icon_close_tree:before{content:"\f0d7"}.o_icon_close_togglebox:before,.o_togglebox_wrapper .o_opener.o_in i:before{content:"\f0d7"}.o_icon_code:before{content:"\f121"}.o_icon_color_picker:before{content:"\f043"}.o_icon_copy:before{content:"\f0c5"}.o_icon_courseareas:before{content:"\f1db"}.o_icon_coursedb:before{content:"\f1c0"}.o_icon_courseeditor:before{content:"\f044"}.o_icon_coursefolder:before{content:"\f114"}.o_icon_courserun:before{content:"\f1b2"}.o_icon_comments:before{content:"\f086"}.o_icon_comments_none:before{content:"\f0e5"}.o_icon_content_popup:before{content:"\f08e"}.o_icon_customize:before{content:"\f013"}.o_icon_delete_item:before{content:"\f014"}.o_icon_delete:before{content:"\f056";color:#A87E7E}.o_icon_details:before{content:"\f0eb"}.o_icon_dev:before{content:"\f188"}.o_icon_download:before{content:"\f019"}.o_icon_edit:before{content:"\f044"}.o_icon_edit_file:before{content:"\f044"}.o_icon_edit_metadata:before{content:"\f013"}.o_icon_enlarge:before{content:"\f00e"}.o_icon_eportfolio_add:before{content:"\f12e"}.o_icon_error:before{content:"\f06a";color:#d9534f}.o_icon_expenditure:before{content:"\f017"}.o_icon_external_link:before{content:"\f08e"}.o_icon_failed:before{content:"\f057"}.o_icon_filter:before{content:"\f0b0"}.o_icon_group:before{content:"\f0c0"}.o_icon_header:before{content:"\f1dc"}.o_icon_help:before{content:"\f059";cursor:help}.o_icon_home:before{content:"\f015"}.o_icon_impress:before{content:"\f05a"}.o_icon_important:before{content:"\f071";color:#f0ad4e}.o_icon_import:before{content:"\f093"}.o_icon_info:before{content:"\f05a";color:#5bc0de}.o_icon_info_msg:before{content:"\f06a";color:#d9534f}.o_icon_inline_editable:before{content:"\f044"}.o_icon_institution:before{content:"\f19c"}.o_icon_italic:before{content:"\f033"}.o_icon_language:before{content:"\f0ac"}.o_icon_link:before{content:"\f0c1"}.o_icon_link_extern:before{content:"\f08e"}.o_icon_list:before{content:"\f03a"}.o_icon_list_num :before{content:"\f0cb"}.o_icon_lifecycle:before{content:"\f073"}.o_icon_locked:before{content:"\f023"}.o_icon_login:before{content:"\f090"}.o_icon_logout:before{content:"\f08b"}.o_icon_mandatory:before{content:"\f069";color:#f0ad4e}.o_icon_managed:before{content:"\f079";color:#777}.o_icon_mail:before{content:"\f003"}.o_icon_math:before{content:"\f198"}.o_icon_membersmanagement:before{content:"\f0c0"}.o_icon_menuhandel:before{content:"\f0c9"}.o_icon_message:before{content:"\f0e0"}.o_icon_move:before{content:"\f047"}.o_icon_move_down:before{content:"\f103"}.o_icon_move_left:before{content:"\f100"}.o_icon_move_right:before{content:"\f101"}.o_icon_move_up:before{content:"\f102"}.o_icon_new:before{content:"\f069";color:#5cb85c}.o_icon_new_document:before{content:"\f15c"}.o_icon_new_folder:before{content:"\f07b"}.o_icon_news:before{content:"\f05a"}.o_icon_next:before{content:"\f0a9"}.o_icon_next_page:before{content:"\f101"}.o_icon_notes:before{content:"\f040"}.o_icon_notification:before{content:"\f09e"}.o_icon_open_tree:before{content:"\f0da"}.o_icon_open_togglebox:before,.o_togglebox_wrapper .o_opener i:before{content:"\f0da"}.o_icon_openolat:before,.o_icon_provider_olat:before{content:"\221E";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold}.o_icon_passed:before{content:"\f058"}.o_icon_password:before{content:"\f023"}.o_icon_post:before{content:"\f0e5"}.o_icon_preview:before{content:"\f06e"}.o_icon_previous:before{content:"\f0a8"}.o_icon_previous_page:before{content:"\f100"}.o_icon_print:before{content:"\f02f"}.o_icon_private:before{content:"\f02f"}.o_icon_provider_guest:before{content:"\f1ae"}.o_icon_provider_ldap:before{content:"\f19c"}.o_icon_provider_shibboleth:before{content:"\f19c"}.o_icon_publish:before{content:"\f064"}.o_icon_qrcode:before{content:"\f029"}.o_icon_rating_on:before,.o_rating .o_rating_items.o_enabled .o_icon:hover:before{content:"\f005"}.o_icon_rating_off:before{content:"\f006"}.o_icon_read:before{content:"\f10c"}.o_icon_readonly:before{content:"\f044";color:red}.o_icon_readwrite:before{content:"\f044"}.o_icon_recycle:before{content:"\f1b8"}.o_icon_refresh:before{content:"\f021"}.o_icon_remove:before{content:"\f00d"}.o_icon_reply:before{content:"\f112"}.o_icon_reply_with_quote:before{content:"\f122"}.o_icon_rss:before{content:"\f09e"}.o_icon_rss_unsubscribe:before{content:"\f09e";color:#996633}.o_icon_search:before{content:"\f002"}.o_icon_settings:before{content:"\f085"}.o_icon_share:before{content:"\f064"}.o_icon_show_more:before{content:"\f150"}.o_icon_show_less:before{content:"\f151"}.o_icon_spacer:before{content:"\f07e"}.o_icon_split:before{content:"\f127"}.o_icon_sort:before{content:"\f0dc"}.o_icon_sort_asc:before{content:"\f0de"}.o_icon_sort_desc:before{content:"\f0dd"}.o_icon_sort_menu:before{content:"\f160"}.o_icon_start:before{content:"\f054"}.o_icon_status_available:before{content:"\f111";color:#006633}.o_icon_status_chat:before{content:"\f075"}.o_icon_status_dnd:before{content:"\f192";color:#CCCC33}.o_icon_status_unavailable:before{content:"\f05c";color:#996633}.o_icon_statistics_tool:before{content:"\f080"}.o_icon_table:before{content:"\f0ce"}.o_icon_table_large:before{content:"\f009"}.o_icon_timelimit:before{content:"\f1e2"}.o_icon_toggle:before{content:"\f111"}.o_icon_to_read:before{content:"\f111"}.o_icon_tool:before{content:"\f013"}.o_icon_tools:before{content:"\f0ad"}.o_icon_top:before{content:"\f077"}.o_icon_user:before{content:"\f007"}.o_icon_user_vip:before{content:"\f19d"}.o_icon_user_anonymous:before{content:"\f128"}.o_icon_upload:before{content:"\f093"}.o_icon_version:before{content:"\f1da"}.o_icon_video:before{content:"\f008"}.o_icon_warn:before{content:"\f071";color:#f0ad4e}.o_icon_wizard:before{content:"\f0d0"}.o_CourseModule_icon:before,.o_course_icon:before{content:"\f1b2"}.o_EPStructuredMapTemplate_icon:before{content:"\f12e"}.o_FileResource-BLOG_icon:before{content:"\f0a1"}.o_FileResource-IMSCP_icon:before{content:"\f187"}.o_FileResource-PODCAST_icon:before{content:"\f03d"}.o_FileResource-SHAREDFOLDER:before{content:"\f08e"}.o_FileResource-SCORMCP_icon:before{content:"\f187"}.o_FileResource-SURVEY_icon:before{content:"\f11a"}.o_FileResource-TEST_icon:before{content:"\f044"}.o_FileResource-WIKI_icon:before{content:"\f0ac"}.o_FileResource-SHAREDFOLDER_icon:before{content:"\f115"}.o_FileResource-GLOSSARY_icon:before{content:"\f19d"}.o_FileResource-PDF_icon:before{content:"\f1c1"}.o_FileResource-XLS_icon:before{content:"\f1c3"}.o_FileResource-PPT_icon:before{content:"\f1c4"}.o_FileResource-DOC_icon:before{content:"\f1c2"}.o_FileResource-ANIM_icon:before{content:"\f1c8"}.o_FileResource-IMAGE_icon:before{content:"\f1c5"}.o_FileResource-SOUND_icon:before{content:"\f1c7"}.o_FileResource-MOVIE_icon:before{content:"\f1c8"}.o_FileResource-FILE_icon:before{content:"\f016"}.o_portlet_infomsg_icon:before{content:"\f05a"}.o_portlet_quickstart_icon:before{content:"\f1d9"}.o_portlet_bookmark_icon:before{content:"\f02e"}.o_portlet_groups_icon:before{content:"\f0c0"}.o_portlet_notes_icon:before{content:"\f040"}.o_portlet_noti_icon:before{content:"\f09e"}.o_portlet_eff_icon:before{content:"\f0a3"}.o_portlet_repository_student_icon:before{content:"\f1b3"}.o_portlet_repository_teacher_icon:before{content:"\f19d"}.o_portlet_iframe_icon:before{content:"\f005"}.o_portlet_sysinfo_icon:before{content:"\f0e4"}.o_portlet_dyk_icon:before{content:"\f0eb"}.o_portlet_infomessages_icon:before{content:"\f0e5"}.o_portlet_cal_icon:before{content:"\f073"}.o_portlet_institutions_icon:before{content:"\f19c"}.o_portlet_links_icon:before{content:"\f0c1"}.o_portlet_shibboleth_icon:before{content:"\f090"}.o_icon_qpool:before{content:"\f19c"}.o_icon_pool_private:before{content:"\f00d"}.o_icon_pool_public:before{content:"\f00c"}.o_icon_pool_my_items:before{content:"\f007"}.o_icon_pool_favorits:before{content:"\f02e"}.o_icon_pool_collection:before{content:"\f03a"}.o_icon_pool_pool:before{content:"\f1e1"}.o_icon_pool_share:before{content:"\f0c0"}.o_forum_message_icon:before{content:"\f0e5"}.o_calendar_icon:before{content:"\f073"}.o_forum_status_thread_icon:before{content:"\f0e6"}.o_forum_status_sticky_closed_icon:before{content:"\f05e"}.o_forum_status_sticky_icon:before{content:"\f086"}.o_forum_status_closed_icon:before{content:"\f05e";color:#a94442}.o_forum_status_opened_icon:before{content:"\f05e";color:#3c763d}.o_forum_status_hidden_icon:before{content:"\f070";color:#a94442}.o_forum_status_visible_icon:before{content:"\f06e";color:#3c763d}.o_mi_qtisc:before{content:"\f192"}.o_mi_qtimc:before{content:"\f046"}.o_mi_qtikprim:before{content:"\f14a"}.o_mi_qtifib:before{content:"\f141"}.o_mi_qtiessay:before{content:"\f036"}.o_black_led:before{content:"\f111";color:#428bca}.o_green_led:before{content:"\f111";color:#5cb85c}.o_yellow_led:before{content:"\f111";color:#f0ad4e}.o_red_led:before{content:"\f111";color:#d9534f}.o_ac_token_icon:before{content:"\f084"}.o_ac_free_icon:before{content:"\f06b"}.o_ac_group_icon:before{content:"\f0c0"}.o_ac_membersonly_icon:before{content:"\f023"}.o_ac_paypal_icon:before{content:"\f09d"}.o_ac_status_canceled_icon:before{content:"\f068";color:#f0ad4e}.o_ac_status_error_icon:before{content:"\f00d";color:#d9534f}.o_ac_status_new_icon:before{content:"\f069";color:#428bca}.o_ac_status_succes_icon:before{content:"\f00c";color:#5cb85c}.o_ac_status_waiting_icon:before{content:"\f017";color:#428bca}.o_ac_order_status_new_icon:before{content:"\f069";color:#428bca}.o_ac_order_status_prepayment_icon:before{content:"\f0d6";color:#5bc0de}.o_ac_order_status_payed_icon:before{content:"\f00c";color:#5cb85c}.o_ac_order_status_canceled_icon:before{content:"\f068";color:#f0ad4e}.o_ac_order_status_error_icon:before{content:"\f00d";color:#d9534f}.o_ac_order_status_warning_icon:before{content:"\f12a";color:#f0ad4e}.o_filetype_file:before,.o_filetype_ico:before{content:"\f016"}.o_filetype_folder:before{content:"\f114"}.o_filetype_folder_open:before{content:"\f115"}.o_filetype_zip:before,.o_filetype_gz:before,.o_filetype_tar:before,.o_filetype_tgz:before{content:"\f1c6"}.o_filetype_css:before,.o_filetype_js:before,.o_filetype_java:before,.o_filetype_numbers:before,.o_filetype_ods:before,.o_filetype_xml:before,.o_filetype_xsl:before{content:"\f1c9"}.o_filetype_bat_icon:before,.o_filetype_bat:before,.o_filetype_exe:before,.o_filetype_app:before,.o_filetype_sh:before{content:"\f1c9"}.o_filetype_xls:before,.o_filetype_xlsx:before{content:"\f1c3"}.o_filetype_png:before,.o_filetype_tiff:before,.o_filetype_webp:before,.o_filetype_gif:before,.o_filetype_ico:before,.o_filetype_jpeg:before,.o_filetype_bmp:before,.o_filetype_odg:before,.o_filetype_eps:before,.o_filetype_jpg:before{content:"\f1c5"}.o_filetype_psd:before,.o_filetype_avi:before,.o_filetype_dvi:before,.o_filetype_mp4:before,.o_filetype_m4v:before,.o_filetype_webm:before,.o_filetype_ogg:before,.o_filetype_video:before,.o_filetype_mov:before,.o_filetype_mpeg:before,.o_filetype_mpg:before,.o_filetype_qt:before,.o_filetype_ra:before,.o_filetype_ram:before,.o_filetype_swf:before,.o_filetype_flv:before{content:"\f1c8"}.o_filetype_midi:before,.o_filetype_audio:before,.o_filetype_mp3:before,.o_filetype_m3u:before,.o_filetype_wav:before{content:"\f1c7"}.o_filetype_ps:before,.o_filetype_pdf:before{content:"\f1c1"}.o_filetype_key:before,.o_filetype_odp:before,.o_filetype_ppt:before,.o_filetype_pptx:before{content:"\f1c4"}.o_filetype_odf:before,.o_filetype_rtf:before,.o_filetype_readme:before,.o_filetype_README:before,.o_filetype_log:before,.o_filetype_txt:before,.o_filetype_htm:before,.o_filetype_html:before{content:"\f0f6"}.o_filetype_odt:before,.o_filetype_pages:before,.o_filetype_doc:before,.o_filetype_docx:before{content:"\f1c2"}.o_icon_apple:before{content:"\f179"}.o_icon_facebook:before{content:"\f082"}.o_icon_twitter:before{content:"\f081"}.o_icon_google:before{content:"\f0d4"}.o_icon_delicious:before{content:"\f1a5"}.o_icon_digg:before{content:"\f1a6"}.o_icon_mailto:before{content:"\f199"}.o_icon_link:before{content:"\f0c1"}.o_icon_yahoo:before{content:"\f19e"}a.o_icon:hover,a.o_icon:focus{text-decoration:none}img.o_emoticons_angel{background:url(../light/images/emoticons/smiley-angel.png);width:16px;height:16px}img.o_emoticons_angry{background:url(../light/images/emoticons/smiley-mad.png);width:16px;height:16px}img.o_emoticons_blushing{background:url(../light/images/emoticons/smiley-red.png);width:16px;height:16px}img.o_emoticons_confused{background:url(../light/images/emoticons/smiley-confuse.png);width:16px;height:16px}img.o_emoticons_cool{background:url(../light/images/emoticons/smiley-cool.png);width:16px;height:16px}img.o_emoticons_cry{background:url(../light/images/emoticons/smiley-cry.png);width:16px;height:16px}img.o_emoticons_devil{background:url(../light/images/emoticons/smiley-evil.png);width:16px;height:16px}img.o_emoticons_grin{background:url(../light/images/emoticons/smiley-grin.png);width:16px;height:16px}img.o_emoticons_kiss{background:url(../light/images/emoticons/smiley-kiss.png);width:16px;height:16px}img.o_emoticons_ohoh{background:url(../light/images/emoticons/smiley-eek.png);width:16px;height:16px}img.o_emoticons_sad{background:url(../light/images/emoticons/smiley-sad.png);width:16px;height:16px}img.o_emoticons_sick{background:url(../light/images/emoticons/smiley-sad-blue.png);width:16px;height:16px}img.o_emoticons_smile{background:url(../light/images/emoticons/smiley.png);width:16px;height:16px}img.o_emoticons_tongue{background:url(../light/images/emoticons/smiley-razz.png);width:16px;height:16px}img.o_emoticons_ugly{background:url(../light/images/emoticons/smiley-money.png);width:16px;height:16px}img.o_emoticons_weird{background:url(../light/images/emoticons/smiley-nerd.png);width:16px;height:16px}img.o_emoticons_wink{background:url(../light/images/emoticons/smiley-wink.png);width:16px;height:16px}img.o_emoticons_worried{background:url(../light/images/emoticons/smiley-roll-blue.png);width:16px;height:16px}img.o_emoticons_up{background:url(../light/images/emoticons/thumb-up.png);width:16px;height:16px}img.o_emoticons_down{background:url(../light/images/emoticons/thumb.png);width:16px;height:16px}.o_block_bottom,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry,.o_header_with_buttons,.o_search_result{margin-bottom:1em}.o_block_top,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry{margin-top:1em}.o_block_large_bottom,.o_block_large,.o_block_with_datecomp,.o_portlet{margin-bottom:2em}.o_block_large_top,.o_block_large,.o_block_with_datecomp,.o_portlet{margin-top:2em}.o_scrollblock{overflow-x:auto;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_button_group{text-align:center}.o_button_group a,.o_button_group input,.o_button_group button,.o_button_group .btn-group{margin-right:5px;margin-bottom:0.5em}.o_button_group a:last-child,.o_button_group input:last-child,.o_button_group button:last-child,.o_button_group .btn-group:last-child{margin-right:0}.o_button_group .btn-group a,.o_button_group .btn-group input,.o_button_group .btn-group button{margin-right:0;margin-bottom:0}.o_button_group .dropdown-menu{text-align:left}.o_button_group_left{text-align:left}.o_button_group_right{text-align:right}.o_button_group_top{margin-top:0}.o_header_with_buttons:before,.o_header_with_buttons:after{content:" ";display:table}.o_header_with_buttons:after{clear:both}.o_header_with_buttons h3,.o_header_with_buttons h4,.o_header_with_buttons .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_header_with_buttons h2{display:inline-block}.o_header_with_buttons .o_button_group{margin-top:10px;margin-bottom:0;float:right}.o_xsmall{font-size:12px}.o_small,.o_comments .o_comment_wrapper h5,.o_comments .o_comment_wrapper .o_comment,.o_bc_meta,.tooltip,.o_noti,.o_block_with_datecomp .o_meta,.o_togglebox_wrapper div.o_togglebox_content .o_hide,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label,.o_course_run .o_toc .o_entry{font-size:12px}.o_large{font-size:18px}.o_xlarge{font-size:18px}.o_disabled{color:#777 !important;cursor:default}.o_disabled:hover{color:#777 !important}.o_dimmed{opacity:0.4;filter:alpha(opacity=40)}.o_selected{font-weight:bold}.o_deleted{text-decoration:line-through}.o_ochre{color:#c8a959}.o_blue{color:#12223F}.o_undecorated:hover,.o_undecorated:focus,.o_disabled:hover,.o_withEllipsis .o_morelink:hover,.o_withEllipsis .o_lesslink:hover,#o_main_wrapper #o_toplink:hover,#o_footer_wrapper #o_footer_container #o_footer_powered a:hover,#o_share a:hover,.o_toolbar a:hover,.o_button_toggle:hover,.o_im_message_group .o_im_from:hover,.o_noti .o_label:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover,.o_catalog .o_level .o_meta .o_title a:hover,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover,.o_repo_details .o_social .o_comments:hover,.o_login .o_login_register:hover,.o_disabled:focus,.o_withEllipsis .o_morelink:focus,.o_withEllipsis .o_lesslink:focus,#o_main_wrapper #o_toplink:focus,#o_footer_wrapper #o_footer_container #o_footer_powered a:focus,#o_share a:focus,.o_toolbar a:focus,.o_button_toggle:focus,.o_im_message_group .o_im_from:focus,.o_noti .o_label:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:focus,.o_catalog .o_level .o_meta .o_title a:focus,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:focus,.o_repo_details .o_social .o_comments:focus,.o_login .o_login_register:focus{text-decoration:none}.o_copy_code{overflow-x:auto;overflow-y:auto;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}.o_nowrap{white-space:nowrap}.o_titled_wrapper .o_content{margin-top:20px}.o_video{display:block;width:100% \9;max-width:100%;height:auto}.o_image{display:block;width:100% \9;max-width:100%;height:auto}.o_withEllipsis .o_ellipsis_links{float:right}.o_withEllipsis .o_morelink,.o_withEllipsis .o_lesslink{display:none}.o_withEllipsis.o_hasOverflow .o_morelink{display:block}.o_withEllipsis.o_hasOverflow .o_lesslink{display:none}.o_withEllipsis.o_hasOverflow.o_showOverflow{height:auto !important}.o_withEllipsis.o_hasOverflow.o_showOverflow .o_morelink{display:none}.o_withEllipsis.o_hasOverflow.o_showOverflow .o_lesslink{display:block}html{position:relative;min-height:100%}body{min-height:100%;margin-bottom:70px}#o_main_wrapper{background:#fff;z-index:3}#o_main_wrapper #o_main_container{background:#fff}#o_main_wrapper #o_main_container #o_main_left{float:left;z-index:2;position:relative;background:#fff}#o_main_wrapper #o_main_container #o_main_left #o_main_left_content{padding:0 0 0 15px}#o_main_wrapper #o_main_container #o_main_left #o_main_left_toggle{position:absolute;display:none;right:0;top:70px;margin-right:-30px;font-size:25px;line-height:35px;text-align:center;width:30px;height:35px;z-index:3;border:1px solid #ddd;border-left:none;border-bottom-right-radius:4px;border-top-right-radius:4px;background-color:#fbfbfb;-webkit-box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);color:#428bca}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas{background:#fbfbfb;-webkit-box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);min-width:250px}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas #o_main_left_content{padding:0 0 0 0}#o_main_wrapper #o_main_container #o_main_right{float:right;z-index:2;position:relative;background:inherit}#o_main_wrapper #o_main_container #o_main_right #o_main_right_content{padding:0 15px 0 0}#o_main_wrapper #o_main_container #o_main_center{position:relative;z-index:1;background:inherit}#o_main_wrapper #o_main_container #o_main_center h2:first-child{margin-top:0}@media screen and (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center{margin-left:0 !important}}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:0 15px}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content #o_main_center_content_inner{padding-bottom:15px}#o_main_wrapper #o_toplink{position:absolute;bottom:0;right:15px;text-align:center;z-index:3}@media (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:15px}} +@media print{.hidden-print{display:none !important}}body .modal{position:absolute;overflow:visible}body div.tooltip-inner{max-width:400px}body div.popover{max-width:450px}body .modal-body.alert{border-radius:0}body .progress{margin-bottom:0}.panel-body:nth-child(n+2){border-top:1px solid #ddd}.form-control-feedback{top:10px}.form-horizontal .has-feedback .form-control-feedback{top:10px}@font-face{font-family:'FontAwesome';src:url("../../../font-awesome/fonts/fontawesome-webfont.eot?v=4.1.0");src:url("../../../font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.1.0") format("embedded-opentype"),url("../../../font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0") format("woff"),url("../../../font-awesome/fonts/fontawesome-webfont.ttf?v=4.1.0") format("truetype"),url("../../../font-awesome/fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.o_icon{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.o_icon-lg{font-size:1.33333em;line-height:0.75em;vertical-align:-15%}.o_icon-2x{font-size:2em}.o_icon-3x{font-size:3em}.o_icon-4x{font-size:4em}.o_icon-5x{font-size:5em}.o_icon-fw{width:1.28571em;text-align:center}.o_icon-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.o_icon-ul>li{position:relative}.o_icon-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.o_icon-li.o_icon-lg{left:-1.85714em}.o_icon-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.o_icon.pull-left{margin-right:.3em}.o_icon.pull-right{margin-left:.3em}.o_icon-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.o_icon-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.o_icon-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.o_icon-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.o_icon-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.o_icon-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}.o_icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.o_icon-stack-1x,.o_icon-stack-2x{position:absolute;left:0;width:100%;text-align:center}.o_icon-stack-1x{line-height:inherit}.o_icon-stack-2x{font-size:2em}.o_icon-inverse{color:#fff}.o_icon_accessibility:before{content:"\f193"}.o_icon_actions:before{content:"\f085"}.o_icon_archive_tool:before{content:"\f019"}.o_icon_assessment_tool:before{content:"\f091"}.o_icon_attempt_limit:before{content:"\f021"}.o_icon_add:before{content:"\f055"}.o_icon_add_search:before{content:"\f00e"}.o_icon_audio:before{content:"\f028"}.o_icon_back:before{content:"\f053"}.o_icon_back_history:before{content:"\f1da"}.o_icon_bold:before{content:"\f032"}.o_icon_booking:before{content:"\f07a"}.o_icon_bookmark:before{content:"\f02e";color:#996633}.o_icon_bookmark_add:before{content:"\f097"}.o_icon_bookmark_header:before{content:"\f02e"}.o_icon_browse:before{content:"\f00e"}.o_icon_browsercheck:before{content:"\f164"}.o_icon_busy:before{content:"\f110"}.o_icon_calendar:before{content:"\f073"}.o_icon_calendar_enabled:before{content:"\f05d"}.o_icon_calendar_disabled:before{content:"\f10c"}.o_icon_calendar:before{content:"\f073"}.o_icon_caret:before{content:"\f0d7"}.o_icon_catalog:before{content:"\f0e8"}.o_icon_certificate:before{content:"\f0a3"}.o_icon_chat:before{content:"\f0e5"}.o_icon_check:before{content:"\f00c"}.o_icon_checkbox:before{content:"\f096"}.o_icon_checkbox_checked:before{content:"\f14a"}.o_icon_cleanup:before{content:"\f0f9"}.o_icon_close:before{content:"\f00d"}.o_icon_close_resource:before{content:"\f011"}.o_icon_close_tab:before{content:"\f00d"}.o_icon_close_tool:before{content:"\f00d"}.o_icon_close_tree:before{content:"\f0d7"}.o_icon_close_togglebox:before,.o_togglebox_wrapper .o_opener.o_in i:before{content:"\f0d7"}.o_icon_code:before{content:"\f121"}.o_icon_color_picker:before{content:"\f043"}.o_icon_copy:before{content:"\f0c5"}.o_icon_courseareas:before{content:"\f1db"}.o_icon_coursedb:before{content:"\f1c0"}.o_icon_courseeditor:before{content:"\f044"}.o_icon_coursefolder:before{content:"\f114"}.o_icon_courserun:before{content:"\f1b2"}.o_icon_comments:before{content:"\f086"}.o_icon_comments_none:before{content:"\f0e5"}.o_icon_content_popup:before{content:"\f08e"}.o_icon_customize:before{content:"\f013"}.o_icon_delete_item:before{content:"\f014"}.o_icon_delete:before{content:"\f056";color:#A87E7E}.o_icon_details:before{content:"\f0eb"}.o_icon_dev:before{content:"\f188"}.o_icon_disabled:before{content:"\f10c"}.o_icon_download:before{content:"\f019"}.o_icon_edit:before{content:"\f044"}.o_icon_edit_file:before{content:"\f044"}.o_icon_edit_metadata:before{content:"\f013"}.o_icon_enabled:before{content:"\f111"}.o_icon_enlarge:before{content:"\f00e"}.o_icon_eportfolio_add:before{content:"\f12e"}.o_icon_error:before{content:"\f06a";color:#d9534f}.o_icon_expenditure:before{content:"\f017"}.o_icon_external_link:before{content:"\f08e"}.o_icon_failed:before{content:"\f057"}.o_icon_filter:before{content:"\f0b0"}.o_icon_group:before{content:"\f0c0"}.o_icon_header:before{content:"\f1dc"}.o_icon_help:before{content:"\f059";cursor:help}.o_icon_home:before{content:"\f015"}.o_icon_impress:before{content:"\f05a"}.o_icon_important:before{content:"\f071";color:#f0ad4e}.o_icon_import:before{content:"\f093"}.o_icon_info:before{content:"\f05a";color:#5bc0de}.o_icon_info_msg:before{content:"\f06a";color:#d9534f}.o_icon_inline_editable:before{content:"\f044"}.o_icon_institution:before{content:"\f19c"}.o_icon_italic:before{content:"\f033"}.o_icon_language:before{content:"\f0ac"}.o_icon_link:before{content:"\f0c1"}.o_icon_link_extern:before{content:"\f08e"}.o_icon_list:before{content:"\f03a"}.o_icon_list_num :before{content:"\f0cb"}.o_icon_lifecycle:before{content:"\f073"}.o_icon_locked:before{content:"\f023"}.o_icon_login:before{content:"\f090"}.o_icon_logout:before{content:"\f08b"}.o_icon_mandatory:before{content:"\f069";color:#f0ad4e}.o_icon_managed:before{content:"\f079";color:#777}.o_icon_mail:before{content:"\f003"}.o_icon_math:before{content:"\f198"}.o_icon_membersmanagement:before{content:"\f0c0"}.o_icon_menuhandel:before{content:"\f0c9"}.o_icon_message:before{content:"\f0e0"}.o_icon_move:before{content:"\f047"}.o_icon_move_down:before{content:"\f103"}.o_icon_move_left:before{content:"\f100"}.o_icon_move_right:before{content:"\f101"}.o_icon_move_up:before{content:"\f102"}.o_icon_new:before{content:"\f069";color:#5cb85c}.o_icon_new_document:before{content:"\f15c"}.o_icon_new_folder:before{content:"\f07b"}.o_icon_news:before{content:"\f05a"}.o_icon_next:before{content:"\f0a9"}.o_icon_next_page:before{content:"\f101"}.o_icon_notes:before{content:"\f040"}.o_icon_notification:before{content:"\f09e"}.o_icon_open_tree:before{content:"\f0da"}.o_icon_open_togglebox:before,.o_togglebox_wrapper .o_opener i:before{content:"\f0da"}.o_icon_openolat:before,.o_icon_provider_olat:before{content:"\221E";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold}.o_icon_passed:before{content:"\f058"}.o_icon_password:before{content:"\f023"}.o_icon_post:before{content:"\f0e5"}.o_icon_preview:before{content:"\f06e"}.o_icon_previous:before{content:"\f0a8"}.o_icon_previous_page:before{content:"\f100"}.o_icon_print:before{content:"\f02f"}.o_icon_private:before{content:"\f02f"}.o_icon_provider_guest:before{content:"\f1ae"}.o_icon_provider_ldap:before{content:"\f19c"}.o_icon_provider_shibboleth:before{content:"\f19c"}.o_icon_publish:before{content:"\f064"}.o_icon_qrcode:before{content:"\f029"}.o_icon_rating_on:before,.o_rating .o_rating_items.o_enabled .o_icon:hover:before{content:"\f005"}.o_icon_rating_off:before{content:"\f006"}.o_icon_read:before{content:"\f10c"}.o_icon_readonly:before{content:"\f044";color:red}.o_icon_readwrite:before{content:"\f044"}.o_icon_recycle:before{content:"\f1b8"}.o_icon_refresh:before{content:"\f021"}.o_icon_remove:before{content:"\f00d"}.o_icon_reply:before{content:"\f112"}.o_icon_reply_with_quote:before{content:"\f122"}.o_icon_rss:before{content:"\f09e"}.o_icon_rss_unsubscribe:before{content:"\f09e";color:#996633}.o_icon_search:before{content:"\f002"}.o_icon_settings:before{content:"\f085"}.o_icon_share:before{content:"\f064"}.o_icon_show_more:before{content:"\f150"}.o_icon_show_less:before{content:"\f151"}.o_icon_spacer:before{content:"\f07e"}.o_icon_split:before{content:"\f127"}.o_icon_sort:before{content:"\f0dc"}.o_icon_sort_asc:before{content:"\f0de"}.o_icon_sort_desc:before{content:"\f0dd"}.o_icon_sort_menu:before{content:"\f160"}.o_icon_start:before{content:"\f054"}.o_icon_status_available:before{content:"\f111";color:#006633}.o_icon_status_chat:before{content:"\f075"}.o_icon_status_dnd:before{content:"\f192";color:#CCCC33}.o_icon_status_unavailable:before{content:"\f05c";color:#996633}.o_icon_statistics_tool:before{content:"\f080"}.o_icon_table:before{content:"\f0ce"}.o_icon_table_large:before{content:"\f009"}.o_icon_timelimit:before{content:"\f1e2"}.o_icon_toggle:before{content:"\f111"}.o_icon_to_read:before{content:"\f111"}.o_icon_tool:before{content:"\f013"}.o_icon_tools:before{content:"\f0ad"}.o_icon_top:before{content:"\f077"}.o_icon_translation_item:before{content:"\f1c9"}.o_icon_translation_package:before{content:"\f115"}.o_icon_user:before{content:"\f007"}.o_icon_user_vip:before{content:"\f19d"}.o_icon_user_anonymous:before{content:"\f128"}.o_icon_upload:before{content:"\f093"}.o_icon_version:before{content:"\f1da"}.o_icon_video:before{content:"\f008"}.o_icon_warn:before{content:"\f071";color:#f0ad4e}.o_icon_wizard:before{content:"\f0d0"}.o_CourseModule_icon:before,.o_course_icon:before{content:"\f1b2"}.o_EPStructuredMapTemplate_icon:before{content:"\f12e"}.o_FileResource-BLOG_icon:before{content:"\f0a1"}.o_FileResource-IMSCP_icon:before{content:"\f187"}.o_FileResource-PODCAST_icon:before{content:"\f03d"}.o_FileResource-SHAREDFOLDER:before{content:"\f08e"}.o_FileResource-SCORMCP_icon:before{content:"\f187"}.o_FileResource-SURVEY_icon:before{content:"\f11a"}.o_FileResource-TEST_icon:before{content:"\f044"}.o_FileResource-WIKI_icon:before{content:"\f0ac"}.o_FileResource-SHAREDFOLDER_icon:before{content:"\f115"}.o_FileResource-GLOSSARY_icon:before{content:"\f19d"}.o_FileResource-PDF_icon:before{content:"\f1c1"}.o_FileResource-XLS_icon:before{content:"\f1c3"}.o_FileResource-PPT_icon:before{content:"\f1c4"}.o_FileResource-DOC_icon:before{content:"\f1c2"}.o_FileResource-ANIM_icon:before{content:"\f1c8"}.o_FileResource-IMAGE_icon:before{content:"\f1c5"}.o_FileResource-SOUND_icon:before{content:"\f1c7"}.o_FileResource-MOVIE_icon:before{content:"\f1c8"}.o_FileResource-FILE_icon:before{content:"\f016"}.o_portlet_infomsg_icon:before{content:"\f05a"}.o_portlet_quickstart_icon:before{content:"\f1d9"}.o_portlet_bookmark_icon:before{content:"\f02e"}.o_portlet_groups_icon:before{content:"\f0c0"}.o_portlet_notes_icon:before{content:"\f040"}.o_portlet_noti_icon:before{content:"\f09e"}.o_portlet_eff_icon:before{content:"\f0a3"}.o_portlet_repository_student_icon:before{content:"\f1b3"}.o_portlet_repository_teacher_icon:before{content:"\f19d"}.o_portlet_iframe_icon:before{content:"\f005"}.o_portlet_sysinfo_icon:before{content:"\f0e4"}.o_portlet_dyk_icon:before{content:"\f0eb"}.o_portlet_infomessages_icon:before{content:"\f0e5"}.o_portlet_cal_icon:before{content:"\f073"}.o_portlet_institutions_icon:before{content:"\f19c"}.o_portlet_links_icon:before{content:"\f0c1"}.o_portlet_shibboleth_icon:before{content:"\f090"}.o_icon_qpool:before{content:"\f19c"}.o_icon_pool_private:before{content:"\f00d"}.o_icon_pool_public:before{content:"\f00c"}.o_icon_pool_my_items:before{content:"\f007"}.o_icon_pool_favorits:before{content:"\f02e"}.o_icon_pool_collection:before{content:"\f03a"}.o_icon_pool_pool:before{content:"\f1e1"}.o_icon_pool_share:before{content:"\f0c0"}.o_forum_message_icon:before{content:"\f0e5"}.o_calendar_icon:before{content:"\f073"}.o_forum_status_thread_icon:before{content:"\f0e6"}.o_forum_status_sticky_closed_icon:before{content:"\f05e"}.o_forum_status_sticky_icon:before{content:"\f086"}.o_forum_status_closed_icon:before{content:"\f05e";color:#a94442}.o_forum_status_opened_icon:before{content:"\f05e";color:#3c763d}.o_forum_status_hidden_icon:before{content:"\f070";color:#a94442}.o_forum_status_visible_icon:before{content:"\f06e";color:#3c763d}.o_mi_qtisc:before{content:"\f192"}.o_mi_qtimc:before{content:"\f046"}.o_mi_qtikprim:before{content:"\f14a"}.o_mi_qtifib:before{content:"\f141"}.o_mi_qtiessay:before{content:"\f036"}.o_black_led:before{content:"\f111";color:#428bca}.o_green_led:before{content:"\f111";color:#5cb85c}.o_yellow_led:before{content:"\f111";color:#f0ad4e}.o_red_led:before{content:"\f111";color:#d9534f}.o_ac_token_icon:before{content:"\f084"}.o_ac_free_icon:before{content:"\f06b"}.o_ac_group_icon:before{content:"\f0c0"}.o_ac_membersonly_icon:before{content:"\f023"}.o_ac_paypal_icon:before{content:"\f09d"}.o_ac_status_canceled_icon:before{content:"\f068";color:#f0ad4e}.o_ac_status_error_icon:before{content:"\f00d";color:#d9534f}.o_ac_status_new_icon:before{content:"\f069";color:#428bca}.o_ac_status_succes_icon:before{content:"\f00c";color:#5cb85c}.o_ac_status_waiting_icon:before{content:"\f017";color:#428bca}.o_ac_order_status_new_icon:before{content:"\f069";color:#428bca}.o_ac_order_status_prepayment_icon:before{content:"\f0d6";color:#5bc0de}.o_ac_order_status_payed_icon:before{content:"\f00c";color:#5cb85c}.o_ac_order_status_canceled_icon:before{content:"\f068";color:#f0ad4e}.o_ac_order_status_error_icon:before{content:"\f00d";color:#d9534f}.o_ac_order_status_warning_icon:before{content:"\f12a";color:#f0ad4e}.o_filetype_file:before,.o_filetype_ico:before{content:"\f016"}.o_filetype_folder:before{content:"\f114"}.o_filetype_folder_open:before{content:"\f115"}.o_filetype_zip:before,.o_filetype_gz:before,.o_filetype_tar:before,.o_filetype_tgz:before{content:"\f1c6"}.o_filetype_css:before,.o_filetype_js:before,.o_filetype_java:before,.o_filetype_numbers:before,.o_filetype_ods:before,.o_filetype_xml:before,.o_filetype_xsl:before{content:"\f1c9"}.o_filetype_bat_icon:before,.o_filetype_bat:before,.o_filetype_exe:before,.o_filetype_app:before,.o_filetype_sh:before{content:"\f1c9"}.o_filetype_xls:before,.o_filetype_xlsx:before{content:"\f1c3"}.o_filetype_png:before,.o_filetype_tiff:before,.o_filetype_webp:before,.o_filetype_gif:before,.o_filetype_ico:before,.o_filetype_jpeg:before,.o_filetype_bmp:before,.o_filetype_odg:before,.o_filetype_eps:before,.o_filetype_jpg:before{content:"\f1c5"}.o_filetype_psd:before,.o_filetype_avi:before,.o_filetype_dvi:before,.o_filetype_mp4:before,.o_filetype_m4v:before,.o_filetype_webm:before,.o_filetype_ogg:before,.o_filetype_video:before,.o_filetype_mov:before,.o_filetype_mpeg:before,.o_filetype_mpg:before,.o_filetype_qt:before,.o_filetype_ra:before,.o_filetype_ram:before,.o_filetype_swf:before,.o_filetype_flv:before{content:"\f1c8"}.o_filetype_midi:before,.o_filetype_audio:before,.o_filetype_mp3:before,.o_filetype_m3u:before,.o_filetype_wav:before{content:"\f1c7"}.o_filetype_ps:before,.o_filetype_pdf:before{content:"\f1c1"}.o_filetype_key:before,.o_filetype_odp:before,.o_filetype_ppt:before,.o_filetype_pptx:before{content:"\f1c4"}.o_filetype_odf:before,.o_filetype_rtf:before,.o_filetype_readme:before,.o_filetype_README:before,.o_filetype_log:before,.o_filetype_txt:before,.o_filetype_htm:before,.o_filetype_html:before{content:"\f0f6"}.o_filetype_odt:before,.o_filetype_pages:before,.o_filetype_doc:before,.o_filetype_docx:before{content:"\f1c2"}.o_icon_apple:before{content:"\f179"}.o_icon_facebook:before{content:"\f082"}.o_icon_twitter:before{content:"\f081"}.o_icon_google:before{content:"\f0d4"}.o_icon_delicious:before{content:"\f1a5"}.o_icon_digg:before{content:"\f1a6"}.o_icon_mailto:before{content:"\f199"}.o_icon_link:before{content:"\f0c1"}.o_icon_yahoo:before{content:"\f19e"}a.o_icon:hover,a.o_icon:focus{text-decoration:none}img.o_emoticons_angel{background:url(../light/images/emoticons/smiley-angel.png);width:16px;height:16px}img.o_emoticons_angry{background:url(../light/images/emoticons/smiley-mad.png);width:16px;height:16px}img.o_emoticons_blushing{background:url(../light/images/emoticons/smiley-red.png);width:16px;height:16px}img.o_emoticons_confused{background:url(../light/images/emoticons/smiley-confuse.png);width:16px;height:16px}img.o_emoticons_cool{background:url(../light/images/emoticons/smiley-cool.png);width:16px;height:16px}img.o_emoticons_cry{background:url(../light/images/emoticons/smiley-cry.png);width:16px;height:16px}img.o_emoticons_devil{background:url(../light/images/emoticons/smiley-evil.png);width:16px;height:16px}img.o_emoticons_grin{background:url(../light/images/emoticons/smiley-grin.png);width:16px;height:16px}img.o_emoticons_kiss{background:url(../light/images/emoticons/smiley-kiss.png);width:16px;height:16px}img.o_emoticons_ohoh{background:url(../light/images/emoticons/smiley-eek.png);width:16px;height:16px}img.o_emoticons_sad{background:url(../light/images/emoticons/smiley-sad.png);width:16px;height:16px}img.o_emoticons_sick{background:url(../light/images/emoticons/smiley-sad-blue.png);width:16px;height:16px}img.o_emoticons_smile{background:url(../light/images/emoticons/smiley.png);width:16px;height:16px}img.o_emoticons_tongue{background:url(../light/images/emoticons/smiley-razz.png);width:16px;height:16px}img.o_emoticons_ugly{background:url(../light/images/emoticons/smiley-money.png);width:16px;height:16px}img.o_emoticons_weird{background:url(../light/images/emoticons/smiley-nerd.png);width:16px;height:16px}img.o_emoticons_wink{background:url(../light/images/emoticons/smiley-wink.png);width:16px;height:16px}img.o_emoticons_worried{background:url(../light/images/emoticons/smiley-roll-blue.png);width:16px;height:16px}img.o_emoticons_up{background:url(../light/images/emoticons/thumb-up.png);width:16px;height:16px}img.o_emoticons_down{background:url(../light/images/emoticons/thumb.png);width:16px;height:16px}.o_block_bottom,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry,.o_header_with_buttons,.o_search_result{margin-bottom:1em}.o_block_top,.o_block,.o_button_group,.o_block_with_datecomp .o_content,.o_course_run .o_toc .o_entry{margin-top:1em}.o_block_large_bottom,.o_block_large,.o_block_with_datecomp,.o_portlet{margin-bottom:2em}.o_block_large_top,.o_block_large,.o_block_with_datecomp,.o_portlet{margin-top:2em}.o_scrollblock{overflow-x:auto;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.o_button_group{text-align:center}.o_button_group a,.o_button_group input,.o_button_group button,.o_button_group .btn-group{margin-right:5px;margin-bottom:0.5em}.o_button_group a:last-child,.o_button_group input:last-child,.o_button_group button:last-child,.o_button_group .btn-group:last-child{margin-right:0}.o_button_group .btn-group a,.o_button_group .btn-group input,.o_button_group .btn-group button{margin-right:0;margin-bottom:0}.o_button_group .dropdown-menu{text-align:left}.o_button_group_left{text-align:left}.o_button_group_right{text-align:right}.o_button_group_top{margin-top:0}.o_header_with_buttons:before,.o_header_with_buttons:after{content:" ";display:table}.o_header_with_buttons:after{clear:both}.o_header_with_buttons h3,.o_header_with_buttons h4,.o_header_with_buttons .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_header_with_buttons h2{display:inline-block}.o_header_with_buttons .o_button_group{margin-top:10px;margin-bottom:0;float:right}.o_xsmall{font-size:12px}.o_small,.o_comments .o_comment_wrapper h5,.o_comments .o_comment_wrapper .o_comment,.o_bc_meta,.tooltip,.o_noti,.o_block_with_datecomp .o_meta,.o_togglebox_wrapper div.o_togglebox_content .o_hide,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label,.o_course_run .o_toc .o_entry{font-size:12px}.o_large{font-size:18px}.o_xlarge{font-size:18px}.o_disabled{color:#777 !important;cursor:default}.o_disabled:hover{color:#777 !important}.o_dimmed{opacity:0.4;filter:alpha(opacity=40)}.o_selected{font-weight:bold}.o_deleted{text-decoration:line-through}.o_ochre{color:#c8a959}.o_blue{color:#12223F}.o_undecorated:hover,.o_undecorated:focus,.o_disabled:hover,.o_withEllipsis .o_morelink:hover,.o_withEllipsis .o_lesslink:hover,#o_main_wrapper #o_toplink:hover,#o_footer_wrapper #o_footer_container #o_footer_powered a:hover,#o_share a:hover,.o_toolbar a:hover,.o_button_toggle:hover,.o_im_message_group .o_im_from:hover,.o_noti .o_label:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover,.o_catalog .o_level .o_meta .o_title a:hover,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover,.o_repo_details .o_social .o_comments:hover,.o_login .o_login_register:hover,.o_disabled:focus,.o_withEllipsis .o_morelink:focus,.o_withEllipsis .o_lesslink:focus,#o_main_wrapper #o_toplink:focus,#o_footer_wrapper #o_footer_container #o_footer_powered a:focus,#o_share a:focus,.o_toolbar a:focus,.o_button_toggle:focus,.o_im_message_group .o_im_from:focus,.o_noti .o_label:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_comments:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:focus,.o_catalog .o_level .o_meta .o_title a:focus,.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:focus,.o_repo_details .o_social .o_comments:focus,.o_login .o_login_register:focus{text-decoration:none}.o_copy_code{overflow-x:auto;overflow-y:auto;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;white-space:nowrap;border-radius:4px}.o_nowrap{white-space:nowrap}.o_titled_wrapper .o_content{margin-top:20px}.o_video{display:block;width:100% \9;max-width:100%;height:auto}.o_image{display:block;width:100% \9;max-width:100%;height:auto}.o_withEllipsis .o_ellipsis_links{float:right}.o_withEllipsis .o_morelink,.o_withEllipsis .o_lesslink{display:none}.o_withEllipsis.o_hasOverflow .o_morelink{display:block}.o_withEllipsis.o_hasOverflow .o_lesslink{display:none}.o_withEllipsis.o_hasOverflow.o_showOverflow{height:auto !important}.o_withEllipsis.o_hasOverflow.o_showOverflow .o_morelink{display:none}.o_withEllipsis.o_hasOverflow.o_showOverflow .o_lesslink{display:block}html{position:relative;min-height:100%}body{min-height:100%;margin-bottom:70px}#o_main_wrapper{background:#fff;z-index:3}#o_main_wrapper #o_main_container{background:#fff}#o_main_wrapper #o_main_container #o_main_left{float:left;z-index:2;position:relative;background:#fff}#o_main_wrapper #o_main_container #o_main_left #o_main_left_content{padding:0 0 0 15px}#o_main_wrapper #o_main_container #o_main_left #o_main_left_toggle{position:absolute;display:none;right:0;top:70px;margin-right:-30px;font-size:25px;line-height:35px;text-align:center;width:30px;height:35px;z-index:3;border:1px solid #ddd;border-left:none;border-bottom-right-radius:4px;border-top-right-radius:4px;background-color:#fbfbfb;-webkit-box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);box-shadow:2px 0px 4px 1px rgba(0,0,0,0.15);color:#428bca}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas{background:#fbfbfb;-webkit-box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);box-shadow:0px 0px 6px 1px rgba(0,0,0,0.2);min-width:250px}#o_main_wrapper #o_main_container #o_main_left.o_offcanvas #o_main_left_content{padding:0 0 0 0}#o_main_wrapper #o_main_container #o_main_right{float:right;z-index:2;position:relative;background:inherit}#o_main_wrapper #o_main_container #o_main_right #o_main_right_content{padding:0 15px 0 0}#o_main_wrapper #o_main_container #o_main_center{position:relative;z-index:1;background:inherit}#o_main_wrapper #o_main_container #o_main_center h2:first-child{margin-top:0}@media screen and (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center{margin-left:0 !important}}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:0 15px}#o_main_wrapper #o_main_container #o_main_center #o_main_center_content #o_main_center_content_inner{padding-bottom:15px}#o_main_wrapper #o_toplink{position:absolute;bottom:0;right:15px;text-align:center;z-index:3}@media (max-width: 767px){#o_main_wrapper #o_main_container #o_main_center #o_main_center_content{padding:15px}} #o_footer_wrapper{position:absolute;bottom:0;width:100%;z-index:3;height:70px;overflow:hidden;background-color:#f5f5f5;color:#999;line-height:16px;font-size:12px}#o_footer_wrapper a{color:#999}#o_footer_wrapper a:hover{color:#000}#o_footer_wrapper #o_footer_container{position:relative;padding-top:10px;min-height:70px;background:#f5f5f5}#o_footer_wrapper #o_footer_container #o_footer_user #o_counter{white-space:nowrap}#o_footer_wrapper #o_footer_container #o_footer_user #o_username{white-space:nowrap;margin-right:1em}#o_footer_wrapper #o_footer_container #o_footer_version{position:absolute;right:15px;top:10px;text-align:right}@media (max-width: 767px){#o_footer_wrapper #o_footer_container #o_footer_version{padding-top:10px;text-align:left}}#o_footer_wrapper #o_footer_container #o_footer_powered{position:absolute;top:30px;right:15px}#o_footer_wrapper #o_footer_container #o_footer_powered img{opacity:0.6;filter:alpha(opacity=60)}#o_footer_wrapper #o_footer_container #o_footer_powered img:hover{opacity:1;filter:alpha(opacity=100)}@media (max-width: 767px){#o_footer_wrapper #o_footer_container #o_counter,#o_footer_wrapper #o_footer_container #o_footer_version{display:none}#o_footer_wrapper #o_footer_container #o_footer_powered{top:10px}#o_footer_wrapper #o_footer_container #o_footer_powered a:after{content:"\221E";font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;font-size:14px}#o_footer_wrapper #o_footer_container #o_footer_powered img{display:none}} #o_share{margin-top:10px;font-size:14px}#o_share a{margin:0 3px 0 0;opacity:0.6;filter:alpha(opacity=60)}#o_share a:hover{opacity:1;filter:alpha(opacity=100)}#o_navbar_wrapper{z-index:4}#o_navbar_wrapper #o_navbar_container{position:relative}#o_navbar_wrapper #o_navbar_container a.o_navbar-brand{font-size:40px;vertical-align:top;font-weight:bold;color:#31729B}#o_navbar_wrapper #o_navbar_container a.o_navbar-brand:after{content:"\221E"}.o_navbar .o_navbar_tabs li a{padding-right:30px}.o_navbar .o_navbar_tabs .o_navbar_tab_close{position:absolute;top:15px;right:0.5em;padding:0;width:1em;height:1em}.o_navbar .o_navbar_tabs .o_navbar_tab_close i:before{color:#A87E7E}.o_navbar .o_navbar_tabs .o_navbar_tab_close:hover i:before{color:#CC0000}.o_navbar #o_navbar_tools_permanent #o_navbar_langchooser{color:#777;padding:7px 15px}.o_navbar #o_navbar_tools_permanent #o_navbar_langchooser form span+div{display:inline}.o_navbar #o_navbar_tools_permanent #o_navbar_help a i{margin-right:0.4em}@media (max-width: 767px){.o_navbar #o_navbar_tools_permanent #o_navbar_impress a span{display:none}}.o_navbar #o_navbar_tools_personal .o_navbar_tool a{padding-right:5px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .dropdown-toggle{padding-left:45px}.o_navbar #o_navbar_tools_personal #o_navbar_my_menu .o_portrait{position:absolute;left:7px;top:10px}.o_navbar #o_navbar_tools_personal .o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas .o_navbar_tab_close{top:10px}.o_navbar.o_navbar-offcanvas .o_navbar_tool{display:none}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a{color:#777}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a:hover,.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a:focus{color:#fff;background-color:transparent}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a.o_logout{color:#d9534f}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a.o_logout:hover,.o_navbar.o_navbar-offcanvas #o_navbar_my_menu a.o_logout:focus{color:#d9534f}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu .dropdown-header{padding-left:15px}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu .dropdown-toggle{display:none}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu .dropdown-menu{box-shadow:none;position:relative;top:0;left:0;display:block;float:none;background-color:#222;color:#777;font-size:14px}.o_navbar.o_navbar-offcanvas #o_navbar_my_menu .dropdown-menu .divider{background:none}.o_navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.o_navbar:before,.o_navbar:after{content:" ";display:table}.o_navbar:after{clear:both}.o_navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.o_navbar-collapse:before,.o_navbar-collapse:after{content:" ";display:table}.o_navbar-collapse:after{clear:both}.o_navbar-collapse.o_collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.o_navbar-offcanvas .o_navbar-collapse{width:auto;border-top:0;box-shadow:none;margin-top:10px;margin-right:-15px;margin-left:-15px}.o_navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.o_navbar-brand:hover,.o_navbar-brand:focus{text-decoration:none}.o_navbar-toggle{position:relative;margin-right:15px;margin-left:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.o_navbar-toggle:focus{outline:none}.o_navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.o_navbar-toggle .icon-bar+.icon-bar{margin-top:4px}#o_navbar_left-toggle{float:left}#o_navbar_right-toggle{float:right}.o_navbar-nav{margin:7.5px -15px}.o_navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}.o_collapse .o_navbar-nav{float:left;margin:0}.o_collapse .o_navbar-nav>li{float:left}.o_collapse .o_navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.o_collapse .o_navbar-nav.o_navbar-right:last-child{margin-right:-15px}.o_collapse.o_navbar-collapse .o_navbar-left{float:left !important}.o_collapse.o_navbar-collapse .o_navbar-right{float:right !important}.o_navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (max-width: 767px){.o_navbar-form .form-group{margin-bottom:5px}} .o_collapse .o_navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.o_collapse .o_navbar-form.o_navbar-right:last-child{margin-right:-15px}.o_navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.o_navbar-fixed-bottom .o_navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.o_navbar-btn{margin-top:8px;margin-bottom:8px}.o_navbar-btn.btn-sm,.btn-group-sm>.o_navbar-btn.btn{margin-top:10px;margin-bottom:10px}.o_navbar-btn.btn-xs,.btn-group-xs>.o_navbar-btn.btn{margin-top:14px;margin-bottom:14px}.o_navbar-text{margin-top:15px;margin-bottom:15px}.o_collapse .o_navbar-text{float:left;margin-left:15px;margin-right:15px}.o_collapse .o_navbar-text.o_navbar-right:last-child{margin-right:0}.o_navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.o_navbar-default .o_navbar-brand{color:#777}.o_navbar-default .o_navbar-brand:hover,.o_navbar-default .o_navbar-brand:focus{color:#5e5e5e;background-color:transparent}.o_navbar-default .o_navbar-text{color:#777}.o_navbar-default .o_navbar-nav>li>a{color:#777}.o_navbar-default .o_navbar-nav>li>a:hover,.o_navbar-default .o_navbar-nav>li>a:focus{color:#333;background-color:transparent}.o_navbar-default .o_navbar-nav>.active>a,.o_navbar-default .o_navbar-nav>.active>a:hover,.o_navbar-default .o_navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar-default .o_navbar-nav>.disabled>a,.o_navbar-default .o_navbar-nav>.disabled>a:hover,.o_navbar-default .o_navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.o_navbar-default .o_navbar-toggle{border-color:#ddd}.o_navbar-default .o_navbar-toggle:hover,.o_navbar-default .o_navbar-toggle:focus{background-color:#ddd}.o_navbar-default .o_navbar-toggle .icon-bar{background-color:#888}.o_navbar-default .o_navbar-collapse,.o_navbar-default .o_navbar-form{border-color:#e7e7e7}.o_navbar-default .o_navbar-nav>.open>a,.o_navbar-default .o_navbar-nav>.open>a:hover,.o_navbar-default .o_navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}.o_navbar-default .o_navbar-link{color:#777}.o_navbar-default .o_navbar-link:hover{color:#333}.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>li>a{color:#777}.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>li>a:hover,.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.active>a,.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.active>a:hover,.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.disabled>a,.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.disabled>a:hover,.o_navbar-offcanvas.o_navbar-default .o_navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}.o_navbar-inverse{background-color:#222;border-color:#090909}.o_navbar-inverse .o_navbar-brand{color:#777}.o_navbar-inverse .o_navbar-brand:hover,.o_navbar-inverse .o_navbar-brand:focus{color:#fff;background-color:transparent}.o_navbar-inverse .o_navbar-text{color:#777}.o_navbar-inverse .o_navbar-nav>li>a{color:#777}.o_navbar-inverse .o_navbar-nav>li>a:hover,.o_navbar-inverse .o_navbar-nav>li>a:focus{color:#fff;background-color:transparent}.o_navbar-inverse .o_navbar-nav>.active>a,.o_navbar-inverse .o_navbar-nav>.active>a:hover,.o_navbar-inverse .o_navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.o_navbar-inverse .o_navbar-nav>.disabled>a,.o_navbar-inverse .o_navbar-nav>.disabled>a:hover,.o_navbar-inverse .o_navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.o_navbar-inverse .o_navbar-toggle{border-color:#333}.o_navbar-inverse .o_navbar-toggle:hover,.o_navbar-inverse .o_navbar-toggle:focus{background-color:#333}.o_navbar-inverse .o_navbar-toggle .icon-bar{background-color:#fff}.o_navbar-inverse .o_navbar-collapse,.o_navbar-inverse .o_navbar-form{border-color:#101010}.o_navbar-inverse .o_navbar-nav>.open>a,.o_navbar-inverse .o_navbar-nav>.open>a:hover,.o_navbar-inverse .o_navbar-nav>.open>a:focus{background-color:#090909;color:#fff}.o_navbar-inverse .o_navbar-nav .o_navbar-link{color:#777}.o_navbar-inverse .o_navbar-nav .o_navbar-link:hover{color:#fff}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu .divider{background-color:#090909}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>li>a{color:#777}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>li>a:hover,.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.active>a,.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.active>a:hover,.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.disabled>a,.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.disabled>a:hover,.o_navbar-inverse .o_navbar-offcanvas.o_navbar-inverse .o_navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}.o_toolbar{position:relative;min-height:37px;margin-bottom:20px;border:1px solid transparent;background-color:#f8f8f8;border-color:#e7e7e7;text-align:center;min-height:37px}.o_toolbar:before,.o_toolbar:after{content:" ";display:table}.o_toolbar:after{clear:both}@media (min-width: 768px){.o_toolbar{border-radius:4px}}.o_toolbar a{color:#777;display:inline-block}.o_toolbar a:hover{color:#333}.o_toolbar .o_breadcrumb{float:left;margin-top:4px;margin-bottom:2px;padding-right:5px;padding-left:5px;padding-top:3px;border-right:1px solid #e7e7e7;margin-right:15px;margin-left:-15px}.o_toolbar .o_breadcrumb i{font-size:18px}.o_toolbar .o_breadcrumb .o_history.o_tool_dropdown i{font-size:14px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_breadcrumb{margin-top:3px;margin-bottom:2px;padding-top:3px}.o_toolbar .o_breadcrumb i{font-size:16px}.o_toolbar .o_breadcrumb .o_history.o_tool_dropdown i{font-size:12px}}@media (max-width: 767px){.o_toolbar .o_breadcrumb{margin-top:6px;margin-bottom:4px;padding-top:0}.o_toolbar .o_breadcrumb i{font-size:20px}.o_toolbar .o_breadcrumb .o_history{display:none}}.o_toolbar .o_tools_close{float:right;position:relative;margin:8px -15px 5px 15px;border-left:1px solid #e7e7e7;padding-right:5px;padding-left:5px;vertical-align:middle}.o_toolbar .o_tools_close a{line-height:37px;color:#d9534f}.o_toolbar .o_tools_close a:hover{color:#b52b27}.o_toolbar .o_tools_close a i{font-size:18px}.o_toolbar .o_tools_close a span{display:none}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tools_close{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tools_close a{line-height:35px}.o_toolbar .o_tools_close a i{font-size:16px}}@media (max-width: 767px){.o_toolbar .o_tools_close{min-height:22px;margin-top:6px;margin-bottom:4px}.o_toolbar .o_tools_close a{line-height:22px}.o_toolbar .o_tools_close a i{font-size:20px}}.o_toolbar .o_tools{margin-top:8px;margin-bottom:5px}.o_toolbar .o_tool,.o_toolbar .o_text{position:relative;margin:0 10px}.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:18px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:block;font-size:12px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{position:absolute;right:50%;top:-24px;margin-right:-12px;font-size:13px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:16px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{font-size:11px}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{top:-22px;margin-right:-11px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool a i,.o_toolbar .o_tool .o_disabled i,.o_toolbar .o_text a i,.o_toolbar .o_text .o_disabled i{font-size:20px}.o_toolbar .o_tool a span,.o_toolbar .o_tool .o_disabled span,.o_toolbar .o_text a span,.o_toolbar .o_text .o_disabled span{display:none}.o_toolbar .o_tool a span.badge,.o_toolbar .o_tool .o_disabled span.badge,.o_toolbar .o_text a span.badge,.o_toolbar .o_text .o_disabled span.badge{display:block;position:relative;top:0;left:0}}.o_toolbar .o_tool .o_chelp,.o_toolbar .o_text .o_chelp{position:relative;top:-1em;vertical-align:top}.o_toolbar .o_tool_dropdown{position:relative}.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:18px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span{display:block;font-size:12px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{position:absolute;right:50%;top:4px;margin-right:-20px;font-size:14px}@media (min-width: 767px) and (max-width: 991px){.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:16px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span,.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{font-size:11px}.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{top:4px;margin-right:-18px;font-size:12px}}@media (max-width: 767px){.o_toolbar .o_tool_dropdown a.dropdown-toggle i{font-size:20px}.o_toolbar .o_tool_dropdown a.dropdown-toggle span,.o_toolbar .o_tool_dropdown a.dropdown-toggle .o_icon_caret{display:none}}.o_toolbar .o_tool_dropdown .dropdown-menu{text-align:left}.o_toolbar .o_tools_left{float:left}.o_toolbar .o_tools_right{float:right}@media (max-width: 991px){.o_toolbar{min-height:35px}.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tool span{max-width:10em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media (max-width: 767px){.o_toolbar{min-height:22px;text-align:left}.o_toolbar .o_tools{margin-top:6px;margin-bottom:4px}.o_toolbar .o_tools .o_chelp{top:0;vertical-align:top}.o_toolbar .o_tools_right,.o_toolbar .o_tools_center{float:left}} -- GitLab