(function() { 'use strict'; var weechat = angular.module('weechat'); weechat.directive('plugin', ['$rootScope', function($rootScope) { /* * Plugin directive * Shows additional plugin content */ return { templateUrl: 'directives/plugin.html', scope: { plugin: '=data' }, controller: ['$scope', function($scope) { $scope.displayedContent = ""; $scope.plugin.visible = $rootScope.auto_display_embedded_content; $scope.hideContent = function() { $scope.plugin.visible = false; }; $scope.showContent = function() { /* * Shows the plugin content. * displayedContent is bound to the DOM. * Actual plugin content is only fetched when * content is shown. */ // If the plugin is asynchronous / lazy, execute it now and store // the result. This ensures that the callback is executed only once if ($scope.plugin.content instanceof Function) { $scope.plugin.content = $scope.plugin.content(); } $scope.displayedContent = $scope.plugin.content; $scope.plugin.visible = true; // Scroll embed content into view var scroll = function() { var embed = document.querySelector(".embed_" + $scope.plugin.$$hashKey); if (embed) { embed.scrollIntoViewIfNeeded(); } }; setTimeout(scroll, 100); }; if ($scope.plugin.visible) { $scope.showContent(); } }] }; }]); })();