a80db339f8
Requires turning IrcUtils into an Angular service, because the global variable trick won't work with use strict. Reuse is still easily possible by removing the angular wrapping around it.
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
(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();
|
|
}
|
|
}]
|
|
};
|
|
}]);
|
|
})();
|