Mercurial > altnet-hispano
comparison Agendas/trunk/src/Agendas.Web/Scripts/subpanels-0.9.js @ 219:b9850b647a4e
Agregando alta de ponente durante la carga del evento
author | nelopauselli |
---|---|
date | Thu, 08 Sep 2011 11:22:10 -0300 |
parents | |
children | 42a1068e73c8 |
comparison
equal
deleted
inserted
replaced
218:cc1ed131c9e6 | 219:b9850b647a4e |
---|---|
1 jQuery.fn.subpanel = function () { | |
2 var panel = $(this[0]); | |
3 var settings = arguments[0] || {}; | |
4 | |
5 var closeLink = null; | |
6 var openLink = null; | |
7 var main = null; | |
8 var loading = null; | |
9 | |
10 this.create = function () { | |
11 // botón para abrir el panel | |
12 openLink = $('<a></a>').addClass('ajax-button ui-widget ui-state-default ui-corner-all').click(this.open).appendTo(panel); | |
13 var openSpan = $('<span></span>').addClass('ui-icon ui-icon-plusthick').appendTo(openLink); | |
14 | |
15 closeLink = $('<a></a>').addClass('ajax-button ui-widget ui-state-default ui-corner-all').css('display', 'none').click(this.close).appendTo(panel); | |
16 var closeSpan = $('<span></span>').addClass('ui-icon ui-icon-minusthick').appendTo(closeLink); | |
17 | |
18 // panel principal | |
19 main = $('<div></div>') | |
20 .addClass('ui-widget') | |
21 .addClass('ui-widget-content') | |
22 .addClass('ui-corner-all') | |
23 .width(settings.width || '400px') | |
24 .css('display', 'none') | |
25 .appendTo(panel); | |
26 }; | |
27 | |
28 this.close = function () { | |
29 if (loading !== undefined && loading !== null) { | |
30 loading.abort(); | |
31 settings.aborting(); | |
32 } | |
33 | |
34 $(this).hide(); | |
35 openLink.show(); | |
36 main.hide(); | |
37 main.html(''); | |
38 }; | |
39 | |
40 this.open = function () { | |
41 $(this).hide(); | |
42 closeLink.show(); | |
43 main.show(); | |
44 | |
45 // si hay título, creamos el header | |
46 if (settings.title !== undefined) { | |
47 var header = $('<div></div>') | |
48 .addClass('sp-header').addClass('ui-widget-header') | |
49 .appendTo(main); | |
50 | |
51 var title = $('<span><span>') | |
52 .html(settings.title) | |
53 .appendTo(header); | |
54 } | |
55 | |
56 // div que contendrá el html del panel | |
57 var content = $('<div></div>') | |
58 .appendTo(main); | |
59 | |
60 var imgdiv = $('<div></div>').css('text-align', 'center').css('padding-top', '10px').appendTo(content); | |
61 var img = $('<img />').attr('src', '/Content/loader.gif').attr('alt', 'loading...').appendTo(imgdiv); | |
62 | |
63 // se invoca la acción con un GET para obtener el contenido del panel | |
64 loading = $.ajax({ | |
65 url: settings.action, | |
66 cache: false, | |
67 success: function (data) { | |
68 loading = null; | |
69 | |
70 // cuando se recibe el contenido del panel, lo agregamos al div contenedor | |
71 content.html(data); | |
72 | |
73 // form dentro del cual se ejecutará el panel, y del que luego se hará el POST | |
74 var form = $('form', content); | |
75 | |
76 form.submit(function (event) { | |
77 // prevenimos que se ejecute el submit ya que lo haremos manualmente. | |
78 event.preventDefault(); | |
79 | |
80 var self = $(this); | |
81 | |
82 /* preguntamos si el formulario es validable y válido, con esto tenemos un problema | |
83 ya que no se están generando los validadores por un problema entre jquery.validate | |
84 y ajax */ | |
85 var valid = self.valid(); | |
86 if (valid === undefined || valid) { | |
87 | |
88 // tomamos la acción y serializamos el form | |
89 var action = self.attr("action"); | |
90 var data = self.serialize(); | |
91 | |
92 // ejecutamos el POST | |
93 $.post(action, data, function (data) { | |
94 // cuando termina de ejecutarse el POST, ejecutamos la acción configurada | |
95 var r = settings.successful(data); | |
96 | |
97 // si esta acción no devuelve false, cerramos el panel | |
98 if (r === undefined || r) | |
99 closeLink.click(); | |
100 }); | |
101 } | |
102 }); | |
103 | |
104 $.validator.unobtrusive.parse(form); | |
105 | |
106 $('input:submit', form).each(function () { $(this).button(); }); | |
107 | |
108 // y seteamos el foco en el primer input | |
109 var nextInput = $("input:visible:first", form); | |
110 nextInput.focus(); | |
111 }, | |
112 error: function (xhr, text) { | |
113 loading = null; | |
114 | |
115 if (xhr.status !== 0) { | |
116 content.html(xhr.responseText) | |
117 .addClass('ui-state-error'); | |
118 } | |
119 else { | |
120 closeLink.click(); | |
121 } | |
122 } | |
123 }); | |
124 | |
125 /* | |
126 var buttons = $('<div></div>') | |
127 .addClass('sp-buttons') | |
128 .appendTo(form); | |
129 | |
130 var confirm = $('<input/>') | |
131 .attr('type', 'submit') | |
132 .attr('value', settings.confirmButton || 'Save') | |
133 .button() | |
134 .appendTo(buttons); | |
135 | |
136 var x = $('<a></a>') | |
137 .html(settings.cancelButton || 'Cancel') | |
138 .button() | |
139 .click(function (e) { | |
140 e.preventDefault(); | |
141 closeLink.click(); | |
142 settings.cancel(); | |
143 }) | |
144 .appendTo(buttons); | |
145 */ | |
146 }; | |
147 | |
148 this.create(); | |
149 } |