diff options
Diffstat (limited to 'js/directive/NewsSlideUp.js')
-rw-r--r-- | js/directive/NewsSlideUp.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/js/directive/NewsSlideUp.js b/js/directive/NewsSlideUp.js new file mode 100644 index 000000000..437a119e7 --- /dev/null +++ b/js/directive/NewsSlideUp.js @@ -0,0 +1,75 @@ +/** + * ownCloud - News + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @copyright Bernhard Posselt 2014 + */ +app.directive('newsSlideUp', ($rootScope, $document) => { + 'use strict'; + + return (scope, elem, attr) => { + // defaults + let slideArea = elem; + let cssClass = false; + + let options = scope.$eval(attr.newsSlideUp); + + if (options) { + if (options.selector) { + slideArea = $(options.selector); + } + + if (options.cssClass) { + cssClass = options.cssClass; + } + + + if (options.hideOnFocusLost) { + $($document[0].body).click(() => { + $rootScope.$broadcast('newsSlideUp'); + }); + + $rootScope.$on('newsSlideUp', (scope, params) => { + if (params !== slideArea && + slideArea.is(':visible') && + !slideArea.is(':animated')) { + + slideArea.slideUp(); + + if (cssClass) { + elem.removeClass(cssClass); + } + } + }); + + slideArea.click((event) => { + $rootScope.$broadcast('newsSlideUp', slideArea); + event.stopPropagation(); + }); + + elem.click((event) => { + $rootScope.$broadcast('newsSlideUp', slideArea); + event.stopPropagation(); + }); + } + } + + elem.click(() => { + if (slideArea.is(':visible') && !slideArea.is(':animated')) { + slideArea.slideUp(); + if (cssClass) { + elem.removeClass(cssClass); + } + } else { + slideArea.slideDown(); + if (cssClass) { + elem.addClass(cssClass); + } + } + }); + + }; +});
\ No newline at end of file |