1 /* 2 * JBoss, Home of Professional Open Source 3 * Copyright ${year}, Red Hat, Inc. and individual contributors 4 * by the @authors tag. See the copyright.txt in the distribution for a 5 * full listing of individual contributors. 6 * 7 * This is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU Lesser General Public License as 9 * published by the Free Software Foundation; either version 2.1 of 10 * the License, or (at your option) any later version. 11 * 12 * This software is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this software; if not, write to the Free 19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 21 */ 22 23 (function ($, rf) { 24 25 rf.ui = rf.ui || {}; 26 27 rf.ui.Popup = function(id, options) { 28 $super.constructor.call(this, id); 29 this.options = $.extend({}, defaultOptions, options); 30 this.positionOptions = {type: this.options.positionType, from:this.options.jointPoint, to:this.options.direction, offset: this.options.positionOffset}; 31 32 this.popup = $(document.getElementById(id)); 33 34 this.visible = this.options.visible; 35 this.attachTo = this.options.attachTo; 36 this.attachToBody = this.options.attachToBody; 37 this.positionType = this.options.positionType; 38 this.positionOffset = this.options.positionOffset; 39 }; 40 41 rf.BaseComponent.extend(rf.ui.Popup); 42 var $super = rf.ui.Popup.$super; 43 44 var defaultOptions = { 45 visible: false 46 }; 47 48 $.extend(rf.ui.Popup.prototype, { 49 50 name : "popup", 51 52 show: function(event) { 53 if (!this.visible) { 54 if (this.attachToBody) { 55 this.parentElement = this.popup.parent().get(0); 56 document.body.appendChild(this.popup.get(0)); 57 } 58 this.visible = true; 59 } 60 61 this.popup.setPosition(event || {id: this.attachTo}, this.positionOptions).show(); 62 }, 63 64 hide: function() { 65 if (this.visible) { 66 this.popup.hide(); 67 this.visible = false; 68 if (this.attachToBody && this.parentElement) { 69 this.parentElement.appendChild(this.popup.get(0)); 70 this.parentElement = null; 71 } 72 } 73 }, 74 75 isVisible: function() { 76 return this.visible; 77 }, 78 79 getId: function() { 80 return this.id; 81 }, 82 83 destroy: function() { 84 if (this.attachToBody && this.parentElement) { 85 this.parentElement.appendChild(this.popup.get(0)); 86 this.parentElement = null; 87 } 88 } 89 }); 90 91 })(RichFaces.jQuery, window.RichFaces);