From d9aa69fbb24a53749a8838faf0b51f2ba1011665 Mon Sep 17 00:00:00 2001 From: gnaegi <none@none> Date: Wed, 2 Jul 2014 18:58:55 +0200 Subject: [PATCH] OO-1123 new repo entry publish config form --- .../form/flexible/FormUIFactory.java | 2 +- .../olat/repository/RepositoryManager.java | 9 +- .../_i18n/LocalStrings_de.properties | 7 + .../_i18n/LocalStrings_en.properties | 7 + .../author/AuthoringEditAccessController.java | 4 +- .../AuthoringEntryPublishController.java | 319 ++++++++++++++++++ .../repository/ui/author/PropPupForm.java | 227 ------------- .../ui/AccessConfigurationController.java | 4 +- .../ui/_content/access_configuration.html | 15 +- .../ui/_content/configuration_list.html | 90 +++-- .../static/themes/light/modules/_form.scss | 3 + src/main/webapp/static/themes/light/theme.css | 2 +- 12 files changed, 412 insertions(+), 277 deletions(-) create mode 100644 src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java delete mode 100644 src/main/java/org/olat/repository/ui/author/PropPupForm.java diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/FormUIFactory.java b/src/main/java/org/olat/core/gui/components/form/flexible/FormUIFactory.java index e8efacf9708..ac5f6e13380 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/FormUIFactory.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/FormUIFactory.java @@ -468,7 +468,7 @@ public class FormUIFactory { public SpacerElement addSpacerElement(String name, FormItemContainer formLayout, boolean onlySpaceAndNoLine) { SpacerElement spacer = new SpacerElementImpl(name); if (onlySpaceAndNoLine) { - spacer.setSpacerCssClass("b_form_spacer_noline"); + spacer.setSpacerCssClass("o_spacer_noline"); } formLayout.add(spacer); return spacer; diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java index f0f0a8af890..75377cb1ab6 100644 --- a/src/main/java/org/olat/repository/RepositoryManager.java +++ b/src/main/java/org/olat/repository/RepositoryManager.java @@ -522,13 +522,8 @@ public class RepositoryManager extends BasicManager { public RepositoryEntry setAccess(final RepositoryEntry re, int access, boolean membersOnly ) { RepositoryEntry reloadedRe = loadForUpdate(re); - if(membersOnly) { - reloadedRe.setAccess(RepositoryEntry.ACC_OWNERS); - reloadedRe.setMembersOnly(membersOnly); - } else { - reloadedRe.setAccess(access); - reloadedRe.setMembersOnly(membersOnly); - } + reloadedRe.setAccess(access); + reloadedRe.setMembersOnly(membersOnly); reloadedRe.setLastModified(new Date()); RepositoryEntry updatedRe = dbInstance.getCurrentEntityManager().merge(reloadedRe); dbInstance.commit(); diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index 8a98c11c029..f85273731cd 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -443,6 +443,11 @@ referencableSearch.cmd.adminSearchEntries=Admin. Suchen referencableSearch.preview.close=Vorschau schliessen referencableSearch.title=Referenzierbare Lernressource suchen remove=Entfernen +rentry.publish=Veröffentlichung +rentry.publish.authors=für Autoren +rentry.publish.users=für Benutzer +rentry.publish.course.desc=Definieren Sie in diesem Formular ob andere Autoren diesen Kurs als Vorlage verwenden oder exportieren dürfen und ob der Kurs für die Endbenutzer freigegeben ist. Die Besitzer der Kurses haben jederzeit Zugang zu dem Kurs. +rentry.publish.other.desc=Hinweis: Sie müssen Ressourcen für Benutzer nicht freigeben um diese in einem Kurs verwenden zu können. Es wird empfohlen nur Kurse direkt als Lernressourcen freizugeben und andere Ressourcen stattdessen in Kurse einzubinden. Die Freigabe für Autoren ermöglicht es anderen Autoren Ressourcen von Ihnen zu verwenden ohne selbst Besitzer dieser Ressourcen zu sein. rentry.pic=Bild zur Lernressource (jpg,png,gif) rentry.prop=Einstellungen zur Lernressource rentry.movie=Movie zur Lernressource (mp4,flv) @@ -492,6 +497,8 @@ sf.notconfigured=Kein Ressourcenordner ausgew\u00E4hlt sf.resourcetitle=Gew\u00E4hlter Ressourcenordner start=starten start.with.type={0} starten +status.opened=Aktiv (Offen) +status.closed=Beendet (Geschlossen) details=mehr... book=buchen book.with.type={0} buchen diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties index b5b4455b238..3c74a939591 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties @@ -403,6 +403,11 @@ referencableSearch.preview.close=Close preview referencableSearch.title=Search for referenceable learning resources rentry.pic=Image regarding learning resouces (jpg, png, gif) rentry.prop=Settings regarding learning resources +rentry.publish=Publication +rentry.publish.authors=for authors +rentry.publish.users=for users +rentry.publish.course.desc=In this form you can define if other authors can use your course as a template or export the course as a copy or if the course is accessible to your end users. The owners of the course have access to the course regardless of this configuration. +rentry.publish.other.desc=Hint: you must not publish resource in order to being able to embed them in a course. It is recommended to publish only leanring resources of type course and to embed other resources in courses instead. The publishing for authors allows other authors to embed your resources without the need of being owner of the resource. repo.login=Login repositoryentry.not.existing=This resource is no longer available. resource.error.test.xml=Learning resource could not be added. The qti.xml file could not be parsed. @@ -448,6 +453,8 @@ sf.notconfigured=No resource folder selected sf.resourcetitle=Selected resource folder start=start start.with.type=start {0} +status.opened=Active (opened) +status.closed=Finished (closed) details=more... book=book book.with.type=book {0} diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java index e3fb3d31185..f19d9941ea4 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEditAccessController.java @@ -48,7 +48,7 @@ public class AuthoringEditAccessController extends BasicController { private VelocityContainer editproptabpubVC; - private PropPupForm propPupForm; + private AuthoringEntryPublishController propPupForm; private AccessConfigurationController acCtr; private RepositoryEntry entry; @@ -60,7 +60,7 @@ public class AuthoringEditAccessController extends BasicController { this.entry = entry; editproptabpubVC = createVelocityContainer("editproptabpub"); - propPupForm = new PropPupForm(ureq, wControl, entry); + propPupForm = new AuthoringEntryPublishController(ureq, wControl, entry); listenTo(propPupForm); editproptabpubVC.put("proppupform", propPupForm.getInitialComponent()); diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java new file mode 100644 index 00000000000..330263701a7 --- /dev/null +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java @@ -0,0 +1,319 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.repository.ui.author; + +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.elements.SelectionElement; +import org.olat.core.gui.components.form.flexible.elements.SingleSelection; +import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; +import org.olat.core.gui.components.form.flexible.elements.TextElement; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.form.flexible.impl.FormEvent; +import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.Event; +import org.olat.core.gui.control.WindowControl; +import org.olat.core.util.Util; +import org.olat.course.CourseModule; +import org.olat.fileresource.types.ScormCPFileResource; +import org.olat.ims.qti.fileresource.SurveyFileResource; +import org.olat.ims.qti.fileresource.TestFileResource; +import org.olat.login.LoginModule; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryEntryManagedFlag; +import org.olat.repository.RepositoryService; +import org.olat.repository.handlers.RepositoryHandler; +import org.olat.repository.handlers.RepositoryHandlerFactory; + +/** + * Form controller to configure the access and publish settings of a repository + * entry (OAUG settings). + * + * Initial date: 02.07.2014<br> + * + * @author gnaegi, gnaegi@frentix.com, http://www.frentix.com + * + */ +public class AuthoringEntryPublishController extends FormBasicController { + + private RepositoryEntry entry; + private StaticTextElement resourceName; + private StaticTextElement initialAuthor; + private TextElement type; + private SelectionElement canCopy; + private SelectionElement canReference; + private SelectionElement canDownload; + + private RepositoryHandler handler; + + private SingleSelection authorsSwitch, usersSwitch; + private SingleSelection publishedForUsers; + private FormLayoutContainer authorConfigLayout, userConfigLayout; + + private static final String YES_KEY = "y"; + private static final String NO_KEY = "n"; + private static final String[] yesNoKeys = new String[]{YES_KEY, NO_KEY}; + + private static final String OAU_KEY = "u"; + private static final String OAUG_KEY = "g"; + private static final String MEMBERSONLY_KEY = "m"; + private String[] publishedKeys; + + private static final String OPENED_KEY = "o"; + private static final String CLOSED_KEY = "c"; + private static final String[] statusKeys = new String[]{OPENED_KEY, CLOSED_KEY}; + + + /** + * The details form is initialized with data collected from entry and + * typeName. Handler is looked-up by the given handlerName and not by the + * entry's resourceableType. This is to allow for an entry with no + * resourceable to initialize correctly (c.f. RepositoryAdd workflow). The + * typeName may be null. + */ + public AuthoringEntryPublishController(UserRequest ureq, + WindowControl wControl, RepositoryEntry entry) { + super(ureq, wControl); + setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); + this.entry = entry; + + String typeName = entry.getOlatResource().getResourceableTypeName(); + if (typeName != null) { + handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(typeName); + } + + if (LoginModule.isGuestLoginLinksEnabled()) { + publishedKeys = new String[]{OAU_KEY, OAUG_KEY, MEMBERSONLY_KEY}; + } else { + publishedKeys = new String[]{OAU_KEY, MEMBERSONLY_KEY}; + } + + initForm(ureq); + } + + /** + * @return Resource name filed. + */ + public String getResourceName() { + return resourceName.getValue(); + } + + /** + * @return Author field. + */ + public String getAuthor() { + return initialAuthor.getValue(); + } + + /** + * @return Type field. + */ + public String getType() { + return type.getValue(); + } + + /** + * Return true when 'canCopy' is selected. + */ + public boolean canCopy() { + return canCopy.isSelected(0); + } + + /** + * Return true when 'canReference' is selected. + */ + public boolean canReference() { + return canReference.isSelected(0); + } + + /** + * Return true when 'canDownload' is selected. + */ + public boolean canDownload() { + return canDownload.isSelected(0); + } + + /** + * Return selected access key (ACC_OWNERS, ACC_OWNERS_AUTHORS, ACC_USERS, + * ACC_USERS_GUESTS) + */ + public int getAccess() { + // default only for owners + int access = RepositoryEntry.ACC_OWNERS; + if (authorsSwitch.getSelectedKey().equals(YES_KEY)) { + // raise to author level + access = RepositoryEntry.ACC_OWNERS_AUTHORS; + } + if (usersSwitch.getSelectedKey().equals(YES_KEY)) { + if (publishedForUsers.getSelectedKey().equals(OAU_KEY)) { + // further raise to user level + access = RepositoryEntry.ACC_USERS; + } else if (publishedForUsers.getSelectedKey().equals(OAUG_KEY)) { + // further raise to guest level + access = RepositoryEntry.ACC_USERS_GUESTS; + } + // Members-only is either owner or owner-author level, never user level + } + return access; + } + + public boolean isMembersOnly() { + return (usersSwitch.getSelectedKey().equals(YES_KEY) && publishedForUsers.getSelectedKey().equals(MEMBERSONLY_KEY)); + } + + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, + UserRequest ureq) { + setFormTitle("rentry.publish"); + setFormContextHelp("org.olat.repository", "rep-meta-olatauthorEd.html", "help.hover.rep.detail"); + + + String type = entry.getOlatResource().getResourceableTypeName(); + if (TestFileResource.TYPE_NAME.equals(type) + || SurveyFileResource.TYPE_NAME.equals(type) + || ScormCPFileResource.TYPE_NAME.equals(type)) { + String warning = translate("warn.resource.need.course"); + flc.contextPut("off_warn", warning); + } + if (CourseModule.ORES_TYPE_COURSE.equals(type)) { + setFormDescription("rentry.publish.course.desc"); + } else { + setFormDescription("rentry.publish.other.desc"); + } + + // make configuration read only when managed by external system + final boolean managedSettings = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.settings); + final boolean managedAccess = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.access); + + String[] yesNoValues = new String[]{translate("yes"), translate("no")}; + authorsSwitch = uifactory.addRadiosHorizontal("authorsSwitch", "rentry.publish.authors", formLayout, yesNoKeys, yesNoValues); + authorsSwitch.setEnabled(!managedAccess); + authorsSwitch.addActionListener(FormEvent.ONCHANGE); + authorConfigLayout = FormLayoutContainer.createBareBoneFormLayout("authorConfigLayout", getTranslator()); + formLayout.add(authorConfigLayout); + canReference = uifactory.addCheckboxesVertical("cif_canReference",null, authorConfigLayout, new String[] { YES_KEY }, new String[] { translate("cif.canReference") }, 1); + canReference.setEnabled(!managedSettings); + canCopy = uifactory.addCheckboxesVertical("cif_canCopy", null, authorConfigLayout, new String[] { YES_KEY }, new String[] { translate("cif.canCopy") }, 1); + canCopy.setEnabled(!managedSettings); + canDownload = uifactory.addCheckboxesVertical("cif_canDownload", null, authorConfigLayout, new String[] { YES_KEY }, new String[] { translate("cif.canDownload") }, 1); + canDownload.setEnabled(!managedSettings); + canDownload.setVisible(handler.supportsDownload(entry)); + uifactory.addSpacerElement("authorSpacer", authorConfigLayout, true); + + String[] publishedValues; + if (LoginModule.isGuestLoginLinksEnabled()) { + publishedValues = new String[]{translate("cif.access.users"), translate("cif.access.users_guests"), translate("cif.access.membersonly")}; + } else { + publishedValues = new String[]{translate("cif.access.users"), translate("cif.access.membersonly")}; + } + + usersSwitch = uifactory.addRadiosHorizontal("usersSwitch", "rentry.publish.users", formLayout, yesNoKeys, yesNoValues); + usersSwitch.addActionListener(FormEvent.ONCHANGE); + usersSwitch.setEnabled(!managedAccess); + userConfigLayout = FormLayoutContainer.createBareBoneFormLayout("userConfigLayout", getTranslator()); + formLayout.add(userConfigLayout); + publishedForUsers = uifactory.addDropdownSingleselect("publishedForUsers", null, userConfigLayout, publishedKeys, publishedValues, null); + publishedForUsers.setEnabled(!managedAccess); + uifactory.addSpacerElement("userSpacer", userConfigLayout, true); + + if (!managedAccess || !managedSettings) { + uifactory.addFormSubmitButton("submit", formLayout); + } + + initFormData(); + } + + private void initFormData() { + // init author visibility and flags + canReference.select(YES_KEY, entry.getCanReference()); + canCopy.select(YES_KEY, entry.getCanCopy()); + canDownload.select(YES_KEY, entry.getCanDownload()); + if (entry.getAccess() >= RepositoryEntry.ACC_OWNERS_AUTHORS) { + authorsSwitch.select(YES_KEY, true); + } else { + authorsSwitch.select(NO_KEY, true); + authorConfigLayout.setVisible(false); + } + // init user visibility + if (entry.getAccess() == RepositoryEntry.ACC_USERS) { + publishedForUsers.select(OAU_KEY, true); + usersSwitch.select(YES_KEY, true); + } else if (LoginModule.isGuestLoginLinksEnabled() && entry.getAccess() == RepositoryEntry.ACC_USERS_GUESTS){ + publishedForUsers.select(OAUG_KEY, true); + usersSwitch.select(YES_KEY, true); + } else if (entry.isMembersOnly()) { + publishedForUsers.select(MEMBERSONLY_KEY, true); + usersSwitch.select(YES_KEY, true); + } else { + usersSwitch.select(NO_KEY, true); + userConfigLayout.setVisible(false); + } + + } + private void applyFormBusinessRules() { + if (authorsSwitch.getSelectedKey().equals(YES_KEY)) { + authorConfigLayout.setVisible(true); + } else { + // reset to default + canReference.select(YES_KEY, false); + canCopy.select(YES_KEY, false); + canDownload.select(YES_KEY, false); + authorConfigLayout.setVisible(false); + } + if (usersSwitch.getSelectedKey().equals(YES_KEY)) { + userConfigLayout.setVisible(true); + } else { + // reset to default + publishedForUsers.select(OAU_KEY, true); + if (LoginModule.isGuestLoginLinksEnabled()) { + publishedForUsers.select(OAUG_KEY, false); + } + publishedForUsers.select(MEMBERSONLY_KEY, false); + userConfigLayout.setVisible(false); + } + } + + @Override + protected void formInnerEvent(UserRequest ureq, FormItem source, + FormEvent event) { + super.formInnerEvent(ureq, source, event); + // show and hide fields depending on selection + applyFormBusinessRules(); + } + + @Override + protected void formCancelled(UserRequest ureq) { + fireEvent(ureq, Event.CANCELLED_EVENT); + } + + @Override + protected void formOK(UserRequest ureq) { + fireEvent(ureq, Event.DONE_EVENT); + } + + @Override + protected void doDispose() { + // + } + +} \ No newline at end of file diff --git a/src/main/java/org/olat/repository/ui/author/PropPupForm.java b/src/main/java/org/olat/repository/ui/author/PropPupForm.java deleted file mode 100644 index b6a4dc22839..00000000000 --- a/src/main/java/org/olat/repository/ui/author/PropPupForm.java +++ /dev/null @@ -1,227 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - -package org.olat.repository.ui.author; - -import java.util.ArrayList; -import java.util.List; - -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.components.form.flexible.FormItemContainer; -import org.olat.core.gui.components.form.flexible.elements.SelectionElement; -import org.olat.core.gui.components.form.flexible.elements.SingleSelection; -import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; -import org.olat.core.gui.components.form.flexible.elements.TextElement; -import org.olat.core.gui.components.form.flexible.impl.FormBasicController; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.Event; -import org.olat.core.gui.control.WindowControl; -import org.olat.core.util.Util; -import org.olat.fileresource.types.ScormCPFileResource; -import org.olat.ims.qti.fileresource.SurveyFileResource; -import org.olat.ims.qti.fileresource.TestFileResource; -import org.olat.login.LoginModule; -import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryManagedFlag; -import org.olat.repository.RepositoryService; -import org.olat.repository.handlers.RepositoryHandler; -import org.olat.repository.handlers.RepositoryHandlerFactory; - -/** - * Initial Date: 08.07.2003 - * - * @author Mike Stock - * - * Comment: - * - */ -public class PropPupForm extends FormBasicController { - - private RepositoryEntry entry; - private StaticTextElement resourceName; - private StaticTextElement initialAuthor; - private TextElement type; - private SelectionElement canCopy; - private SelectionElement canReference; - private SelectionElement canDownload; - private SingleSelection access; - - private String[] keys, values; - - private RepositoryHandler handler; - /** - * The details form is initialized with data collected from entry and typeName. Handler is looked-up by - * the given handlerName and not by the entry's resourceableType. This is to allow for an entry with no resourceable - * to initialize correctly (c.f. RepositoryAdd workflow). The typeName may be null. - */ - public PropPupForm(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { - super(ureq, wControl); - setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); - this.entry = entry; - - String typeName = entry.getOlatResource().getResourceableTypeName(); - if (typeName != null) { - handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(typeName); - } - - List<String> keyList = new ArrayList<String>(); - keyList.add(Integer.toString(RepositoryEntry.ACC_OWNERS)); - keyList.add(Integer.toString(RepositoryEntry.ACC_OWNERS_AUTHORS)); - keyList.add(Integer.toString(RepositoryEntry.ACC_USERS)); - if(LoginModule.isGuestLoginLinksEnabled()) { - keyList.add(Integer.toString(RepositoryEntry.ACC_USERS_GUESTS)); - } - keyList.add(RepositoryEntry.MEMBERS_ONLY); - keys = keyList.toArray(new String[keyList.size()]); - - List<String> valueList = new ArrayList<String>(); - valueList.add(translate("cif.access.owners")); - valueList.add(translate("cif.access.owners_authors")); - valueList.add(translate("cif.access.users")); - if(LoginModule.isGuestLoginLinksEnabled()) { - valueList.add(translate("cif.access.users_guests")); - } - valueList.add(translate("cif.access.membersonly")); - values = valueList.toArray(new String[valueList.size()]); - - initForm(ureq); - } - - /** - * @return Resource name filed. - */ - public String getResourceName() { - return resourceName.getValue(); - } - - /** - * @return Author field. - */ - public String getAuthor() { - return initialAuthor.getValue(); - } - - /** - * @return Type field. - */ - public String getType() { - return type.getValue(); - } - - /** - * Return true when 'canCopy' is selected. - */ - public boolean canCopy() { - return canCopy.isSelected(0); - } - - /** - * Return true when 'canReference' is selected. - */ - public boolean canReference() { - return canReference.isSelected(0); - } - - /** - * Return true when 'canDownload' is selected. - */ - public boolean canDownload() { - return canDownload.isSelected(0); - } - - /** - * Return selected access key (ACC_OWNERS, ACC_OWNERS_AUTHORS, - * ACC_USERS, ACC_USERS_GUESTS) - */ - public int getAccess() { - String key = access.getSelectedKey(); - if(RepositoryEntry.MEMBERS_ONLY.equals(key)) { - return RepositoryEntry.ACC_OWNERS; - } - return Integer.parseInt(key); - } - - public boolean isMembersOnly() { - return RepositoryEntry.MEMBERS_ONLY.equals(access.getSelectedKey()); - } - - @Override - protected void formOK(UserRequest ureq) { - fireEvent (ureq, Event.DONE_EVENT); - } - - @Override - protected void formCancelled(UserRequest ureq) { - fireEvent (ureq, Event.CANCELLED_EVENT); - } - - @Override - protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { - setFormTitle("rentry.prop"); - setFormContextHelp("org.olat.repository","rep-meta-olatauthorEd.html", "help.hover.rep.detail"); - - final boolean managedSettings = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.settings); - - String type = entry.getOlatResource().getResourceableTypeName(); - if(TestFileResource.TYPE_NAME.equals(type) || SurveyFileResource.TYPE_NAME.equals(type) - || ScormCPFileResource.TYPE_NAME.equals(type)) { - String warning = translate("warn.resource.need.course"); - flc.contextPut("off_warn", warning); - } - - canCopy = uifactory.addCheckboxesVertical("cif_canCopy", "cif.canCopy", formLayout, new String[]{"xx"}, new String[]{null}, 1); - canCopy.select("xx", entry.getCanCopy()); - canCopy.setEnabled(!managedSettings); - - canReference = uifactory.addCheckboxesVertical("cif_canReference", "cif.canReference", formLayout, new String[]{"xx"}, new String[]{null}, 1); - canReference.select("xx", entry.getCanReference()); - canReference.setEnabled(!managedSettings); - - canDownload = uifactory.addCheckboxesVertical("cif_canDownload", "cif.canDownload", formLayout, new String[]{"xx"}, new String[]{null}, 1); - canDownload.select("xx", entry.getCanDownload()); - canDownload.setVisible(handler != null && handler.supportsDownload(this.entry)); - - access = uifactory.addRadiosVertical("cif_access", "cif.access", formLayout, keys, values); - if(entry.isMembersOnly()) { - access.select(RepositoryEntry.MEMBERS_ONLY, true); - } else if(!LoginModule.isGuestLoginLinksEnabled() && entry.getAccess() == RepositoryEntry.ACC_USERS_GUESTS) { - access.select(Integer.toString(RepositoryEntry.ACC_USERS), true); - } else { - access.select(Integer.toString(entry.getAccess()), true); - } - final boolean managedAccess = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.access); - access.setEnabled(!managedAccess); - - if(!managedAccess || !managedSettings) { - uifactory.addFormSubmitButton("submit", formLayout); - } - } - - @Override - protected void doDispose() { - // - } - -} \ No newline at end of file diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java index b9dd93279fb..d7c9311a1c7 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java +++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java @@ -280,9 +280,9 @@ public class AccessConfigurationController extends FormBasicController { confControllerContainer.add(dateTo.getName(), dateTo); if(editable) { - FormLink delLink = uifactory.addFormLink("del_" + link.getKey(), "delete", null, confControllerContainer, Link.LINK); + FormLink delLink = uifactory.addFormLink("del_" + link.getKey(), "delete", null, confControllerContainer, Link.BUTTON_SMALL); delLink.setUserObject(infos); - delLink.setCustomEnabledLinkCSS("b_with_small_icon_left b_delete_icon"); + delLink.setIconLeftCSS("o_icon o_icon-fw o_icon_delete_item"); confControllerContainer.add(delLink.getName(), delLink); } } diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_content/access_configuration.html b/src/main/java/org/olat/resource/accesscontrol/ui/_content/access_configuration.html index 67d26d2fe3b..6d94b6abaf9 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_content/access_configuration.html +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_content/access_configuration.html @@ -8,10 +8,14 @@ </legend> #end - #if ($off_desc) <div class="o_desc">$off_desc</div> #end - #if ($off_warn) <div class="o_warning">$off_warn</div> #end - #if ($off_info) <div class="o_info">$off_info</div> #end - +#if ($off_desc || $off_warn || $off_info) + <div class="row"><div class="col-sm-offset-3 col-sm-9"> + #if ($off_desc) <div class="o_desc">$off_desc</div> #end + #if ($off_warn) <div class="o_warning">$off_warn</div> #end + #if ($off_info) <div class="o_info">$off_info</div> #end + </div></div> +#end + #if($methods) <div class="o_button_group o_button_group_right"> <div class="btn-group"> @@ -28,7 +32,8 @@ $r.render("conf-controllers") </div> #if($r.available("buttonLayout")) - <div class="o_button_group"> + <div class="form-group"> + <div class="col-sm-9 col-sm-offset-3"> $r.render("buttonLayout") </div> #end diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html index d9d3adb090e..b4230014996 100644 --- a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html +++ b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html @@ -1,43 +1,69 @@ #if ($confControllers.size() > 0) -<table class="o_table table"> - <thead> - <tr> - <th>$r.translate("accesscontrol.table.method")</th> - <th></th> - <th>$r.translate("accesscontrol.table.from")</th> - <th>$r.translate("accesscontrol.table.to")</th> - <th></th> - </tr> - </thead> - <tbody> - #foreach($confController in $confControllers) - #set($css = $confController.getLink().getMethod().getMethodCssClass()) - <tr class="$css"> - <td><i class="o_icon ${css}_icon o_icon-lg"></i> $confController.name</td> - <td><span class="o_ac_infos">$r.escapeHtml($confController.infos)</span></td> - <td><div class="b_form_element">$r.render("from_$confController.link.key")</div></td> - <td><div class="b_form_element">$r.render("to_$confController.link.key")</div></td> - <td>#if($r.available("del_$confController.link.key")) $r.render("del_$confController.link.key") #end</td> - </tr> + #foreach($confController in $confControllers) + #set($css = $confController.getLink().getMethod().getMethodCssClass()) + <div class="form-group o_block_large_bottom $css clearfix"> + <div class="col-sm-3 o_block_bottom"> + <label> + <i class="o_icon ${css}_icon o_icon-lg"></i> + $confController.name + </label> + </div> + <div class="col-sm-9"> + #if($confController.infos) + <div class="form-group"> + <div class="col-sm-12"> + <div class="o_ac_infos">$r.escapeHtml($confController.infos)</div> + </div> + </div> + #end + <div class="form-group"> + <div class="col-sm-3"> + <label>$r.translate("accesscontrol.table.from")</label> + </div> + <div class="col-sm-9"> + $r.render("from_$confController.link.key") + </div> + </div> + <div class="form-group"> + <div class="col-sm-3"> + <label>$r.translate("accesscontrol.table.to")</label> + </div> + <div class="col-sm-9"> + $r.render("to_$confController.link.key") + </div> + </div> + + #set($desc = $confController.getLink().getOffer().getDescription()) #if ($desc) - <tr class="$css o_ac_desc"> - <td colspan="5">$r.escapeHtml($desc)</td> - </tr> + <div class="$css o_ac_desc"> + $r.escapeHtml($desc) + </div> + #end + <div class="o_block"> + #if($r.available("del_$confController.link.key")) + $r.render("del_$confController.link.key") #end - #end - </tbody> -</table> + </div> + </div> + </div> + #end #else #if ($emptyConfigGrantsFullAccess) - <div class="o_warning"> - $r.translate("accesscontrol.no.methods.full.access") + <div class="form-group"> + <div class="col-sm-9 col-sm-offset-3"> + <div class="o_warning"> + $r.translate("accesscontrol.no.methods.full.access") + </div> </div> + </div> #else - <div class="o_important"> - $r.translate("accesscontrol.no.methods.no.access") + <div class="form-group"> + <div class="col-sm-9 col-sm-offset-3"> + <div class="o_important"> + $r.translate("accesscontrol.no.methods.no.access") + </div> </div> + </div> #end #end - - diff --git a/src/main/webapp/static/themes/light/modules/_form.scss b/src/main/webapp/static/themes/light/modules/_form.scss index edad9654a18..ced8e8f42f6 100644 --- a/src/main/webapp/static/themes/light/modules/_form.scss +++ b/src/main/webapp/static/themes/light/modules/_form.scss @@ -32,6 +32,9 @@ .o_disabled {} hr.o_spacer {} + hr.o_spacer_noline { + border-top: 1px solid transparent; + } /* date chooser */ .o_date { diff --git a/src/main/webapp/static/themes/light/theme.css b/src/main/webapp/static/themes/light/theme.css index bf7e1ab4dcc..e5e111ca6d6 100644 --- a/src/main/webapp/static/themes/light/theme.css +++ b/src/main/webapp/static/themes/light/theme.css @@ -63,7 +63,7 @@ fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100% #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}} body{overflow-x:hidden}.o_container_offcanvas{position:relative;max-width:1324px;-webkit-transition:all .25s ease-in-out;-moz-transition:all .25s ease-in-out;-o-transition:all .25s ease-in-out;-m-transition:all .25s ease-in-out;transition:all .25s ease-in-out}@media screen and (min-width: 1324px) and (max-width: 1574px){body.o_offcanvas_right_visible .o_container_offcanvas{left:-125px;max-width:1074px}}@media screen and (min-width: 1574px) and (max-width: 1824px){body.o_offcanvas_right_visible .o_container_offcanvas{left:-125px}}#o_offcanvas_right{position:absolute;top:0;right:-250px;width:250px;padding:15px 15px;background-color:#222;color:#777;border:1px solid #090909;-webkit-box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);box-shadow:0px 0px 4px 3px rgba(0,0,0,0.25);min-height:100%;z-index:10;display:none}#o_offcanvas_right:before,#o_offcanvas_right:after{content:" ";display:table}#o_offcanvas_right:after{clear:both}@media screen and (max-width: 767px){.row-offcanvas{position:relative;-webkit-transition:all .25s ease-out;-moz-transition:all .25s ease-out;transition:all .25s ease-out}.row-offcanvas-right{right:0}.row-offcanvas-right .sidebar-offcanvas{right:-50%}.row-offcanvas-right.active{right:50%}.row-offcanvas-left{left:0}.row-offcanvas-left .sidebar-offcanvas{left:-50%}.row-offcanvas-left.active{left:50%}.sidebar-offcanvas{position:absolute;top:0;width:50%}}.o_info,.o_form .o_info,.o_togglebox_wrapper div.o_togglebox_content,div.o_qti_item_itemfeedback{margin:20px 0;padding:20px;border-left:3px solid #d4d4d4;background-color:#eee}.o_info h2,.o_info h3,.o_info h4,.o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_info h2,.o_info h5,.o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback h2,.o_form .o_info h3,.o_togglebox_wrapper div.o_togglebox_content h3,div.o_qti_item_itemfeedback h3,.o_form .o_info h4,.o_togglebox_wrapper div.o_togglebox_content h4,div.o_qti_item_itemfeedback h4,.o_form .o_info .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_info h2,.o_togglebox_wrapper div.o_togglebox_content .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_togglebox_wrapper div.o_togglebox_content h2,div.o_qti_item_itemfeedback .o_cal .fc-header-title h2,.o_cal .fc-header-title div.o_qti_item_itemfeedback h2,.o_form .o_info h5,.o_togglebox_wrapper div.o_togglebox_content h5,div.o_qti_item_itemfeedback h5{color:#d4d4d4}.o_note,.o_form .o_desc,.o_course_run .o_statusinfo,.o_course_stats .o_desc{margin:20px 0;padding:20px;border-left:3px solid #5bc0de;background-color:#f4f8fa}.o_note h2,.o_note h3,.o_note h4,.o_note .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_note h2,.o_note h5,.o_form .o_desc h2,.o_course_run .o_statusinfo h2,.o_course_stats .o_desc h2,.o_form .o_desc h3,.o_course_run .o_statusinfo h3,.o_course_stats .o_desc h3,.o_form .o_desc h4,.o_course_run .o_statusinfo h4,.o_course_stats .o_desc h4,.o_form .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_desc h2,.o_course_run .o_statusinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_statusinfo h2,.o_course_stats .o_desc .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_stats .o_desc h2,.o_form .o_desc h5,.o_course_run .o_statusinfo h5,.o_course_stats .o_desc h5{color:#5bc0de}.o_important,.o_bc_empty,.o_course_run .o_no_scoreinfo{margin:20px 0;padding:20px;border-left:3px solid #f4d000;background-color:#fff1a4}.o_important h2,.o_important h3,.o_important h4,.o_important .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_important h2,.o_important h5,.o_bc_empty h2,.o_course_run .o_no_scoreinfo h2,.o_bc_empty h3,.o_course_run .o_no_scoreinfo h3,.o_bc_empty h4,.o_course_run .o_no_scoreinfo h4,.o_bc_empty .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_bc_empty h2,.o_course_run .o_no_scoreinfo .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_course_run .o_no_scoreinfo h2,.o_bc_empty h5,.o_course_run .o_no_scoreinfo h5{color:#f4d000}.o_success{margin:20px 0;padding:20px;border-left:3px solid #3c763d;background-color:#d6e9c6}.o_success h2,.o_success h3,.o_success h4,.o_success .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_success h2,.o_success h5{color:#3c763d}.o_warning,.o_form .o_warning{margin:20px 0;padding:20px;border-left:3px solid #ff9e3e;background-color:#ffd5aa}.o_warning h2,.o_warning h3,.o_warning h4,.o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_warning h2,.o_warning h5,.o_form .o_warning h2,.o_form .o_warning h3,.o_form .o_warning h4,.o_form .o_warning .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_form .o_warning h2,.o_form .o_warning h5{color:#ff9e3e}.o_error{margin:20px 0;padding:20px;border-left:3px solid #d9534f;background-color:#fdf7f7}.o_error h2,.o_error h3,.o_error h4,.o_error .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_error h2,.o_error h5{color:#d9534f}div.o_callout_overlay{position:fixed;top:0;left:0;width:100%;height:100%;zoom:1;background:#000;opacity:0;filter:alpha(opacity=0)}.o_alert_info{position:fixed;top:-100%;left:0;display:none;z-index:2000;width:100%;text-align:center}.o_alert_info .alert{position:relative;width:auto;margin:0 auto;text-align:left;-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.o_alert_info .alert .o_icon_close{float:right;color:#777}.o_alert_info .alert .o_icon_close:hover{color:#555}@media (min-width: 768px){.o_alert_info .alert{width:600px}} -#o_msg_sticky,#o_msg_sticky_preview{position:relative;color:#a94442;background-color:#f2dede;border:1px solid #ebccd1;padding:10px 16px 10px 60px;min-height:40px;margin:-20px 0 20px 0}#o_msg_sticky .o_icon_info_msg,#o_msg_sticky_preview .o_icon_info_msg{position:absolute;left:10px;top:5px;font-size:40px}.o_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_tree a{color:#777;background-color:none}.o_tree a:hover,.o_tree a:focus{color:#333;background-color:#f8f8f8}.o_tree ul{margin:0;padding:0;list-style-type:none}.o_tree ul li{margin:0;padding:0;white-space:nowrap}.o_tree ul li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_tree ul li div a.o_tree_oc_l0{position:absolute;top:10px;left:-4px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l0,.o_tree ul .o_tree_level_close.b_tree_oc_l0{z-index:10}.o_tree ul li div a.o_tree_oc_l1{position:absolute;top:10px;left:11px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l1,.o_tree ul .o_tree_level_close.b_tree_oc_l1{z-index:10}.o_tree ul li div a.o_tree_oc_l2{position:absolute;top:10px;left:26px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l2,.o_tree ul .o_tree_level_close.b_tree_oc_l2{z-index:10}.o_tree ul li div a.o_tree_oc_l3{position:absolute;top:10px;left:41px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l3,.o_tree ul .o_tree_level_close.b_tree_oc_l3{z-index:10}.o_tree ul li div a.o_tree_oc_l4{position:absolute;top:10px;left:56px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l4,.o_tree ul .o_tree_level_close.b_tree_oc_l4{z-index:10}.o_tree ul li div a.o_tree_oc_l5{position:absolute;top:10px;left:71px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l5,.o_tree ul .o_tree_level_close.b_tree_oc_l5{z-index:10}.o_tree ul li div a.o_tree_oc_l6{position:absolute;top:10px;left:86px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l6,.o_tree ul .o_tree_level_close.b_tree_oc_l6{z-index:10}.o_tree ul li div a.o_tree_oc_l7{position:absolute;top:10px;left:101px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l7,.o_tree ul .o_tree_level_close.b_tree_oc_l7{z-index:10}.o_tree ul li div a.o_tree_oc_l8{position:absolute;top:10px;left:116px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l8,.o_tree ul .o_tree_level_close.b_tree_oc_l8{z-index:10}.o_tree ul li div a.o_tree_oc_l9{position:absolute;top:10px;left:131px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l9,.o_tree ul .o_tree_level_close.b_tree_oc_l9{z-index:10}.o_tree ul li div a.o_tree_oc_l10{position:absolute;top:10px;left:146px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l10,.o_tree ul .o_tree_level_close.b_tree_oc_l10{z-index:10}.o_tree ul li div a.o_tree_oc_l11{position:absolute;top:10px;left:161px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l11,.o_tree ul .o_tree_level_close.b_tree_oc_l11{z-index:10}.o_tree ul li div a.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_tree ul li div a.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_tree ul li div a.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_tree ul li div a.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_tree ul li div a.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_tree ul li div a.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_tree ul li div a.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_tree ul li div a.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_tree ul li div a.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_tree ul li div a.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_tree ul li div a.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_tree ul li div a.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_tree ul span.o_tree_leaf{display:none}.o_tree ul li .badge{float:right;font-size:70%}.o_tree ul li div.o_dnd_sibling{margin:0;padding:0;border-bottom:none}.o_tree ul li a.active{color:#428bca;background-color:none;font-weight:bold}.o_tree ul li a.active:hover,.o_tree ul li a.active:focus{color:#2a6496;background-color:#eee}.o_tree ul li a.active_parent{color:#777;font-weight:bold}.o_tree ul li a.active_parent:hover,.o_tree ul li a.active_parent:focus{color:#333}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l0{left:6px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l1{left:21px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l2{left:36px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l3{left:51px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l4{left:66px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l5{left:81px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l6{left:96px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l7{left:111px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l8{left:126px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l9{left:141px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l10{left:156px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l11{left:171px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l0{padding:10px 2px 10px 20px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l1{padding:10px 2px 10px 35px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l2{padding:10px 2px 10px 50px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l3{padding:10px 2px 10px 65px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l4{padding:10px 2px 10px 80px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l5{padding:10px 2px 10px 95px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l6{padding:10px 2px 10px 110px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l7{padding:10px 2px 10px 125px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l8{padding:10px 2px 10px 140px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l9{padding:10px 2px 10px 155px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l10{padding:10px 2px 10px 170px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l11{padding:10px 2px 10px 185px}.o_tree .o_dnd_item{cursor:move;z-index:100}.o_tree .o_dnd_proxy{opacity:0.4;filter:alpha(opacity=40);background-color:yellow}.o_tree .o_dnd_item.o_dnd_over{background-color:#ffff60}.o_tree .o_dnd_sibling{height:3px;width:100%}.o_tree .o_dnd_sibling.o_dnd_over{background:transparent url(../openolat/images/arrow_dd.png) top left no-repeat}.o_tree .o_dnd_l1{margin-left:0 !important}.o_tree .o_dnd_l2{margin-left:1em !important}.o_tree .o_dnd_l3{margin-left:2em !important}.o_tree .o_dnd_l4{margin-left:3em !important}.o_tree .o_dnd_l5{margin-left:4em !important}.o_tree .o_dnd_l6{margin-left:5em !important}.o_tree .o_dnd_l7{margin-left:6em !important}.o_tree .o_dnd_l8{margin-left:7em !important}.o_tree .o_dnd_l9{margin-left:8em !important}.o_tree .o_dnd_l10{margin-left:9em !important}.o_tree .o_dnd_l11{margin-left:10em !important}.o_offcanvas .o_tree{border:0}.o_breadcrumb{position:relative}.o_breadcrumb .o_breadcrumb_close{float:right}.o_form .o_icon_mandatory{position:absolute;right:-0.25em;line-height:1.5em}.o_form.form-horizontal .o_icon_mandatory{position:relative;right:0;line-height:inherit;margin-left:0.25em}.o_form .o_error{margin-top:1px;margin-bottom:0;padding:10px}.o_form .o_date{position:relative;padding-right:34px}.o_form .o_date.form-inline .form-group,.o_form .o_date.navbar-form .form-group,.o_form .o_date.o_navbar-form .form-group{margin-left:0}.o_form input.o_date_ms{width:3em}.o_form .o_date.form-inline .o_date_ms.form-group,.o_form .o_date.navbar-form .o_date_ms.form-group,.o_form .o_date.o_navbar-form .o_date_ms.form-group{margin-left:25px}.o_form .input-group.o_date_picker{width:16em}.o_form .o_filepreview{margin-bottom:10px}.o_form .o_fileinput{cursor:pointer;position:relative}.o_form .o_fileinput .o_fakechooser{position:relative;z-index:1}.o_form .o_fileinput .o_realchooser{position:absolute;top:0;left:0;z-index:2;opacity:0;filter:alpha(opacity=0)}.o_choice_checkrow,.o_choice_textrow{vertical-align:text-top;padding-bottom:2px}.o_choice_textrow{padding-left:1em}.o_togglecheck a{white-space:nowrap}.o_catalog .o_catalog_delete_img{position:relative;top:-0.5em}.o_button_dirty{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_button_dirty:hover,.o_button_dirty:focus,.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{background-image:none}.o_button_dirty.disabled,.o_button_dirty.disabled:hover,.o_button_dirty.disabled:focus,.o_button_dirty.disabled:active,.o_button_dirty.disabled.active,.o_button_dirty[disabled],.o_button_dirty[disabled]:hover,.o_button_dirty[disabled]:focus,.o_button_dirty[disabled]:active,.o_button_dirty[disabled].active,fieldset[disabled] .o_button_dirty,fieldset[disabled] .o_button_dirty:hover,fieldset[disabled] .o_button_dirty:focus,fieldset[disabled] .o_button_dirty:active,fieldset[disabled] .o_button_dirty.active{background-color:#f0ad4e;border-color:#eea236}.o_button_dirty .badge{color:#f0ad4e;background-color:#fff}.o_button_toggle{border:1px solid #777;border-top-right-radius:9px;border-top-left-radius:9px;border-bottom-right-radius:9px;border-bottom-left-radius:9px;background:#eee;display:inline-block;height:18px;line-height:16px;font-size:16px;text-align:left;padding:0 0.5em 0 0;margin:0}.o_button_toggle i{color:#777;text-shadow:1px 0 2px rgba(0,0,0,0.25)}.o_button_toggle span{line-height:16px;vertical-align:top;font-size:60%;color:#777;text-transform:uppercase}.o_button_toggle.o_on{text-align:right;padding:0 0 0 0.5em}.o_button_toggle.o_on i{color:#428bca;text-shadow:-1px 0 2px rgba(0,0,0,0.25)}.o_table_wrapper.o_table_flexi .o_table_body{margin-top:20px}.o_table_wrapper.o_table_flexi .table{margin-top:20px}.o_table_wrapper.o_table_flexi .table td ul{margin:0}.o_table_wrapper .o_table_search{max-width:50em}.o_table_wrapper .o_table_footer .o_table_pagination{text-align:center}.o_table_wrapper .o_row_selected td{background-color:#dff0d8 !important}.o_table_wrapper a.b_sorting{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow-resize-090.png") no-repeat center right}.o_table_wrapper a.b_sorting_asc{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow_up.png") no-repeat center right}.o_table_wrapper a.b_sorting_desc{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow_down.png") no-repeat center right}.o_table_wrapper .o_table{margin-bottom:0}.o_table_config{font-size:12px}.o_table_buttons{text-align:center}.o_table_buttons input{margin-right:1em}.o_table_buttons input:last-child{margin-right:0}.o_table_tools{margin-left:0.5em}.o_table_count{max-width:20em;float:left;padding:0 15px}.o_info .table-bordered td,o_note .table-bordered td,o_important .table-bordered td,o_warning .table-bordered td,o_error .table-bordered td{border-color:#333}.panel .o_table_layout{border-top:1px solid #ddd;padding-top:6px}.panel .o_table_count{padding:0 15px}#o_navbar_imclient #o_im_message,#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_summary{float:left;position:relative;padding:15px 3px}#o_navbar_imclient #o_im_summary{padding-right:15px}#o_navbar_imclient #o_im_status div.o_chelp_wrapper{right:0.5em}.o_im_load_history{margin-bottom:6px}.o_im_load_history .o_label{font-size:12px;padding-right:0.5em;line-height:1.5em;color:#777}.o_im_chat_history{height:170px;font-size:90%;border:1px solid #eee;margin:0 0 1em 0;overflow:scroll;overflow-x:auto}.o_im_message_group{padding:3px 3px 3px 40px;min-height:40px;position:relative;border-top:1px solid #eee;background:#fff}.o_im_message_group.o_odd{background:#f4f4f4}.o_im_message_group .o_portrait{position:absolute;top:3px;left:3px}.o_im_message_group .o_im_from{color:#777;font-size:12px;font-weight:bold}.o_im_message_group .o_im_from:hover{color:#5e5e5e}.o_im_message_group div.o_im_body{padding:3px 0 3px 0;font-size:12px}.o_im_message_group div.o_im_body .o_date{float:right;color:#777;font-size:9px}.o_groupchat_roster{font-size:12px}.o_groupchat_roster li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.o_groupchat_roster li.o_vip{color:#3c763d}.o_groupchat_roster li.o_anonymous{color:#31708f}.o_im_buddieslist .o_im_buddieslist_toggler .btn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_im_buddieslist ul{font-size:12px}.o_im_buddieslist ul ul{padding-left:1em}.o_im_buddieslist ul a{color:#428bca}.o_im_buddieslist ul a:hover{color:#2a6496}.o_flag{position:relative;top:1px;display:inline-block;line-height:1;width:16px;height:16px;background-repeat:no-repeat;background-position:0 100%}option.o_with_flag{padding-left:23px;min-height:16px;background-repeat:no-repeat;background-position:2px 50%}.o_flag_en{background-image:url("../light/images/flags/gb.png")}.o_flag_de{background-image:url("../light/images/flags/de.png")}.o_flag_fr{background-image:url("../light/images/flags/fr.png")}.o_flag_it{background-image:url("../light/images/flags/it.png")}.o_flag_es{background-image:url("../light/images/flags/es.png")}.o_flag_da{background-image:url("../light/images/flags/dk.png")}.o_flag_cs{background-image:url("../light/images/flags/cz.png")}.o_flag_el{background-image:url("../light/images/flags/gr.png")}.o_flag_ee{background-image:url("../light/images/flags/ee.png")}.o_flag_ru{background-image:url("../light/images/flags/ru.png")}.o_flag_pl{background-image:url("../light/images/flags/pl.png")}.o_flag_zh_CN{background-image:url("../light/images/flags/cn.png")}.o_flag_zh_TW{background-image:url("../light/images/flags/tw.png")}.o_flag_lt{background-image:url("../light/images/flags/lt.png")}.o_flag_fa{background-image:url("../light/images/flags/ir.png")}.o_flag_pt_PT{background-image:url("../light/images/flags/pt.png")}.o_flag_pt_BR{background-image:url("../light/images/flags/br.png")}.o_flag_tr{background-image:url("../light/images/flags/tr.png")}.o_flag_hu{background-image:url("../light/images/flags/hu.png")}.o_flag_sq{background-image:url("../light/images/flags/al.png")}.o_flag_in{background-image:url("../light/images/flags/id.png")}.o_flag_ar{background-image:url("../light/images/flags/eg.png")}.o_flag_rm{background-image:url("../light/images/flags/rm.png")}.o_flag_af{background-image:url("../light/images/flags/za.png")}.o_flag_vi{background-image:url("../light/images/flags/vn.png")}.o_flag_mn{background-image:url("../light/images/flags/mn.png")}.o_flag_iw{background-image:url("../light/images/flags/il.png")}.o_flag_ko{background-image:url("../light/images/flags/kr.png")}.o_flag_nl_NL{background-image:url("../light/images/flags/nl.png")}.o_flag_jp{background-image:url("../light/images/flags/jp.png")}.o_flag_nb_NO{background-image:url("../light/images/flags/no.png")}.o_flag_et_EE{background-image:url("../light/images/flags/ee.png")}.o_flag_bg{background-image:url("../light/images/flags/bg.png")}.o_flag_hi_IN_ASIA{background-image:url("../light/images/flags/in.png")}.o_flag_ar_LB{background-image:url("../light/images/flags/lb.png")}.o_flag_gl_ES{background-image:url("../light/images/flags/galicia.png")}.o_rating .o_rating_title{font-size:12px}.o_rating .o_rating_items{white-space:nowrap}.o_rating .o_rating_items .o_icon{color:#f0ad4e}.o_rating .o_rating_items .o_icon:hover{color:#428bca}.o_rating .o_rating_items .o_legend{margin-left:1em;font-size:12px;line-height:1em}.o_rating .o_rating_explanation{font-size:12px;color:#777}@media (max-width: 991px){.o_rating .o_rating_title,.o_rating .o_rating_explanation{display:none}} +#o_msg_sticky,#o_msg_sticky_preview{position:relative;color:#a94442;background-color:#f2dede;border:1px solid #ebccd1;padding:10px 16px 10px 60px;min-height:40px;margin:-20px 0 20px 0}#o_msg_sticky .o_icon_info_msg,#o_msg_sticky_preview .o_icon_info_msg{position:absolute;left:10px;top:5px;font-size:40px}.o_tree{position:relative;display:block;background-color:none;border:1px solid #ddd;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;overflow:hidden;font-size:14px}.o_tree a{color:#777;background-color:none}.o_tree a:hover,.o_tree a:focus{color:#333;background-color:#f8f8f8}.o_tree ul{margin:0;padding:0;list-style-type:none}.o_tree ul li{margin:0;padding:0;white-space:nowrap}.o_tree ul li div{position:relative;margin-bottom:-1px;border-bottom:1px solid #ddd}.o_tree ul li div a.o_tree_oc_l0{position:absolute;top:10px;left:-4px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l0,.o_tree ul .o_tree_level_close.b_tree_oc_l0{z-index:10}.o_tree ul li div a.o_tree_oc_l1{position:absolute;top:10px;left:11px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l1,.o_tree ul .o_tree_level_close.b_tree_oc_l1{z-index:10}.o_tree ul li div a.o_tree_oc_l2{position:absolute;top:10px;left:26px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l2,.o_tree ul .o_tree_level_close.b_tree_oc_l2{z-index:10}.o_tree ul li div a.o_tree_oc_l3{position:absolute;top:10px;left:41px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l3,.o_tree ul .o_tree_level_close.b_tree_oc_l3{z-index:10}.o_tree ul li div a.o_tree_oc_l4{position:absolute;top:10px;left:56px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l4,.o_tree ul .o_tree_level_close.b_tree_oc_l4{z-index:10}.o_tree ul li div a.o_tree_oc_l5{position:absolute;top:10px;left:71px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l5,.o_tree ul .o_tree_level_close.b_tree_oc_l5{z-index:10}.o_tree ul li div a.o_tree_oc_l6{position:absolute;top:10px;left:86px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l6,.o_tree ul .o_tree_level_close.b_tree_oc_l6{z-index:10}.o_tree ul li div a.o_tree_oc_l7{position:absolute;top:10px;left:101px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l7,.o_tree ul .o_tree_level_close.b_tree_oc_l7{z-index:10}.o_tree ul li div a.o_tree_oc_l8{position:absolute;top:10px;left:116px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l8,.o_tree ul .o_tree_level_close.b_tree_oc_l8{z-index:10}.o_tree ul li div a.o_tree_oc_l9{position:absolute;top:10px;left:131px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l9,.o_tree ul .o_tree_level_close.b_tree_oc_l9{z-index:10}.o_tree ul li div a.o_tree_oc_l10{position:absolute;top:10px;left:146px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l10,.o_tree ul .o_tree_level_close.b_tree_oc_l10{z-index:10}.o_tree ul li div a.o_tree_oc_l11{position:absolute;top:10px;left:161px;z-index:9}.o_tree ul .o_tree_level_open.b_tree_oc_l11,.o_tree ul .o_tree_level_close.b_tree_oc_l11{z-index:10}.o_tree ul li div a.o_tree_l0{display:block;padding:10px 2px 10px 10px;z-index:9}.o_tree ul li div a.o_tree_l1{display:block;padding:10px 2px 10px 25px;z-index:9}.o_tree ul li div a.o_tree_l2{display:block;padding:10px 2px 10px 40px;z-index:9}.o_tree ul li div a.o_tree_l3{display:block;padding:10px 2px 10px 55px;z-index:9}.o_tree ul li div a.o_tree_l4{display:block;padding:10px 2px 10px 70px;z-index:9}.o_tree ul li div a.o_tree_l5{display:block;padding:10px 2px 10px 85px;z-index:9}.o_tree ul li div a.o_tree_l6{display:block;padding:10px 2px 10px 100px;z-index:9}.o_tree ul li div a.o_tree_l7{display:block;padding:10px 2px 10px 115px;z-index:9}.o_tree ul li div a.o_tree_l8{display:block;padding:10px 2px 10px 130px;z-index:9}.o_tree ul li div a.o_tree_l9{display:block;padding:10px 2px 10px 145px;z-index:9}.o_tree ul li div a.o_tree_l10{display:block;padding:10px 2px 10px 160px;z-index:9}.o_tree ul li div a.o_tree_l11{display:block;padding:10px 2px 10px 175px;z-index:9}.o_tree ul span.o_tree_leaf{display:none}.o_tree ul li .badge{float:right;font-size:70%}.o_tree ul li div.o_dnd_sibling{margin:0;padding:0;border-bottom:none}.o_tree ul li a.active{color:#428bca;background-color:none;font-weight:bold}.o_tree ul li a.active:hover,.o_tree ul li a.active:focus{color:#2a6496;background-color:#eee}.o_tree ul li a.active_parent{color:#777;font-weight:bold}.o_tree ul li a.active_parent:hover,.o_tree ul li a.active_parent:focus{color:#333}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l0{left:6px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l1{left:21px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l2{left:36px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l3{left:51px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l4{left:66px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l5{left:81px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l6{left:96px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l7{left:111px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l8{left:126px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l9{left:141px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l10{left:156px}.o_tree.o_tree_root_hidden ul li div a.o_tree_oc_l11{left:171px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l0{padding:10px 2px 10px 20px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l1{padding:10px 2px 10px 35px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l2{padding:10px 2px 10px 50px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l3{padding:10px 2px 10px 65px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l4{padding:10px 2px 10px 80px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l5{padding:10px 2px 10px 95px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l6{padding:10px 2px 10px 110px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l7{padding:10px 2px 10px 125px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l8{padding:10px 2px 10px 140px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l9{padding:10px 2px 10px 155px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l10{padding:10px 2px 10px 170px}.o_tree.o_tree_root_hidden ul li div a.o_tree_l11{padding:10px 2px 10px 185px}.o_tree .o_dnd_item{cursor:move;z-index:100}.o_tree .o_dnd_proxy{opacity:0.4;filter:alpha(opacity=40);background-color:yellow}.o_tree .o_dnd_item.o_dnd_over{background-color:#ffff60}.o_tree .o_dnd_sibling{height:3px;width:100%}.o_tree .o_dnd_sibling.o_dnd_over{background:transparent url(../openolat/images/arrow_dd.png) top left no-repeat}.o_tree .o_dnd_l1{margin-left:0 !important}.o_tree .o_dnd_l2{margin-left:1em !important}.o_tree .o_dnd_l3{margin-left:2em !important}.o_tree .o_dnd_l4{margin-left:3em !important}.o_tree .o_dnd_l5{margin-left:4em !important}.o_tree .o_dnd_l6{margin-left:5em !important}.o_tree .o_dnd_l7{margin-left:6em !important}.o_tree .o_dnd_l8{margin-left:7em !important}.o_tree .o_dnd_l9{margin-left:8em !important}.o_tree .o_dnd_l10{margin-left:9em !important}.o_tree .o_dnd_l11{margin-left:10em !important}.o_offcanvas .o_tree{border:0}.o_breadcrumb{position:relative}.o_breadcrumb .o_breadcrumb_close{float:right}.o_form .o_icon_mandatory{position:absolute;right:-0.25em;line-height:1.5em}.o_form.form-horizontal .o_icon_mandatory{position:relative;right:0;line-height:inherit;margin-left:0.25em}.o_form .o_error{margin-top:1px;margin-bottom:0;padding:10px}.o_form hr.o_spacer_noline{border-top:1px solid transparent}.o_form .o_date{position:relative;padding-right:34px}.o_form .o_date.form-inline .form-group,.o_form .o_date.navbar-form .form-group,.o_form .o_date.o_navbar-form .form-group{margin-left:0}.o_form input.o_date_ms{width:3em}.o_form .o_date.form-inline .o_date_ms.form-group,.o_form .o_date.navbar-form .o_date_ms.form-group,.o_form .o_date.o_navbar-form .o_date_ms.form-group{margin-left:25px}.o_form .input-group.o_date_picker{width:16em}.o_form .o_filepreview{margin-bottom:10px}.o_form .o_fileinput{cursor:pointer;position:relative}.o_form .o_fileinput .o_fakechooser{position:relative;z-index:1}.o_form .o_fileinput .o_realchooser{position:absolute;top:0;left:0;z-index:2;opacity:0;filter:alpha(opacity=0)}.o_choice_checkrow,.o_choice_textrow{vertical-align:text-top;padding-bottom:2px}.o_choice_textrow{padding-left:1em}.o_togglecheck a{white-space:nowrap}.o_catalog .o_catalog_delete_img{position:relative;top:-0.5em}.o_button_dirty{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_button_dirty:hover,.o_button_dirty:focus,.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.o_button_dirty:active,.o_button_dirty.active,.open>.o_button_dirty.dropdown-toggle{background-image:none}.o_button_dirty.disabled,.o_button_dirty.disabled:hover,.o_button_dirty.disabled:focus,.o_button_dirty.disabled:active,.o_button_dirty.disabled.active,.o_button_dirty[disabled],.o_button_dirty[disabled]:hover,.o_button_dirty[disabled]:focus,.o_button_dirty[disabled]:active,.o_button_dirty[disabled].active,fieldset[disabled] .o_button_dirty,fieldset[disabled] .o_button_dirty:hover,fieldset[disabled] .o_button_dirty:focus,fieldset[disabled] .o_button_dirty:active,fieldset[disabled] .o_button_dirty.active{background-color:#f0ad4e;border-color:#eea236}.o_button_dirty .badge{color:#f0ad4e;background-color:#fff}.o_button_toggle{border:1px solid #777;border-top-right-radius:9px;border-top-left-radius:9px;border-bottom-right-radius:9px;border-bottom-left-radius:9px;background:#eee;display:inline-block;height:18px;line-height:16px;font-size:16px;text-align:left;padding:0 0.5em 0 0;margin:0}.o_button_toggle i{color:#777;text-shadow:1px 0 2px rgba(0,0,0,0.25)}.o_button_toggle span{line-height:16px;vertical-align:top;font-size:60%;color:#777;text-transform:uppercase}.o_button_toggle.o_on{text-align:right;padding:0 0 0 0.5em}.o_button_toggle.o_on i{color:#428bca;text-shadow:-1px 0 2px rgba(0,0,0,0.25)}.o_table_wrapper.o_table_flexi .o_table_body{margin-top:20px}.o_table_wrapper.o_table_flexi .table{margin-top:20px}.o_table_wrapper.o_table_flexi .table td ul{margin:0}.o_table_wrapper .o_table_search{max-width:50em}.o_table_wrapper .o_table_footer .o_table_pagination{text-align:center}.o_table_wrapper .o_row_selected td{background-color:#dff0d8 !important}.o_table_wrapper a.b_sorting{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow-resize-090.png") no-repeat center right}.o_table_wrapper a.b_sorting_asc{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow_up.png") no-repeat center right}.o_table_wrapper a.b_sorting_desc{padding:0 20px 0 0;text-decoration:none;background:url("../openolat/images/arrow_down.png") no-repeat center right}.o_table_wrapper .o_table{margin-bottom:0}.o_table_config{font-size:12px}.o_table_buttons{text-align:center}.o_table_buttons input{margin-right:1em}.o_table_buttons input:last-child{margin-right:0}.o_table_tools{margin-left:0.5em}.o_table_count{max-width:20em;float:left;padding:0 15px}.o_info .table-bordered td,o_note .table-bordered td,o_important .table-bordered td,o_warning .table-bordered td,o_error .table-bordered td{border-color:#333}.panel .o_table_layout{border-top:1px solid #ddd;padding-top:6px}.panel .o_table_count{padding:0 15px}#o_navbar_imclient #o_im_message,#o_navbar_imclient #o_im_status,#o_navbar_imclient #o_im_summary{float:left;position:relative;padding:15px 3px}#o_navbar_imclient #o_im_summary{padding-right:15px}#o_navbar_imclient #o_im_status div.o_chelp_wrapper{right:0.5em}.o_im_load_history{margin-bottom:6px}.o_im_load_history .o_label{font-size:12px;padding-right:0.5em;line-height:1.5em;color:#777}.o_im_chat_history{height:170px;font-size:90%;border:1px solid #eee;margin:0 0 1em 0;overflow:scroll;overflow-x:auto}.o_im_message_group{padding:3px 3px 3px 40px;min-height:40px;position:relative;border-top:1px solid #eee;background:#fff}.o_im_message_group.o_odd{background:#f4f4f4}.o_im_message_group .o_portrait{position:absolute;top:3px;left:3px}.o_im_message_group .o_im_from{color:#777;font-size:12px;font-weight:bold}.o_im_message_group .o_im_from:hover{color:#5e5e5e}.o_im_message_group div.o_im_body{padding:3px 0 3px 0;font-size:12px}.o_im_message_group div.o_im_body .o_date{float:right;color:#777;font-size:9px}.o_groupchat_roster{font-size:12px}.o_groupchat_roster li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}.o_groupchat_roster li.o_vip{color:#3c763d}.o_groupchat_roster li.o_anonymous{color:#31708f}.o_im_buddieslist .o_im_buddieslist_toggler .btn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_im_buddieslist ul{font-size:12px}.o_im_buddieslist ul ul{padding-left:1em}.o_im_buddieslist ul a{color:#428bca}.o_im_buddieslist ul a:hover{color:#2a6496}.o_flag{position:relative;top:1px;display:inline-block;line-height:1;width:16px;height:16px;background-repeat:no-repeat;background-position:0 100%}option.o_with_flag{padding-left:23px;min-height:16px;background-repeat:no-repeat;background-position:2px 50%}.o_flag_en{background-image:url("../light/images/flags/gb.png")}.o_flag_de{background-image:url("../light/images/flags/de.png")}.o_flag_fr{background-image:url("../light/images/flags/fr.png")}.o_flag_it{background-image:url("../light/images/flags/it.png")}.o_flag_es{background-image:url("../light/images/flags/es.png")}.o_flag_da{background-image:url("../light/images/flags/dk.png")}.o_flag_cs{background-image:url("../light/images/flags/cz.png")}.o_flag_el{background-image:url("../light/images/flags/gr.png")}.o_flag_ee{background-image:url("../light/images/flags/ee.png")}.o_flag_ru{background-image:url("../light/images/flags/ru.png")}.o_flag_pl{background-image:url("../light/images/flags/pl.png")}.o_flag_zh_CN{background-image:url("../light/images/flags/cn.png")}.o_flag_zh_TW{background-image:url("../light/images/flags/tw.png")}.o_flag_lt{background-image:url("../light/images/flags/lt.png")}.o_flag_fa{background-image:url("../light/images/flags/ir.png")}.o_flag_pt_PT{background-image:url("../light/images/flags/pt.png")}.o_flag_pt_BR{background-image:url("../light/images/flags/br.png")}.o_flag_tr{background-image:url("../light/images/flags/tr.png")}.o_flag_hu{background-image:url("../light/images/flags/hu.png")}.o_flag_sq{background-image:url("../light/images/flags/al.png")}.o_flag_in{background-image:url("../light/images/flags/id.png")}.o_flag_ar{background-image:url("../light/images/flags/eg.png")}.o_flag_rm{background-image:url("../light/images/flags/rm.png")}.o_flag_af{background-image:url("../light/images/flags/za.png")}.o_flag_vi{background-image:url("../light/images/flags/vn.png")}.o_flag_mn{background-image:url("../light/images/flags/mn.png")}.o_flag_iw{background-image:url("../light/images/flags/il.png")}.o_flag_ko{background-image:url("../light/images/flags/kr.png")}.o_flag_nl_NL{background-image:url("../light/images/flags/nl.png")}.o_flag_jp{background-image:url("../light/images/flags/jp.png")}.o_flag_nb_NO{background-image:url("../light/images/flags/no.png")}.o_flag_et_EE{background-image:url("../light/images/flags/ee.png")}.o_flag_bg{background-image:url("../light/images/flags/bg.png")}.o_flag_hi_IN_ASIA{background-image:url("../light/images/flags/in.png")}.o_flag_ar_LB{background-image:url("../light/images/flags/lb.png")}.o_flag_gl_ES{background-image:url("../light/images/flags/galicia.png")}.o_rating .o_rating_title{font-size:12px}.o_rating .o_rating_items{white-space:nowrap}.o_rating .o_rating_items .o_icon{color:#f0ad4e}.o_rating .o_rating_items .o_icon:hover{color:#428bca}.o_rating .o_rating_items .o_legend{margin-left:1em;font-size:12px;line-height:1em}.o_rating .o_rating_explanation{font-size:12px;color:#777}@media (max-width: 991px){.o_rating .o_rating_title,.o_rating .o_rating_explanation{display:none}} .o_comments .o_comment_wrapper .o_avatar{float:left;margin:0 1em 0 0}.o_comments .o_comment_wrapper .o_reply,.o_comments .o_comment_wrapper .o_delete{float:right}.o_ratings_and_comments .o_rating_wrapper{vertical-align:middle;display:inline-block}.o_ratings_and_comments a.o_comments{margin-left:10px;position:relative;top:0.1em}.d3chart .bar{shape-rendering:crispEdges}.d3chart .bar_default_light{fill:#7eb0db}.d3chart .bar_default{fill:#428bca}.d3chart .bar_default_dark{fill:#2a6496}.d3chart .axis{font:12px sans-serif}.d3chart .axis path,.d3chart .axis line{fill:none;stroke:#000;shape-rendering:crispEdges}.o_forum_peekview .o_quote_wrapper,.o_forum_peekview .b_quote_wrapper{display:none}.o_forum_thread_sticky{font-weight:bold}.o_forum_switch{font-size:12px}.o_forum_toolbar{margin-bottom:6px;float:left}.o_forum_fulltextsearch{float:right}@media (max-width: 767px){.o_forum_fulltextsearch{float:left}}.o_forum .o_mark,.o_forum .o_ep_collect{float:right;position:relative;width:2em;margin-left:12px}.o_forum .o_portrait{float:left;margin-right:16px}.o_forum .o_portrait_avatar{width:70px;height:70px}.o_forum .o_newindicator{font-size:10px;color:#5cb85c;text-transform:uppercase;padding-left:1em;vertical-align:text-top;white-space:nowrap}.o_forum .o_author,.o_forum .o_date{display:inline-block;color:#777}.o_forum .o_date{font-size:12px}.o_forum .o_modified{color:#8a6d3b;font-size:12px;font-style:italic}.o_forum .o_forum_message{margin-bottom:20px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_forum .o_forum_message_new{-webkit-box-shadow:0 1px 10px rgba(92,184,92,0.3);box-shadow:0 1px 10px rgba(92,184,92,0.3)}.o_forum .o_forum_message_highlight{-webkit-box-shadow:0 1px 10px rgba(240,173,78,0.5);box-shadow:0 1px 10px rgba(240,173,78,0.5)}.o_forum .o_forum_message_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:3px;border-top-left-radius:3px}.o_forum .o_forum_message_title{margin-top:0}.o_forum .o_forum_message_body{padding:10px 15px}.o_forum .o_forum_message_attachments{border-top:1px solid #ddd;padding:10px 15px;font-size:12px;background-color:#f7f7f9}.o_forum .o_attachment{position:relative;max-width:250px;vertical-align:top;margin:6px 12px 10px 0}.o_forum .o_attachment img{margin-top:6px}.o_forum .o_filename{max-width:250px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_forum .o_icon_enlarge{position:absolute;left:1em;bottom:1em;text-shadow:1px 1px 2px #fff, -1px 1px 2px #fff, 1px -1px 2px #fff, -1px -1px 2px #fff}@media (min-width: 768px) and (max-width: 991px){.o_forum .o_attachments{font-size:10px}.o_forum .o_attachment{max-width:200px}.o_forum .o_attachment img{max-width:150px}.o_forum .o_filename{max-width:200px}}@media (max-width: 767px){.o_forum .o_attachments{font-size:9px}.o_forum .o_attachment{max-width:150px}.o_forum .o_attachment img{max-width:100px}.o_forum .o_filename{max-width:150px}} .o_quote_wrapper,.b_quote_wrapper{position:relative;margin:10px 0}.o_quote_author,.b_quote_author{color:#777;font-size:12px}.o_quote_author:before,.b_quote_author:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f10e";font-size:21px;padding-right:0.5em}blockquote.o_quote,blockquote.b_quote{color:#555;font-size:12px;margin-top:6px;padding:0 12px}a.o_chelp{display:inline-block;padding:1px 3px;text-align:center;vertical-align:middle;white-space:nowrap;font-size:10px;font-weight:normal;line-height:15px;color:#fff;background-color:#428bca;border:1px solid #357ebd;border-radius:2px;cursor:help;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a.o_chelp:active,a.o_chelp:hover,a.o_chelp:focus{text-decoration:none;color:#fff;background-color:#3276b1;border-color:#285e8e}a.o_chelp i{font-size:10px !important}.o_chelp_wrapper{position:relative;float:right;display:inline-block;line-height:1em}.o_iframedisplay iframe{width:100%}.o_singlepage .o_edit{position:absolute;top:10px;right:37px}.o_content_popup{position:absolute;top:10px;right:12px}.o_module_cp_wrapper .o_tools{position:absolute;top:10px;right:12px;text-align:right;vertical-align:middle}.o_module_cp_wrapper .o_tools .o_search_wrapper{display:inline-block;position:relative;top:-2px}.o_bc_meta .o_thumbnail{width:200px;height:200px}.o_htmleditor .o_lastmodified{color:#777}.o_htmleditor #o_save{margin-top:10px;text-align:center}.o_htmleditor #o_save input{margin-right:1em}.o_htmleditor #o_save input:last-child{margin-right:0}.o_notifications_news_wrapper .o_notifications_news_subscription{margin:10px 0}.o_notifications_news_wrapper .o_notifications_news_subscription h4 i,.o_notifications_news_wrapper .o_notifications_news_subscription .o_cal .fc-header-title h2 i,.o_cal .fc-header-title .o_notifications_news_wrapper .o_notifications_news_subscription h2 i{display:none}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_context{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content{margin-left:1.5em;position:relative}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_icon{position:absolute;left:-1.5em;line-height:1.5em;top:0}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_content .o_date{color:#777}.o_notifications_news_wrapper .o_notifications_news_subscription .o_notifications_news_url{margin-left:1.5em}.o_noti{margin:6px 0 6px 12px;float:right;color:#777}.o_noti .o_label{color:#777;cursor:help}@media (max-width: 767px){.o_noti .o_label span{display:none}} .panel-body .o_noti{margin:0}.o_portrait{display:inline-block}.o_portrait img{border-radius:50%;border:none;background-color:#eee;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.o_portrait_name{margin-top:6px}.o_portrait_avatar,.o_portrait_dummy,.o_portrait_dummy_female_big,.o_portrait_dummy_male_big,.o_portrait_anonymous{width:100px;height:100px}.o_portrait_dummy{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_dummy_female_big{background-image:url("../light/images/portrait/dummy_female_big.png")}.o_portrait_dummy_male_big{background-image:url("../light/images/portrait/dummy_male_big.png")}.o_portrait_anonymous{background-image:url("../light/images/portrait/dummy.png")}.o_portrait_avatar_small,.o_portrait_dummy_small,.o_portrait_dummy_female_small,.o_portrait_dummy_male_small,.o_portrait_anonymous_small{width:30px;height:30px}.o_portrait_dummy_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_portrait_dummy_female_small{background-image:url("../light/images/portrait/dummy_female_small.png")}.o_portrait_dummy_male_small{background-image:url("../light/images/portrait/dummy_male_small.png")}.o_portrait_anonymous_small{background-image:url("../light/images/portrait/dummy_small.png")}.o_datecomp{position:relative;width:40px;height:52px;border:1px solid #555;margin-right:12px;text-align:center;vertical-align:middle}.o_datecomp div.o_year{position:absolute;left:0;width:100%;top:-20px;height:20px;line-height:20px;font-size:10px}.o_datecomp div.o_month{height:20px;line-height:20px;font-size:12px;background-color:#428bca;color:#fff}.o_datecomp div.o_day{height:30px;line-height:30px;font-size:18px;border-top:1px solid #555;background-color:#fff;color:#333}.o_block_with_datecomp .o_head{position:relative;padding-left:52px}.o_block_with_datecomp .o_datecomp{position:absolute;top:0.2em;left:0}.o_block_with_datecomp .o_title{margin-top:0}.o_block_with_datecomp .o_meta{color:#777}.o_block_with_datecomp .o_content{border-left:5px solid #eee;padding:0 20px}.o_block_with_datecomp .o_block_footer{padding-left:25px}.o_cal_toptoolbar{margin-bottom:6px}.o_cal_toptoolbar .o_cal_toptoolbar_sub,.o_cal_toptoolbar .o_cal_toptoolbar_help{float:left;margin-right:12px}.o_feed .o_date,.o_feed .o_author{color:#777}.o_feed .o_subscription a{margin-right:1.5em}.o_feed .o_subscription form{margin-top:6px}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper{float:left}.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_title,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_rating_explanation,.o_feed .o_blog_posts .o_ratings_and_comments .o_rating_wrapper .o_legend{display:none}.o_feed .o_blog_posts .o_ratings_and_comments a.o_comments span{display:none}.o_segments_content{margin-top:20px}.o_tabbed_pane .o_tabbed_pane_content{padding:20px 0 6px 0}.o_togglebox_wrapper .o_opener{position:relative;left:-0.5em}.o_togglebox_wrapper div.o_togglebox_content{position:relative;margin:0}.o_togglebox_wrapper div.o_togglebox_content .o_hide{position:absolute;bottom:0.5em;right:1em}.o_qrcode{width:256px;height:256px}#o_ajax_busy{position:absolute;left:50%;top:20em;margin-left:-2.5em;height:5em;width:5em;color:#fff;z-index:1201;display:none}#o_body.o_ajax_busy{cursor:busy}.o_exception .o_visual{position:relative;background-image:url("../light/images/lion-500x333.jpg");filter:grayscale(50%);-webkit-filter:grayscale(50%);-moz-filter:grayscale(50%);-ms-filter:grayscale(50%);-o-filter:grayscale(50%);width:500px;height:333px;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;margin:0 0 10px 16px}@media (min-width: 768px) and (max-width: 991px){.o_exception .o_visual{width:375px;height:249px}}@media (min-width: 500px) and (max-width: 767px){.o_exception .o_visual{width:250px;height:166px}}@media (max-width: 500px){.o_exception .o_visual{background-size:cover}} -- GitLab