ui.dialog.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. (function($)
  2. {
  3. //If the UI scope is not availalable, add it
  4. $.ui = $.ui || {};
  5. $.fn.dialog = function(o) {
  6. return this.each(function() {
  7. if (!$(this).is(".ui-dialog")) new $.ui.dialog(this, o);
  8. });
  9. }
  10. $.fn.dialogOpen = function() {
  11. return this.each(function() {
  12. var contentEl;
  13. if ($(this).parents(".ui-dialog").length) contentEl = this;
  14. if (!contentEl && $(this).is(".ui-dialog")) contentEl = $('.ui-dialog-content', this)[0];
  15. $.ui.dialogOpen(contentEl)
  16. });
  17. }
  18. $.fn.dialogClose = function() {
  19. return this.each(function() {
  20. var contentEl;
  21. if ($(this).parents(".ui-dialog").length) contentEl = this;
  22. if (!contentEl && $(this).is(".ui-dialog")) contentEl = $('.ui-dialog-content', this)[0];
  23. $.ui.dialogClose(contentEl);
  24. });
  25. }
  26. $.ui.dialog = function(el, o) {
  27. var options = {
  28. width: 300,
  29. height: 200,
  30. position: 'center',
  31. buttons: [],
  32. modal: false,
  33. drag: true,
  34. resize: true,
  35. shadow: false // It's quite slow
  36. };
  37. var o = o || {}; $.extend(options, o); //Extend and copy options
  38. this.element = el; var self = this; //Do bindings
  39. $.data(this.element, "ui-dialog", this);
  40. var uiDialogContent = $(el).addClass('ui-dialog-content')
  41. .wrap(document.createElement('div'))
  42. .wrap(document.createElement('div'));
  43. var uiDialogContainer = uiDialogContent.parent().addClass('ui-dialog-container').css({position: 'relative'});
  44. var uiDialog = uiDialogContainer.parent()
  45. .addClass('ui-dialog').addClass(uiDialogContent.attr('className'))
  46. .css({position: 'absolute', width: options.width, height: options.height});
  47. if (options.modal == false && options.resize == true) {
  48. uiDialog.append("<div class='ui-resizable-n ui-resizable-handle'></div>")
  49. .append("<div class='ui-resizable-s ui-resizable-handle'></div>")
  50. .append("<div class='ui-resizable-e ui-resizable-handle'></div>")
  51. .append("<div class='ui-resizable-w ui-resizable-handle'></div>")
  52. .append("<div class='ui-resizable-ne ui-resizable-handle'></div>")
  53. .append("<div class='ui-resizable-se ui-resizable-handle'></div>")
  54. .append("<div class='ui-resizable-sw ui-resizable-handle'></div>")
  55. .append("<div class='ui-resizable-nw ui-resizable-handle'></div>");
  56. uiDialog.resizable();
  57. }
  58. uiDialogContainer.prepend('<div class="ui-dialog-titlebar"></div>');
  59. var uiDialogTitlebar = $('.ui-dialog-titlebar', uiDialogContainer);
  60. var title = (options.title) ? options.title : (uiDialogContent.attr('title')) ? uiDialogContent.attr('title') : '';
  61. uiDialogTitlebar.append('<span class="ui-dialog-title">' + title + '</span>');
  62. uiDialogTitlebar.append('<div class="ui-dialog-titlebar-close"></div>');
  63. $('.ui-dialog-titlebar-close', uiDialogTitlebar)
  64. .hover(function() { $(this).addClass('ui-dialog-titlebar-close-hover'); },
  65. function() { $(this).removeClass('ui-dialog-titlebar-close-hover'); })
  66. .mousedown(function(ev) {
  67. ev.stopPropagation();
  68. })
  69. .click(function() {
  70. self.close();
  71. });
  72. var l = 0;
  73. $.each(options.buttons, function() { l = 1; return false; });
  74. if (l == 1) {
  75. uiDialog.append('<div class="ui-dialog-buttonpane"></div>');
  76. var uiDialogButtonPane = $('.ui-dialog-buttonpane', uiDialog);
  77. $.each(options.buttons, function(name, value) {
  78. var btn = $(document.createElement('button')).text(name).click(value);
  79. uiDialogButtonPane.append(btn);
  80. });
  81. }
  82. if (options.modal == false && options.drag == true) {
  83. uiDialog.draggable({ handle: '.ui-dialog-titlebar' });
  84. }
  85. this.open = function() {
  86. var wnd = $(window), top = 0, left = 0;
  87. switch (options.position) {
  88. case 'center':
  89. top = (wnd.height() / 2) - (uiDialog.height() / 2);
  90. left = (wnd.width() / 2) - (uiDialog.width() / 2);
  91. break;
  92. case 'left':
  93. top = (wnd.height() / 2) - (uiDialog.height() / 2);
  94. left = 0;
  95. break;
  96. case 'top':
  97. top = 0;
  98. left = (wnd.width() / 2) - (uiDialog.width() / 2);
  99. break;
  100. }
  101. uiDialog.css({top: top, left: left});
  102. uiDialog.appendTo('body').show();
  103. };
  104. this.close = function() {
  105. uiDialog.hide();
  106. };
  107. uiDialog.show();
  108. this.open();
  109. if (options.shadow && $.fn.shadow != undefined) {
  110. uiDialog.shadow();
  111. }
  112. }
  113. $.ui.dialogOpen = function(el) {
  114. $.data(el, "ui-dialog").open();
  115. }
  116. $.ui.dialogClose = function(el) {
  117. $.data(el, "ui-dialog").close();
  118. }
  119. })(jQuery);