mirror of
https://github.com/lukevella/rallly.git
synced 2025-05-12 16:36:49 +02:00
89 lines
2.2 KiB
JavaScript
89 lines
2.2 KiB
JavaScript
/*
|
|
* @license
|
|
* angular-modal v0.4.0
|
|
* (c) 2013 Brian Ford http://briantford.com
|
|
* License: MIT
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
angular.module('btford.modal', []).
|
|
factory('btfModal', function ($animate, $compile, $rootScope, $controller, $q, $http, $templateCache) {
|
|
return function modalFactory (config) {
|
|
if (!(!config.template ^ !config.templateUrl)) {
|
|
throw new Error('Expected modal to have exacly one of either `template` or `templateUrl`');
|
|
}
|
|
|
|
var template = config.template,
|
|
controller = config.controller || angular.noop,
|
|
controllerAs = config.controllerAs,
|
|
container = angular.element(config.container || document.body),
|
|
element = null,
|
|
html,
|
|
scope;
|
|
|
|
if (config.template) {
|
|
var deferred = $q.defer();
|
|
deferred.resolve(config.template);
|
|
html = deferred.promise;
|
|
} else {
|
|
html = $http.get(config.templateUrl, {
|
|
cache: $templateCache
|
|
}).
|
|
then(function (response) {
|
|
return response.data;
|
|
});
|
|
}
|
|
|
|
function activate (locals) {
|
|
return html.then(function (html) {
|
|
if (!element) {
|
|
attach(html, locals);
|
|
}
|
|
});
|
|
}
|
|
|
|
function attach (html, locals) {
|
|
element = angular.element(html);
|
|
if (element.length === 0) {
|
|
throw new Error('The template contains no elements; you need to wrap text nodes')
|
|
}
|
|
$animate.enter(element, container);
|
|
scope = $rootScope.$new();
|
|
if (locals) {
|
|
for (var prop in locals) {
|
|
scope[prop] = locals[prop];
|
|
}
|
|
}
|
|
var ctrl = $controller(controller, { $scope: scope });
|
|
if (controllerAs) {
|
|
scope[controllerAs] = ctrl;
|
|
}
|
|
$compile(element)(scope);
|
|
}
|
|
|
|
function deactivate () {
|
|
var deferred = $q.defer();
|
|
if (element) {
|
|
$animate.leave(element, function () {
|
|
scope.$destroy();
|
|
element = null;
|
|
deferred.resolve();
|
|
});
|
|
} else {
|
|
deferred.resolve();
|
|
}
|
|
return deferred.promise;
|
|
}
|
|
|
|
function active () {
|
|
return !!element;
|
|
}
|
|
|
|
return {
|
|
activate: activate,
|
|
deactivate: deactivate,
|
|
active: active
|
|
};
|
|
};
|
|
});
|