Mercurial > altnet-hispano
changeset 224:de6d206bd5c3
Actualizando subpanels
author | nelopauselli |
---|---|
date | Sun, 25 Sep 2011 01:40:18 -0300 |
parents | 6f2213e949e4 |
children | f23ee59ef1bd |
files | Agendas/trunk/src/Agendas.Web/Content/subpanels-0.9.css Agendas/trunk/src/Agendas.Web/Scripts/subpanels-0.9.js Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponente.cshtml |
diffstat | 3 files changed, 85 insertions(+), 81 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Web/Content/subpanels-0.9.css Mon Sep 19 18:19:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Content/subpanels-0.9.css Sun Sep 25 01:40:18 2011 -0300 @@ -1,8 +1,3 @@ -.sp-header { - padding: 5px 10px 5px; - font-size: 1.2em; -} - .sp-buttons { padding: 5px 5px 5px 5px; text-align: right; @@ -14,5 +9,6 @@ .ajax-button { display: inline-block; + padding: 2px 2px 2px 2px; }
--- a/Agendas/trunk/src/Agendas.Web/Scripts/subpanels-0.9.js Mon Sep 19 18:19:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Scripts/subpanels-0.9.js Sun Sep 25 01:40:18 2011 -0300 @@ -1,5 +1,6 @@ jQuery.fn.subpanel = function () { var panel = $(this[0]); + var settings = arguments[0] || {}; var closeLink = null; @@ -9,29 +10,32 @@ this.create = function () { // botón para abrir el panel - openLink = $('<a></a>').addClass('ajax-button ui-widget ui-state-default ui-corner-all').click(this.open).appendTo(panel); - var openSpan = $('<span></span>').addClass('ui-icon ui-icon-plusthick').appendTo(openLink); + openLink = $('<a></a>').addClass('ajax-button ui-state-default ui-corner-all').click(this.open).appendTo(panel); + + var openSpan = $('<span></span>').addClass('ui-icon ui-icon-plusthick').html('open').appendTo(openLink); - closeLink = $('<a></a>').addClass('ajax-button ui-widget ui-state-default ui-corner-all').css('display', 'none').click(this.close).appendTo(panel); - var closeSpan = $('<span></span>').addClass('ui-icon ui-icon-minusthick').appendTo(closeLink); + //boton para cerrar el panel + closeLink = $('<a></a>') + .addClass('ajax-button ui-state-default ui-corner-tr ui-corner-tl') + .css('display', 'none') + .click(this.close).appendTo(panel); + var closeSpan = $('<span></span>').addClass('ui-icon ui-icon-minusthick').html('close').appendTo(closeLink); var body = $('body'); // panel principal main = $('<div></div>') - .addClass('ui-widget') - .addClass('ui-widget-content') - .addClass('ui-corner-all') - .addClass('sp-main') +// .addClass('ui-accordion') + .addClass('sp-main ui-widget-content ui-corner-bottom') .width(settings.width || '400px') .css('display', 'none') + .css('padding', '5px 5px 5px 5px') .appendTo(body); - var o = openLink.offset(); - var top = o.top + openLink.height() * 1.2; - var left = o.left; + panel.show(); - main.offset({ top: top, left: left }); + if (settings.created != undefined) + settings.created(); }; this.close = function () { @@ -44,34 +48,37 @@ openLink.show(); main.hide(); main.html(''); + + if (settings.closed != undefined) + settings.closed(); + }; this.open = function () { + var o = openLink.offset(); + var top = o.top + openLink.outerHeight(); + var left = o.left; + + //main.offset({ top: top, left: left }); + main.css('top', top); + main.css('left', left); + $(this).hide(); closeLink.show(); main.show(); - // si hay título, creamos el header - if (settings.title !== undefined) { - var header = $('<div></div>') - .addClass('sp-header').addClass('ui-widget-header') - .appendTo(main); - - var title = $('<span><span>') - .html(settings.title) - .appendTo(header); - } - // div que contendrá el html del panel var content = $('<div></div>') .appendTo(main); var imgdiv = $('<div></div>').css('text-align', 'center').css('padding-top', '10px').appendTo(content); - var img = $('<img />').attr('src', '/Content/loader.gif').attr('alt', 'loading...').appendTo(imgdiv); + if (settings.imageLoding !== undefined) { + var img = $('<img />').attr('src', settings.imageLoding).attr('alt', 'loading...').appendTo(imgdiv); + } // se invoca la acción con un GET para obtener el contenido del panel loading = $.ajax({ - url: settings.action, + url: settings.url, cache: false, success: function (data) { loading = null; @@ -79,44 +86,36 @@ // cuando se recibe el contenido del panel, lo agregamos al div contenedor content.html(data); - // form dentro del cual se ejecutará el panel, y del que luego se hará el POST + // buscamos el form que contiene el panel var form = $('form', content); - form.submit(function (event) { - // prevenimos que se ejecute el submit ya que lo haremos manualmente. - event.preventDefault(); - - var self = $(this); - - /* preguntamos si el formulario es validable y válido, con esto tenemos un problema - ya que no se están generando los validadores por un problema entre jquery.validate - y ajax */ - var valid = self.valid(); - if (valid === undefined || valid) { - - // tomamos la acción y serializamos el form - var action = self.attr("action"); - var data = self.serialize(); - - // ejecutamos el POST - $.post(action, data, function (data) { - // cuando termina de ejecutarse el POST, ejecutamos la acción configurada - var r = settings.successful(data); - - // si esta acción no devuelve false, cerramos el panel - if (r === undefined || r) - closeLink.click(); - }); - } +/* + if ($('h3', content).length == 0) + form.before('<h3><h3>'); + $('h3', content).each(function() { + $(this).addClass('ui-accordion-header ui-helper-reset ui-state-active'); }); - $.validator.unobtrusive.parse(form); + // Agregamos un div que va a contener el form + var body = $('<div></div>'); + body.addClass('ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active'); + form.wrap(body); +*/ - $('input:submit', form).each(function () { $(this).button(); }); + // modificamos el evento submit + form.submit(dopost); + + if ($.validator != undefined) + $.validator.unobtrusive.parse(form); + + $(':submit', form).each(function () { $(this).button(); }); // y seteamos el foco en el primer input var nextInput = $("input:visible:first", form); nextInput.focus(); + + if (settings.loaded != undefined) + settings.loaded(); }, error: function (xhr, text) { loading = null; @@ -130,29 +129,38 @@ } } }); + }; + + function dopost(event) { + // prevenimos que se ejecute el submit ya que lo haremos manualmente. + event.preventDefault(); - /* - var buttons = $('<div></div>') - .addClass('sp-buttons') - .appendTo(form); + var self = $(this); - var confirm = $('<input/>') - .attr('type', 'submit') - .attr('value', settings.confirmButton || 'Save') - .button() - .appendTo(buttons); + // preguntamos si el formulario es validable y válido + var valid = true; + if (self.valid !== undefined) + valid = self.valid(); + + if (valid === undefined || valid) { + // tomamos la acción y serializamos el form + var action = self.attr("action"); + var data = self.serialize(); - var x = $('<a></a>') - .html(settings.cancelButton || 'Cancel') - .button() - .click(function (e) { - e.preventDefault(); - closeLink.click(); - settings.cancel(); - }) - .appendTo(buttons); - */ - }; + console.log(data); + + // ejecutamos el POST + $.post(action, data, function (data) { + // cuando termina de ejecutarse el POST, ejecutamos la acción configurada + var r = true; + if (settings.success != undefined) + settings.success(data); + // si esta acción no devuelve false, cerramos el panel + if (r === undefined || r) + closeLink.click(); + }); + } + } this.create(); -} \ No newline at end of file +}
--- a/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponente.cshtml Mon Sep 19 18:19:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponente.cshtml Sun Sep 25 01:40:18 2011 -0300 @@ -1,7 +1,7 @@ @model Guid <script type="text/javascript"> $(document).ready(function () { - $("#agregarPonente").subpanel({ successful: recargar, confirmButton: "Agregar", action: '/PersonaApi/Nueva' }); + $("#agregarPonente").subpanel({ success: recargar, url: '/PersonaApi/Nueva' }); }); function recargar(data) {