aboutsummaryrefslogtreecommitdiffstats
path: root/docs/components/angular-bootstrap/bootstrap.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/components/angular-bootstrap/bootstrap.js')
-rw-r--r--docs/components/angular-bootstrap/bootstrap.js173
1 files changed, 172 insertions, 1 deletions
diff --git a/docs/components/angular-bootstrap/bootstrap.js b/docs/components/angular-bootstrap/bootstrap.js
index 3e1c8d00..3bcc18fa 100644
--- a/docs/components/angular-bootstrap/bootstrap.js
+++ b/docs/components/angular-bootstrap/bootstrap.js
@@ -198,6 +198,133 @@ directive.table = function() {
};
};
+var popoverElement = function() {
+ var object = {
+ init : function() {
+ this.element = angular.element(
+ '<div class="popover popover-incode top">' +
+ '<div class="arrow"></div>' +
+ '<div class="popover-inner">' +
+ '<div class="popover-title"><code></code></div>' +
+ '<div class="popover-content"></div>' +
+ '</div>' +
+ '</div>'
+ );
+ this.node = this.element[0];
+ this.element.css({
+ 'display':'block',
+ 'position':'absolute'
+ });
+ angular.element(document.body).append(this.element);
+
+ var inner = this.element.children()[1];
+ this.titleElement = angular.element(inner.childNodes[0].firstChild);
+ this.contentElement = angular.element(inner.childNodes[1]);
+
+ //stop the click on the tooltip
+ this.element.bind('click', function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ });
+
+ var self = this;
+ angular.element(document.body).bind('click',function(event) {
+ if(self.visible()) self.hide();
+ });
+ },
+
+ show : function(x,y) {
+ this.element.addClass('visible');
+ this.position(x || 0, y || 0);
+ },
+
+ hide : function() {
+ this.element.removeClass('visible');
+ this.position(-9999,-9999);
+ },
+
+ visible : function() {
+ return this.position().y >= 0;
+ },
+
+ isSituatedAt : function(element) {
+ return this.besideElement ? element[0] == this.besideElement[0] : false;
+ },
+
+ title : function(value) {
+ return this.titleElement.html(value);
+ },
+
+ content : function(value) {
+ if(value && value.length > 0) {
+ value = new Showdown.converter().makeHtml(value);
+ }
+ return this.contentElement.html(value);
+ },
+
+ positionArrow : function(position) {
+ this.node.className = 'popover ' + position;
+ },
+
+ positionAway : function() {
+ this.besideElement = null;
+ this.hide();
+ },
+
+ positionBeside : function(element) {
+ this.besideElement = element;
+
+ var elm = element[0];
+ var x = elm.offsetLeft;
+ var y = elm.offsetTop;
+ x -= 30;
+ y -= this.node.offsetHeight + 10;
+ this.show(x,y);
+ },
+
+ position : function(x,y) {
+ if(x != null && y != null) {
+ this.element.css('left',x + 'px');
+ this.element.css('top', y + 'px');
+ }
+ else {
+ return {
+ x : this.node.offsetLeft,
+ y : this.node.offsetTop
+ };
+ }
+ }
+ };
+
+ object.init();
+ object.hide();
+
+ return object;
+};
+
+directive.popover = ['popoverElement', function(popover) {
+ return {
+ restrict: 'A',
+ priority : 500,
+ link: function(scope, element, attrs) {
+ element.bind('click',function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ if(popover.isSituatedAt(element) && popover.visible()) {
+ popover.title('');
+ popover.content('');
+ popover.positionAway();
+ }
+ else {
+ popover.title(attrs.title);
+ popover.content(attrs.content);
+ popover.positionBeside(element);
+ }
+ });
+ }
+ }
+}];
+
directive.tabPane = function() {
return {
require: '^tabbable',
@@ -208,5 +335,49 @@ directive.tabPane = function() {
};
};
+directive.foldout = ['$http', '$animator','$window', function($http, $animator, $window) {
+ return {
+ restrict: 'A',
+ priority : 500,
+ link: function(scope, element, attrs) {
+ var animator = $animator(scope, { ngAnimate: "'foldout'" });
+ var container, loading, url = attrs.url;
+ if(/\/build\//.test($window.location.href)) {
+ url = '/build/docs' + url;
+ }
+ element.bind('click',function() {
+ scope.$apply(function() {
+ if(!container) {
+ if(loading) return;
+
+ loading = true;
+ var par = element.parent();
+ container = angular.element('<div class="foldout">loading...</div>');
+ animator.enter(container, null, par);
+
+ $http.get(url, { cache : true }).success(function(html) {
+ loading = false;
+
+ html = '<div class="foldout-inner">' +
+ '<div calss="foldout-arrow"></div>' +
+ html +
+ '</div>';
+ container.html(html);
+
+ //avoid showing the element if the user has already closed it
+ if(container.css('display') == 'block') {
+ container.css('display','none');
+ animator.show(container);
+ }
+ });
+ }
+ else {
+ container.css('display') == 'none' ? animator.show(container) : animator.hide(container);
+ }
+ });
+ });
+ }
+ }
+}];
-angular.module('bootstrap', []).directive(directive);
+angular.module('bootstrap', []).directive(directive).factory('popoverElement', popoverElement);