diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java b/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java index 23b3ee2bea5c0a8f1644a0fdd446ab2c0eeb7f9f..cb83111c0f6a528ddca26e6be58fd1c26171bd23 100644 --- a/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java +++ b/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java @@ -48,6 +48,7 @@ import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.VFSManager; import org.olat.core.util.vfs.filters.SystemItemFilter; import org.olat.core.util.vfs.filters.VFSItemFilter; +import org.olat.modules.edusharing.VFSEdusharingProvider; /** @@ -84,6 +85,7 @@ public class LinkFileCombiCalloutController extends BasicController { private boolean editable = true; private boolean relFilPathIsProposal; private boolean allowEditorRelativeLinks; + private final VFSEdusharingProvider edusharingProvider; /** * @@ -107,15 +109,19 @@ public class LinkFileCombiCalloutController extends BasicController { * @param customLinkTreeModel * The custom link tree model or NULL if no link tree model used * in HTML editor + * @param edusharingProviderm + * Enable content from edu-sharing with this provider */ - public LinkFileCombiCalloutController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, String relFilePath, - boolean relFilPathIsProposal, boolean allowEditorRelativeLinks, boolean allowRemove, CustomLinkTreeModel customLinkTreeModel) { + public LinkFileCombiCalloutController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, + String relFilePath, boolean relFilPathIsProposal, boolean allowEditorRelativeLinks, boolean allowRemove, + CustomLinkTreeModel customLinkTreeModel, VFSEdusharingProvider edusharingProvider) { super(ureq, wControl); this.baseContainer = baseContainer; this.relFilPathIsProposal = relFilPathIsProposal; this.allowEditorRelativeLinks = allowEditorRelativeLinks; this.customLinkTreeModel = customLinkTreeModel; + this.edusharingProvider = edusharingProvider; // Main container for everything contentVC = createVelocityContainer("combiFileCallout"); @@ -263,8 +269,9 @@ public class LinkFileCombiCalloutController extends BasicController { editorRelPath = file.getName(); } // Open HTML editor in dialog - Controller wysiwygCtr = WysiwygFactory.createWysiwygControllerWithInternalLink(ureq, getWindowControl(), editorBaseContainer, editorRelPath, true, customLinkTreeModel); - displayModal(wysiwygCtr); + HTMLEditorController wysiwygCtr = WysiwygFactory.createWysiwygControllerWithInternalLink(ureq, + getWindowControl(), editorBaseContainer, editorRelPath, true, customLinkTreeModel, edusharingProvider); + displayModal(wysiwygCtr); } private void doOpenCallout(UserRequest ureq) { diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java index c92b21fcf55770c3f5608cf2db95d1097c456ebd..861fc401dca9595b1c6f98035c04c0a3a4be8d14 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/HTMLEditorController.java @@ -56,6 +56,8 @@ import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSItem; import org.olat.core.util.vfs.VFSLeaf; import org.olat.core.util.vfs.version.Versionable; +import org.olat.modules.edusharing.EdusharingFilter; +import org.olat.modules.edusharing.VFSEdusharingProvider; import org.olat.user.UserManager; /** @@ -116,6 +118,7 @@ public class HTMLEditorController extends FormBasicController { private boolean versionsEnabled = true; private boolean buttonsEnabled = true; private String fileToLargeError = null; + private VFSEdusharingProvider edusharingProvider; private Object userObject; /** @@ -137,12 +140,14 @@ public class HTMLEditorController extends FormBasicController { * true: check if file has been created with another tool and * warn user about potential data loss; false: ignore other * authoring tools + * @param edusharingProvider * @return Controller with internal-link selector */ - public HTMLEditorController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, String relFilePath, - CustomLinkTreeModel customLinkTreeModel, String mediaPath, boolean editorCheckEnabled, boolean versions) { + public HTMLEditorController(UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, + String relFilePath, CustomLinkTreeModel customLinkTreeModel, String mediaPath, boolean editorCheckEnabled, + boolean versions, VFSEdusharingProvider edusharingProvider) { super(ureq, wControl, "htmleditor"); - initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, true); + initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, true, edusharingProvider); initForm(ureq); } @@ -151,13 +156,13 @@ public class HTMLEditorController extends FormBasicController { CustomLinkTreeModel customLinkTreeModel, String mediaPath, boolean editorCheckEnabled, boolean versions, boolean withButtons, Form rootForm) { super(ureq, wControl, LAYOUT_CUSTOM, "htmleditor", rootForm); // set some basic variables - initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, withButtons); + initEditorForm(baseContainer, relFilePath, customLinkTreeModel, mediaPath, editorCheckEnabled, versions, withButtons, null); initForm(ureq); } - private void initEditorForm(VFSContainer bContainer, String relFilePath, - CustomLinkTreeModel linkTreeModel, String mPath, - boolean editorCheck, boolean versions, boolean withButtons) { + private void initEditorForm(VFSContainer bContainer, String relFilePath, CustomLinkTreeModel linkTreeModel, + String mPath, boolean editorCheck, boolean versions, boolean withButtons, + VFSEdusharingProvider edusharingProvider) { this.baseContainer = bContainer; this.fileRelPath = relFilePath; @@ -203,6 +208,10 @@ public class HTMLEditorController extends FormBasicController { } // Parse the content of the page this.body = parsePage(fileLeaf); + if (edusharingProvider != null) { + this.edusharingProvider = edusharingProvider; + this.edusharingProvider.setSubPath(fileLeaf); + } } public Object getUserObject() { @@ -285,6 +294,7 @@ public class HTMLEditorController extends FormBasicController { if(StringHelper.containsNonWhitespace(mediaPath)) { editorConfiguration.setFileBrowserUploadRelPath(mediaPath); } + editorConfiguration.enableEdusharing(getIdentity(), edusharingProvider); // The buttons if(buttonsEnabled) { @@ -425,6 +435,11 @@ public class HTMLEditorController extends FormBasicController { // No XSS checks, are done in the HTML editor - users can upload illegal // stuff, JS needs to be enabled for users String content = htmlElement.getRawValue(); + // Filter here because it is raw value + EdusharingFilter edusharingFilter = htmlElement.getEditorConfiguration().getEdusharingFilter(); + if (edusharingFilter != null) { + content = edusharingFilter.filter(content); + } // If preface was null -> append own head and save it in utf-8. Preface // is the header that was in the file when we opened the file StringBuilder fileContent = new StringBuilder(); diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java index 5452e4f364c5c28ec3f97b6f36333f6383da8b1b..f2a71ab35181ee52932ce942974941ed9382fbe2 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java @@ -32,6 +32,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.id.OLATResourceable; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSLeaf; +import org.olat.modules.edusharing.VFSEdusharingProvider; /** * Description: The WYSIWYGFactory provides a full-fledged WYSIWYG HTML editor @@ -65,18 +66,23 @@ public class WysiwygFactory { * the userActivity Logger if used * @return */ - public static HTMLEditorController createWysiwygController( - UserRequest ureq, WindowControl wControl, VFSContainer rootDir, - String filePath, boolean editorCheckEnabled, boolean versions) { - return new HTMLEditorController(ureq, wControl, rootDir, filePath, - null, null, editorCheckEnabled, versions); + public static HTMLEditorController createWysiwygController(UserRequest ureq, WindowControl wControl, + VFSContainer rootDir, String filePath, boolean editorCheckEnabled, boolean versions) { + return createWysiwygController(ureq, wControl, rootDir, filePath, editorCheckEnabled, versions, null); + } + + public static HTMLEditorController createWysiwygController(UserRequest ureq, WindowControl wControl, + VFSContainer rootDir, String filePath, boolean editorCheckEnabled, boolean versions, + VFSEdusharingProvider edusharingProvider) { + return new HTMLEditorController(ureq, wControl, rootDir, filePath, null, null, editorCheckEnabled, versions, + edusharingProvider); } public static HTMLEditorController createWysiwygController( UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String filePath, String mediaPath, boolean editorCheckEnabled, boolean versions) { return new HTMLEditorController(ureq, wControl, rootDir, filePath, - null, mediaPath, editorCheckEnabled, versions); + null, mediaPath, editorCheckEnabled, versions, null); } /** @@ -107,8 +113,15 @@ public class WysiwygFactory { UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, String relFilePath, boolean editorCheckEnabled, CustomLinkTreeModel customLinkTreeModel) { + return createWysiwygControllerWithInternalLink(ureq, wControl, baseContainer, relFilePath, editorCheckEnabled, customLinkTreeModel, null); + } + + public static HTMLEditorController createWysiwygControllerWithInternalLink( + UserRequest ureq, WindowControl wControl, VFSContainer baseContainer, + String relFilePath, boolean editorCheckEnabled, + CustomLinkTreeModel customLinkTreeModel, VFSEdusharingProvider edusharingProvider) { return new HTMLEditorController(ureq, wControl, baseContainer, relFilePath, - customLinkTreeModel, null, editorCheckEnabled, true); + customLinkTreeModel, null, editorCheckEnabled, true, edusharingProvider); } /** diff --git a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java index 704653b2da3ca8837890680ea413bf16e7abb3e6..184c2cfe893b7e585d4f40d22ef1eebb0ea70275 100644 --- a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java +++ b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java @@ -58,6 +58,8 @@ import org.olat.core.logging.activity.CourseLoggingAction; import org.olat.core.logging.activity.ThreadLocalUserActivityLogger; import org.olat.core.util.Formatter; import org.olat.core.util.vfs.VFSContainer; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; /** * Description:<BR> @@ -95,6 +97,7 @@ public class SinglePageController extends BasicController implements CloneableCo private boolean g_allowRelativeLinks; private VFSContainer g_rootContainer; private VFSContainer g_new_rootContainer; + private Long courseRepoKey; /** * @@ -110,7 +113,7 @@ public class SinglePageController extends BasicController implements CloneableCo public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, boolean allowRelativeLinks) { //default behavior is to show the home link in a single page - this(ureq, wControl, rootContainer, fileName, allowRelativeLinks, null, null, null, false); + this(ureq, wControl, rootContainer, fileName, allowRelativeLinks, null, null, null, false, null); } /** @@ -132,11 +135,16 @@ public class SinglePageController extends BasicController implements CloneableCo * navigating in /folder/ and subfolders of this folder is allowed * @param showHomeLink true enables the home link icon and link which is added to the SP, false removes icon and link. * - * */ public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, boolean allowRelativeLinks, String frameId, OLATResourceable contextResourcable, DeliveryOptions config, boolean randomizeMapper) { + this(ureq, wControl, rootContainer, fileName, allowRelativeLinks, frameId, contextResourcable, config, randomizeMapper, null); + } + + public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, + boolean allowRelativeLinks, String frameId, OLATResourceable contextResourcable, DeliveryOptions config, + boolean randomizeMapper, Long courseRepoKey) { super(ureq, wControl); SimpleStackedPanel mainP = new SimpleStackedPanel("iframemain"); @@ -151,6 +159,7 @@ public class SinglePageController extends BasicController implements CloneableCo this.g_rootContainer = rootContainer; this.frameId = frameId; this.randomizeMapper = randomizeMapper; + this.courseRepoKey = courseRepoKey; boolean jumpIn = false; // strip beginning slash @@ -228,9 +237,6 @@ public class SinglePageController extends BasicController implements CloneableCo } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Controller source, Event event) { if (source == idc) { @@ -256,9 +262,6 @@ public class SinglePageController extends BasicController implements CloneableCo } } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { if (source == editLink && event.getCommand().equals(COMMAND_EDIT)) { @@ -266,11 +269,12 @@ public class SinglePageController extends BasicController implements CloneableCo if (g_curURI == null || g_new_rootContainer == null || g_new_rootContainer.resolve(g_curURI) == null) { showError("error.pagenotfound"); } else { + VFSEdusharingProvider edusharingProvider = courseRepoKey != null? new LazyRepositoryEdusharingProvider(courseRepoKey): null; if (customLinkTreeModel == null) { - htmlEditorController = WysiwygFactory.createWysiwygController(ureq, getWindowControl(), g_new_rootContainer, g_curURI, true, true); + htmlEditorController = WysiwygFactory.createWysiwygController(ureq, getWindowControl(), g_new_rootContainer, g_curURI, true, true, edusharingProvider); } else { htmlEditorController = WysiwygFactory.createWysiwygControllerWithInternalLink(ureq, getWindowControl(), g_new_rootContainer, - g_curURI, true, customLinkTreeModel); + g_curURI, true, customLinkTreeModel, edusharingProvider ); } listenTo(htmlEditorController); mainPanel.setContent(htmlEditorController.getInitialComponent()); @@ -282,9 +286,6 @@ public class SinglePageController extends BasicController implements CloneableCo this.g_curURI = uri; } - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ @Override protected void doDispose() { // NOTE: do not deregister this mapper here: the url pointing to this mapper is opened in a new browser window @@ -302,12 +303,9 @@ public class SinglePageController extends BasicController implements CloneableCo this.customLinkTreeModel = customLinkTreeModel; } - /** - * @see org.olat.core.gui.control.generic.clone.CloneableController#cloneController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl) - */ @Override public Controller cloneController(UserRequest ureq, WindowControl control) { - return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_allowRelativeLinks, frameId, null, deliveryOptions, randomizeMapper); + return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_allowRelativeLinks, frameId, null, deliveryOptions, randomizeMapper, courseRepoKey); } @Override diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java index a7347676f69a6c4139c1f0dec18f9214f167d524..939d582c70eb6e47941fe2e85eb1302e2fce3736 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextConfiguration.java @@ -892,6 +892,8 @@ public class RichTextConfiguration implements Disposable { } public void enableEdusharing(Identity identity, EdusharingProvider provider) { + if (identity == null || provider == null) return; + EdusharingModule edusharingModule = CoreSpringFactory.getImpl(EdusharingModule.class); if (edusharingModule.isEnabled()) { tinyConfig = tinyConfig.enableEdusharing(); @@ -900,6 +902,15 @@ public class RichTextConfiguration implements Disposable { } } + public EdusharingFilter getEdusharingFilter() { + for (Filter filter : valueFilters) { + if (filter instanceof EdusharingFilter) { + return (EdusharingFilter) filter; + } + } + return null; + } + public void addValueFilter(Filter filter) { valueFilters.add(filter); } diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_content/index.html b/src/main/java/org/olat/core/gui/control/generic/iframe/_content/index.html index 6d6f75665d07e0f7f81e08ceaf1b01b475f413a6..9df2fcdbae8d70cb59865c604d1df56ed7145670 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/_content/index.html +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_content/index.html @@ -7,7 +7,7 @@ #if ($isAbsoluteURI) <iframe name="$frameId" id="$frameId" src="${currentURI}" frameborder="0" title="$r.translateInAttribute("iframe.content")" height="$iframeHeight" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> #else - <iframe name="$frameId" id="$frameId" src="${baseURI}/${currentURI}" frameborder="0" height="$iframeHeight" style="min-height:${iframeHeight}px" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> + <iframe name="$frameId" class="o_iframe_rel" id="$frameId" src="${baseURI}/${currentURI}" frameborder="0" height="$iframeHeight" style="min-height:${iframeHeight}px" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> #end #if($adjustAutoHeight) diff --git a/src/main/java/org/olat/core/gui/control/generic/spacesaver/_content/togglebox.html b/src/main/java/org/olat/core/gui/control/generic/spacesaver/_content/togglebox.html index 1a12463641ec2b8fd8010f2cb4f0c87a7a2f5589..017bbda8774cdb0256c92268d77c30925e2b375b 100644 --- a/src/main/java/org/olat/core/gui/control/generic/spacesaver/_content/togglebox.html +++ b/src/main/java/org/olat/core/gui/control/generic/spacesaver/_content/togglebox.html @@ -4,6 +4,7 @@ <div class="o_togglebox"> <div id="my_toggle_box_uuid" class="o_togglebox_content"> $r.render("cmpToToggle") + <div class="clearfix"></div> $r.render("hide") </div> </div> diff --git a/src/main/java/org/olat/course/editor/NodeConfigFormController.java b/src/main/java/org/olat/course/editor/NodeConfigFormController.java index 307cda989ba1d4526d28fcedc7c7db9aef076dfb..8dcec02921b656210b5076b522eedc42180bf4e4 100644 --- a/src/main/java/org/olat/course/editor/NodeConfigFormController.java +++ b/src/main/java/org/olat/course/editor/NodeConfigFormController.java @@ -33,6 +33,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; import org.olat.course.nodes.CourseNode; +import org.olat.modules.edusharing.EdusharingProvider; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; /** * Provides a FlexiForm that lets the user configure details for a course node. @@ -81,6 +83,9 @@ public class NodeConfigFormController extends FormBasicController { * Selection fot the options title */ private SingleSelection displayOptions; + + private Long repositoryEntryKey; + private String nodeIdent; /** * Initializes this controller. @@ -88,14 +93,17 @@ public class NodeConfigFormController extends FormBasicController { * @param ureq The user request. * @param wControl The window control. * @param courseNode The course node this controller will access. + * @param repoKey * @param withCancel Decides whether to show a <i>cancel</i> button. */ - public NodeConfigFormController(UserRequest ureq, WindowControl wControl, CourseNode courseNode) { + public NodeConfigFormController(UserRequest ureq, WindowControl wControl, CourseNode courseNode, Long repoKey) { super(ureq, wControl, FormBasicController.LAYOUT_DEFAULT); menuTitle = Formatter.truncate(courseNode.getShortTitle(), SHORT_TITLE_MAX_LENGTH); displayTitle = courseNode.getLongTitle(); learningObjectives = courseNode.getLearningObjectives(); displayOption = courseNode.getDisplayOption(); + nodeIdent = courseNode.getIdent(); + repositoryEntryKey = repoKey; initForm(ureq); } @@ -153,6 +161,8 @@ public class NodeConfigFormController extends FormBasicController { // add the learning objectives rich text input element objectives = uifactory.addRichTextElementForStringData("nodeConfigForm.learningobjectives", "nodeConfigForm.learningobjectives", (learningObjectives==null?"":learningObjectives), 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl()); objectives.setMaxLength(4000); + EdusharingProvider provider = new LazyRepositoryEdusharingProvider(repositoryEntryKey, "course-learning-objectives-" + nodeIdent); + objectives.getEditorConfiguration().enableEdusharing(getIdentity(), provider); String[] values = new String[]{ translate("nodeConfigForm.short_title_desc_content"), diff --git a/src/main/java/org/olat/course/editor/NodeEditController.java b/src/main/java/org/olat/course/editor/NodeEditController.java index e7cdd57613d8e773c7217f075e6089cbc5c0f5f5..ff816d6f0d458990cc4f74dc10c56cacd0ed7821 100644 --- a/src/main/java/org/olat/course/editor/NodeEditController.java +++ b/src/main/java/org/olat/course/editor/NodeEditController.java @@ -88,13 +88,6 @@ public class NodeEditController extends ActivateableTabbableDefaultController im public static final Event NODECONFIG_CHANGED_EVENT = new Event("nodeconfigchanged"); private static final String[] paneKeys = { PANE_TAB_VISIBILITY, PANE_TAB_GENERAL }; - /** - * @param ureq - * @param editorModel - * @param course - * @param luNode - * @param groupMgr - */ public NodeEditController(UserRequest ureq, WindowControl wControl, CourseEditorTreeModel editorModel, ICourse course, CourseNode luNode, UserCourseEnvironment euce, TabbableController childTabsController) { super(ureq,wControl); @@ -106,10 +99,10 @@ public class NodeEditController extends ActivateableTabbableDefaultController im /* * the direct child tabs. */ - this.childTabsCntrllr = childTabsController; + this.childTabsCntrllr = childTabsController; listenTo(childTabsCntrllr); - // description and metadata component + // description and metadata component descriptionVc = createVelocityContainer("nodeedit"); descriptionVc.setDomReplacementWrapperRequired(false); // we provide our own DOM replacement ID Long repoKey = RepositoryManager.getInstance().lookupRepositoryEntryKey(course, true); @@ -127,11 +120,11 @@ public class NodeEditController extends ActivateableTabbableDefaultController im putInitialPanel(descriptionVc); - nodeConfigController = new NodeConfigFormController(ureq, wControl, luNode); + nodeConfigController = new NodeConfigFormController(ureq, wControl, luNode, repoKey); listenTo(nodeConfigController); descriptionVc.put("nodeConfigForm", nodeConfigController.getInitialComponent()); - // Visibility and no-access explanation component + // Visibility and no-access explanation component visibilityVc = createVelocityContainer("visibilityedit"); // Visibility precondition @@ -144,24 +137,16 @@ public class NodeEditController extends ActivateableTabbableDefaultController im // No-Access-Explanation String noAccessExplanation = luNode.getNoAccessExplanation(); - noAccessContr = new NoAccessExplEditController(ureq, getWindowControl(), noAccessExplanation); + noAccessContr = new NoAccessExplEditController(ureq, getWindowControl(), noAccessExplanation); listenTo(noAccessContr); visibilityVc.put("noAccessExplanationComp", noAccessContr.getInitialComponent()); } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Component source, Event event) { // Don't do anything. } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest urequest, Controller source, Event event) { @@ -215,9 +200,6 @@ public class NodeEditController extends ActivateableTabbableDefaultController im return descriptionVc; } - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ @Override protected void doDispose() { //child controllers registered with listenTo() get disposed in BasicController @@ -233,6 +215,7 @@ public class NodeEditController extends ActivateableTabbableDefaultController im return myTabbedPane; } + @Override public void addTabs(TabbedPane tabbedPane) { myTabbedPane = tabbedPane; tabbedPane.addTab(translate(PANE_TAB_GENERAL), descriptionVc); @@ -242,9 +225,6 @@ public class NodeEditController extends ActivateableTabbableDefaultController im } } - /** - * @see org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController#getChildren() - */ @Override protected ActivateableTabbableDefaultController[] getChildren() { if (childTabsCntrllr != null && childTabsCntrllr instanceof ActivateableTabbableDefaultController) { diff --git a/src/main/java/org/olat/course/nodes/SPCourseNode.java b/src/main/java/org/olat/course/nodes/SPCourseNode.java index 5e03f0d03bd8c8a0517d93d0d2b4195e80b9915e..691604097fec0be7345a7226a9a0536425d37178 100644 --- a/src/main/java/org/olat/course/nodes/SPCourseNode.java +++ b/src/main/java/org/olat/course/nodes/SPCourseNode.java @@ -71,10 +71,6 @@ public class SPCourseNode extends AbstractAccessableCourseNode { updateModuleConfigDefaults(true); } - /** - * @see org.olat.course.nodes.CourseNode#createEditController(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, org.olat.course.ICourse) - */ @Override public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) { updateModuleConfigDefaults(false); @@ -86,12 +82,6 @@ public class SPCourseNode extends AbstractAccessableCourseNode { return nodeEditController; } - /** - * @see org.olat.course.nodes.CourseNode#createNodeRunConstructionResult(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.course.run.userview.UserCourseEnvironment, - * org.olat.course.run.userview.NodeEvaluation) - */ @Override public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) { @@ -103,12 +93,7 @@ public class SPCourseNode extends AbstractAccessableCourseNode { } - /** - * @see org.olat.course.nodes.GenericCourseNode#createPeekViewRunController(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.course.run.userview.UserCourseEnvironment, - * org.olat.course.run.userview.NodeEvaluation) - */ + @Override public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne) { if (ne.isAtLeastOneAccessible()) { OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId()); @@ -121,12 +106,7 @@ public class SPCourseNode extends AbstractAccessableCourseNode { } - /** - * @see org.olat.course.nodes.GenericCourseNode#createPreviewController(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.course.run.userview.UserCourseEnvironment, - * org.olat.course.run.userview.NodeEvaluation) - */ + @Override public Controller createPreviewController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, NodeEvaluation ne) { return createNodeRunConstructionResult(ureq, wControl, userCourseEnv, ne, null).getRunController(); } @@ -136,12 +116,11 @@ public class SPCourseNode extends AbstractAccessableCourseNode { return CourseNode.DISPLAY_OPTS_CONTENT; } - /** - * @see org.olat.course.nodes.CourseNode#isConfigValid() - */ - public StatusDescription isConfigValid() {/* - * first check the one click cache - */ + @Override + public StatusDescription isConfigValid() { + /* + * first check the one click cache + */ if (oneClickStatusCache != null) { return oneClickStatusCache[0]; } String file = (String) getModuleConfiguration().get(SPEditController.CONFIG_KEY_FILE); @@ -163,9 +142,7 @@ public class SPCourseNode extends AbstractAccessableCourseNode { } - /** - * @see org.olat.course.nodes.CourseNode#isConfigValid(org.olat.course.run.userview.UserCourseEnvironment) - */ + @Override public StatusDescription[] isConfigValid(CourseEditorEnv cev) { oneClickStatusCache = null; // only here we know which translator to take for translating condition @@ -176,16 +153,12 @@ public class SPCourseNode extends AbstractAccessableCourseNode { return oneClickStatusCache; } - /** - * @see org.olat.course.nodes.CourseNode#getReferencedRepositoryEntry() - */ + @Override public RepositoryEntry getReferencedRepositoryEntry() { return null; } - /** - * @see org.olat.course.nodes.CourseNode#needsReferenceToARepositoryEntry() - */ + @Override public boolean needsReferenceToARepositoryEntry() { return false; } @@ -198,6 +171,7 @@ public class SPCourseNode extends AbstractAccessableCourseNode { * from previous node configuration version, set default to maintain * previous behaviour */ + @Override public void updateModuleConfigDefaults(boolean isNewNode) { ModuleConfiguration config = getModuleConfiguration(); if (isNewNode) { @@ -230,4 +204,5 @@ public class SPCourseNode extends AbstractAccessableCourseNode { //there was a version 3 but all keys new in this version have been removed } } + } diff --git a/src/main/java/org/olat/course/nodes/STCourseNode.java b/src/main/java/org/olat/course/nodes/STCourseNode.java index 84667ef192b9d3ce8881ca8b5b909d19f7b28753..c57a47cb18a95b62a31f11abc55e2565e1340d54 100644 --- a/src/main/java/org/olat/course/nodes/STCourseNode.java +++ b/src/main/java/org/olat/course/nodes/STCourseNode.java @@ -135,8 +135,7 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Calcul public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) { updateModuleConfigDefaults(false); // only the precondition "access" can be configured till now - STCourseNodeEditController childTabCntrllr = new STCourseNodeEditController(ureq, wControl, this, course.getCourseFolderContainer(), - course.getEditorTreeModel(), euce); + STCourseNodeEditController childTabCntrllr = new STCourseNodeEditController(ureq, wControl, this, course, euce); CourseNode chosenNode = course.getEditorTreeModel().getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId()); NodeEditController nodeEditController = new NodeEditController(ureq, wControl, course.getEditorTreeModel(), course, chosenNode, euce, childTabCntrllr); // special case: listen to st edit controller, must be informed when the short title is being modified @@ -145,12 +144,6 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Calcul } - /** - * @see org.olat.course.nodes.CourseNode#createNodeRunConstructionResult(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl, - * org.olat.course.run.userview.UserCourseEnvironment, - * org.olat.course.run.userview.NodeEvaluation) - */ @Override public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl, final UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) { @@ -171,9 +164,10 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Calcul } DeliveryOptions deliveryOptions = (DeliveryOptions)getModuleConfiguration().get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS); OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId()); + Long courseRepoKey = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry().getKey(); SinglePageController spCtr = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), relPath, allowRelativeLinks.booleanValue(), null, ores, deliveryOptions, - userCourseEnv.getCourseEnvironment().isPreview()); + userCourseEnv.getCourseEnvironment().isPreview(), courseRepoKey); // check if user is allowed to edit the page in the run view CourseGroupManager cgm = userCourseEnv.getCourseEnvironment().getCourseGroupManager(); boolean hasEditRights = userCourseEnv.isAdmin() || cgm.hasRight(ureq.getIdentity(),CourseRights.RIGHT_COURSEEDITOR) diff --git a/src/main/java/org/olat/course/nodes/iq/IQLayoutConfigurationController.java b/src/main/java/org/olat/course/nodes/iq/IQLayoutConfigurationController.java index 6a97a32de449e04657a4575d7e8366ecf86cc926..78e4845a518f91e73230836369093a87bf639393 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQLayoutConfigurationController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQLayoutConfigurationController.java @@ -104,7 +104,7 @@ public class IQLayoutConfigurationController extends BasicController { } combiLinkCtr = new LinkFileCombiCalloutController(ureq, wControl, courseFolderBaseContainer, disclaimer, relFilPathIsProposal, allowRelativeLinks, true, - new CourseInternalLinkTreeModel(course.getEditorTreeModel())); + new CourseInternalLinkTreeModel(course.getEditorTreeModel()), null); listenTo(combiLinkCtr); myContent.put("combiCtr", combiLinkCtr.getInitialComponent()); myContent.contextPut("editorEnabled", combiLinkCtr.isEditorEnabled()); diff --git a/src/main/java/org/olat/course/nodes/sp/SPEditController.java b/src/main/java/org/olat/course/nodes/sp/SPEditController.java index 9ec96e8757ef05aa9cd24342459232b112bb8746..c3ace5110863e7a32c19f01fbf684c85c4f30a59 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPEditController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPEditController.java @@ -52,6 +52,9 @@ import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; import org.olat.course.tree.CourseInternalLinkTreeModel; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.RepositoryManager; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; /** * Description:<BR/> @@ -128,9 +131,11 @@ public class SPEditController extends ActivateableTabbableDefaultController impl relFilPathIsProposal = true; } // File create/select controller + Long repoKey = RepositoryManager.getInstance().lookupRepositoryEntryKey(course, true); + VFSEdusharingProvider edusharingProvider = new LazyRepositoryEdusharingProvider(repoKey); combiLinkCtr = new LinkFileCombiCalloutController(ureq, wControl, courseFolderBaseContainer, relFilePath, relFilPathIsProposal, allowRelativeLinks, false, - new CourseInternalLinkTreeModel(course.getEditorTreeModel())); + new CourseInternalLinkTreeModel(course.getEditorTreeModel()), edusharingProvider); combiLinkCtr.setEditable(hasEditRights(relFilePath)); listenTo(combiLinkCtr); myContent.put("combiCtr", combiLinkCtr.getInitialComponent()); @@ -158,6 +163,7 @@ public class SPEditController extends ActivateableTabbableDefaultController impl * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) */ + @Override public void event(UserRequest ureq, Component source, Event event) { // } @@ -233,14 +239,17 @@ public class SPEditController extends ActivateableTabbableDefaultController impl * * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ + @Override protected void doDispose() { //child controllers registered with listenTo() get disposed in BasicController } + @Override public String[] getPaneKeys() { return paneKeys; } + @Override public TabbedPane getTabbedPane() { return myTabbedPane; } diff --git a/src/main/java/org/olat/course/nodes/sp/SPRunController.java b/src/main/java/org/olat/course/nodes/sp/SPRunController.java index 2c2a2d5d61dcc7d09d676697b5eb26706e85295d..9312a4d33461030909b20d1caf8ec12b5aca3247 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPRunController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPRunController.java @@ -87,6 +87,7 @@ public class SPRunController extends BasicController implements Activateable2 { private final boolean hasEditRights; private CustomLinkTreeModel linkTreeModel; + private Long repoKey; private final UserCourseEnvironment userCourseEnv; @@ -106,6 +107,7 @@ public class SPRunController extends BasicController implements Activateable2 { this.courseNode = courseNode; this.config = courseNode.getModuleConfiguration(); this.userCourseEnv = userCourseEnv; + this.repoKey = userCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry().getKey(); addLoggingResourceable(LoggingResourceable.wrap(courseNode)); @@ -181,7 +183,7 @@ public class SPRunController extends BasicController implements Activateable2 { DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS); spCtr = new SinglePageController(ureq, getWindowControl(), courseFolderContainer, fileName, - allowRelativeLinks, null, ores, deliveryOptions, userCourseEnv.getCourseEnvironment().isPreview()); + allowRelativeLinks, null, ores, deliveryOptions, userCourseEnv.getCourseEnvironment().isPreview(), repoKey); spCtr.setAllowDownload(true); // only for inline integration: register for controller event to forward a olatcmd to the course, @@ -198,8 +200,10 @@ public class SPRunController extends BasicController implements Activateable2 { // create clone wrapper layout CloneLayoutControllerCreatorCallback clccc = new CloneLayoutControllerCreatorCallback() { + @Override public ControllerCreator createLayoutControllerCreator(UserRequest uureq, final ControllerCreator contentControllerCreator) { return BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(uureq, new ControllerCreator() { + @Override public Controller createController(UserRequest lureq, WindowControl lwControl) { // Wrap in column layout, popup window needs a layout controller Controller ctr = contentControllerCreator.createController(lureq, lwControl); @@ -236,6 +240,7 @@ public class SPRunController extends BasicController implements Activateable2 { * * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ + @Override protected void doDispose() { //child controller registered with listenTo gets disposed in BasicController } diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java index 3fe383a48654ed1274d3983f31b9e6756a29481e..e76ca97d8e97cc4c2a3ac04c88343e50c6a959e9 100644 --- a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java +++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java @@ -46,6 +46,7 @@ import org.olat.core.gui.translator.Translator; import org.olat.core.util.Util; import org.olat.core.util.vfs.VFSContainer; import org.olat.core.util.vfs.VFSManager; +import org.olat.course.ICourse; import org.olat.course.assessment.AssessmentHelper; import org.olat.course.condition.Condition; import org.olat.course.condition.ConditionEditController; @@ -60,6 +61,9 @@ import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.tree.CourseEditorTreeModel; import org.olat.course.tree.CourseInternalLinkTreeModel; import org.olat.modules.ModuleConfiguration; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.RepositoryManager; +import org.olat.repository.ui.settings.LazyRepositoryEdusharingProvider; /** * Description:<BR/> Edit controller for a course node of type structure <P/> @@ -130,24 +134,15 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr private TabbedPane myTabbedPane; private CourseEditorTreeModel editorModel; + private final Long repoKey; - - /** - * @param ureq - * @param wControl - * @param stNode - * @param courseFolderPath - * @param groupMgr - * @param editorModel - */ - public STCourseNodeEditController(UserRequest ureq, WindowControl wControl, STCourseNode stNode, VFSContainer courseFolderContainer, - CourseEditorTreeModel editorModel, UserCourseEnvironment euce) { + public STCourseNodeEditController(UserRequest ureq, WindowControl wControl, STCourseNode stNode, ICourse course, UserCourseEnvironment euce) { super(ureq, wControl); - this.stNode = stNode; - this.courseFolderContainer = courseFolderContainer; + this.courseFolderContainer = course.getCourseFolderContainer(); this.euce = euce; - this.editorModel = editorModel; + this.editorModel = course.getEditorTreeModel(); + this.repoKey = RepositoryManager.getInstance().lookupRepositoryEntryKey(course, true); Translator fallback = Util.createPackageTranslator(Condition.class, getLocale()); Translator newTranslator = Util.createPackageTranslator(STCourseNodeEditController.class, getLocale(), fallback); @@ -243,10 +238,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr score.contextPut("isExpertMode", Boolean.TRUE); } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.components.Component, org.olat.core.gui.control.Event) - */ + @Override public void event(UserRequest ureq, Component source, Event event) { if (source == activateEasyModeButton) { initScoreEasyForm(ureq); @@ -276,10 +268,6 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr return null; } - /** - * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event) - */ @Override public void event(UserRequest ureq, Controller source, Event event) { if (source instanceof NodeEditController) { @@ -397,9 +385,10 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr relFilPathIsProposal = true; } // File create/select controller + VFSEdusharingProvider edusharingProvider = new LazyRepositoryEdusharingProvider(repoKey); combiLinkCtr = new LinkFileCombiCalloutController(ureq, getWindowControl(), courseFolderContainer, relFilePath, relFilPathIsProposal, allowRelativeLinks, false, - new CourseInternalLinkTreeModel(editorModel) ); + new CourseInternalLinkTreeModel(editorModel), edusharingProvider); listenTo(combiLinkCtr); configvc.put("combiCtr", combiLinkCtr.getInitialComponent()); configvc.contextPut("editorEnabled", combiLinkCtr.isEditorEnabled()); @@ -446,6 +435,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr /** * @see org.olat.core.gui.control.generic.tabbable.TabbableDefaultController#addTabs(org.olat.core.gui.components.TabbedPane) */ + @Override public void addTabs(TabbedPane tabbedPane) { myTabbedPane = tabbedPane; tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate("condition.accessibility.title"))); @@ -462,6 +452,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ + @Override protected void doDispose() { //child controllers registered with listenTo() get disposed in BasicController } @@ -474,10 +465,12 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr return (String) mc.get(CONFIG_KEY_FILE); } + @Override public String[] getPaneKeys() { return paneKeys; } + @Override public TabbedPane getTabbedPane() { return myTabbedPane; } diff --git a/src/main/java/org/olat/modules/edusharing/EdusharingFilter.java b/src/main/java/org/olat/modules/edusharing/EdusharingFilter.java index c3aef578842ab37d7896f6c100abe7aadd5cc933..e39bc787f500a6d9cb6df027b6db0b79fc394ac8 100644 --- a/src/main/java/org/olat/modules/edusharing/EdusharingFilter.java +++ b/src/main/java/org/olat/modules/edusharing/EdusharingFilter.java @@ -58,7 +58,7 @@ public class EdusharingFilter implements Filter { this.provider = provider; CoreSpringFactory.autowireObject(this); } - + @Override public String filter(String original) { if (edusharingModule.isEnabled()) { diff --git a/src/main/java/org/olat/modules/edusharing/EdusharingService.java b/src/main/java/org/olat/modules/edusharing/EdusharingService.java index 91b1733305ff431524601b244607809fda2676d4..1939bc99566f2110504ab7c59366a0ed615b9e85 100644 --- a/src/main/java/org/olat/modules/edusharing/EdusharingService.java +++ b/src/main/java/org/olat/modules/edusharing/EdusharingService.java @@ -73,5 +73,7 @@ public interface EdusharingService { public List<EdusharingUsage> loadUsages(OLATResourceable ores, String subPath); public void deleteUsage(Identity identity, String identifier) throws EdusharingException; - + + public void deleteUsages(OLATResourceable ores, String subPath) throws EdusharingException; + } diff --git a/src/main/java/org/olat/modules/edusharing/VFSEdusharingProvider.java b/src/main/java/org/olat/modules/edusharing/VFSEdusharingProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..b32851d762394b463692fc794c0ba5704fa6b469 --- /dev/null +++ b/src/main/java/org/olat/modules/edusharing/VFSEdusharingProvider.java @@ -0,0 +1,34 @@ +/** + * <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.modules.edusharing; + +import org.olat.core.util.vfs.VFSItem; + +/** + * + * Initial date: 8 Jan 2019<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public interface VFSEdusharingProvider extends EdusharingProvider { + + public void setSubPath(VFSItem item); + +} diff --git a/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java b/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java index 4cc5b0776e6a48e50be8f23b11bf0fbf469620c3..b2103249ea2843f183713e8445affa6bd8e294b6 100644 --- a/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java +++ b/src/main/java/org/olat/modules/edusharing/manager/EdusharingServiceImpl.java @@ -231,7 +231,7 @@ public class EdusharingServiceImpl implements EdusharingService { client.createUsage(parameter); EdusharingUsage usage = usageDao.create(identity, element, ores, provider.getSubPath()); - log.debug("edu-sharing filter usage created for identifier: "+ element.getIdentifier() + ", resType=" + log.debug("edu-sharing usage created for identifier: "+ element.getIdentifier() + ", resType=" + ores.getResourceableTypeName() + ", resId=" + ores.getResourceableId()); return usage; } @@ -249,15 +249,33 @@ public class EdusharingServiceImpl implements EdusharingService { @Override public void deleteUsage(Identity identity, String identifier) throws EdusharingException { EdusharingUsage usage = usageDao.loadByIdentifier(identifier); + if (usage == null) return; + + String userIdentifier = identity != null + ? userFactory.getUserIdentifier(identity) + : null; + + deleteUsage(usage, userIdentifier); + } + + @Override + public void deleteUsages(OLATResourceable ores, String subPath) throws EdusharingException { + List<EdusharingUsage> usages = usageDao.loadByResoureable(ores, subPath); + for (EdusharingUsage usage : usages) { + deleteUsage(usage, null); + } + } + + private void deleteUsage(EdusharingUsage usage, String userIdentifier) { DeleteUsageParameter parameter = new DeleteUsageParameter( usage.getIdentifier(), usage.getObjectUrl(), - userFactory.getUserIdentifier(identity), + userIdentifier, conversionService.toEdusharingCourseId(usage.getOlatResourceable()) ); client.deleteUsage(parameter); - log.debug("edu-sharing filter usage deleted for identifier: " + identifier); + log.debug("edu-sharing usage deleted for identifier: " + usage.getIdentifier()); - usageDao.delete(identifier); + usageDao.delete(usage.getIdentifier()); } } diff --git a/src/main/java/org/olat/modules/edusharing/manager/EdusharingUsageDAO.java b/src/main/java/org/olat/modules/edusharing/manager/EdusharingUsageDAO.java index 65750c9cf92a12bc192c0f28d102e3b21f7cf2f9..674119a6caa08893fff69566623323c14ccd9e14 100644 --- a/src/main/java/org/olat/modules/edusharing/manager/EdusharingUsageDAO.java +++ b/src/main/java/org/olat/modules/edusharing/manager/EdusharingUsageDAO.java @@ -19,6 +19,7 @@ */ package org.olat.modules.edusharing.manager; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -86,7 +87,7 @@ class EdusharingUsageDAO { } public List<EdusharingUsage> loadByResoureable(OLATResourceable ores, String subPath) { - if (ores == null) return null; + if (ores == null) return new ArrayList<>(0); QueryBuilder sb = new QueryBuilder(); sb.append("select usage"); diff --git a/src/main/java/org/olat/repository/ui/settings/LazyRepositoryEdusharingProvider.java b/src/main/java/org/olat/repository/ui/settings/LazyRepositoryEdusharingProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..98c162d2bbe0037eefa398b49df6cef92ec27012 --- /dev/null +++ b/src/main/java/org/olat/repository/ui/settings/LazyRepositoryEdusharingProvider.java @@ -0,0 +1,81 @@ +/** + * <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.settings; + +import org.olat.core.CoreSpringFactory; +import org.olat.core.id.OLATResourceable; +import org.olat.core.util.vfs.VFSItem; +import org.olat.modules.edusharing.EdusharingProvider; +import org.olat.modules.edusharing.UsageMetadata; +import org.olat.modules.edusharing.VFSEdusharingProvider; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryManager; + +/** + * + * Initial date: 8 Jan 2019<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public class LazyRepositoryEdusharingProvider implements VFSEdusharingProvider { + + private final Long repositoryEntryKey; + private String subPath; + private EdusharingProvider edusharingProvider; + + public LazyRepositoryEdusharingProvider(Long repositoryEntryKey) { + this(repositoryEntryKey, null); + } + + public LazyRepositoryEdusharingProvider(Long repositoryEntryKey, String subPath) { + this.repositoryEntryKey = repositoryEntryKey; + this.subPath = subPath; + } + + private EdusharingProvider getEdusharingProvider() { + if (edusharingProvider == null) { + RepositoryManager repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class); + RepositoryEntry repositoryEntry = repositoryManager.lookupRepositoryEntry(repositoryEntryKey); + edusharingProvider = new RepositoryEdusharingProvider(repositoryEntry, null); + } + return edusharingProvider; + } + + @Override + public void setSubPath(VFSItem item) { + this.subPath = "file-meta-uuid-" + item.getMetaInfo().getUUID(); + } + + @Override + public OLATResourceable getOlatResourceable() { + return getEdusharingProvider().getOlatResourceable(); + } + + @Override + public String getSubPath() { + return subPath; + } + + @Override + public UsageMetadata getUsageMetadata() { + return getEdusharingProvider().getUsageMetadata(); + } + +} diff --git a/src/main/java/org/olat/repository/ui/settings/RepositoryEdusharingProvider.java b/src/main/java/org/olat/repository/ui/settings/RepositoryEdusharingProvider.java index 2f9b539df6b7a60b2eb9e559682d7ea867f29ca4..1a44965c0aa223bf5d3b818890e6e93a7ca50678 100644 --- a/src/main/java/org/olat/repository/ui/settings/RepositoryEdusharingProvider.java +++ b/src/main/java/org/olat/repository/ui/settings/RepositoryEdusharingProvider.java @@ -55,6 +55,7 @@ public class RepositoryEdusharingProvider implements EdusharingProvider { UsageMetadata metadata = new UsageMetadata(); metadata.setCourseId(repositoryEntry.getKey().toString()); metadata.setFullname(repositoryEntry.getDisplayname()); + metadata.setShortname(repositoryEntry.getExternalRef()); return metadata; } diff --git a/src/main/webapp/static/js/functions.js b/src/main/webapp/static/js/functions.js index cc2ee6405e9ea5310859195323e4a7612e71affa..0026b73851af9857e6d9a5c616839f882c582126 100644 --- a/src/main/webapp/static/js/functions.js +++ b/src/main/webapp/static/js/functions.js @@ -2189,6 +2189,44 @@ var OOEdusharing = { OOEdusharing.replace(node); }); } + // Handle inside internal iFrames as well + var iFrames = jQuery(".o_iframe_rel"); + if (iFrames.length > 0) { + iFrames.each(function() { + var iFrame = jQuery( this ); + iFrame.on('load', function(){ + iFrame.contents().on('click', OOEdusharing.toggleMetadata); + var iFrameEsNodes = iFrame.contents().find("[data-es_identifier]"); + if (iFrameEsNodes.length > 0) { + iFrameEsNodes.each(function() { + var iFrameEsNode = jQuery( this ); + OOEdusharing.replace(iFrameEsNode); + }); + } + }); + }); + } + }, + + toggleMetadata: function (e) { + if (jQuery(e.target).closest(".edusharing_metadata").length) { + //clicked inside ".edusharing_metadata" - do nothing + } else if (jQuery(e.target).closest(".edusharing_metadata_toggle_button").length) { + jQuery(".edusharing_metadata").hide(); + toggle_button = jQuery(e.target); + metadata = toggle_button.parent().find(".edusharing_metadata"); + if (metadata.hasClass('open')) { + metadata.toggleClass('open'); + metadata.hide(); + } else { + jQuery(".edusharing_metadata").removeClass('open'); + metadata.toggleClass('open'); + metadata.show(); + } + } else { + jQuery(".edusharing_metadata").hide(); + jQuery(".edusharing_metadata").removeClass('open'); + } }, /** @@ -2196,26 +2234,7 @@ var OOEdusharing = { * see https://github.com/edu-sharing/plugin-moodle/blob/master/filter/edusharing/amd/src/edu.js */ enableMetadataToggler: function() { - jQuery(document).click(function (e) { - if (jQuery(e.target).closest(".edusharing_metadata").length) { - //clicked inside ".edusharing_metadata" - do nothing - } else if (jQuery(e.target).closest(".edusharing_metadata_toggle_button").length) { - jQuery(".edusharing_metadata").hide(); - toggle_button = jQuery(e.target); - metadata = toggle_button.parent().find(".edusharing_metadata"); - if (metadata.hasClass('open')) { - metadata.toggleClass('open'); - metadata.hide(); - } else { - jQuery(".edusharing_metadata").removeClass('open'); - metadata.toggleClass('open'); - metadata.show(); - } - } else { - jQuery(".edusharing_metadata").hide(); - jQuery(".edusharing_metadata").removeClass('open'); - } - }); + jQuery(document).click(OOEdusharing.toggleMetadata); } } diff --git a/src/main/webapp/static/js/js.plugins.min.js b/src/main/webapp/static/js/js.plugins.min.js index 5dcb87c7186120024c9bbcea23da1d91ca5a4c81..94bd42f3c091a4e5c27658f6307df9196f2c61a9 100644 --- a/src/main/webapp/static/js/js.plugins.min.js +++ b/src/main/webapp/static/js/js.plugins.min.js @@ -5,7 +5,7 @@ * Dual licensed under the MIT or GPL Version 2 licenses. * */ -jQuery.periodic=function(l,h){if(jQuery.isFunction(l)){h=l;l={}}var c=jQuery.extend({},jQuery.periodic.defaults,{ajax_complete:j,increment:g,reset:f,cancel:i},l);c.cur_period=c.period;c.tid=false;var e="";b();return c;function b(){i();c.tid=setTimeout(function(){h.call(c);g();if(c.tid){b()}},c.cur_period)}function j(n,m){if(m==="success"&&e!==n.responseText){e=n.responseText;f()}}function g(){c.cur_period*=c.decay;if(c.cur_period<c.period){f()}else{if(c.cur_period>c.max_period){c.cur_period=c.max_period;if(c.on_max!==undefined){c.on_max.call(c)}}}}function f(){c.cur_period=c.period;b()}function i(){clearTimeout(c.tid);c.tid=null}function k(){}function a(){}function d(){}};jQuery.periodic.defaults={period:4000,max_period:1800000,decay:1.5,on_max:undefined};var Hashtable=(function(){var p="function";var n=(typeof Array.prototype.splice==p)?function(s,r){s.splice(r,1)}:function(u,t){var s,v,r;if(t===u.length-1){u.length=t}else{s=u.slice(t+1);u.length=t;for(v=0,r=s.length;v<r;++v){u[t+v]=s[v]}}};function a(t){var r;if(typeof t=="string"){return t}else{if(typeof t.hashCode==p){r=t.hashCode();return(typeof r=="string")?r:a(r)}else{if(typeof t.toString==p){return t.toString()}else{try{return String(t)}catch(s){return Object.prototype.toString.call(t)}}}}}function g(r,s){return r.equals(s)}function e(r,s){return(typeof s.equals==p)?s.equals(r):(r===s)}function c(r){return function(s){if(s===null){throw new Error("null is not a valid "+r)}else{if(typeof s=="undefined"){throw new Error(r+" must not be undefined")}}}}var q=c("key"),l=c("value");function d(u,s,t,r){this[0]=u;this.entries=[];this.addEntry(s,t);if(r!==null){this.getEqualityFunction=function(){return r}}}var h=0,j=1,f=2;function o(r){return function(t){var s=this.entries.length,v,u=this.getEqualityFunction(t);while(s--){v=this.entries[s];if(u(t,v[0])){switch(r){case h:return true;case j:return v;case f:return[s,v[1]]}}}return false}}function k(r){return function(u){var v=u.length;for(var t=0,s=this.entries.length;t<s;++t){u[v+t]=this.entries[t][r]}}}d.prototype={getEqualityFunction:function(r){return(typeof r.equals==p)?g:e},getEntryForKey:o(j),getEntryAndIndexForKey:o(f),removeEntryForKey:function(s){var r=this.getEntryAndIndexForKey(s);if(r){n(this.entries,r[0]);return r[1]}return null},addEntry:function(r,s){this.entries[this.entries.length]=[r,s]},keys:k(0),values:k(1),getEntries:function(s){var u=s.length;for(var t=0,r=this.entries.length;t<r;++t){s[u+t]=this.entries[t].slice(0)}},containsKey:o(h),containsValue:function(s){var r=this.entries.length;while(r--){if(s===this.entries[r][1]){return true}}return false}};function m(s,t){var r=s.length,u;while(r--){u=s[r];if(t===u[0]){return r}}return null}function i(r,s){var t=r[s];return(t&&(t instanceof d))?t:null}function b(t,r){var w=this;var v=[];var u={};var x=(typeof t==p)?t:a;var s=(typeof r==p)?r:null;this.put=function(B,C){q(B);l(C);var D=x(B),E,A,z=null;E=i(u,D);if(E){A=E.getEntryForKey(B);if(A){z=A[1];A[1]=C}else{E.addEntry(B,C)}}else{E=new d(D,B,C,s);v[v.length]=E;u[D]=E}return z};this.get=function(A){q(A);var B=x(A);var C=i(u,B);if(C){var z=C.getEntryForKey(A);if(z){return z[1]}}return null};this.containsKey=function(A){q(A);var z=x(A);var B=i(u,z);return B?B.containsKey(A):false};this.containsValue=function(A){l(A);var z=v.length;while(z--){if(v[z].containsValue(A)){return true}}return false};this.clear=function(){v.length=0;u={}};this.isEmpty=function(){return !v.length};var y=function(z){return function(){var A=[],B=v.length;while(B--){v[B][z](A)}return A}};this.keys=y("keys");this.values=y("values");this.entries=y("getEntries");this.remove=function(B){q(B);var C=x(B),z,A=null;var D=i(u,C);if(D){A=D.removeEntryForKey(B);if(A!==null){if(!D.entries.length){z=m(v,C);n(v,z);delete u[C]}}}return A};this.size=function(){var A=0,z=v.length;while(z--){A+=v[z].entries.length}return A};this.each=function(C){var z=w.entries(),A=z.length,B;while(A--){B=z[A];C(B[0],B[1])}};this.putAll=function(H,C){var B=H.entries();var E,F,D,z,A=B.length;var G=(typeof C==p);while(A--){E=B[A];F=E[0];D=E[1];if(G&&(z=w.get(F))){D=C(F,z,D)}w.put(F,D)}};this.clone=function(){var z=new b(t,r);z.putAll(w);return z}}return b})();(function(b){b.fn.ooTranslator=function(){var d=null;b(document).each(function(){d=b(document).data("_ooTranslator");if(d==undefined){d=new a();b(document).data("_ooTranslator",d)}});return d};function a(){return this}a.prototype={mapperUrl:null,translators:null,initialize:function(d){this.mapperUrl=d;this.translators=new Object()},getTranslator:function(d,f){if(this.translators[d]==null){this.translators[d]=new Object()}if(this.translators[d][f]==null){var e=this.mapperUrl+"/"+d+"/"+f+"/translations.js";jQuery.ajax(e,{async:false,dataType:"json",success:function(g,i,h){jQuery(document).ooTranslator()._createTranslator(g,d,f)}})}return this.translators[d][f]},_createTranslator:function(e,d,f){this.translators[d][f]=new c().initialize(e,d,f)}};function c(){return this}c.prototype={localizationData:null,bundle:null,locale:null,initialize:function(f,d,e){this.bundle=e;this.locale=d;this.localizationData=f;return this},translate:function(d){if(this.localizationData[d]){return this.localizationData[d]}else{return this.bundle+":"+d}}}})(jQuery);+function(b){var a=function(){this.addExtraElements();this.state={busy:false,brandW:0,sitesW:0,sitesDirty:false,sites:{collapsed:this.isSitesCollapsed(),extended:this.isSitesExtended},tabsW:0,tabsDirty:false,tabs:{collapsed:this.isTabsCollapsed(),extended:this.isTabsExtended()},toolsW:0,toolsDirty:false,tools:{collapsed:this.isToolsCollapsed(),extended:this.isToolsExtended()},offCanvasWidth:0,moreW:0};var c=b("#o_offcanvas_right").css("width");if(c){this.state.offCanvasWidth=parseInt(c.replace(/[^\d.]/g,""));this.initListners();this.calculateWidth();this.optimize()}};a.prototype.initListners=function(){b(window).resize(b.proxy(this.onResizeCallback,this));b(document).on("oo.nav.sites.modified",b.proxy(function(){this.state.sitesDirty=true},this));b(document).on("oo.nav.tabs.modified",b.proxy(function(){this.state.tabsDirty=true},this));b(document).on("oo.nav.tools.modified",b.proxy(function(){this.state.toolsDirty=true},this));b(document).on("oo.dom.replacement.after",b.proxy(this.onDOMreplacementCallback,this));b(window).on("orientationchange",b.proxy(this.hideRight,this));b("#o_navbar_right-toggle").on("click",b.proxy(this.toggleRight,this));b("#o_offcanvas_right .o_offcanvas_close").on("click",b.proxy(this.hideRight,this));b("#o_navbar_more").on("shown.bs.dropdown",this.onDropdownShown);b("#o_navbar_more").on("hidden.bs.dropdown",this.onDropdownHidden)};a.prototype.onResizeCallback=function(){if(!this.state.busy){this.state.busy=true;this.calculateWidth();this.optimize();this.state.busy=false}};a.prototype.onPageWidthChangeCallback=function(){if(!this.state.busy){this.state.busy=true;this.cleanupMoreDropdown();this.calculateWidth();this.optimize();this.state.sitesDirty=false;this.state.tabsDirty=false;this.state.toolsDirty=false;this.state.busy=false}};a.prototype.onDOMreplacementCallback=function(){if(!this.state.busy&&(this.state.sitesDirty||this.state.tabsDirty||this.state.toolsDirty)){this.state.busy=true;this.cleanupMoreDropdown();this.calculateWidth();this.optimize();this.state.sitesDirty=false;this.state.tabsDirty=false;this.state.toolsDirty=false;this.state.busy=false}};a.prototype.onDropdownShown=function(c){var f=b("#o_navbar_more .dropdown-menu");if(f.length){var d=f.offset().left;if(d<0){f.removeClass("dropdown-menu-right")}}};a.prototype.onDropdownHidden=function(c){var d=b("#o_navbar_more .dropdown-menu");d.addClass("dropdown-menu-right")};a.prototype.calculateWidth=function(){var c=b("#o_navbar_container .o_navbar-collapse");this.state.navbarW=c.innerWidth();this.state.brandW=b(".o_navbar-brand").outerWidth(true);this.state.sitesW=this.getSites().outerWidth(true);this.state.tabsW=this.getTabs().outerWidth(true);this.state.toolsW=this.getTools().outerWidth(false);var d=b("#o_navbar_more:visible");this.state.moreW=(d.length>0?d.outerWidth(true):0)};a.prototype.getOverflow=function(c){var d=this.state.navbarW;d-=this.state.sitesW;d-=this.state.tabsW;d-=this.state.toolsW;d-=this.state.brandW;d-=this.state.moreW;d-=25;return -d};a.prototype.optimize=function(h){var c=this.getOverflow();var k=this.getSites();var l=this.getTabs();var g=this.getTools();var n=this.getMoreDropdown();var f=this.getOffcanvasRight();this.updateState();while(c>0&&(!this.state.tabs.collapsed||!this.state.sites.collapsed||!this.state.tools.collapsed)){if(!this.state.tabs.collapsed){this.collapse(l,n,"li","o_dropdown_tab")}else{if(!this.state.sites.collapsed){this.collapse(k,n,"li","o_dropdown_site")}else{if(!this.state.tools.collapsed){this.collapse(g,f,".o_navbar_tool:not(#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu)","o_tool_right")}}}this.calculateWidth();c=this.getOverflow();this.updateState()}while(c<0&&(!this.state.tabs.extended||!this.state.sites.extended||!this.state.tools.extended)){if(!this.state.tools.extended){var m=this.extend(f,g.children("#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu").first(),".o_tool_right","o_tool_right",true);if(!m){break}}if(!this.state.sites.extended){var j=this.extend(n,k,"li","o_dropdown_site");if(!j){break}}else{if(!this.state.tabs.extended){var d=this.extend(n,l,"li","o_dropdown_tab");if(!d){break}}}this.calculateWidth();c=this.getOverflow();this.updateState()}if(this.state.sites.extended&&this.state.tabs.extended){var i=b("#o_navbar_more");i.css("display","none")}this.checkToolsOrder()};a.prototype.updateState=function(){this.state.sites.collapsed=this.isSitesCollapsed();this.state.sites.extended=this.isSitesExtended();this.state.tabs.collapsed=this.isTabsCollapsed();this.state.tabs.extended=this.isTabsExtended();this.state.tools.collapsed=this.isToolsCollapsed();this.state.tools.extended=this.isToolsExtended()};a.prototype.collapse=function(g,d,c,f){var e=g.find(c);if(e.length){e=e.last()}if(e.length){f&&e.addClass(f);if(d){e.prependTo(d)}}this.updateDropdownToggle(d)};a.prototype.extend=function(g,d,c,i,f){var e=g.find(c);if(e.length){e=e.first()}var j=false;if(e.length){if(d&&d.length){if(f){d.before(e)}else{e.appendTo(d)}this.updateDropdownToggle(g);this.calculateWidth();var h=this.getOverflow();if(h>0){e.prependTo(g)}else{i&&e.removeClass(i);j=true}}}this.updateDropdownToggle(g);return j};a.prototype.updateDropdownToggle=function(c){var d=c.parents(".o_dropdown_toggle");if(!d.length){return}if(c.children().length){d.css("display","block")}else{d.css("display","none")}};a.prototype.addExtraElements=function(){var d=b("#o_navbar_container .o_navbar-collapse");var c=b("#o_navbar_more");if(c.length==0){c=b('<ul id="o_navbar_more" class="nav o_navbar-nav o_dropdown_toggle"><li><a class="dropdown-toggle" data-toggle="dropdown" href="#"">'+o_info.i18n_topnav_more+' <b class="caret"></b></a><ul class="dropdown-menu dropdown-menu-right"></ul></li></ul>');c.appendTo(d)}this.getSites().append('<li class="divider o_dropdown_site"></li>');b("#o_navbar_help .o_icon, #o_navbar_print .o_icon").addClass("o_icon-fw")};a.prototype.cleanupMoreDropdown=function(){if(!this.state.sitesDirty){var f=this.getSites();var d=this.getMoreDropdown().children(".o_dropdown_site");d.appendTo(f)}else{this.getSites().append('<li class="divider o_dropdown_site"></li>')}if(!this.state.tabsDirty){var e=this.getTabs();var c=this.getMoreDropdown().children(".o_dropdown_tab");c.prependTo(e)}this.getMoreDropdown().empty()};a.prototype.checkToolsOrder=function(){var f=this.getTools();var e=f.find("#o_navbar_help");var d=f.find("#o_navbar_print");var c=f.find("#o_navbar_imclient");if(c&&d){c.after(d)}if(c&&e){c.after(e)}};a.prototype.showRight=function(){if(!this.isOffcanvasVisible()&&!this.offcanvasTransitioning){this.offcanvasTransitioning=true;var d=this;var c=b("#o_offcanvas_right");c.show().transition({x:-d.state.offCanvasWidth},function(){b("body").addClass("o_offcanvas_right_visible");var e=b.proxy(d.hideRightOnClick,d);setTimeout(function(){b("html").on("click",e);d.offcanvasTransitioning=false},10)})}};a.prototype.hideRightOnClick=function(c){if("INPUT"!=c.target.nodeName){this.hideRight()}};a.prototype.hideRight=function(){if(this.isOffcanvasVisible()&&!this.offcanvasTransitioning){this.offcanvasTransitioning=true;b("html").off("click",b.proxy(this.hideRight,this));var d=this;var c=b("#o_offcanvas_right");c.transition({x:d.state.offCanvasWidth},function(){c.hide();b("body").removeClass("o_offcanvas_right_visible");d.offcanvasTransitioning=false})}};a.prototype.toggleRight=function(){if(this.isOffcanvasVisible()){this.hideRight()}else{this.showRight()}};a.prototype.isOffcanvasVisible=function(){return b("#o_offcanvas_right:visible").length};a.prototype.getSites=function(){return b("#o_navbar_container .o_navbar_sites")};a.prototype.getTabs=function(){return b("#o_navbar_container .o_navbar_tabs")};a.prototype.getTools=function(){return b("#o_navbar_container #o_navbar_tools_permanent")};a.prototype.getMoreDropdown=function(){return b("#o_navbar_more .dropdown-menu")};a.prototype.getOffcanvasRight=function(){return b("#o_offcanvas_right_container .o_navbar-right")};a.prototype.isSitesCollapsed=function(){return !this.getSites().children("li").not(".divider").length};a.prototype.isSitesExtended=function(){return !this.getMoreDropdown().children(".o_dropdown_site").not(".divider").length};a.prototype.isTabsCollapsed=function(){return !this.getTabs().children("li").length};a.prototype.isTabsExtended=function(){return !this.getMoreDropdown().children(".o_dropdown_tab").length};a.prototype.isToolsCollapsed=function(){return !this.getTools().children(".o_navbar_tool").not("#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu").length};a.prototype.isToolsExtended=function(){return !this.getOffcanvasRight().children(".o_tool_right").length};b(document).ready(function(){var d=b("#o_navbar_wrapper");if(d){var c=new a();window.OPOL.navbar=c}})}(jQuery);+function(b){b.fn.ooBgCarrousel=function(){return new a()};var a=function(){};a.prototype.initCarrousel=function(g){this.settings=b.extend({query:null,images:[],shuffle:false,shuffleFirst:false,durationshow:5000,durationout:500,durationin:500,easeout:"ease",easein:"ease"},g);this.pos=null;if(this.settings.query==null||this.settings.images.length==0){return}this.initialImage=this.settings.images[0];if(this.settings.shuffle){var f=this.settings.images;for(var d,c,e=f.length;e;d=parseInt(Math.random()*e),c=f[--e],f[e]=f[d],f[d]=c){}}if(this.settings.shuffleFirst){this._replaceImage()}this.rotate()};a.prototype.rotate=function(){setTimeout(b.proxy(this._hideCurrent,this),this.settings.durationshow)};a.prototype._hideCurrent=function(){var c=b(this.settings.query);if(c&&c.length>0){c.transition({opacity:0,duration:this.settings.durationout,easing:this.settings.easeout},b.proxy(this._showNext,this))}};a.prototype._replaceImage=function(d){if(!d){d=b(this.settings.query)}if(d&&d.length>0){this.newImg="";this.oldImg="";if(this.pos==null){this.pos=1;this.oldImg=this.initialImage}else{this.oldImg=this.settings.images[this.pos];this.pos++;if(this.settings.images.length==this.pos){this.pos=0}}this.newImg=this.settings.images[this.pos];var c=d.css("background-image");if(c.indexOf(this.oldImg)==-1){d.transition({opacity:1,duration:0});return}var e=c.replace(this.oldImg,this.newImg);d.css("background-image",e)}};a.prototype._showNext=function(){var c=b(this.settings.query);this._replaceImage(c);c.transition({opacity:1,duration:this.settings.durationin,easing:this.settings.easein},b.proxy(this.rotate,this))}}(jQuery);!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=i(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function r(e){var n,r=this;if(null!=e)t.call(r),r.each(function(t,n){var r;(r=tinymce.get(n.id))&&r.setContent(e)});else if(r.length>0&&(n=tinymce.get(r[0].id)))return n.getContent()}function i(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function o(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var s={};e.each(["text","html","val"],function(t,a){var l=s[a]=e.fn[a],c="text"===a;e.fn[a]=function(t){var a=this;if(!o(a))return l.apply(a,arguments);if(t!==n)return r.call(a.filter(":tinymce"),t),l.apply(a.not(":tinymce"),arguments),a;var s="",u=arguments;return(c?a:a.eq(0)).each(function(t,n){var r=i(n);s+=r?c?r.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):r.getContent({save:!0}):l.apply(e(n),u)}),s}}),e.each(["append","prepend"],function(t,r){var a=s[r]=e.fn[r],l="prepend"===r;e.fn[r]=function(e){var t=this;return o(t)?e!==n?("string"==typeof e&&t.filter(":tinymce").each(function(t,n){var r=i(n);r&&r.setContent(l?e+r.getContent():r.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,r){var i=s[r]=e.fn[r];e.fn[r]=function(){return t.call(this,r),i.apply(this,arguments)}}),s.attr=e.fn.attr,e.fn.attr=function(t,a){var l=this,c=arguments;if(!t||"value"!==t||!o(l))return a!==n?s.attr.apply(l,c):s.attr.apply(l,c);if(a!==n)return r.call(l.filter(":tinymce"),a),s.attr.apply(l.not(":tinymce"),c),l;var u=l[0],d=i(u);return d?d.getContent({save:!0}):s.attr.apply(e(u),c)}}var n,r,i,o=[],a=window;e.fn.tinymce=function(n){function s(){var r=[],o=0;i||(t(),i=!0),d.each(function(e,t){var i,a=t.id,s=n.oninit;a||(t.id=a=tinymce.DOM.uniqueId()),tinymce.get(a)||(i=new tinymce.Editor(a,n,tinymce.EditorManager),r.push(i),i.on("init",function(){var e,t=s;d.css("visibility",""),s&&++o==r.length&&("string"==typeof t&&(e=t.indexOf(".")===-1?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,r))}))}),e.each(r,function(e,t){t.render()})}var l,c,u,d=this,f="";if(!d.length)return d;if(!n)return window.tinymce?tinymce.get(d[0].id):null;if(d.css("visibility","hidden"),a.tinymce||r||!(l=n.script_url))1===r?o.push(s):s();else{r=1,c=l.substring(0,l.lastIndexOf("/")),l.indexOf(".min")!=-1&&(f=".min"),a.tinymce=a.tinyMCEPreInit||{base:c,suffix:f},l.indexOf("gzip")!=-1&&(u=n.language||"en",l=l+(/\?/.test(l)?"&":"?")+"js=true&core=true&suffix="+escape(f)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(u||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+u+".js"),t("themes/"+n.theme+"/theme"+f+".js"),t("themes/"+n.theme+"/langs/"+u+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+f+".js"),t("plugins/"+n+"/langs/"+u+".js"))})},end:function(){}}));var p=document.createElement("script");p.type="text/javascript",p.onload=p.onreadystatechange=function(t){t=t||window.event,2===r||"load"!=t.type&&!/complete|loaded/.test(p.readyState)||(tinymce.dom.Event.domLoaded=1,r=2,n.script_loaded&&n.script_loaded(),s(),e.each(o,function(e,t){t()}))},p.src=l,document.body.appendChild(p)}return d},e.extend(e.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in window&&(t=tinymce.get(e.id),t&&t.editorManager===tinymce))}})}(jQuery);OPOL={};var o2c=0;var o3c=new Array();o_info.guibusy=false;o_info.linkbusy=false;o_info.scrolling=false;o_info.debug=true;o_info.drakes=new Array();var BLoader={_ajaxLoadedJS:new Array(),_isAlreadyLoadedJS:function(b){var a=true;jQuery("head script[src]").each(function(d,c){if(jQuery(c).attr("src").indexOf(b)!=-1){a=false}});if(jQuery.inArray(b,this._ajaxLoadedJS)!=-1){a=false}return !a},loadJS:function(b,c,a){if(!this._isAlreadyLoadedJS(b)){if(o_info.debug){o_log("BLoader::loadJS: loading ajax::"+a+" url::"+b)}if(a){jQuery.ajax(b,{async:false,dataType:"script",cache:true,success:function(d,f,e){}});this._ajaxLoadedJS.push(b)}else{jQuery.getScript(b)}if(o_info.debug){o_log("BLoader::loadJS: loading DONE url::"+b)}}else{if(o_info.debug){o_log("BLoader::loadJS: already loaded url::"+b)}}},executeGlobalJS:function(jsString,contextDesc){try{if(window.execScript){window.execScript(jsString)}else{window.eval(jsString)}}catch(e){if(window.console){console.log(contextDesc,"cannot execute js",jsString)}if(o_info.debug){o_logerr("BLoader::executeGlobalJS: Error when executing JS code in contextDesc::"+contextDesc+' error::"'+showerror(e)+" for: "+escape(jsString))}if(window.location.href.indexOf("o_winrndo")!=-1){window.location.reload()}else{window.location.href=window.location.href+(window.location.href.indexOf("?")!=-1?"&":"?")+"o_winrndo=1"}}},loadCSS:function(b,o,q){var r=window.document;try{if(r.createStyleSheet){var g=r.styleSheets;var d=0;var p=0;for(i=0;i<g.length;i++){var m=g[i];var f=m.href;if(f==b){d++;if(m.disabled){m.disabled=false;return}else{if(o_info.debug){o_logwarn("BLoader::loadCSS: style: "+b+" already in document and not disabled! (duplicate add)")}return}}if(m.id=="o_theme_css"){p=i}}if(d>1&&o_info.debug){o_logwarn("BLoader::loadCSS: apply styles: num of stylesheets found was not 0 or 1:"+d)}if(q){p=g.length}r.createStyleSheet(b,p)}else{var c=jQuery("#"+o);if(c&&c.length>0){if(o_info.debug){o_logwarn("BLoader::loadCSS: stylesheet already found in doc when trying to add:"+b+", with id "+o)}}else{var a=jQuery('<link id="'+o+'" rel="stylesheet" type="text/css" href="'+b+'">');if(q){a.insertBefore(jQuery("#o_fontSize_css"))}else{a.insertBefore(jQuery("#o_theme_css"))}}}}catch(n){if(window.console){console.log(n)}if(o_info.debug){o_logerr("BLoader::loadCSS: Error when loading CSS from URL::"+b)}}},unLoadCSS:function(a,n){var o=window.document;try{if(o.createStyleSheet){var f=o.styleSheets;var d=0;var p=a;var b=window.location.href.substring(0,window.location.href.indexOf("/",8));if(a.indexOf(b)==0){p=a.substring(b.length)}for(i=0;i<f.length;i++){var g=f[i].href;if(g==a||g==p){d++;if(!f[i].disabled){f[i].disabled=true}else{if(o_info.debug){o_logwarn("stylesheet: when removing: matching url, but already disabled! url:"+g)}}}}if(d!=1&&o_info.debug){o_logwarn("stylesheet: when removeing: num of stylesheets found was not 1:"+d)}}else{var c=jQuery("#"+n);if(c){c.href="";c.remove();c=null;return}else{if(o_info.debug){o_logwarn("no link with id found to remove, id:"+n+", url "+a)}}}}catch(m){if(o_info.debug){o_logerr("BLoader::unLoadCSS: Error when unloading CSS from URL::"+a)}}}};var BFormatter={formatLatexFormulas:function(b){try{if(typeof MathJax==="undefined"){o_mathjax()}else{if(MathJax&&MathJax.isReady){jQuery(function(){MathJax.Hub.Queue(function(){if(jQuery("#"+b+" .MathJax").length==0){MathJax.Hub.Typeset(b)}})})}else{setTimeout(function(){BFormatter.formatLatexFormulas(b)},100)}}}catch(a){if(window.console){console.log("error in BFormatter.formatLatexFormulas: ",a)}}},alignTableColumns:function(a){try{var b=new Array();jQuery(a).each(function(){for(j=0;j<jQuery(this)[0].rows[0].cells.length;j++){var d=jQuery(this)[0].rows[0].cells[j];if(!b[j]||b[j]<d.clientWidth){b[j]=d.clientWidth}}});jQuery(a).each(function(){for(j=0;j<jQuery(this)[0].rows[0].cells.length;j++){jQuery(this)[0].rows[0].cells[j].style.width=b[j]+"px"}})}catch(c){if(window.console){console.log("error in BFormatter.alignTableColumns: ",c)}}}};function o_init(){try{o_getMainWin().o_afterserver();if(window.location.href&&window.location.href!=null&&window.location.href.indexOf("%3A")<0){var a=window.location.href;if(a!=null&&!(a.lastIndexOf("http",0)===0)&&!(a.lastIndexOf("https",0)===0)){a=o_info.serverUri+a}o_info.businessPath=a;if(!(typeof o_shareActiveSocialUrl==="undefined")){o_shareActiveSocialUrl()}}}catch(b){if(o_info.debug){o_log("error in o_init: "+showerror(b))}}}function o_initEmPxFactor(){o_info.emPxFactor=jQuery("#o_width_1em").width();if(o_info.emPxFactor==0||o_info.emPxFactor=="undefined"){o_info.emPxFactor=12}}function o_getMainWin(){try{if(window.OPOL){return window}else{if(window.opener&&window.opener.OPOL){return window.opener}}}catch(a){if(o_info.debug){o_logerr('Exception while getting main window. rror::"'+showerror(a))}if(window.console){console.log('Exception while getting main window. rror::"'+showerror(a),"functions.js");console.log(a)}}throw"Can not find main OpenOLAT window"}function o_beforeserver(){o_info.linkbusy=true;showAjaxBusy();if(window.suppressOlatOnUnloadOnce){window.suppressOlatOnUnloadOnce=false}else{if(window.olatonunload){olatonunload()}}}function o_afterserver(){o2c=0;o_info.linkbusy=false;removeAjaxBusy()}function o2cl(){try{if(o_info.linkbusy){return false}else{var b=(o2c==0||confirm(o_info.dirty_form));if(b){o_beforeserver()}return b}}catch(a){if(window.console){console.log(a)}return false}}function o2cl_dirtyCheckOnly(){try{if(o_info.linkbusy){return false}else{return(o2c==0||confirm(o_info.dirty_form))}}catch(a){if(window.console){console.log(a)}return false}}function o2cl_noDirtyCheck(){if(o_info.linkbusy){return false}else{o_beforeserver();return true}}function o3cl(d){if(o_info.linkbusy){return false}else{var b=o3c1.indexOf(d)>-1;var a=(b&&o3c1.length>1)||o3c1.length>0;var c=(!a||confirm(o_info.dirty_form));if(c){o_beforeserver()}return c}}function o_onc(a){var b=a.responseText;BLoader.executeGlobalJS("o_info.last_o_onc="+b+";","o_onc");o_ainvoke(o_info.last_o_onc,false)}function o_allowNextClick(){o_info.linkbusy=false;removeAjaxBusy()}function removeBusyAfterDownload(c,b,a){o2c=0;o_afterserver()}Array.prototype.search=function(c,d){var a=this.length;for(var b=0;b<a;b++){if(this[b].constructor==Array){if(this[b].search(c,d)){return true;break}}else{if(d){if(this[b].indexOf(c)!=-1){return true;break}}else{if(this[b]==c){return true;break}}}}return false};if(!Function.prototype.curry){Function.prototype.curry=function(){if(arguments.length<1){return this}var a=this;var b=Array.prototype.slice.call(arguments);return function(){return a.apply(this,b.concat(Array.prototype.slice.call(arguments)))}}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(c){if(this==null){throw new TypeError()}var d=Object(this);var a=d.length>>>0;if(a===0){return -1}var e=0;if(arguments.length>1){e=Number(arguments[1]);if(e!=e){e=0}else{if(e!=0&&e!=Infinity&&e!=-Infinity){e=(e>0||-1)*Math.floor(Math.abs(e))}}}if(e>=a){return -1}var b=e>=0?e:Math.max(a-Math.abs(e),0);for(;b<a;b++){if(b in d&&d[b]===c){return b}}return -1}}var b_onDomReplacementFinished_callbacks=new Array();function b_AddOnDomReplacementFinishedCallback(a){b_onDomReplacementFinished_callbacks.push(a)}var b_changedDomEl=new Array();function b_AddOnDomReplacementFinishedUniqueCallback(a){if(a.constructor==Array){if(b_onDomReplacementFinished_callbacks.search(a[0])){return}}b_AddOnDomReplacementFinishedCallback(a)}var o_debug_trid=0;function o_ainvoke(M){if(M==undefined){return}o_info.inainvoke=true;var H=M.cmdcnt;if(H>0){jQuery(document).trigger("oo.dom.replacement.before");b_changedDomEl=new Array();if(o_info.debug){o_debug_trid++}var y=M.cmds;for(var S=0;S<H;S++){var I=y[S];var A=I.cmd;var Q=I.cda;var T=I.w;var c=this.window;var J;if(c){switch(A){case 1:var L=Q.e;BLoader.executeGlobalJS(L,"o_ainvoker::jsexec");if(o_info.debug){o_log("c1: execute jscode: "+L)}case 2:var u=Q.cc;var E=Q.cps;for(var P=0;P<u;P++){var m=E[P];var h=m.cid;var O=m.cidvis;var G=m.cw;var x=m.hfrag;var N=m.jsol;var g=m.hdr;if(o_info.debug){o_log("c2: redraw: "+m.cname+" ("+h+") "+m.hfragsize+" bytes, listener(s): "+m.clisteners)}var V=g+"\n\n"+x;var R=false;var D="o_c"+h;var B=jQuery("#"+D);if(B==null||B.length==0){D="o_fi"+h;B=jQuery("#"+D);R=true}if(B!=null){var w=jQuery("div.o_richtext_mce textarea",B);for(var K=0;K<w.length;K++){try{var a=jQuery(w.get(K)).attr("id");if(typeof top.tinymce!=undefined){top.tinymce.remove("#"+a)}}catch(Y){if(window.console){console.log(Y)}}}if(O){B.css("display","")}else{B.css("display","none")}if(R||!G){B.replaceWith(V)}else{try{B.empty().html(V);if(V.length>0&&B.get(0).innerHTML==""){B.get(0).innerHTML=V}}catch(Y){if(window.console){console.log(Y)}if(window.console){console.log("Fragment",V)}}b_changedDomEl.push(D)}B=null;checkDrakes();if(N!=""){BLoader.executeGlobalJS(N,"o_ainvoker::jsol")}}}break;case 3:c.o2c=0;var W=Q.rurl;c.o_afterserver();c.document.location.replace(W);break;case 5:c.o2c=0;var W=Q.rurl;c.o_afterserver();c.document.location.replace(W);break;case 6:c.o2c=0;c.o_afterserver();break;case 7:var o=c.document.location;var z=o.protocol+"//"+o.hostname;if(o.port!=""){z+=":"+o.port}var v=Q.cssrm;for(P=0;P<v.length;P++){var C=v[P];var F=C.id;var f=z+C.url;BLoader.unLoadCSS(f,F);if(o_info.debug){o_log("c7: rm css: id:"+F+" ,url:'"+f+"'")}}var U=Q.cssadd;for(k=0;k<U.length;k++){var C=U[k];var F=C.id;var f=z+C.url;var n=C.pt;BLoader.loadCSS(f,F,n);if(o_info.debug){o_log("c7: add css: id:"+F+" ,url:'"+f+"'")}}var p=Q.jsadd;for(l=0;l<p.length;l++){var C=p[l];var X=C.before;if(jQuery.type(X)==="string"){BLoader.executeGlobalJS(X,"o_ainvoker::preJsAdd")}var f=C.url;var q=C.enc;if(jQuery.type(f)==="string"){BLoader.loadJS(f,q,true)}if(o_info.debug){o_log("c7: add js: "+f)}}break;default:if(o_info.debug){o_log("?: unknown command "+A)}break}}else{if(o_info.debug){o_log("could not find window??")}}}var b=b_onDomReplacementFinished_callbacks.length;for(mycounter=0;b>mycounter;mycounter++){if(mycounter>50){break}var s=b_onDomReplacementFinished_callbacks.shift();if(typeof s.length==="number"){if(s[0]=="glosshighlighter"){var d=s[1];s=d}}s()}jQuery(document).trigger("oo.dom.replacement.after")}o_info.inainvoke=false}function clearAfterAjaxIframeCall(){if(o_info.linkbusy){o_afterserver()}}function showAjaxBusy(){setTimeout(function(){if(o_info.linkbusy){try{if(jQuery("#o_ajax_busy_backdrop").length==0){jQuery("#o_body").addClass("o_ajax_busy");jQuery("#o_ajax_busy").modal({show:true,backdrop:"static",keyboard:"false"});jQuery("#o_ajax_busy").after('<div id="o_ajax_busy_backdrop" class="modal-backdrop in"></div>');jQuery("#o_ajax_busy>.modal-backdrop").remove();jQuery("#o_ajax_busy_backdrop").css({"z-index":1200})}}catch(a){if(window.console){console.log(a)}}}},700)}function removeAjaxBusy(){try{jQuery("#o_body").removeClass("o_ajax_busy");jQuery("#o_ajax_busy_backdrop").remove();jQuery("#o_ajax_busy").modal("hide")}catch(a){if(window.console){console.log(a)}}}function setFormDirty(c){o2c=1;var a=document.getElementById(c);if(a!=null){var b=a.olat_fosm_0;if(b==null){b=a.olat_fosm}if(b){b.className="btn o_button_dirty"}}}function contextHelpWindow(a){helpWindow=window.open(a,"HelpWindow","height=760, width=940, left=0, top=0, location=no, menubar=no, resizable=yes, scrollbars=yes, toolbar=no");helpWindow.focus()}function o_openPopUp(b,d,c,a,f){attributes="height="+a+", width="+c+", resizable=yes, scrollbars=yes, left=100, top=100, ";if(f){attributes+="location=yes, menubar=yes, status=yes, toolbar=yes"}else{attributes+="location=no, menubar=no, status=no, toolbar=no"}var h;try{h=window.open(b,d,attributes)}catch(g){h=window.open(b,"OpenOLAT",attributes)}h.focus();if(o_info.linkbusy){o_afterserver()}}function b_handleFileUploadFormChange(m,b,g){m.setCustomValidity("");if(m.hasAttribute("data-max-size")){var p=m.getAttribute("data-max-size");if(p){var d=formInputFileSize(m);if(d>p){var q=jQuery(document).ooTranslator().getTranslator(o_info.locale,"org.olat.modules.forms.ui");var h=q.translate("file.upload.error.limit.exeeded");var o=q.translate("file.upload.limit");var n;if(p<250*1024){n=(p/1024).toFixed(1)+" KB"}else{if(p<250*1024*1024){n=(p/1024/1024).toFixed(1)+" MB"}else{n=(p/1024/1024/1024).toFixed(1)+" GB"}}m.setCustomValidity(h+" ("+o+": "+n+")")}}}var f=m.value;var e=f.lastIndexOf("/");if(e!=-1){f=f.substring(e+1)}e=f.lastIndexOf("\\");if(e!=-1){f=f.substring(e+1)}b.value=f;if(g){g.className="o_button_dirty"}var a=m.form.elements;for(i=0;i<a.length;i++){var c=a[i];if(c.name==b.name&&i+1<a.length){a[i+1].focus()}}}function formInputFileSize(c){try{if(!window.FileReader){return -1}if(!c||!c.files){return -1}var a=c.files[0];if(!a){return -1}return a.size}catch(b){o_logerr("form input file size check failed: "+b)}return -1}function gotonode(a){try{if(typeof o_activateCourseNode!="undefined"){o_activateCourseNode(a)}else{if(opener&&typeof opener.o_activateCourseNode!="undefined"){opener.o_activateCourseNode(a)}}}catch(b){alert("Goto node error:"+b)}}function o_viewportHeight(){var a=jQuery(document).height();if(a>0){return a}else{return 600}}OPOL.getMainColumnsMaxHeight=function(){var m=0,f=0,a=0,c=0,h=0,b,g=jQuery("#o_main_left_content"),e=jQuery("#o_main_right_content"),d=jQuery("#o_main_center_content");if(g!="undefined"&&g!=null){m=g.outerHeight(true)}if(e!="undefined"&&e!=null){f=e.outerHeight(true)}if(d!="undefined"&&d!=null){a=d.outerHeight(true)}c=(m>f?m:f);c=(c>a?c:a);if(c>0){return c}b=jQuery("#o_main");if(b!="undefined"&&b!=null){h=b.height()}if(b>0){return b}return o_viewportHeight()};OPOL.adjustHeight=function(){try{var a=0;col1=jQuery("#o_main_left_content").outerHeight(true);col2=jQuery("#o_main_right_content").outerHeight(true);col3=jQuery("#o_main_center_content").outerHeight(true);a=Math.max(col1,col2,col3);if(col1!=null){jQuery("#o_main_left").css({"min-height":a+"px"})}if(col2!=null){jQuery("#o_main_right").css({"min-height":a+"px"})}if(col3!=null){jQuery("#o_main_center").css({"min-height":a+"px"})}}catch(b){if(window.console){console.log(b)}}};OPOL.setContainerFullWidth=function(a){if(a){jQuery("body").addClass("o_width_full")}else{jQuery("body").removeClass("o_width_full")}jQuery.proxy(OPOL.navbar.onPageWidthChangeCallback,OPOL.navbar)()};jQuery(window).resize(function(){clearTimeout(o_info.resizeId);o_info.resizeId=setTimeout(function(){jQuery(document).trigger("oo.window.resize.after")},500)});jQuery(document).on("oo.window.resize.after",OPOL.adjustHeight);jQuery(document).on("oo.dom.replacement.after",OPOL.adjustHeight);jQuery().ready(OPOL.adjustHeight);function o_scrollToElement(a){try{o_info.scrolling=true;jQuery("html, body").animate({scrollTop:jQuery(a).offset().top},333,function(d,c){o_info.scrolling=false})}catch(b){}}function o_popover(c,b,a){if(typeof(a)==="undefined"){a="bottom"}jQuery("#"+c).popover({placement:a,html:true,trigger:"click",container:"body",content:function(){return jQuery("#"+b).clone().html()}}).on("shown.bs.popover",function(){var d=function(f){jQuery("#"+c).popover("hide");jQuery("body").unbind("click",d)};setTimeout(function(){jQuery("body").on("click",d)},5)})}function o_popoverWithTitle(e,d,c,b){if(typeof(b)==="undefined"){b="bottom"}var a=jQuery("#"+e).popover({placement:b,html:true,title:c,trigger:"click",container:"body",content:function(){return jQuery("#"+d).clone().html()}});a.on("shown.bs.popover",function(){var f=function(g){jQuery("#"+e).popover("hide");jQuery("body").unbind("click",f)};setTimeout(function(){jQuery("body").on("click",f)},5)});return a}function o_shareLinkPopup(d,c,b){if(typeof(b)==="undefined"){b="top"}var a=jQuery("#"+d);a.popover({placement:b,html:true,trigger:"click",container:"body",content:c}).on("shown.bs.popover",function(){var e=function(f){if(jQuery(f.target).data("toggle")!=="popover"&&jQuery(f.target).parents(".popover.in").length===0){jQuery("#"+d).popover("hide");jQuery("body").unbind("click",e)}};setTimeout(function(){jQuery("body").on("click",e)},5)});a.attr("title",a.attr("data-original-title"))}function o_QRCodePopup(d,c,b){if(typeof(b)==="undefined"){b="top"}var a=jQuery("#"+d);a.popover({placement:b,html:true,trigger:"click",container:"body",content:'<div id="'+d+'_pop" class="o_qrcode"></div>'}).on("shown.bs.popover",function(){o_info.qr=o_QRCode(d+"_pop",(jQuery.isFunction(c)?c():c));var e=function(f){if(jQuery(f.target).data("toggle")!=="popover"&&jQuery(f.target).parents(".popover.in").length===0){jQuery("#"+d).popover("hide");jQuery("body").unbind("click",e)}};setTimeout(function(){jQuery("body").on("click",e)},5)}).on("hidden.bs.popover",function(){try{o_info.qr.clear();delete o_info.qr}catch(f){}});a.attr("title",a.attr("data-original-title"))}function o_QRCode(c,b){try{BLoader.loadJS(o_info.o_baseURI+"/js/jquery/qrcodejs/qrcode.min.js","utf8",true);return new QRCode(document.getElementById(c),b)}catch(a){return null}}function b_resizeIframeToMainMaxHeight(e){var d=jQuery("#"+e);if(d!="undefined"&&d!=null){var c=OPOL.getMainColumnsMaxHeight()-110;var b=o_viewportHeight()-100;b=b-d.offset().top;var a=(b>c?b:c);d.height(a)}}var o_debu_oldcn,o_debu_oldtt;function o_debu_show(b,a){if(o_debu_oldcn){o_debu_hide(o_debu_oldcn,o_debu_oldtt)}jQuery(b).addClass("o_dev_m");jQuery(a).show();o_debu_oldtt=a;o_debu_oldcn=b}function o_debu_hide(b,a){jQuery(a).hide();jQuery(b).removeClass("o_dev_m")}function o_dbg_mark(a){var b=jQuery("#"+a);if(b){b.css("background-color","#FCFCB8");b.css("border","3px solid #00F")}}function o_dbg_unmark(a){var b=jQuery("#"+a);if(b){b.css("border","");b.css("background-color","")}}function o_clearConsole(){o_log_all="";o_log(null)}var o_log_all="";function o_log(b){if(b){o_log_all="\n"+o_debug_trid+"> "+b+o_log_all;o_log_all=o_log_all.substr(0,4000)}var a=jQuery("#o_debug_cons");if(a){if(o_log_all.length==4000){o_log_all=o_log_all+"\n... (stripped: to long)... "}a.value=o_log_all}if(!jQuery.type(window.console)==="undefined"){window.console.log(b)}}function o_logerr(a){o_log("ERROR:"+a)}function o_logwarn(a){o_log("WARN:"+a)}function showerror(c){var a="";for(var b in c){a+=b+": "+c[b]+"\n"}return"error detail:\n"+a}function o_ffEvent(g,f,d,o,p){var h,m,b,a;h=document.getElementById(f);m=h.value;h.value=d;b=document.getElementById(o);a=b.value;b.value=p;var c=jQuery("#"+g);var e=true;jQuery("#"+g+" input[type=file]").filter(function(q,r){return !r.checkValidity()}).each(function(q,s){var t=s.getAttribute("id")+"_validation_error";var r=document.getElementById(t);if(!r){r=document.createElement("div");r.setAttribute("class","o_error");r.setAttribute("id",t);s.parentNode.parentNode.appendChild(r)}r.innerHTML=s.validationMessage;e=false});if(e){var n=c.attr("enctype");if(n&&n.indexOf("multipart")==0){o_XHRSubmitMultipart(g)}else{if(document.forms[g].onsubmit()){document.forms[g].submit()}}}h.value=m;b.value=a}function o_IQEvent(a){if(document.forms[a].onsubmit()){document.forms[a].submit()}}function o_TableMultiActionEvent(a,c){var b=jQuery("#o_mai_"+a);b.val(c);if(document.forms[a].onsubmit()){document.forms[a].submit()}b.val("")}function o_XHRSubmit(h){if(o_info.linkbusy){return false}o_beforeserver();var o=true;var a=jQuery("#"+h);var n=a.attr("enctype");if(n&&n.indexOf("multipart")==0){var g="openolat-submit-"+(""+Math.random()).substr(2);var d=o_createIFrame(g);document.body.appendChild(d);a.attr("target",d.name);return true}else{var f=a.serializeArray();if(arguments.length>1){var m=arguments.length;for(var e=1;e<m;e=e+2){if(m>e+1){var c=new Object();c.name=arguments[e];c.value=arguments[e+1];f[f.length]=c}}}var b=a.attr("action");jQuery.ajax(b,{type:"POST",data:f,cache:false,dataType:"json",success:function(s,v,r){try{o_ainvoke(s);if(o){var p=s.businessPath;var q=s.documentTitle;var u=s.historyPointId;if(p){o_pushState(u,q,p)}}}catch(t){if(window.console){console.log(t)}}finally{o_afterserver()}},error:o_onXHRError});return false}}function o_XHRSubmitMultipart(a){var c=jQuery("#"+a);var d="openolat-submit-"+(""+Math.random()).substr(2);var b=o_createIFrame(d);document.body.appendChild(b);c.attr("target",b.name);c.submit();c.attr("target","")}function o_createIFrame(b){var a=jQuery('<iframe name="'+b+'" id="'+b+'" src="about:blank" style="position: absolute; top: -9999px; left: -9999px;"></iframe>');return a[0]}function o_removeIframe(a){jQuery("#"+a).remove()}function o_showFormDirtyDialog(a){o_scrollToElement("#o_top");jQuery("#o_form_dirty_message").modal("show");jQuery("#o_form_dirty_message .o_form_dirty_ignore").on("click",function(){jQuery("#o_form_dirty_message").modal("hide");jQuery("#o_form_dirty_message .o_form_dirty_ignore").off();a()});return false}function o_ffXHREvent(h,e,s,g,p,t,f,m){if(t&&o2c==1){var d=Array.prototype.slice.call(arguments);d[5]=false;var u=function(){o_ffXHREvent.apply(window,d)};return o_showFormDirtyDialog(u)}else{if(!o2cl_noDirtyCheck()){return false}}o_beforeserver();var v=new Object();if(m){var b=jQuery("#"+h);var q=b.serializeArray();var o=q.length;for(var r=0;r<o;r++){var n=q[r];if(n.name!="dispatchuri"&&n.name!="dispatchevent"){v[n.name]=n.value}}}v.dispatchuri=s;v.dispatchevent=p;if(arguments.length>8){var a=arguments.length;for(var r=8;r<a;r=r+2){if(a>r+1){v[arguments[r]]=arguments[r+1]}}}var c=jQuery("#"+h).attr("action");jQuery.ajax(c,{type:"POST",data:v,cache:false,dataType:"json",success:function(z,C,y){try{o_ainvoke(z);if(f){var w=z.businessPath;var x=z.documentTitle;var B=z.historyPointId;if(w){o_pushState(B,x,w)}}}catch(A){if(window.console){console.log(A)}}finally{o_afterserver()}},error:o_onXHRError})}function o_ffXHRNFEvent(f,e,a,h,m){var c=new Object();c.dispatchuri=a;c.dispatchevent=m;if(arguments.length>5){var g=arguments.length;for(var d=5;d<g;d=d+2){if(g>d+1){c[arguments[d]]=arguments[d+1]}}}var b=jQuery("#"+f).attr("action");jQuery.ajax(b,{type:"POST",data:c,cache:false,dataType:"json",success:function(o,p,n){}})}function o_XHRWikiEvent(b){var a=jQuery(b).attr("href");if(a.indexOf(o_info.serverUri)==0){a=a.substring(o_info.serverUri.length,a.length)}o_XHREvent(a,false,true);return false}function o_XHREvent(h,f,c){if(f&&o2c==1){var b=Array.prototype.slice.call(arguments);b[1]=false;var a=function(){o_XHREvent.apply(window,b)};return o_showFormDirtyDialog(a)}else{if(!o2cl_noDirtyCheck()){return false}}o_beforeserver();var e=new Object();if(arguments.length>3){var g=arguments.length;for(var d=3;d<g;d=d+2){if(g>d+1){e[arguments[d]]=arguments[d+1]}}}jQuery.ajax(h,{type:"POST",data:e,cache:false,dataType:"json",success:function(p,s,o){try{if(c){try{var m=p.businessPath;var n=p.documentTitle;var r=p.historyPointId;if(m){o_pushState(r,n,m)}}catch(q){if(window.console){console.log(q)}}}o_ainvoke(p)}catch(q){if(window.console){console.log(q)}}finally{o_afterserver()}},error:o_onXHRError});return false}function o_XHRNFEvent(d){var b=new Object();if(arguments.length>1){var c=arguments.length;for(var a=1;a<c;a=a+2){if(c>a+1){b[arguments[a]]=arguments[a+1]}}}jQuery.ajax(d,{type:"POST",data:b,cache:false,dataType:"json",success:function(f,g,e){},error:o_onXHRError})}function o_onXHRError(a,d,b){o_afterserver();if(401==a.status){var c=o_info.oo_noresponse.replace("reload.html",window.document.location.href);showMessageBox("error",o_info.oo_noresponse_title,c,undefined)}else{if(window.console){console.log("Error status 2",d,b,a.responseText);console.log(a)}}}function o_pushState(d,f,a){try{var b=new Object();b.businessPath=a;b.historyPointId=d;if(a!=null&&!(a.lastIndexOf("http",0)===0)&&!(a.lastIndexOf("https",0)===0)){a=o_info.serverUri+a}o_info.businessPath=a;if(!(typeof o_shareActiveSocialUrl==="undefined")){o_shareActiveSocialUrl()}if(window.history&&!(typeof window.history==="undefined")&&window.history.pushState){window.history.pushState(b,f,a)}else{window.location.hash=d}}catch(c){if(window.console){console.log(c,a)}}}function o_toggleMark(a){var b=jQuery("i",a).attr("class");if(b.indexOf("o_icon_bookmark_add")>=0){jQuery("i",a).removeClass("o_icon_bookmark_add").addClass("o_icon_bookmark")}else{jQuery("i",a).removeClass("o_icon_bookmark").addClass("o_icon_bookmark_add")}}function registerDrake(a){o_info.drakes.push(a);return a}function destroyDrakes(){if(o_info.drakes!=="undefined"&&o_info.drakes!=null&&o_info.drakes.length>0){for(var a=o_info.drakes.length;a-->0;){try{o_info.drakes[a].destroy()}catch(b){if(window.console){console.log(b)}}o_info.drakes.pop()}}}function checkDrakes(){if(o_info.drakes!=="undefined"&&o_info.drakes!=null&&o_info.drakes.length>0){if(jQuery(".o_drake").length==0){destroyDrakes()}}}function o_normalizeFilename(b){b=b.replace(/\s/g,"_");var f=["/",",",":","(",")"];for(var c=f.length;c-->0;){b=b.split(f[c]).join("_")}var a=["\u00C4","\u00D6","\u00DC","\u00E4","\u00F6","\u00E6","\u00FC","\u00DF","\u00F8","\u2205"],d=["Ae","Oe","Ue","ae","oe","ae","ue","ss","o","o"];for(var c=a.length;c-->0;){b=b.split(a[c]).join(d[c])}try{b=b.normalize("NFKD");b=b.replace("/p{InCombiningDiacriticalMarks}+/g","");b=b.replace("/W+/g","")}catch(g){if(window.console){console.log(g)}}return b}function setFlexiFormDirtyByListener(a){setFlexiFormDirty(a.data.formId,a.data.hideMessage)}function setFlexiFormDirty(b,c){var a=o3c.indexOf(b)>-1;if(!a){o3c.push(b)}jQuery("#"+b).each(function(){var d=jQuery(this).data("FlexiSubmit");if(d!=null){jQuery("#"+d).addClass("btn o_button_dirty");o2c=(c?0:1)}})}function o_ffRegisterSubmit(b,a){jQuery("#"+b).data("FlexiSubmit",a)}function dismissInfoBox(a){javascript:jQuery("#"+a).remove();return true}function showInfoBox(g,d){var c=Math.floor(Math.random()*65536).toString(16);var f='<div id="'+c+'" class="o_alert_info"><div class="alert alert-info clearfix o_sel_info_message"><a class="o_alert_close o_sel_info_close" href="javascript:;" onclick="dismissInfoBox(\''+c+'\')"><i class="o_icon o_icon_close"> </i></a><h3><i class="o_icon o_icon_info"> </i> '+g+"</h3><p>"+d+"</p></div></div>";var a=jQuery("#o_messages").prepend(f);var e=(d.length>150)?8000:((d.length>70)?6000:4000);var b=function(){jQuery("#"+c).transition({top:"-100%"},333,function(){jQuery("#"+c).remove()})};o_info.scrolling=true;jQuery("#"+c).show().transition({top:0},333);jQuery("#"+c).click(function(h){b()});o_scrollToElement("#o_top");g=null;d=null;a=null;setTimeout(function(){try{b()}catch(h){}},e)}function showMessageBox(b,f,d,a){if(b=="info"){showInfoBox(f,d);return null}else{var c='<div id="myFunctionalModal" class="modal fade" role="dialog"><div class="modal-dialog"><div class="modal-content">';c+='<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>';c+='<h4 class="modal-title">'+f+"</h4></div>";c+='<div class="modal-body alert ';if("warn"==b){c+="alert-warning"}else{if("error"==b){c+="alert-danger"}else{c+="alert-info"}}c+='"><p>'+d+"</p></div></div></div></div>";jQuery("#myFunctionalModal").remove();jQuery("body").append(c);var e=jQuery("#myFunctionalModal").modal("show").on("hidden.bs.modal",function(g){jQuery("#myFunctionalModal").remove()});o_scrollToElement("#o_top");return e}}function o_table_toggleCheck(d,c){var a=document.forms[d].elements.tb_ms;len=a.length;if(typeof(len)=="undefined"){a.checked=c}else{var b;for(b=0;b<len;b++){a[b].checked=c}}}function onTreeStartDrag(a,b){jQuery(a.target).addClass("o_dnd_proxy")}function onTreeStopDrag(a,b){jQuery(a.target).removeClass("o_dnd_proxy")}function onTreeDrop(g,h){var a=jQuery(h.draggable[0]);var f=jQuery(this);f.css({position:"",width:""});var c=f.droppable("option","endUrl");if(c.lastIndexOf("/")==(c.length-1)){c=c.substring(0,c.length-1)}var e=a.attr("id");var b=e.substring(2,e.length);c+="%3Atnidle%3A"+b;var d=f.attr("id");if(d.indexOf("ds")==0){c+="%3Asne%3Ayes"}else{if(d.indexOf("dt")==0){c+="%3Asne%3Aend"}}jQuery(".ui-droppable").each(function(m,n){jQuery(n).droppable("disable")});o_XHREvent(c+"/",false,false)}function treeAcceptDrop(a){return true}function treeAcceptDrop_notWithChildren(a){var c=false;var b=jQuery(a);var e=b.attr("id");if(e!=undefined&&(e.indexOf("dd")==0||e.indexOf("ds")==0||e.indexOf("dt")==0||e.indexOf("da")==0||e.indexOf("row")==0)){var g=jQuery(this);var m=g.attr("id");var d=e.substring(2,e.length);var f=m.substring(2,m.length);if(d!=f){var h=jQuery("#dd"+d).parents("li");if(h.length>0&&jQuery(h.get(0)).find("#dd"+f).length==0){c=true}}}return c}function treeAcceptDrop_portfolio(b){var d=false;var c=jQuery(b);var f=c.attr("id");if(treeNode_isDragNode(f)){var h=jQuery(this);var o=h.attr("id");var e=f.substring(2,f.length);var g=o.substring(2,o.length);var n=f.indexOf("ds")==0||f.indexOf("dt")==0;if(e!=g){var m=treeNode_portfolioType(c);var a=treeNode_portfolioType(h);if(m=="artefact"){if(a=="page"||a=="struct"||a=="artefact"){d=true}}else{if(m=="struct"){if(a=="page"||a=="struct"){d=true}}else{if(m=="page"){if(a=="map"||a=="page"){d=true}}}}}}return d}function treeNode_portfolioType(e){var c=jQuery(e.get(0));var d=treeNode_portfolioTypes(c);if(d==null){var a=c.parent("a");if(a.length>0){d=treeNode_portfolioTypes(jQuery(a.get(0)))}else{if(c.attr("id").indexOf("ds")==0){var b=c.prev("div");if(b.length>0){d=treeNode_portfolioTypes(b)}}else{if(c.attr("id").indexOf("dt")==0){var b=c.next("div");if(b.length>0){d=treeNode_portfolioTypes(b)}}}}}return d}function treeNode_portfolioTypes(a){if(a.find===undefined){return null}else{if(a.find(".o_ep_icon_struct").length>0||a.hasClass("o_ep_icon_struct")){return"struct"}else{if(a.find(".o_ep_icon_page").length>0||a.hasClass("o_ep_icon_page")){return"page"}else{if(a.find(".o_ep_icon_map").length>0||a.hasClass("o_ep_icon_map")){return"map"}else{if(a.find(".o_ep_artefact").length>0||a.hasClass("o_ep_artefact")){return"artefact"}}}}}return null}function treeNode_isDragNode(a){if(a!=undefined&&(a.indexOf("dd")==0||a.indexOf("ds")==0||a.indexOf("dt")==0||a.indexOf("da")==0||a.indexOf("row")==0)){return true}return false}function o_choice_toggleCheck(c,b){var d=document.forms[c].elements;len=d.length;if(typeof(len)=="undefined"){d.checked=b}else{var a;for(a=0;a<len;a++){if(d[a].type=="checkbox"&&d[a].getAttribute("class")=="o_checkbox"){d[a].checked=b}}}}function b_briefcase_isChecked(c,e){var b;var a=document.getElementById(c);var d=0;for(b=0;a.elements[b];b++){if(a.elements[b].type=="checkbox"&&a.elements[b].name=="paths"&&a.elements[b].checked){d++}}if(d<1){alert(e);return false}return true}function b_briefcase_toggleCheck(d,c){var a=document.getElementById(d);len=a.elements.length;var b;for(b=0;b<len;b++){if(a.elements[b].name=="paths"){a.elements[b].checked=c}}}function o_doPrint(){var d=jQuery("div.o_iframedisplay iframe");if(d.length>0){try{var a=d[0];frames[a.name].focus();frames[a.name].print();return}catch(c){for(i=0;frames.length>i;i++){a=frames[i];if(a.name=="oaa0"){continue}var b=document.getElementsByName(a.name)[0];if(b&&b.getAttribute("class")=="ext-shim"){continue}if(a.name!=""){try{frames[a.name].focus();frames[a.name].print()}catch(c){window.print()}return}}window.print()}}else{window.print()}}function b_attach_i18n_inline_editing(){jQuery("span.o_translation_i18nitem").hover(function(){jQuery(this.firstChild).show()},function(){jQuery("a.o_translation_i18nitem_launcher").hide()});jQuery("a.o_translation_i18nitem_launcher").hover(function(){var a=jQuery(this).parent("span.o_translation_i18nitem");a.effect("highlight")});b_AddOnDomReplacementFinishedCallback(b_attach_i18n_inline_editing)}function b_hideExtMessageBox(){}var BDebugger={_lastDOMCount:0,_lastObjCount:0,_knownGlobalOLATObjects:["o_afterserver","o_onc","o_getMainWin","o_ainvoke","o_info","o_beforeserver","o_ffEvent","o_openPopUp","o_debu_show","o_logwarn","o_dbg_unmark","o_ffRegisterSubmit","o_clearConsole","o_init","o_log","o_allowNextClick","o_dbg_mark","o_debu_hide","o_logerr","o_debu_oldcn","o_debu_oldtt","o_debug_trid","o_log_all"],_countDOMElements:function(){return document.getElementsByTagName("*").length},_countGlobalObjects:function(){var a=0;for(prop in window){a++}return a},logDOMCount:function(){var b=BDebugger;var a=b._countDOMElements();var c=a-b._lastDOMCount;console.log((c>0?"+":"")+c+" \t"+a+" \tDOM element count after DOM replacement");b._lastDOMCount=a;a=null},logGlobalObjCount:function(){var b=BDebugger;var a=b._countGlobalObjects();var c=a-b._lastObjCount;console.log((c>0?"+":"")+c+" \t"+a+" \tGlobal object count after DOM replacement");b._lastObjCount=a;a=null},logGlobalOLATObjects:function(){var b=BDebugger;var a=new Array();for(prop in window){if(prop.indexOf("o_")==0&&b._knownGlobalOLATObjects.indexOf(prop)==-1){a.push(prop)}}if(a.length>0){console.log(a.length+" global OLAT objects found:");a.each(function(c){console.log("\t"+typeof window[c]+" \t"+c)})}}};var OOEdusharing={start:function(){var a=o_info.uriprefix.replace("auth","edusharing")+"enabled";jQuery.ajax({type:"GET",url:a,dataType:"text",success:function(){jQuery(document).on("oo.dom.replacement.after",OOEdusharing.render);OOEdusharing.enableMetadataToggler()},error:function(b,d,c){}})},replaceWithSpinner:function(d,c,a){var b="<div style='";if(c>0){b+="width:"+c+"px;"}if(a>0){b+="height:"+a+"px;"}b+="'>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner1'></div></div>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner2'></div></div>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner3'></div></div>";b+="</div>";var e=jQuery(b);d.before(e);d.remove();return e},replaceGoTo:function(c,b){var a=o_info.uriprefix.replace("auth","edusharing")+"goto?identifier="+b;c=c.replace("{{{LMS_INLINE_HELPER_SCRIPT}}}",a);return c},replaceWithRendered:function(g,d,f,a,e){var c=o_info.uriprefix.replace("auth","edusharing")+"render?identifier="+d;if(f>0){c=c+"&width="+f}if(a){c=c+"&height="+a}var h="<div class='o_edusharing_container'";if(typeof e!="undefined"){h+=" style='"+e+"'"}h+="</div>";var b=jQuery(h);jQuery.ajax({type:"GET",url:c,dataType:"html",success:function(o){var n=OOEdusharing.replaceGoTo(o,d);var m=b.append(n);g.replaceWith(m)},error:function(m,o,n){g.replaceWith("<div class='o_warning'>edu-sharing not available</div>")}})},replace:function(e){var b=e.data("es_identifier");var d=e.attr("width");var a=e.attr("height");var c=e.attr("style");var f=OOEdusharing.replaceWithSpinner(e,d,a);OOEdusharing.replaceWithRendered(f,b,d,a,c)},render:function(){var a=jQuery("[data-es_identifier]");if(a.length>0){a.each(function(){var b=jQuery(this);OOEdusharing.replace(b)})}},enableMetadataToggler:function(){jQuery(document).click(function(a){if(jQuery(a.target).closest(".edusharing_metadata").length){}else{if(jQuery(a.target).closest(".edusharing_metadata_toggle_button").length){jQuery(".edusharing_metadata").hide();toggle_button=jQuery(a.target);metadata=toggle_button.parent().find(".edusharing_metadata");if(metadata.hasClass("open")){metadata.toggleClass("open");metadata.hide()}else{jQuery(".edusharing_metadata").removeClass("open");metadata.toggleClass("open");metadata.show()}}else{jQuery(".edusharing_metadata").hide();jQuery(".edusharing_metadata").removeClass("open")}}})}};jQuery(document).ready(function(){OOEdusharing.start()});/*! +jQuery.periodic=function(l,h){if(jQuery.isFunction(l)){h=l;l={}}var c=jQuery.extend({},jQuery.periodic.defaults,{ajax_complete:j,increment:g,reset:f,cancel:i},l);c.cur_period=c.period;c.tid=false;var e="";b();return c;function b(){i();c.tid=setTimeout(function(){h.call(c);g();if(c.tid){b()}},c.cur_period)}function j(n,m){if(m==="success"&&e!==n.responseText){e=n.responseText;f()}}function g(){c.cur_period*=c.decay;if(c.cur_period<c.period){f()}else{if(c.cur_period>c.max_period){c.cur_period=c.max_period;if(c.on_max!==undefined){c.on_max.call(c)}}}}function f(){c.cur_period=c.period;b()}function i(){clearTimeout(c.tid);c.tid=null}function k(){}function a(){}function d(){}};jQuery.periodic.defaults={period:4000,max_period:1800000,decay:1.5,on_max:undefined};var Hashtable=(function(){var p="function";var n=(typeof Array.prototype.splice==p)?function(s,r){s.splice(r,1)}:function(u,t){var s,v,r;if(t===u.length-1){u.length=t}else{s=u.slice(t+1);u.length=t;for(v=0,r=s.length;v<r;++v){u[t+v]=s[v]}}};function a(t){var r;if(typeof t=="string"){return t}else{if(typeof t.hashCode==p){r=t.hashCode();return(typeof r=="string")?r:a(r)}else{if(typeof t.toString==p){return t.toString()}else{try{return String(t)}catch(s){return Object.prototype.toString.call(t)}}}}}function g(r,s){return r.equals(s)}function e(r,s){return(typeof s.equals==p)?s.equals(r):(r===s)}function c(r){return function(s){if(s===null){throw new Error("null is not a valid "+r)}else{if(typeof s=="undefined"){throw new Error(r+" must not be undefined")}}}}var q=c("key"),l=c("value");function d(u,s,t,r){this[0]=u;this.entries=[];this.addEntry(s,t);if(r!==null){this.getEqualityFunction=function(){return r}}}var h=0,j=1,f=2;function o(r){return function(t){var s=this.entries.length,v,u=this.getEqualityFunction(t);while(s--){v=this.entries[s];if(u(t,v[0])){switch(r){case h:return true;case j:return v;case f:return[s,v[1]]}}}return false}}function k(r){return function(u){var v=u.length;for(var t=0,s=this.entries.length;t<s;++t){u[v+t]=this.entries[t][r]}}}d.prototype={getEqualityFunction:function(r){return(typeof r.equals==p)?g:e},getEntryForKey:o(j),getEntryAndIndexForKey:o(f),removeEntryForKey:function(s){var r=this.getEntryAndIndexForKey(s);if(r){n(this.entries,r[0]);return r[1]}return null},addEntry:function(r,s){this.entries[this.entries.length]=[r,s]},keys:k(0),values:k(1),getEntries:function(s){var u=s.length;for(var t=0,r=this.entries.length;t<r;++t){s[u+t]=this.entries[t].slice(0)}},containsKey:o(h),containsValue:function(s){var r=this.entries.length;while(r--){if(s===this.entries[r][1]){return true}}return false}};function m(s,t){var r=s.length,u;while(r--){u=s[r];if(t===u[0]){return r}}return null}function i(r,s){var t=r[s];return(t&&(t instanceof d))?t:null}function b(t,r){var w=this;var v=[];var u={};var x=(typeof t==p)?t:a;var s=(typeof r==p)?r:null;this.put=function(B,C){q(B);l(C);var D=x(B),E,A,z=null;E=i(u,D);if(E){A=E.getEntryForKey(B);if(A){z=A[1];A[1]=C}else{E.addEntry(B,C)}}else{E=new d(D,B,C,s);v[v.length]=E;u[D]=E}return z};this.get=function(A){q(A);var B=x(A);var C=i(u,B);if(C){var z=C.getEntryForKey(A);if(z){return z[1]}}return null};this.containsKey=function(A){q(A);var z=x(A);var B=i(u,z);return B?B.containsKey(A):false};this.containsValue=function(A){l(A);var z=v.length;while(z--){if(v[z].containsValue(A)){return true}}return false};this.clear=function(){v.length=0;u={}};this.isEmpty=function(){return !v.length};var y=function(z){return function(){var A=[],B=v.length;while(B--){v[B][z](A)}return A}};this.keys=y("keys");this.values=y("values");this.entries=y("getEntries");this.remove=function(B){q(B);var C=x(B),z,A=null;var D=i(u,C);if(D){A=D.removeEntryForKey(B);if(A!==null){if(!D.entries.length){z=m(v,C);n(v,z);delete u[C]}}}return A};this.size=function(){var A=0,z=v.length;while(z--){A+=v[z].entries.length}return A};this.each=function(C){var z=w.entries(),A=z.length,B;while(A--){B=z[A];C(B[0],B[1])}};this.putAll=function(H,C){var B=H.entries();var E,F,D,z,A=B.length;var G=(typeof C==p);while(A--){E=B[A];F=E[0];D=E[1];if(G&&(z=w.get(F))){D=C(F,z,D)}w.put(F,D)}};this.clone=function(){var z=new b(t,r);z.putAll(w);return z}}return b})();(function(b){b.fn.ooTranslator=function(){var d=null;b(document).each(function(){d=b(document).data("_ooTranslator");if(d==undefined){d=new a();b(document).data("_ooTranslator",d)}});return d};function a(){return this}a.prototype={mapperUrl:null,translators:null,initialize:function(d){this.mapperUrl=d;this.translators=new Object()},getTranslator:function(d,f){if(this.translators[d]==null){this.translators[d]=new Object()}if(this.translators[d][f]==null){var e=this.mapperUrl+"/"+d+"/"+f+"/translations.js";jQuery.ajax(e,{async:false,dataType:"json",success:function(g,i,h){jQuery(document).ooTranslator()._createTranslator(g,d,f)}})}return this.translators[d][f]},_createTranslator:function(e,d,f){this.translators[d][f]=new c().initialize(e,d,f)}};function c(){return this}c.prototype={localizationData:null,bundle:null,locale:null,initialize:function(f,d,e){this.bundle=e;this.locale=d;this.localizationData=f;return this},translate:function(d){if(this.localizationData[d]){return this.localizationData[d]}else{return this.bundle+":"+d}}}})(jQuery);+function(b){var a=function(){this.addExtraElements();this.state={busy:false,brandW:0,sitesW:0,sitesDirty:false,sites:{collapsed:this.isSitesCollapsed(),extended:this.isSitesExtended},tabsW:0,tabsDirty:false,tabs:{collapsed:this.isTabsCollapsed(),extended:this.isTabsExtended()},toolsW:0,toolsDirty:false,tools:{collapsed:this.isToolsCollapsed(),extended:this.isToolsExtended()},offCanvasWidth:0,moreW:0};var c=b("#o_offcanvas_right").css("width");if(c){this.state.offCanvasWidth=parseInt(c.replace(/[^\d.]/g,""));this.initListners();this.calculateWidth();this.optimize()}};a.prototype.initListners=function(){b(window).resize(b.proxy(this.onResizeCallback,this));b(document).on("oo.nav.sites.modified",b.proxy(function(){this.state.sitesDirty=true},this));b(document).on("oo.nav.tabs.modified",b.proxy(function(){this.state.tabsDirty=true},this));b(document).on("oo.nav.tools.modified",b.proxy(function(){this.state.toolsDirty=true},this));b(document).on("oo.dom.replacement.after",b.proxy(this.onDOMreplacementCallback,this));b(window).on("orientationchange",b.proxy(this.hideRight,this));b("#o_navbar_right-toggle").on("click",b.proxy(this.toggleRight,this));b("#o_offcanvas_right .o_offcanvas_close").on("click",b.proxy(this.hideRight,this));b("#o_navbar_more").on("shown.bs.dropdown",this.onDropdownShown);b("#o_navbar_more").on("hidden.bs.dropdown",this.onDropdownHidden)};a.prototype.onResizeCallback=function(){if(!this.state.busy){this.state.busy=true;this.calculateWidth();this.optimize();this.state.busy=false}};a.prototype.onPageWidthChangeCallback=function(){if(!this.state.busy){this.state.busy=true;this.cleanupMoreDropdown();this.calculateWidth();this.optimize();this.state.sitesDirty=false;this.state.tabsDirty=false;this.state.toolsDirty=false;this.state.busy=false}};a.prototype.onDOMreplacementCallback=function(){if(!this.state.busy&&(this.state.sitesDirty||this.state.tabsDirty||this.state.toolsDirty)){this.state.busy=true;this.cleanupMoreDropdown();this.calculateWidth();this.optimize();this.state.sitesDirty=false;this.state.tabsDirty=false;this.state.toolsDirty=false;this.state.busy=false}};a.prototype.onDropdownShown=function(c){var f=b("#o_navbar_more .dropdown-menu");if(f.length){var d=f.offset().left;if(d<0){f.removeClass("dropdown-menu-right")}}};a.prototype.onDropdownHidden=function(c){var d=b("#o_navbar_more .dropdown-menu");d.addClass("dropdown-menu-right")};a.prototype.calculateWidth=function(){var c=b("#o_navbar_container .o_navbar-collapse");this.state.navbarW=c.innerWidth();this.state.brandW=b(".o_navbar-brand").outerWidth(true);this.state.sitesW=this.getSites().outerWidth(true);this.state.tabsW=this.getTabs().outerWidth(true);this.state.toolsW=this.getTools().outerWidth(false);var d=b("#o_navbar_more:visible");this.state.moreW=(d.length>0?d.outerWidth(true):0)};a.prototype.getOverflow=function(c){var d=this.state.navbarW;d-=this.state.sitesW;d-=this.state.tabsW;d-=this.state.toolsW;d-=this.state.brandW;d-=this.state.moreW;d-=25;return -d};a.prototype.optimize=function(h){var c=this.getOverflow();var k=this.getSites();var l=this.getTabs();var g=this.getTools();var n=this.getMoreDropdown();var f=this.getOffcanvasRight();this.updateState();while(c>0&&(!this.state.tabs.collapsed||!this.state.sites.collapsed||!this.state.tools.collapsed)){if(!this.state.tabs.collapsed){this.collapse(l,n,"li","o_dropdown_tab")}else{if(!this.state.sites.collapsed){this.collapse(k,n,"li","o_dropdown_site")}else{if(!this.state.tools.collapsed){this.collapse(g,f,".o_navbar_tool:not(#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu)","o_tool_right")}}}this.calculateWidth();c=this.getOverflow();this.updateState()}while(c<0&&(!this.state.tabs.extended||!this.state.sites.extended||!this.state.tools.extended)){if(!this.state.tools.extended){var m=this.extend(f,g.children("#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu").first(),".o_tool_right","o_tool_right",true);if(!m){break}}if(!this.state.sites.extended){var j=this.extend(n,k,"li","o_dropdown_site");if(!j){break}}else{if(!this.state.tabs.extended){var d=this.extend(n,l,"li","o_dropdown_tab");if(!d){break}}}this.calculateWidth();c=this.getOverflow();this.updateState()}if(this.state.sites.extended&&this.state.tabs.extended){var i=b("#o_navbar_more");i.css("display","none")}this.checkToolsOrder()};a.prototype.updateState=function(){this.state.sites.collapsed=this.isSitesCollapsed();this.state.sites.extended=this.isSitesExtended();this.state.tabs.collapsed=this.isTabsCollapsed();this.state.tabs.extended=this.isTabsExtended();this.state.tools.collapsed=this.isToolsCollapsed();this.state.tools.extended=this.isToolsExtended()};a.prototype.collapse=function(g,d,c,f){var e=g.find(c);if(e.length){e=e.last()}if(e.length){f&&e.addClass(f);if(d){e.prependTo(d)}}this.updateDropdownToggle(d)};a.prototype.extend=function(g,d,c,i,f){var e=g.find(c);if(e.length){e=e.first()}var j=false;if(e.length){if(d&&d.length){if(f){d.before(e)}else{e.appendTo(d)}this.updateDropdownToggle(g);this.calculateWidth();var h=this.getOverflow();if(h>0){e.prependTo(g)}else{i&&e.removeClass(i);j=true}}}this.updateDropdownToggle(g);return j};a.prototype.updateDropdownToggle=function(c){var d=c.parents(".o_dropdown_toggle");if(!d.length){return}if(c.children().length){d.css("display","block")}else{d.css("display","none")}};a.prototype.addExtraElements=function(){var d=b("#o_navbar_container .o_navbar-collapse");var c=b("#o_navbar_more");if(c.length==0){c=b('<ul id="o_navbar_more" class="nav o_navbar-nav o_dropdown_toggle"><li><a class="dropdown-toggle" data-toggle="dropdown" href="#"">'+o_info.i18n_topnav_more+' <b class="caret"></b></a><ul class="dropdown-menu dropdown-menu-right"></ul></li></ul>');c.appendTo(d)}this.getSites().append('<li class="divider o_dropdown_site"></li>');b("#o_navbar_help .o_icon, #o_navbar_print .o_icon").addClass("o_icon-fw")};a.prototype.cleanupMoreDropdown=function(){if(!this.state.sitesDirty){var f=this.getSites();var d=this.getMoreDropdown().children(".o_dropdown_site");d.appendTo(f)}else{this.getSites().append('<li class="divider o_dropdown_site"></li>')}if(!this.state.tabsDirty){var e=this.getTabs();var c=this.getMoreDropdown().children(".o_dropdown_tab");c.prependTo(e)}this.getMoreDropdown().empty()};a.prototype.checkToolsOrder=function(){var f=this.getTools();var e=f.find("#o_navbar_help");var d=f.find("#o_navbar_print");var c=f.find("#o_navbar_imclient");if(c&&d){c.after(d)}if(c&&e){c.after(e)}};a.prototype.showRight=function(){if(!this.isOffcanvasVisible()&&!this.offcanvasTransitioning){this.offcanvasTransitioning=true;var d=this;var c=b("#o_offcanvas_right");c.show().transition({x:-d.state.offCanvasWidth},function(){b("body").addClass("o_offcanvas_right_visible");var e=b.proxy(d.hideRightOnClick,d);setTimeout(function(){b("html").on("click",e);d.offcanvasTransitioning=false},10)})}};a.prototype.hideRightOnClick=function(c){if("INPUT"!=c.target.nodeName){this.hideRight()}};a.prototype.hideRight=function(){if(this.isOffcanvasVisible()&&!this.offcanvasTransitioning){this.offcanvasTransitioning=true;b("html").off("click",b.proxy(this.hideRight,this));var d=this;var c=b("#o_offcanvas_right");c.transition({x:d.state.offCanvasWidth},function(){c.hide();b("body").removeClass("o_offcanvas_right_visible");d.offcanvasTransitioning=false})}};a.prototype.toggleRight=function(){if(this.isOffcanvasVisible()){this.hideRight()}else{this.showRight()}};a.prototype.isOffcanvasVisible=function(){return b("#o_offcanvas_right:visible").length};a.prototype.getSites=function(){return b("#o_navbar_container .o_navbar_sites")};a.prototype.getTabs=function(){return b("#o_navbar_container .o_navbar_tabs")};a.prototype.getTools=function(){return b("#o_navbar_container #o_navbar_tools_permanent")};a.prototype.getMoreDropdown=function(){return b("#o_navbar_more .dropdown-menu")};a.prototype.getOffcanvasRight=function(){return b("#o_offcanvas_right_container .o_navbar-right")};a.prototype.isSitesCollapsed=function(){return !this.getSites().children("li").not(".divider").length};a.prototype.isSitesExtended=function(){return !this.getMoreDropdown().children(".o_dropdown_site").not(".divider").length};a.prototype.isTabsCollapsed=function(){return !this.getTabs().children("li").length};a.prototype.isTabsExtended=function(){return !this.getMoreDropdown().children(".o_dropdown_tab").length};a.prototype.isToolsCollapsed=function(){return !this.getTools().children(".o_navbar_tool").not("#o_navbar_imclient, #o_navbar_search_opener, #o_navbar_my_menu").length};a.prototype.isToolsExtended=function(){return !this.getOffcanvasRight().children(".o_tool_right").length};b(document).ready(function(){var d=b("#o_navbar_wrapper");if(d){var c=new a();window.OPOL.navbar=c}})}(jQuery);+function(b){b.fn.ooBgCarrousel=function(){return new a()};var a=function(){};a.prototype.initCarrousel=function(g){this.settings=b.extend({query:null,images:[],shuffle:false,shuffleFirst:false,durationshow:5000,durationout:500,durationin:500,easeout:"ease",easein:"ease"},g);this.pos=null;if(this.settings.query==null||this.settings.images.length==0){return}this.initialImage=this.settings.images[0];if(this.settings.shuffle){var f=this.settings.images;for(var d,c,e=f.length;e;d=parseInt(Math.random()*e),c=f[--e],f[e]=f[d],f[d]=c){}}if(this.settings.shuffleFirst){this._replaceImage()}this.rotate()};a.prototype.rotate=function(){setTimeout(b.proxy(this._hideCurrent,this),this.settings.durationshow)};a.prototype._hideCurrent=function(){var c=b(this.settings.query);if(c&&c.length>0){c.transition({opacity:0,duration:this.settings.durationout,easing:this.settings.easeout},b.proxy(this._showNext,this))}};a.prototype._replaceImage=function(d){if(!d){d=b(this.settings.query)}if(d&&d.length>0){this.newImg="";this.oldImg="";if(this.pos==null){this.pos=1;this.oldImg=this.initialImage}else{this.oldImg=this.settings.images[this.pos];this.pos++;if(this.settings.images.length==this.pos){this.pos=0}}this.newImg=this.settings.images[this.pos];var c=d.css("background-image");if(c.indexOf(this.oldImg)==-1){d.transition({opacity:1,duration:0});return}var e=c.replace(this.oldImg,this.newImg);d.css("background-image",e)}};a.prototype._showNext=function(){var c=b(this.settings.query);this._replaceImage(c);c.transition({opacity:1,duration:this.settings.durationin,easing:this.settings.easein},b.proxy(this.rotate,this))}}(jQuery);!function(e){function t(){function t(e){"remove"===e&&this.each(function(e,t){var n=i(t);n&&n.remove()}),this.find("span.mceEditor,div.mceEditor").each(function(e,t){var n=tinymce.get(t.id.replace(/_parent$/,""));n&&n.remove()})}function r(e){var n,r=this;if(null!=e)t.call(r),r.each(function(t,n){var r;(r=tinymce.get(n.id))&&r.setContent(e)});else if(r.length>0&&(n=tinymce.get(r[0].id)))return n.getContent()}function i(e){var t=null;return e&&e.id&&a.tinymce&&(t=tinymce.get(e.id)),t}function o(e){return!!(e&&e.length&&a.tinymce&&e.is(":tinymce"))}var s={};e.each(["text","html","val"],function(t,a){var l=s[a]=e.fn[a],c="text"===a;e.fn[a]=function(t){var a=this;if(!o(a))return l.apply(a,arguments);if(t!==n)return r.call(a.filter(":tinymce"),t),l.apply(a.not(":tinymce"),arguments),a;var s="",u=arguments;return(c?a:a.eq(0)).each(function(t,n){var r=i(n);s+=r?c?r.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):r.getContent({save:!0}):l.apply(e(n),u)}),s}}),e.each(["append","prepend"],function(t,r){var a=s[r]=e.fn[r],l="prepend"===r;e.fn[r]=function(e){var t=this;return o(t)?e!==n?("string"==typeof e&&t.filter(":tinymce").each(function(t,n){var r=i(n);r&&r.setContent(l?e+r.getContent():r.getContent()+e)}),a.apply(t.not(":tinymce"),arguments),t):void 0:a.apply(t,arguments)}}),e.each(["remove","replaceWith","replaceAll","empty"],function(n,r){var i=s[r]=e.fn[r];e.fn[r]=function(){return t.call(this,r),i.apply(this,arguments)}}),s.attr=e.fn.attr,e.fn.attr=function(t,a){var l=this,c=arguments;if(!t||"value"!==t||!o(l))return a!==n?s.attr.apply(l,c):s.attr.apply(l,c);if(a!==n)return r.call(l.filter(":tinymce"),a),s.attr.apply(l.not(":tinymce"),c),l;var u=l[0],d=i(u);return d?d.getContent({save:!0}):s.attr.apply(e(u),c)}}var n,r,i,o=[],a=window;e.fn.tinymce=function(n){function s(){var r=[],o=0;i||(t(),i=!0),d.each(function(e,t){var i,a=t.id,s=n.oninit;a||(t.id=a=tinymce.DOM.uniqueId()),tinymce.get(a)||(i=new tinymce.Editor(a,n,tinymce.EditorManager),r.push(i),i.on("init",function(){var e,t=s;d.css("visibility",""),s&&++o==r.length&&("string"==typeof t&&(e=t.indexOf(".")===-1?null:tinymce.resolve(t.replace(/\.\w+$/,"")),t=tinymce.resolve(t)),t.apply(e||tinymce,r))}))}),e.each(r,function(e,t){t.render()})}var l,c,u,d=this,f="";if(!d.length)return d;if(!n)return window.tinymce?tinymce.get(d[0].id):null;if(d.css("visibility","hidden"),a.tinymce||r||!(l=n.script_url))1===r?o.push(s):s();else{r=1,c=l.substring(0,l.lastIndexOf("/")),l.indexOf(".min")!=-1&&(f=".min"),a.tinymce=a.tinyMCEPreInit||{base:c,suffix:f},l.indexOf("gzip")!=-1&&(u=n.language||"en",l=l+(/\?/.test(l)?"&":"?")+"js=true&core=true&suffix="+escape(f)+"&themes="+escape(n.theme||"modern")+"&plugins="+escape(n.plugins||"")+"&languages="+(u||""),a.tinyMCE_GZ||(a.tinyMCE_GZ={start:function(){function t(e){tinymce.ScriptLoader.markDone(tinymce.baseURI.toAbsolute(e))}t("langs/"+u+".js"),t("themes/"+n.theme+"/theme"+f+".js"),t("themes/"+n.theme+"/langs/"+u+".js"),e.each(n.plugins.split(","),function(e,n){n&&(t("plugins/"+n+"/plugin"+f+".js"),t("plugins/"+n+"/langs/"+u+".js"))})},end:function(){}}));var p=document.createElement("script");p.type="text/javascript",p.onload=p.onreadystatechange=function(t){t=t||window.event,2===r||"load"!=t.type&&!/complete|loaded/.test(p.readyState)||(tinymce.dom.Event.domLoaded=1,r=2,n.script_loaded&&n.script_loaded(),s(),e.each(o,function(e,t){t()}))},p.src=l,document.body.appendChild(p)}return d},e.extend(e.expr[":"],{tinymce:function(e){var t;return!!(e.id&&"tinymce"in window&&(t=tinymce.get(e.id),t&&t.editorManager===tinymce))}})}(jQuery);OPOL={};var o2c=0;var o3c=new Array();o_info.guibusy=false;o_info.linkbusy=false;o_info.scrolling=false;o_info.debug=true;o_info.drakes=new Array();var BLoader={_ajaxLoadedJS:new Array(),_isAlreadyLoadedJS:function(b){var a=true;jQuery("head script[src]").each(function(d,c){if(jQuery(c).attr("src").indexOf(b)!=-1){a=false}});if(jQuery.inArray(b,this._ajaxLoadedJS)!=-1){a=false}return !a},loadJS:function(b,c,a){if(!this._isAlreadyLoadedJS(b)){if(o_info.debug){o_log("BLoader::loadJS: loading ajax::"+a+" url::"+b)}if(a){jQuery.ajax(b,{async:false,dataType:"script",cache:true,success:function(d,f,e){}});this._ajaxLoadedJS.push(b)}else{jQuery.getScript(b)}if(o_info.debug){o_log("BLoader::loadJS: loading DONE url::"+b)}}else{if(o_info.debug){o_log("BLoader::loadJS: already loaded url::"+b)}}},executeGlobalJS:function(jsString,contextDesc){try{if(window.execScript){window.execScript(jsString)}else{window.eval(jsString)}}catch(e){if(window.console){console.log(contextDesc,"cannot execute js",jsString)}if(o_info.debug){o_logerr("BLoader::executeGlobalJS: Error when executing JS code in contextDesc::"+contextDesc+' error::"'+showerror(e)+" for: "+escape(jsString))}if(window.location.href.indexOf("o_winrndo")!=-1){window.location.reload()}else{window.location.href=window.location.href+(window.location.href.indexOf("?")!=-1?"&":"?")+"o_winrndo=1"}}},loadCSS:function(b,o,q){var r=window.document;try{if(r.createStyleSheet){var g=r.styleSheets;var d=0;var p=0;for(i=0;i<g.length;i++){var m=g[i];var f=m.href;if(f==b){d++;if(m.disabled){m.disabled=false;return}else{if(o_info.debug){o_logwarn("BLoader::loadCSS: style: "+b+" already in document and not disabled! (duplicate add)")}return}}if(m.id=="o_theme_css"){p=i}}if(d>1&&o_info.debug){o_logwarn("BLoader::loadCSS: apply styles: num of stylesheets found was not 0 or 1:"+d)}if(q){p=g.length}r.createStyleSheet(b,p)}else{var c=jQuery("#"+o);if(c&&c.length>0){if(o_info.debug){o_logwarn("BLoader::loadCSS: stylesheet already found in doc when trying to add:"+b+", with id "+o)}}else{var a=jQuery('<link id="'+o+'" rel="stylesheet" type="text/css" href="'+b+'">');if(q){a.insertBefore(jQuery("#o_fontSize_css"))}else{a.insertBefore(jQuery("#o_theme_css"))}}}}catch(n){if(window.console){console.log(n)}if(o_info.debug){o_logerr("BLoader::loadCSS: Error when loading CSS from URL::"+b)}}},unLoadCSS:function(a,n){var o=window.document;try{if(o.createStyleSheet){var f=o.styleSheets;var d=0;var p=a;var b=window.location.href.substring(0,window.location.href.indexOf("/",8));if(a.indexOf(b)==0){p=a.substring(b.length)}for(i=0;i<f.length;i++){var g=f[i].href;if(g==a||g==p){d++;if(!f[i].disabled){f[i].disabled=true}else{if(o_info.debug){o_logwarn("stylesheet: when removing: matching url, but already disabled! url:"+g)}}}}if(d!=1&&o_info.debug){o_logwarn("stylesheet: when removeing: num of stylesheets found was not 1:"+d)}}else{var c=jQuery("#"+n);if(c){c.href="";c.remove();c=null;return}else{if(o_info.debug){o_logwarn("no link with id found to remove, id:"+n+", url "+a)}}}}catch(m){if(o_info.debug){o_logerr("BLoader::unLoadCSS: Error when unloading CSS from URL::"+a)}}}};var BFormatter={formatLatexFormulas:function(b){try{if(typeof MathJax==="undefined"){o_mathjax()}else{if(MathJax&&MathJax.isReady){jQuery(function(){MathJax.Hub.Queue(function(){if(jQuery("#"+b+" .MathJax").length==0){MathJax.Hub.Typeset(b)}})})}else{setTimeout(function(){BFormatter.formatLatexFormulas(b)},100)}}}catch(a){if(window.console){console.log("error in BFormatter.formatLatexFormulas: ",a)}}},alignTableColumns:function(a){try{var b=new Array();jQuery(a).each(function(){for(j=0;j<jQuery(this)[0].rows[0].cells.length;j++){var d=jQuery(this)[0].rows[0].cells[j];if(!b[j]||b[j]<d.clientWidth){b[j]=d.clientWidth}}});jQuery(a).each(function(){for(j=0;j<jQuery(this)[0].rows[0].cells.length;j++){jQuery(this)[0].rows[0].cells[j].style.width=b[j]+"px"}})}catch(c){if(window.console){console.log("error in BFormatter.alignTableColumns: ",c)}}}};function o_init(){try{o_getMainWin().o_afterserver();if(window.location.href&&window.location.href!=null&&window.location.href.indexOf("%3A")<0){var a=window.location.href;if(a!=null&&!(a.lastIndexOf("http",0)===0)&&!(a.lastIndexOf("https",0)===0)){a=o_info.serverUri+a}o_info.businessPath=a;if(!(typeof o_shareActiveSocialUrl==="undefined")){o_shareActiveSocialUrl()}}}catch(b){if(o_info.debug){o_log("error in o_init: "+showerror(b))}}}function o_initEmPxFactor(){o_info.emPxFactor=jQuery("#o_width_1em").width();if(o_info.emPxFactor==0||o_info.emPxFactor=="undefined"){o_info.emPxFactor=12}}function o_getMainWin(){try{if(window.OPOL){return window}else{if(window.opener&&window.opener.OPOL){return window.opener}}}catch(a){if(o_info.debug){o_logerr('Exception while getting main window. rror::"'+showerror(a))}if(window.console){console.log('Exception while getting main window. rror::"'+showerror(a),"functions.js");console.log(a)}}throw"Can not find main OpenOLAT window"}function o_beforeserver(){o_info.linkbusy=true;showAjaxBusy();if(window.suppressOlatOnUnloadOnce){window.suppressOlatOnUnloadOnce=false}else{if(window.olatonunload){olatonunload()}}}function o_afterserver(){o2c=0;o_info.linkbusy=false;removeAjaxBusy()}function o2cl(){try{if(o_info.linkbusy){return false}else{var b=(o2c==0||confirm(o_info.dirty_form));if(b){o_beforeserver()}return b}}catch(a){if(window.console){console.log(a)}return false}}function o2cl_dirtyCheckOnly(){try{if(o_info.linkbusy){return false}else{return(o2c==0||confirm(o_info.dirty_form))}}catch(a){if(window.console){console.log(a)}return false}}function o2cl_noDirtyCheck(){if(o_info.linkbusy){return false}else{o_beforeserver();return true}}function o3cl(d){if(o_info.linkbusy){return false}else{var b=o3c1.indexOf(d)>-1;var a=(b&&o3c1.length>1)||o3c1.length>0;var c=(!a||confirm(o_info.dirty_form));if(c){o_beforeserver()}return c}}function o_onc(a){var b=a.responseText;BLoader.executeGlobalJS("o_info.last_o_onc="+b+";","o_onc");o_ainvoke(o_info.last_o_onc,false)}function o_allowNextClick(){o_info.linkbusy=false;removeAjaxBusy()}function removeBusyAfterDownload(c,b,a){o2c=0;o_afterserver()}Array.prototype.search=function(c,d){var a=this.length;for(var b=0;b<a;b++){if(this[b].constructor==Array){if(this[b].search(c,d)){return true;break}}else{if(d){if(this[b].indexOf(c)!=-1){return true;break}}else{if(this[b]==c){return true;break}}}}return false};if(!Function.prototype.curry){Function.prototype.curry=function(){if(arguments.length<1){return this}var a=this;var b=Array.prototype.slice.call(arguments);return function(){return a.apply(this,b.concat(Array.prototype.slice.call(arguments)))}}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(c){if(this==null){throw new TypeError()}var d=Object(this);var a=d.length>>>0;if(a===0){return -1}var e=0;if(arguments.length>1){e=Number(arguments[1]);if(e!=e){e=0}else{if(e!=0&&e!=Infinity&&e!=-Infinity){e=(e>0||-1)*Math.floor(Math.abs(e))}}}if(e>=a){return -1}var b=e>=0?e:Math.max(a-Math.abs(e),0);for(;b<a;b++){if(b in d&&d[b]===c){return b}}return -1}}var b_onDomReplacementFinished_callbacks=new Array();function b_AddOnDomReplacementFinishedCallback(a){b_onDomReplacementFinished_callbacks.push(a)}var b_changedDomEl=new Array();function b_AddOnDomReplacementFinishedUniqueCallback(a){if(a.constructor==Array){if(b_onDomReplacementFinished_callbacks.search(a[0])){return}}b_AddOnDomReplacementFinishedCallback(a)}var o_debug_trid=0;function o_ainvoke(M){if(M==undefined){return}o_info.inainvoke=true;var H=M.cmdcnt;if(H>0){jQuery(document).trigger("oo.dom.replacement.before");b_changedDomEl=new Array();if(o_info.debug){o_debug_trid++}var y=M.cmds;for(var S=0;S<H;S++){var I=y[S];var A=I.cmd;var Q=I.cda;var T=I.w;var c=this.window;var J;if(c){switch(A){case 1:var L=Q.e;BLoader.executeGlobalJS(L,"o_ainvoker::jsexec");if(o_info.debug){o_log("c1: execute jscode: "+L)}case 2:var u=Q.cc;var E=Q.cps;for(var P=0;P<u;P++){var m=E[P];var h=m.cid;var O=m.cidvis;var G=m.cw;var x=m.hfrag;var N=m.jsol;var g=m.hdr;if(o_info.debug){o_log("c2: redraw: "+m.cname+" ("+h+") "+m.hfragsize+" bytes, listener(s): "+m.clisteners)}var V=g+"\n\n"+x;var R=false;var D="o_c"+h;var B=jQuery("#"+D);if(B==null||B.length==0){D="o_fi"+h;B=jQuery("#"+D);R=true}if(B!=null){var w=jQuery("div.o_richtext_mce textarea",B);for(var K=0;K<w.length;K++){try{var a=jQuery(w.get(K)).attr("id");if(typeof top.tinymce!=undefined){top.tinymce.remove("#"+a)}}catch(Y){if(window.console){console.log(Y)}}}if(O){B.css("display","")}else{B.css("display","none")}if(R||!G){B.replaceWith(V)}else{try{B.empty().html(V);if(V.length>0&&B.get(0).innerHTML==""){B.get(0).innerHTML=V}}catch(Y){if(window.console){console.log(Y)}if(window.console){console.log("Fragment",V)}}b_changedDomEl.push(D)}B=null;checkDrakes();if(N!=""){BLoader.executeGlobalJS(N,"o_ainvoker::jsol")}}}break;case 3:c.o2c=0;var W=Q.rurl;c.o_afterserver();c.document.location.replace(W);break;case 5:c.o2c=0;var W=Q.rurl;c.o_afterserver();c.document.location.replace(W);break;case 6:c.o2c=0;c.o_afterserver();break;case 7:var o=c.document.location;var z=o.protocol+"//"+o.hostname;if(o.port!=""){z+=":"+o.port}var v=Q.cssrm;for(P=0;P<v.length;P++){var C=v[P];var F=C.id;var f=z+C.url;BLoader.unLoadCSS(f,F);if(o_info.debug){o_log("c7: rm css: id:"+F+" ,url:'"+f+"'")}}var U=Q.cssadd;for(k=0;k<U.length;k++){var C=U[k];var F=C.id;var f=z+C.url;var n=C.pt;BLoader.loadCSS(f,F,n);if(o_info.debug){o_log("c7: add css: id:"+F+" ,url:'"+f+"'")}}var p=Q.jsadd;for(l=0;l<p.length;l++){var C=p[l];var X=C.before;if(jQuery.type(X)==="string"){BLoader.executeGlobalJS(X,"o_ainvoker::preJsAdd")}var f=C.url;var q=C.enc;if(jQuery.type(f)==="string"){BLoader.loadJS(f,q,true)}if(o_info.debug){o_log("c7: add js: "+f)}}break;default:if(o_info.debug){o_log("?: unknown command "+A)}break}}else{if(o_info.debug){o_log("could not find window??")}}}var b=b_onDomReplacementFinished_callbacks.length;for(mycounter=0;b>mycounter;mycounter++){if(mycounter>50){break}var s=b_onDomReplacementFinished_callbacks.shift();if(typeof s.length==="number"){if(s[0]=="glosshighlighter"){var d=s[1];s=d}}s()}jQuery(document).trigger("oo.dom.replacement.after")}o_info.inainvoke=false}function clearAfterAjaxIframeCall(){if(o_info.linkbusy){o_afterserver()}}function showAjaxBusy(){setTimeout(function(){if(o_info.linkbusy){try{if(jQuery("#o_ajax_busy_backdrop").length==0){jQuery("#o_body").addClass("o_ajax_busy");jQuery("#o_ajax_busy").modal({show:true,backdrop:"static",keyboard:"false"});jQuery("#o_ajax_busy").after('<div id="o_ajax_busy_backdrop" class="modal-backdrop in"></div>');jQuery("#o_ajax_busy>.modal-backdrop").remove();jQuery("#o_ajax_busy_backdrop").css({"z-index":1200})}}catch(a){if(window.console){console.log(a)}}}},700)}function removeAjaxBusy(){try{jQuery("#o_body").removeClass("o_ajax_busy");jQuery("#o_ajax_busy_backdrop").remove();jQuery("#o_ajax_busy").modal("hide")}catch(a){if(window.console){console.log(a)}}}function setFormDirty(c){o2c=1;var a=document.getElementById(c);if(a!=null){var b=a.olat_fosm_0;if(b==null){b=a.olat_fosm}if(b){b.className="btn o_button_dirty"}}}function contextHelpWindow(a){helpWindow=window.open(a,"HelpWindow","height=760, width=940, left=0, top=0, location=no, menubar=no, resizable=yes, scrollbars=yes, toolbar=no");helpWindow.focus()}function o_openPopUp(b,d,c,a,f){attributes="height="+a+", width="+c+", resizable=yes, scrollbars=yes, left=100, top=100, ";if(f){attributes+="location=yes, menubar=yes, status=yes, toolbar=yes"}else{attributes+="location=no, menubar=no, status=no, toolbar=no"}var h;try{h=window.open(b,d,attributes)}catch(g){h=window.open(b,"OpenOLAT",attributes)}h.focus();if(o_info.linkbusy){o_afterserver()}}function b_handleFileUploadFormChange(m,b,g){m.setCustomValidity("");if(m.hasAttribute("data-max-size")){var p=m.getAttribute("data-max-size");if(p){var d=formInputFileSize(m);if(d>p){var q=jQuery(document).ooTranslator().getTranslator(o_info.locale,"org.olat.modules.forms.ui");var h=q.translate("file.upload.error.limit.exeeded");var o=q.translate("file.upload.limit");var n;if(p<250*1024){n=(p/1024).toFixed(1)+" KB"}else{if(p<250*1024*1024){n=(p/1024/1024).toFixed(1)+" MB"}else{n=(p/1024/1024/1024).toFixed(1)+" GB"}}m.setCustomValidity(h+" ("+o+": "+n+")")}}}var f=m.value;var e=f.lastIndexOf("/");if(e!=-1){f=f.substring(e+1)}e=f.lastIndexOf("\\");if(e!=-1){f=f.substring(e+1)}b.value=f;if(g){g.className="o_button_dirty"}var a=m.form.elements;for(i=0;i<a.length;i++){var c=a[i];if(c.name==b.name&&i+1<a.length){a[i+1].focus()}}}function formInputFileSize(c){try{if(!window.FileReader){return -1}if(!c||!c.files){return -1}var a=c.files[0];if(!a){return -1}return a.size}catch(b){o_logerr("form input file size check failed: "+b)}return -1}function gotonode(a){try{if(typeof o_activateCourseNode!="undefined"){o_activateCourseNode(a)}else{if(opener&&typeof opener.o_activateCourseNode!="undefined"){opener.o_activateCourseNode(a)}}}catch(b){alert("Goto node error:"+b)}}function o_viewportHeight(){var a=jQuery(document).height();if(a>0){return a}else{return 600}}OPOL.getMainColumnsMaxHeight=function(){var m=0,f=0,a=0,c=0,h=0,b,g=jQuery("#o_main_left_content"),e=jQuery("#o_main_right_content"),d=jQuery("#o_main_center_content");if(g!="undefined"&&g!=null){m=g.outerHeight(true)}if(e!="undefined"&&e!=null){f=e.outerHeight(true)}if(d!="undefined"&&d!=null){a=d.outerHeight(true)}c=(m>f?m:f);c=(c>a?c:a);if(c>0){return c}b=jQuery("#o_main");if(b!="undefined"&&b!=null){h=b.height()}if(b>0){return b}return o_viewportHeight()};OPOL.adjustHeight=function(){try{var a=0;col1=jQuery("#o_main_left_content").outerHeight(true);col2=jQuery("#o_main_right_content").outerHeight(true);col3=jQuery("#o_main_center_content").outerHeight(true);a=Math.max(col1,col2,col3);if(col1!=null){jQuery("#o_main_left").css({"min-height":a+"px"})}if(col2!=null){jQuery("#o_main_right").css({"min-height":a+"px"})}if(col3!=null){jQuery("#o_main_center").css({"min-height":a+"px"})}}catch(b){if(window.console){console.log(b)}}};OPOL.setContainerFullWidth=function(a){if(a){jQuery("body").addClass("o_width_full")}else{jQuery("body").removeClass("o_width_full")}jQuery.proxy(OPOL.navbar.onPageWidthChangeCallback,OPOL.navbar)()};jQuery(window).resize(function(){clearTimeout(o_info.resizeId);o_info.resizeId=setTimeout(function(){jQuery(document).trigger("oo.window.resize.after")},500)});jQuery(document).on("oo.window.resize.after",OPOL.adjustHeight);jQuery(document).on("oo.dom.replacement.after",OPOL.adjustHeight);jQuery().ready(OPOL.adjustHeight);function o_scrollToElement(a){try{o_info.scrolling=true;jQuery("html, body").animate({scrollTop:jQuery(a).offset().top},333,function(d,c){o_info.scrolling=false})}catch(b){}}function o_popover(c,b,a){if(typeof(a)==="undefined"){a="bottom"}jQuery("#"+c).popover({placement:a,html:true,trigger:"click",container:"body",content:function(){return jQuery("#"+b).clone().html()}}).on("shown.bs.popover",function(){var d=function(f){jQuery("#"+c).popover("hide");jQuery("body").unbind("click",d)};setTimeout(function(){jQuery("body").on("click",d)},5)})}function o_popoverWithTitle(e,d,c,b){if(typeof(b)==="undefined"){b="bottom"}var a=jQuery("#"+e).popover({placement:b,html:true,title:c,trigger:"click",container:"body",content:function(){return jQuery("#"+d).clone().html()}});a.on("shown.bs.popover",function(){var f=function(g){jQuery("#"+e).popover("hide");jQuery("body").unbind("click",f)};setTimeout(function(){jQuery("body").on("click",f)},5)});return a}function o_shareLinkPopup(d,c,b){if(typeof(b)==="undefined"){b="top"}var a=jQuery("#"+d);a.popover({placement:b,html:true,trigger:"click",container:"body",content:c}).on("shown.bs.popover",function(){var e=function(f){if(jQuery(f.target).data("toggle")!=="popover"&&jQuery(f.target).parents(".popover.in").length===0){jQuery("#"+d).popover("hide");jQuery("body").unbind("click",e)}};setTimeout(function(){jQuery("body").on("click",e)},5)});a.attr("title",a.attr("data-original-title"))}function o_QRCodePopup(d,c,b){if(typeof(b)==="undefined"){b="top"}var a=jQuery("#"+d);a.popover({placement:b,html:true,trigger:"click",container:"body",content:'<div id="'+d+'_pop" class="o_qrcode"></div>'}).on("shown.bs.popover",function(){o_info.qr=o_QRCode(d+"_pop",(jQuery.isFunction(c)?c():c));var e=function(f){if(jQuery(f.target).data("toggle")!=="popover"&&jQuery(f.target).parents(".popover.in").length===0){jQuery("#"+d).popover("hide");jQuery("body").unbind("click",e)}};setTimeout(function(){jQuery("body").on("click",e)},5)}).on("hidden.bs.popover",function(){try{o_info.qr.clear();delete o_info.qr}catch(f){}});a.attr("title",a.attr("data-original-title"))}function o_QRCode(c,b){try{BLoader.loadJS(o_info.o_baseURI+"/js/jquery/qrcodejs/qrcode.min.js","utf8",true);return new QRCode(document.getElementById(c),b)}catch(a){return null}}function b_resizeIframeToMainMaxHeight(e){var d=jQuery("#"+e);if(d!="undefined"&&d!=null){var c=OPOL.getMainColumnsMaxHeight()-110;var b=o_viewportHeight()-100;b=b-d.offset().top;var a=(b>c?b:c);d.height(a)}}var o_debu_oldcn,o_debu_oldtt;function o_debu_show(b,a){if(o_debu_oldcn){o_debu_hide(o_debu_oldcn,o_debu_oldtt)}jQuery(b).addClass("o_dev_m");jQuery(a).show();o_debu_oldtt=a;o_debu_oldcn=b}function o_debu_hide(b,a){jQuery(a).hide();jQuery(b).removeClass("o_dev_m")}function o_dbg_mark(a){var b=jQuery("#"+a);if(b){b.css("background-color","#FCFCB8");b.css("border","3px solid #00F")}}function o_dbg_unmark(a){var b=jQuery("#"+a);if(b){b.css("border","");b.css("background-color","")}}function o_clearConsole(){o_log_all="";o_log(null)}var o_log_all="";function o_log(b){if(b){o_log_all="\n"+o_debug_trid+"> "+b+o_log_all;o_log_all=o_log_all.substr(0,4000)}var a=jQuery("#o_debug_cons");if(a){if(o_log_all.length==4000){o_log_all=o_log_all+"\n... (stripped: to long)... "}a.value=o_log_all}if(!jQuery.type(window.console)==="undefined"){window.console.log(b)}}function o_logerr(a){o_log("ERROR:"+a)}function o_logwarn(a){o_log("WARN:"+a)}function showerror(c){var a="";for(var b in c){a+=b+": "+c[b]+"\n"}return"error detail:\n"+a}function o_ffEvent(g,f,d,o,p){var h,m,b,a;h=document.getElementById(f);m=h.value;h.value=d;b=document.getElementById(o);a=b.value;b.value=p;var c=jQuery("#"+g);var e=true;jQuery("#"+g+" input[type=file]").filter(function(q,r){return !r.checkValidity()}).each(function(q,s){var t=s.getAttribute("id")+"_validation_error";var r=document.getElementById(t);if(!r){r=document.createElement("div");r.setAttribute("class","o_error");r.setAttribute("id",t);s.parentNode.parentNode.appendChild(r)}r.innerHTML=s.validationMessage;e=false});if(e){var n=c.attr("enctype");if(n&&n.indexOf("multipart")==0){o_XHRSubmitMultipart(g)}else{if(document.forms[g].onsubmit()){document.forms[g].submit()}}}h.value=m;b.value=a}function o_IQEvent(a){if(document.forms[a].onsubmit()){document.forms[a].submit()}}function o_TableMultiActionEvent(a,c){var b=jQuery("#o_mai_"+a);b.val(c);if(document.forms[a].onsubmit()){document.forms[a].submit()}b.val("")}function o_XHRSubmit(h){if(o_info.linkbusy){return false}o_beforeserver();var o=true;var a=jQuery("#"+h);var n=a.attr("enctype");if(n&&n.indexOf("multipart")==0){var g="openolat-submit-"+(""+Math.random()).substr(2);var d=o_createIFrame(g);document.body.appendChild(d);a.attr("target",d.name);return true}else{var f=a.serializeArray();if(arguments.length>1){var m=arguments.length;for(var e=1;e<m;e=e+2){if(m>e+1){var c=new Object();c.name=arguments[e];c.value=arguments[e+1];f[f.length]=c}}}var b=a.attr("action");jQuery.ajax(b,{type:"POST",data:f,cache:false,dataType:"json",success:function(s,v,r){try{o_ainvoke(s);if(o){var p=s.businessPath;var q=s.documentTitle;var u=s.historyPointId;if(p){o_pushState(u,q,p)}}}catch(t){if(window.console){console.log(t)}}finally{o_afterserver()}},error:o_onXHRError});return false}}function o_XHRSubmitMultipart(a){var c=jQuery("#"+a);var d="openolat-submit-"+(""+Math.random()).substr(2);var b=o_createIFrame(d);document.body.appendChild(b);c.attr("target",b.name);c.submit();c.attr("target","")}function o_createIFrame(b){var a=jQuery('<iframe name="'+b+'" id="'+b+'" src="about:blank" style="position: absolute; top: -9999px; left: -9999px;"></iframe>');return a[0]}function o_removeIframe(a){jQuery("#"+a).remove()}function o_showFormDirtyDialog(a){o_scrollToElement("#o_top");jQuery("#o_form_dirty_message").modal("show");jQuery("#o_form_dirty_message .o_form_dirty_ignore").on("click",function(){jQuery("#o_form_dirty_message").modal("hide");jQuery("#o_form_dirty_message .o_form_dirty_ignore").off();a()});return false}function o_ffXHREvent(h,e,s,g,p,t,f,m){if(t&&o2c==1){var d=Array.prototype.slice.call(arguments);d[5]=false;var u=function(){o_ffXHREvent.apply(window,d)};return o_showFormDirtyDialog(u)}else{if(!o2cl_noDirtyCheck()){return false}}o_beforeserver();var v=new Object();if(m){var b=jQuery("#"+h);var q=b.serializeArray();var o=q.length;for(var r=0;r<o;r++){var n=q[r];if(n.name!="dispatchuri"&&n.name!="dispatchevent"){v[n.name]=n.value}}}v.dispatchuri=s;v.dispatchevent=p;if(arguments.length>8){var a=arguments.length;for(var r=8;r<a;r=r+2){if(a>r+1){v[arguments[r]]=arguments[r+1]}}}var c=jQuery("#"+h).attr("action");jQuery.ajax(c,{type:"POST",data:v,cache:false,dataType:"json",success:function(z,C,y){try{o_ainvoke(z);if(f){var w=z.businessPath;var x=z.documentTitle;var B=z.historyPointId;if(w){o_pushState(B,x,w)}}}catch(A){if(window.console){console.log(A)}}finally{o_afterserver()}},error:o_onXHRError})}function o_ffXHRNFEvent(f,e,a,h,m){var c=new Object();c.dispatchuri=a;c.dispatchevent=m;if(arguments.length>5){var g=arguments.length;for(var d=5;d<g;d=d+2){if(g>d+1){c[arguments[d]]=arguments[d+1]}}}var b=jQuery("#"+f).attr("action");jQuery.ajax(b,{type:"POST",data:c,cache:false,dataType:"json",success:function(o,p,n){}})}function o_XHRWikiEvent(b){var a=jQuery(b).attr("href");if(a.indexOf(o_info.serverUri)==0){a=a.substring(o_info.serverUri.length,a.length)}o_XHREvent(a,false,true);return false}function o_XHREvent(h,f,c){if(f&&o2c==1){var b=Array.prototype.slice.call(arguments);b[1]=false;var a=function(){o_XHREvent.apply(window,b)};return o_showFormDirtyDialog(a)}else{if(!o2cl_noDirtyCheck()){return false}}o_beforeserver();var e=new Object();if(arguments.length>3){var g=arguments.length;for(var d=3;d<g;d=d+2){if(g>d+1){e[arguments[d]]=arguments[d+1]}}}jQuery.ajax(h,{type:"POST",data:e,cache:false,dataType:"json",success:function(p,s,o){try{if(c){try{var m=p.businessPath;var n=p.documentTitle;var r=p.historyPointId;if(m){o_pushState(r,n,m)}}catch(q){if(window.console){console.log(q)}}}o_ainvoke(p)}catch(q){if(window.console){console.log(q)}}finally{o_afterserver()}},error:o_onXHRError});return false}function o_XHRNFEvent(d){var b=new Object();if(arguments.length>1){var c=arguments.length;for(var a=1;a<c;a=a+2){if(c>a+1){b[arguments[a]]=arguments[a+1]}}}jQuery.ajax(d,{type:"POST",data:b,cache:false,dataType:"json",success:function(f,g,e){},error:o_onXHRError})}function o_onXHRError(a,d,b){o_afterserver();if(401==a.status){var c=o_info.oo_noresponse.replace("reload.html",window.document.location.href);showMessageBox("error",o_info.oo_noresponse_title,c,undefined)}else{if(window.console){console.log("Error status 2",d,b,a.responseText);console.log(a)}}}function o_pushState(d,f,a){try{var b=new Object();b.businessPath=a;b.historyPointId=d;if(a!=null&&!(a.lastIndexOf("http",0)===0)&&!(a.lastIndexOf("https",0)===0)){a=o_info.serverUri+a}o_info.businessPath=a;if(!(typeof o_shareActiveSocialUrl==="undefined")){o_shareActiveSocialUrl()}if(window.history&&!(typeof window.history==="undefined")&&window.history.pushState){window.history.pushState(b,f,a)}else{window.location.hash=d}}catch(c){if(window.console){console.log(c,a)}}}function o_toggleMark(a){var b=jQuery("i",a).attr("class");if(b.indexOf("o_icon_bookmark_add")>=0){jQuery("i",a).removeClass("o_icon_bookmark_add").addClass("o_icon_bookmark")}else{jQuery("i",a).removeClass("o_icon_bookmark").addClass("o_icon_bookmark_add")}}function registerDrake(a){o_info.drakes.push(a);return a}function destroyDrakes(){if(o_info.drakes!=="undefined"&&o_info.drakes!=null&&o_info.drakes.length>0){for(var a=o_info.drakes.length;a-->0;){try{o_info.drakes[a].destroy()}catch(b){if(window.console){console.log(b)}}o_info.drakes.pop()}}}function checkDrakes(){if(o_info.drakes!=="undefined"&&o_info.drakes!=null&&o_info.drakes.length>0){if(jQuery(".o_drake").length==0){destroyDrakes()}}}function o_normalizeFilename(b){b=b.replace(/\s/g,"_");var f=["/",",",":","(",")"];for(var c=f.length;c-->0;){b=b.split(f[c]).join("_")}var a=["\u00C4","\u00D6","\u00DC","\u00E4","\u00F6","\u00E6","\u00FC","\u00DF","\u00F8","\u2205"],d=["Ae","Oe","Ue","ae","oe","ae","ue","ss","o","o"];for(var c=a.length;c-->0;){b=b.split(a[c]).join(d[c])}try{b=b.normalize("NFKD");b=b.replace("/p{InCombiningDiacriticalMarks}+/g","");b=b.replace("/W+/g","")}catch(g){if(window.console){console.log(g)}}return b}function setFlexiFormDirtyByListener(a){setFlexiFormDirty(a.data.formId,a.data.hideMessage)}function setFlexiFormDirty(b,c){var a=o3c.indexOf(b)>-1;if(!a){o3c.push(b)}jQuery("#"+b).each(function(){var d=jQuery(this).data("FlexiSubmit");if(d!=null){jQuery("#"+d).addClass("btn o_button_dirty");o2c=(c?0:1)}})}function o_ffRegisterSubmit(b,a){jQuery("#"+b).data("FlexiSubmit",a)}function dismissInfoBox(a){javascript:jQuery("#"+a).remove();return true}function showInfoBox(g,d){var c=Math.floor(Math.random()*65536).toString(16);var f='<div id="'+c+'" class="o_alert_info"><div class="alert alert-info clearfix o_sel_info_message"><a class="o_alert_close o_sel_info_close" href="javascript:;" onclick="dismissInfoBox(\''+c+'\')"><i class="o_icon o_icon_close"> </i></a><h3><i class="o_icon o_icon_info"> </i> '+g+"</h3><p>"+d+"</p></div></div>";var a=jQuery("#o_messages").prepend(f);var e=(d.length>150)?8000:((d.length>70)?6000:4000);var b=function(){jQuery("#"+c).transition({top:"-100%"},333,function(){jQuery("#"+c).remove()})};o_info.scrolling=true;jQuery("#"+c).show().transition({top:0},333);jQuery("#"+c).click(function(h){b()});o_scrollToElement("#o_top");g=null;d=null;a=null;setTimeout(function(){try{b()}catch(h){}},e)}function showMessageBox(b,f,d,a){if(b=="info"){showInfoBox(f,d);return null}else{var c='<div id="myFunctionalModal" class="modal fade" role="dialog"><div class="modal-dialog"><div class="modal-content">';c+='<div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>';c+='<h4 class="modal-title">'+f+"</h4></div>";c+='<div class="modal-body alert ';if("warn"==b){c+="alert-warning"}else{if("error"==b){c+="alert-danger"}else{c+="alert-info"}}c+='"><p>'+d+"</p></div></div></div></div>";jQuery("#myFunctionalModal").remove();jQuery("body").append(c);var e=jQuery("#myFunctionalModal").modal("show").on("hidden.bs.modal",function(g){jQuery("#myFunctionalModal").remove()});o_scrollToElement("#o_top");return e}}function o_table_toggleCheck(d,c){var a=document.forms[d].elements.tb_ms;len=a.length;if(typeof(len)=="undefined"){a.checked=c}else{var b;for(b=0;b<len;b++){a[b].checked=c}}}function onTreeStartDrag(a,b){jQuery(a.target).addClass("o_dnd_proxy")}function onTreeStopDrag(a,b){jQuery(a.target).removeClass("o_dnd_proxy")}function onTreeDrop(g,h){var a=jQuery(h.draggable[0]);var f=jQuery(this);f.css({position:"",width:""});var c=f.droppable("option","endUrl");if(c.lastIndexOf("/")==(c.length-1)){c=c.substring(0,c.length-1)}var e=a.attr("id");var b=e.substring(2,e.length);c+="%3Atnidle%3A"+b;var d=f.attr("id");if(d.indexOf("ds")==0){c+="%3Asne%3Ayes"}else{if(d.indexOf("dt")==0){c+="%3Asne%3Aend"}}jQuery(".ui-droppable").each(function(m,n){jQuery(n).droppable("disable")});o_XHREvent(c+"/",false,false)}function treeAcceptDrop(a){return true}function treeAcceptDrop_notWithChildren(a){var c=false;var b=jQuery(a);var e=b.attr("id");if(e!=undefined&&(e.indexOf("dd")==0||e.indexOf("ds")==0||e.indexOf("dt")==0||e.indexOf("da")==0||e.indexOf("row")==0)){var g=jQuery(this);var m=g.attr("id");var d=e.substring(2,e.length);var f=m.substring(2,m.length);if(d!=f){var h=jQuery("#dd"+d).parents("li");if(h.length>0&&jQuery(h.get(0)).find("#dd"+f).length==0){c=true}}}return c}function treeAcceptDrop_portfolio(b){var d=false;var c=jQuery(b);var f=c.attr("id");if(treeNode_isDragNode(f)){var h=jQuery(this);var o=h.attr("id");var e=f.substring(2,f.length);var g=o.substring(2,o.length);var n=f.indexOf("ds")==0||f.indexOf("dt")==0;if(e!=g){var m=treeNode_portfolioType(c);var a=treeNode_portfolioType(h);if(m=="artefact"){if(a=="page"||a=="struct"||a=="artefact"){d=true}}else{if(m=="struct"){if(a=="page"||a=="struct"){d=true}}else{if(m=="page"){if(a=="map"||a=="page"){d=true}}}}}}return d}function treeNode_portfolioType(e){var c=jQuery(e.get(0));var d=treeNode_portfolioTypes(c);if(d==null){var a=c.parent("a");if(a.length>0){d=treeNode_portfolioTypes(jQuery(a.get(0)))}else{if(c.attr("id").indexOf("ds")==0){var b=c.prev("div");if(b.length>0){d=treeNode_portfolioTypes(b)}}else{if(c.attr("id").indexOf("dt")==0){var b=c.next("div");if(b.length>0){d=treeNode_portfolioTypes(b)}}}}}return d}function treeNode_portfolioTypes(a){if(a.find===undefined){return null}else{if(a.find(".o_ep_icon_struct").length>0||a.hasClass("o_ep_icon_struct")){return"struct"}else{if(a.find(".o_ep_icon_page").length>0||a.hasClass("o_ep_icon_page")){return"page"}else{if(a.find(".o_ep_icon_map").length>0||a.hasClass("o_ep_icon_map")){return"map"}else{if(a.find(".o_ep_artefact").length>0||a.hasClass("o_ep_artefact")){return"artefact"}}}}}return null}function treeNode_isDragNode(a){if(a!=undefined&&(a.indexOf("dd")==0||a.indexOf("ds")==0||a.indexOf("dt")==0||a.indexOf("da")==0||a.indexOf("row")==0)){return true}return false}function o_choice_toggleCheck(c,b){var d=document.forms[c].elements;len=d.length;if(typeof(len)=="undefined"){d.checked=b}else{var a;for(a=0;a<len;a++){if(d[a].type=="checkbox"&&d[a].getAttribute("class")=="o_checkbox"){d[a].checked=b}}}}function b_briefcase_isChecked(c,e){var b;var a=document.getElementById(c);var d=0;for(b=0;a.elements[b];b++){if(a.elements[b].type=="checkbox"&&a.elements[b].name=="paths"&&a.elements[b].checked){d++}}if(d<1){alert(e);return false}return true}function b_briefcase_toggleCheck(d,c){var a=document.getElementById(d);len=a.elements.length;var b;for(b=0;b<len;b++){if(a.elements[b].name=="paths"){a.elements[b].checked=c}}}function o_doPrint(){var d=jQuery("div.o_iframedisplay iframe");if(d.length>0){try{var a=d[0];frames[a.name].focus();frames[a.name].print();return}catch(c){for(i=0;frames.length>i;i++){a=frames[i];if(a.name=="oaa0"){continue}var b=document.getElementsByName(a.name)[0];if(b&&b.getAttribute("class")=="ext-shim"){continue}if(a.name!=""){try{frames[a.name].focus();frames[a.name].print()}catch(c){window.print()}return}}window.print()}}else{window.print()}}function b_attach_i18n_inline_editing(){jQuery("span.o_translation_i18nitem").hover(function(){jQuery(this.firstChild).show()},function(){jQuery("a.o_translation_i18nitem_launcher").hide()});jQuery("a.o_translation_i18nitem_launcher").hover(function(){var a=jQuery(this).parent("span.o_translation_i18nitem");a.effect("highlight")});b_AddOnDomReplacementFinishedCallback(b_attach_i18n_inline_editing)}function b_hideExtMessageBox(){}var BDebugger={_lastDOMCount:0,_lastObjCount:0,_knownGlobalOLATObjects:["o_afterserver","o_onc","o_getMainWin","o_ainvoke","o_info","o_beforeserver","o_ffEvent","o_openPopUp","o_debu_show","o_logwarn","o_dbg_unmark","o_ffRegisterSubmit","o_clearConsole","o_init","o_log","o_allowNextClick","o_dbg_mark","o_debu_hide","o_logerr","o_debu_oldcn","o_debu_oldtt","o_debug_trid","o_log_all"],_countDOMElements:function(){return document.getElementsByTagName("*").length},_countGlobalObjects:function(){var a=0;for(prop in window){a++}return a},logDOMCount:function(){var b=BDebugger;var a=b._countDOMElements();var c=a-b._lastDOMCount;console.log((c>0?"+":"")+c+" \t"+a+" \tDOM element count after DOM replacement");b._lastDOMCount=a;a=null},logGlobalObjCount:function(){var b=BDebugger;var a=b._countGlobalObjects();var c=a-b._lastObjCount;console.log((c>0?"+":"")+c+" \t"+a+" \tGlobal object count after DOM replacement");b._lastObjCount=a;a=null},logGlobalOLATObjects:function(){var b=BDebugger;var a=new Array();for(prop in window){if(prop.indexOf("o_")==0&&b._knownGlobalOLATObjects.indexOf(prop)==-1){a.push(prop)}}if(a.length>0){console.log(a.length+" global OLAT objects found:");a.each(function(c){console.log("\t"+typeof window[c]+" \t"+c)})}}};var OOEdusharing={start:function(){var a=o_info.uriprefix.replace("auth","edusharing")+"enabled";jQuery.ajax({type:"GET",url:a,dataType:"text",success:function(){jQuery(document).on("oo.dom.replacement.after",OOEdusharing.render);OOEdusharing.enableMetadataToggler()},error:function(b,d,c){}})},replaceWithSpinner:function(d,c,a){var b="<div style='";if(c>0){b+="width:"+c+"px;"}if(a>0){b+="height:"+a+"px;"}b+="'>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner1'></div></div>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner2'></div></div>";b+="<div class='edusharing_spinner_inner'><div class='edusharing_spinner3'></div></div>";b+="</div>";var e=jQuery(b);d.before(e);d.remove();return e},replaceGoTo:function(c,b){var a=o_info.uriprefix.replace("auth","edusharing")+"goto?identifier="+b;c=c.replace("{{{LMS_INLINE_HELPER_SCRIPT}}}",a);return c},replaceWithRendered:function(g,d,f,a,e){var c=o_info.uriprefix.replace("auth","edusharing")+"render?identifier="+d;if(f>0){c=c+"&width="+f}if(a){c=c+"&height="+a}var h="<div class='o_edusharing_container'";if(typeof e!="undefined"){h+=" style='"+e+"'"}h+="</div>";var b=jQuery(h);jQuery.ajax({type:"GET",url:c,dataType:"html",success:function(o){var n=OOEdusharing.replaceGoTo(o,d);var m=b.append(n);g.replaceWith(m)},error:function(m,o,n){g.replaceWith("<div class='o_warning'>edu-sharing not available</div>")}})},replace:function(e){var b=e.data("es_identifier");var d=e.attr("width");var a=e.attr("height");var c=e.attr("style");var f=OOEdusharing.replaceWithSpinner(e,d,a);OOEdusharing.replaceWithRendered(f,b,d,a,c)},render:function(){var a=jQuery("[data-es_identifier]");if(a.length>0){a.each(function(){var c=jQuery(this);OOEdusharing.replace(c)})}var b=jQuery(".o_iframe_rel");if(b.length>0){b.each(function(){var c=jQuery(this);c.on("load",function(){c.contents().on("click",OOEdusharing.toggleMetadata);var d=c.contents().find("[data-es_identifier]");if(d.length>0){d.each(function(){var e=jQuery(this);OOEdusharing.replace(e)})}})})}},toggleMetadata:function(a){if(jQuery(a.target).closest(".edusharing_metadata").length){}else{if(jQuery(a.target).closest(".edusharing_metadata_toggle_button").length){jQuery(".edusharing_metadata").hide();toggle_button=jQuery(a.target);metadata=toggle_button.parent().find(".edusharing_metadata");if(metadata.hasClass("open")){metadata.toggleClass("open");metadata.hide()}else{jQuery(".edusharing_metadata").removeClass("open");metadata.toggleClass("open");metadata.show()}}else{jQuery(".edusharing_metadata").hide();jQuery(".edusharing_metadata").removeClass("open")}}},enableMetadataToggler:function(){jQuery(document).click(OOEdusharing.toggleMetadata)}};jQuery(document).ready(function(){OOEdusharing.start()});/*! * jQuery Transit - CSS3 transitions and transformations * (c) 2011-2014 Rico Sta. Cruz * MIT Licensed. diff --git a/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.js b/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.js index ae95361320e9ff057bb26fd4aa74f02d255b80e2..67334794e996b2dd62189315e3e5012258e6f195 100644 --- a/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.js +++ b/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.js @@ -132,7 +132,6 @@ } function onConfigEdited(e) { - console.log(e.data); var params = e.data; var node = editor.selection.getNode(); setAttributes(node, params); diff --git a/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.min.js b/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.min.js index d2ea20c6dd27dc945ab6404eb873a8e190fb1352..9a1ab0fd3db1229942ec35ca29d07477c6f9125a 100644 --- a/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.min.js +++ b/src/main/webapp/static/js/tinymce4/tinymce/plugins/olatedusharing/plugin.min.js @@ -1 +1 @@ -(function(){tinymce.create("org.olat.modules.edusharing.ui",{init:function(j,b){var f,g;var h;function k(){if(f){return f}var p=o_getMainWin();if(p){f=jQuery(document).ooTranslator().getTranslator(p.o_info.locale,"org.olat.modules.edusharing.ui")}else{f={translate:function(q){return q}}}return f}function e(){if(g){return g}var p=o_getMainWin();if(p){g=jQuery(document).ooTranslator().getTranslator(p.o_info.locale,"org.olat.core")}else{g={translate:function(q){return q}}}return g}function l(p){switch(p){case"left":var q="display: block; float: left; margin: 5px 5px 5px 0;";break;case"right":var q="display: block; float: right; margin: 5px 0 5px 5px;";break;case"inline":var q="display: inline-block; margin: 0 5px;";break;case"none":default:var q="display: block; float: none; margin: 5px 0;";break}return q}function n(p){if(1!=p.nodeType){return false}if(!p.dataset.es_identifier){return false}return true}function o(){function p(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return p()+p()+p()+p()+p()+p()+p()+p()}function d(r){var q=j.getParam("contextPath");var p=q+"/edusharing/preview",p=p.concat("?objectUrl="+r.object_url);p=p.concat("&version="+r.window_version);return p}function m(q){var p=q!=null&&q.mimetype!==null?q.mimetype.substr(0,6).toLowerCase():null;if(q.mediatype=="tool_object"||p=="audio/"||p=="video/"||p=="image/"||q.repotype=="YOUTUBE"){return true}return false}function i(q){if(typeof q.target.params=="undefined"){console.warn("edu-sharing selection returns nothing.");return}if(typeof q.target.params.mimetype=="undefined"){return}var r=q.target.params;var p=j.selection.getNode();node=null;if(m(r)){node=document.createElement("img");node=p.appendChild(node);node.setAttribute("src",d(r))}else{node=document.createElement("a");node=p.appendChild(node);node.innerHTML=r.title}node.dataset.es_identifier=o();node.dataset.es_objecturl=r.object_url;node.dataset.es_version=r.window_version;node.dataset.es_version_current=r.window_version;if(r.es_mimetype!==null){node.dataset.es_mimetype=r.mimetype}if(r.mediatype!==null){node.dataset.es_mediatype=r.mediatype}if(r.window_width!==null){node.dataset.es_width=r.window_width}if(r.window_height!==null){node.dataset.es_height=r.window_height}node.dataset.es_first_edit=true;r.esFloat="left";c(node,r);j.selection.setCursorLocation(node);j.execCommand("edusharing_edit_dialog")}function a(q){console.log(q.data);var r=q.data;var p=j.selection.getNode();c(p,r);if(r.window_versionshow=="latest"){p.dataset.es_version=0}else{p.dataset.es_version=p.dataset.es_version_current}p.dataset.es_float=r.esFloat;j.execCommand("mceRepaint")}function c(r,s){r.setAttribute("class","edusharing");r.setAttribute("alt",s.title);r.setAttribute("title",s.title);var q=s.window_width;if(q==0){q=""}r.setAttribute("width",q);var p=s.window_height;if(p==0){p=""}r.setAttribute("height",p);r.setAttribute("style",l(s.esFloat))}j.addButton("olatedusharing",{title:"edu-sharing",image:b+"/img/edusharing.png",cmd:"edusharing_button",onPostRender:function(){var p=this;j.on("NodeChange",function(r){var q=n(j.selection.getNode());p.active(q)})}});j.addCommand("edusharing_button",function(r,q){var p=j.selection.getNode();if(p){if(n(p)){j.execCommand("edusharing_edit_dialog",r,q)}else{j.execCommand("edusharing_insert_dialog",r,q)}}});j.addCommand("edusharing_insert_dialog",function(){var p={url:j.getParam("contextPath")+"/edusharing/search",width:document.documentElement.clientWidth*0.8,height:document.documentElement.clientHeight*0.8,inline:1,maximizable:true,onClose:i};j.windowManager.open(p)});j.addCommand("edusharing_edit_dialog",function(s,r){var q=j.selection.getNode();if(!n(q)){return false}var u={window_width:q.getAttribute("width"),window_height:q.getAttribute("height"),title:q.getAttribute("title"),esFloat:q.dataset.es_float,window_versionshow:q.dataset.es_version==0?"latest":"current",mimetype:q.dataset.es_mimetype};var p=q.dataset.es_first_edit==="true"?false:true;q.dataset.es_first_edit=false;var t=!m(u);j.windowManager.open({title:k().translate("tiny.config.dialog.title"),body:[{type:"form",items:[{name:"title",type:"textbox",label:k().translate("tiny.config.title"),value:u.title},{name:"window_versionshow",type:"listbox",label:p?null:k().translate("tiny.config.version"),values:[{text:k().translate("tiny.config.version.latest"),value:"latest"},{text:k().translate("tiny.config.version.current"),value:"current"}],value:u.window_versionshow,hidden:p},{name:"esFloat",type:"listbox",label:k().translate("tiny.config.float"),values:[{text:k().translate("tiny.config.float.left"),value:"left"},{text:k().translate("tiny.config.float.right"),value:"right"},{text:k().translate("tiny.config.float.inline"),value:"inline"},{text:k().translate("tiny.config.float.none"),value:"none"}],value:u.esFloat},{type:"container",label:t?null:k().translate("tiny.config.size"),layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"window_width",type:"textbox",value:u.window_width,maxLength:4,size:4},{type:"label",text:"x"},{name:"window_height",type:"textbox",value:u.window_height,maxLength:4,size:4}],hidden:t}]}],onSubmit:a},u)})},getInfo:function(){return{longname:"OpenOLAT edu-sharing",author:"uhensler, frentix GmbH",authorurl:"http://www.frentix.com",infourl:"http://www.frentix.com",version:"1.0.0"}}});tinymce.PluginManager.add("olatedusharing",org.olat.modules.edusharing.ui)})(); \ No newline at end of file +(function(){tinymce.create("org.olat.modules.edusharing.ui",{init:function(j,b){var f,g;var h;function k(){if(f){return f}var p=o_getMainWin();if(p){f=jQuery(document).ooTranslator().getTranslator(p.o_info.locale,"org.olat.modules.edusharing.ui")}else{f={translate:function(q){return q}}}return f}function e(){if(g){return g}var p=o_getMainWin();if(p){g=jQuery(document).ooTranslator().getTranslator(p.o_info.locale,"org.olat.core")}else{g={translate:function(q){return q}}}return g}function l(p){switch(p){case"left":var q="display: block; float: left; margin: 5px 5px 5px 0;";break;case"right":var q="display: block; float: right; margin: 5px 0 5px 5px;";break;case"inline":var q="display: inline-block; margin: 0 5px;";break;case"none":default:var q="display: block; float: none; margin: 5px 0;";break}return q}function n(p){if(1!=p.nodeType){return false}if(!p.dataset.es_identifier){return false}return true}function o(){function p(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}return p()+p()+p()+p()+p()+p()+p()+p()}function d(r){var q=j.getParam("contextPath");var p=q+"/edusharing/preview",p=p.concat("?objectUrl="+r.object_url);p=p.concat("&version="+r.window_version);return p}function m(q){var p=q!=null&&q.mimetype!==null?q.mimetype.substr(0,6).toLowerCase():null;if(q.mediatype=="tool_object"||p=="audio/"||p=="video/"||p=="image/"||q.repotype=="YOUTUBE"){return true}return false}function i(q){if(typeof q.target.params=="undefined"){console.warn("edu-sharing selection returns nothing.");return}if(typeof q.target.params.mimetype=="undefined"){return}var r=q.target.params;var p=j.selection.getNode();node=null;if(m(r)){node=document.createElement("img");node=p.appendChild(node);node.setAttribute("src",d(r))}else{node=document.createElement("a");node=p.appendChild(node);node.innerHTML=r.title}node.dataset.es_identifier=o();node.dataset.es_objecturl=r.object_url;node.dataset.es_version=r.window_version;node.dataset.es_version_current=r.window_version;if(r.es_mimetype!==null){node.dataset.es_mimetype=r.mimetype}if(r.mediatype!==null){node.dataset.es_mediatype=r.mediatype}if(r.window_width!==null){node.dataset.es_width=r.window_width}if(r.window_height!==null){node.dataset.es_height=r.window_height}node.dataset.es_first_edit=true;r.esFloat="left";c(node,r);j.selection.setCursorLocation(node);j.execCommand("edusharing_edit_dialog")}function a(q){var r=q.data;var p=j.selection.getNode();c(p,r);if(r.window_versionshow=="latest"){p.dataset.es_version=0}else{p.dataset.es_version=p.dataset.es_version_current}p.dataset.es_float=r.esFloat;j.execCommand("mceRepaint")}function c(r,s){r.setAttribute("class","edusharing");r.setAttribute("alt",s.title);r.setAttribute("title",s.title);var q=s.window_width;if(q==0){q=""}r.setAttribute("width",q);var p=s.window_height;if(p==0){p=""}r.setAttribute("height",p);r.setAttribute("style",l(s.esFloat))}j.addButton("olatedusharing",{title:"edu-sharing",image:b+"/img/edusharing.png",cmd:"edusharing_button",onPostRender:function(){var p=this;j.on("NodeChange",function(r){var q=n(j.selection.getNode());p.active(q)})}});j.addCommand("edusharing_button",function(r,q){var p=j.selection.getNode();if(p){if(n(p)){j.execCommand("edusharing_edit_dialog",r,q)}else{j.execCommand("edusharing_insert_dialog",r,q)}}});j.addCommand("edusharing_insert_dialog",function(){var p={url:j.getParam("contextPath")+"/edusharing/search",width:document.documentElement.clientWidth*0.8,height:document.documentElement.clientHeight*0.8,inline:1,maximizable:true,onClose:i};j.windowManager.open(p)});j.addCommand("edusharing_edit_dialog",function(s,r){var q=j.selection.getNode();if(!n(q)){return false}var u={window_width:q.getAttribute("width"),window_height:q.getAttribute("height"),title:q.getAttribute("title"),esFloat:q.dataset.es_float,window_versionshow:q.dataset.es_version==0?"latest":"current",mimetype:q.dataset.es_mimetype};var p=q.dataset.es_first_edit==="true"?false:true;q.dataset.es_first_edit=false;var t=!m(u);j.windowManager.open({title:k().translate("tiny.config.dialog.title"),body:[{type:"form",items:[{name:"title",type:"textbox",label:k().translate("tiny.config.title"),value:u.title},{name:"window_versionshow",type:"listbox",label:p?null:k().translate("tiny.config.version"),values:[{text:k().translate("tiny.config.version.latest"),value:"latest"},{text:k().translate("tiny.config.version.current"),value:"current"}],value:u.window_versionshow,hidden:p},{name:"esFloat",type:"listbox",label:k().translate("tiny.config.float"),values:[{text:k().translate("tiny.config.float.left"),value:"left"},{text:k().translate("tiny.config.float.right"),value:"right"},{text:k().translate("tiny.config.float.inline"),value:"inline"},{text:k().translate("tiny.config.float.none"),value:"none"}],value:u.esFloat},{type:"container",label:t?null:k().translate("tiny.config.size"),layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"window_width",type:"textbox",value:u.window_width,maxLength:4,size:4},{type:"label",text:"x"},{name:"window_height",type:"textbox",value:u.window_height,maxLength:4,size:4}],hidden:t}]}],onSubmit:a},u)})},getInfo:function(){return{longname:"OpenOLAT edu-sharing",author:"uhensler, frentix GmbH",authorurl:"http://www.frentix.com",infourl:"http://www.frentix.com",version:"1.0.0"}}});tinymce.PluginManager.add("olatedusharing",org.olat.modules.edusharing.ui)})(); \ No newline at end of file