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