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 }