glowingbear-mainbox/js/plugin-directive.js

56 lines
1.8 KiB
JavaScript

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 !== undefined) {
embed.scrollIntoViewIfNeeded();
}
};
setTimeout(scroll, 100);
};
if ($scope.plugin.visible) {
$scope.showContent();
}
}]
};
}]);