summaryrefslogtreecommitdiffstats
path: root/core/js/js.js
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2015-07-16 15:28:45 +0200
committerVincent Petry <pvince81@owncloud.com>2015-08-10 14:12:34 +0200
commitca34921cdf8db4075906b3531390aa1b1ae9216c (patch)
tree49c8f0256fa2fb6d13bbec3d15cd4a1f90153c99 /core/js/js.js
parent15e16d335db5771778477e944d4e63ac807382b9 (diff)
downloadnextcloud-server-ca34921cdf8db4075906b3531390aa1b1ae9216c.tar.gz
nextcloud-server-ca34921cdf8db4075906b3531390aa1b1ae9216c.zip
Implement file actions dropdown
File actions now have two types "inline" and "dropdown". The default is "dropdown". The file actions will now be shown in a dropdown menu.
Diffstat (limited to 'core/js/js.js')
-rw-r--r--core/js/js.js56
1 files changed, 44 insertions, 12 deletions
diff --git a/core/js/js.js b/core/js/js.js
index 72d4edd28dd..25baafde08f 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -571,21 +571,20 @@ var OC={
* @todo Write documentation
*/
registerMenu: function($toggle, $menuEl) {
+ var self = this;
$menuEl.addClass('menu');
$toggle.on('click.menu', function(event) {
// prevent the link event (append anchor to URL)
event.preventDefault();
if ($menuEl.is(OC._currentMenu)) {
- $menuEl.slideUp(OC.menuSpeed);
- OC._currentMenu = null;
- OC._currentMenuToggle = null;
+ self.hideMenus();
return;
}
// another menu was open?
else if (OC._currentMenu) {
// close it
- OC._currentMenu.hide();
+ self.hideMenus();
}
$menuEl.slideToggle(OC.menuSpeed);
OC._currentMenu = $menuEl;
@@ -599,15 +598,51 @@ var OC={
unregisterMenu: function($toggle, $menuEl) {
// close menu if opened
if ($menuEl.is(OC._currentMenu)) {
- $menuEl.slideUp(OC.menuSpeed);
- OC._currentMenu = null;
- OC._currentMenuToggle = null;
+ this.hideMenus();
}
$toggle.off('click.menu').removeClass('menutoggle');
$menuEl.removeClass('menu');
},
/**
+ * Hides any open menus
+ *
+ * @param {Function} complete callback when the hiding animation is done
+ */
+ hideMenus: function(complete) {
+ if (OC._currentMenu) {
+ OC._currentMenu.trigger(new $.Event('beforeHide'));
+ OC._currentMenu.slideUp(OC.menuSpeed, complete);
+ OC._currentMenu.trigger(new $.Event('afterHide'));
+ }
+ OC._currentMenu = null;
+ OC._currentMenuToggle = null;
+ },
+
+ /**
+ * Shows a given element as menu
+ *
+ * @param {Object} [$toggle=null] menu toggle
+ * @param {Object} $menuEl menu element
+ * @param {Function} complete callback when the showing animation is done
+ */
+ showMenu: function($toggle, $menuEl, complete) {
+ if ($menuEl.is(OC._currentMenu)) {
+ return;
+ }
+ this.hideMenus();
+ OC._currentMenu = $menuEl;
+ OC._currentMenuToggle = $toggle;
+ $menuEl.trigger(new $.Event('beforeShow'));
+ $menuEl.show();
+ $menuEl.trigger(new $.Event('afterShow'));
+ // no animation
+ if (_.isFunction()) {
+ complete();
+ }
+ },
+
+ /**
* Wrapper for matchMedia
*
* This is makes it possible for unit tests to
@@ -1256,11 +1291,8 @@ function initCore() {
// don't close when clicking on the menu directly or a menu toggle
return false;
}
- if (OC._currentMenu) {
- OC._currentMenu.slideUp(OC.menuSpeed);
- }
- OC._currentMenu = null;
- OC._currentMenuToggle = null;
+
+ OC.hideMenus();
});