Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Web/Scripts/subpanels-0.9.js @ 293:2cf7143586fe v1.1.0
Versión 1.1.0
author | nelopauselli |
---|---|
date | Fri, 17 Feb 2012 14:27:56 -0300 |
parents | c8f378272407 |
children |
rev | line source |
---|---|
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
1 jQuery.fn.subpanel = function () { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
2 var panel = $(this[0]); |
224 | 3 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
4 var settings = arguments[0] || {}; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
5 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
6 var closeLink = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
7 var openLink = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
8 var main = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
9 var loading = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
10 |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
11 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
12 this.create = function () { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
13 // botón para abrir el panel |
224 | 14 openLink = $('<a></a>').addClass('ajax-button ui-state-default ui-corner-all').click(this.open).appendTo(panel); |
15 | |
16 var openSpan = $('<span></span>').addClass('ui-icon ui-icon-plusthick').html('open').appendTo(openLink); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
17 |
224 | 18 //boton para cerrar el panel |
19 closeLink = $('<a></a>') | |
20 .addClass('ajax-button ui-state-default ui-corner-tr ui-corner-tl') | |
21 .css('display', 'none') | |
22 .click(this.close).appendTo(panel); | |
23 var closeSpan = $('<span></span>').addClass('ui-icon ui-icon-minusthick').html('close').appendTo(closeLink); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
24 |
220
42a1068e73c8
corrección en subpanels para respetar (un poco mas) html según la w3c
nelopauselli
parents:
219
diff
changeset
|
25 var body = $('body'); |
42a1068e73c8
corrección en subpanels para respetar (un poco mas) html según la w3c
nelopauselli
parents:
219
diff
changeset
|
26 |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
27 // panel principal |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
28 main = $('<div></div>') |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
29 // .addClass('ui-accordion') |
224 | 30 .addClass('sp-main ui-widget-content ui-corner-bottom') |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
31 .width(settings.width || '400px') |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
32 .css('display', 'none') |
224 | 33 .css('padding', '5px 5px 5px 5px') |
220
42a1068e73c8
corrección en subpanels para respetar (un poco mas) html según la w3c
nelopauselli
parents:
219
diff
changeset
|
34 .appendTo(body); |
42a1068e73c8
corrección en subpanels para respetar (un poco mas) html según la w3c
nelopauselli
parents:
219
diff
changeset
|
35 |
224 | 36 panel.show(); |
220
42a1068e73c8
corrección en subpanels para respetar (un poco mas) html según la w3c
nelopauselli
parents:
219
diff
changeset
|
37 |
224 | 38 if (settings.created != undefined) |
39 settings.created(); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
40 }; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
41 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
42 this.close = function () { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
43 if (loading !== undefined && loading !== null) { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
44 loading.abort(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
45 settings.aborting(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
46 } |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
47 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
48 $(this).hide(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
49 openLink.show(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
50 main.hide(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
51 main.html(''); |
224 | 52 |
53 if (settings.closed != undefined) | |
54 settings.closed(); | |
55 | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
56 }; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
57 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
58 this.open = function () { |
224 | 59 var o = openLink.offset(); |
60 var top = o.top + openLink.outerHeight(); | |
61 var left = o.left; | |
62 | |
63 //main.offset({ top: top, left: left }); | |
64 main.css('top', top); | |
65 main.css('left', left); | |
66 | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
67 $(this).hide(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
68 closeLink.show(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
69 main.show(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
70 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
71 // div que contendrá el html del panel |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
72 var content = $('<div></div>') |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
73 .appendTo(main); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
74 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
75 var imgdiv = $('<div></div>').css('text-align', 'center').css('padding-top', '10px').appendTo(content); |
224 | 76 if (settings.imageLoding !== undefined) { |
77 var img = $('<img />').attr('src', settings.imageLoding).attr('alt', 'loading...').appendTo(imgdiv); | |
78 } | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
79 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
80 // se invoca la acción con un GET para obtener el contenido del panel |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
81 loading = $.ajax({ |
224 | 82 url: settings.url, |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
83 cache: false, |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
84 success: function (data) { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
85 loading = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
86 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
87 // cuando se recibe el contenido del panel, lo agregamos al div contenedor |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
88 content.html(data); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
89 |
224 | 90 // buscamos el form que contiene el panel |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
91 var form = $('form', content); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
92 |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
93 /* |
224 | 94 if ($('h3', content).length == 0) |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
95 form.before('<h3><h3>'); |
224 | 96 $('h3', content).each(function() { |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
97 $(this).addClass('ui-accordion-header ui-helper-reset ui-state-active'); |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
98 }); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
99 |
224 | 100 // Agregamos un div que va a contener el form |
101 var body = $('<div></div>'); | |
102 body.addClass('ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active'); | |
103 form.wrap(body); | |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
104 */ |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
105 |
224 | 106 // modificamos el evento submit |
107 form.submit(dopost); | |
108 | |
109 if ($.validator != undefined) | |
110 $.validator.unobtrusive.parse(form); | |
111 | |
112 $(':submit', form).each(function () { $(this).button(); }); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
113 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
114 // y seteamos el foco en el primer input |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
115 var nextInput = $("input:visible:first", form); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
116 nextInput.focus(); |
224 | 117 |
118 if (settings.loaded != undefined) | |
119 settings.loaded(); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
120 }, |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
121 error: function (xhr, text) { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
122 loading = null; |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
123 |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
124 if (xhr.status !== 0) { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
125 content.html(xhr.responseText) |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
126 .addClass('ui-state-error'); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
127 } |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
128 else { |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
129 closeLink.click(); |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
130 } |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
131 } |
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
132 }); |
224 | 133 }; |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
134 |
224 | 135 function dopost(event) { |
136 // prevenimos que se ejecute el submit ya que lo haremos manualmente. | |
137 event.preventDefault(); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
138 |
224 | 139 var self = $(this); |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
140 |
224 | 141 // preguntamos si el formulario es validable y válido |
142 var valid = true; | |
143 if (self.valid !== undefined) | |
144 valid = self.valid(); | |
145 | |
146 if (valid === undefined || valid) { | |
147 // tomamos la acción y serializamos el form | |
148 var action = self.attr("action"); | |
149 var data = self.serialize(); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
150 |
285
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
151 if (typeof (console) != 'undefined' && console && console.log) |
c8f378272407
#123: Patrocinadores de las vans.
juanjose.montesdeocaarbos
parents:
224
diff
changeset
|
152 console.log(data); |
224 | 153 |
154 // ejecutamos el POST | |
155 $.post(action, data, function (data) { | |
156 // cuando termina de ejecutarse el POST, ejecutamos la acción configurada | |
157 var r = true; | |
158 if (settings.success != undefined) | |
159 settings.success(data); | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
160 |
224 | 161 // si esta acción no devuelve false, cerramos el panel |
162 if (r === undefined || r) | |
163 closeLink.click(); | |
164 }); | |
165 } | |
166 } | |
219
b9850b647a4e
Agregando alta de ponente durante la carga del evento
nelopauselli
parents:
diff
changeset
|
167 this.create(); |
224 | 168 } |