From a2060eedcea85e194744cc2850cb1324c366c094 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Tue, 10 Mar 2015 22:18:42 -0500 Subject: [PATCH] improved static/js/web2py-bootstrap3.js --- applications/welcome3/controllers/test.py | 8 + applications/welcome3/databases/sql.log | 27 ++ .../welcome3/databases/storage.sqlite | Bin 10240 -> 12288 bytes applications/welcome3/models/menu.py | 14 +- .../welcome3/static/js/web2py-bootstrap3.js | 438 +++++++++--------- gluon/packages/dal | 2 +- 6 files changed, 254 insertions(+), 235 deletions(-) create mode 100644 applications/welcome3/controllers/test.py diff --git a/applications/welcome3/controllers/test.py b/applications/welcome3/controllers/test.py new file mode 100644 index 00000000..65b49b39 --- /dev/null +++ b/applications/welcome3/controllers/test.py @@ -0,0 +1,8 @@ +def index(): + types = ['string','text','date','time','datetime','integer','double', + 'list:string','list:integer'] + db.define_table('mytable',*[Field('f_'+t.replace(':','_'),t) for t in types]) + return dict( + form = SQLFORM(db.mytable).process(), + grid = SQLFORM.grid(db.mytable), + ) diff --git a/applications/welcome3/databases/sql.log b/applications/welcome3/databases/sql.log index 27e315b8..0d964f10 100644 --- a/applications/welcome3/databases/sql.log +++ b/applications/welcome3/databases/sql.log @@ -53,3 +53,30 @@ CREATE TABLE auth_cas( renew CHAR(1) ); success! +timestamp: 2015-03-10T21:30:43.774215 +CREATE TABLE mytable( + id INTEGER PRIMARY KEY AUTOINCREMENT, + f_string CHAR(512), + f_text TEXT, + f_date DATE, + f_time TIME, + f_datetime TIMESTAMP, + f_integer INTEGER, + f_double DOUBLE, + f_list:string TEXT, + f_list:integer TEXT +); +timestamp: 2015-03-10T21:31:46.944243 +CREATE TABLE mytable( + id INTEGER PRIMARY KEY AUTOINCREMENT, + f_string CHAR(512), + f_text TEXT, + f_date DATE, + f_time TIME, + f_datetime TIMESTAMP, + f_integer INTEGER, + f_double DOUBLE, + f_list_string TEXT, + f_list_integer TEXT +); +success! diff --git a/applications/welcome3/databases/storage.sqlite b/applications/welcome3/databases/storage.sqlite index 667fcf873131ceda21eaf988bcb14e382819bc0f..96827200c529b4b9f7513455839a35e3e0aff7d6 100644 GIT binary patch delta 409 zcmZn&Xh@hKEy%&Zz`z5KPviZLZBljc@ zkmA=2%&&opA2Q1eGjcPC@`B7}5EKkaEiS160uY~(=>Y@N1E8X7Oh!$z9PHxK(u^&F zU_+s1Ln&_OAXmo_SA`HqCm&Y@sNm!cQU>*D@x>)YnR)37&K{0I8m5LunmSwxK#&$+ zl3G!s5aJpU0ux9{EJ;;x0U84nD9OxCRS5C)g$saGzy*Ut9DM^|N;C6HQqxn56g>Sx pT-{xRV8SW(`K7=RP;l`N1v(5Snv+>v0&^C!1Hj@ilRy$&ngClyZZrS@ delta 88 zcmZojXb6}fEy%{ez`zB>Fu*oZ$5@n&LH8L8D^Q4$`8P;{14#XwEFjUj@$XM2E)T~b f4O5^fJIf{>7M{&40^B@|ea.active").each(function(){ - var o = $(this); - o.parent().children("ul").toggleClass('open').data('phase', null); - o.toggleClass('active'); - }); - }; - - $.fn.center = function (options) { - var defaults = {'parent': false, 'mode': "both"}; - var settings = $.extend(defaults, options); - var parent; - if (settings.parent) { - parent = this.parent(); - } else { - parent = window; - } - if (settings.mode != "horizontally") { - this.css("top", Math.max(0, (($(parent).height() - $(this).outerHeight()) / 2) + $(parent).scrollTop()) + "px");} - if (settings.mode != "vertically") { - this.css("left", Math.max(0, (($(parent).width() - $(this).outerWidth()) / 2) + $(parent).scrollLeft()) + "px");} - return this; - }; - - function adjust_maxheight_of_collapsed_nav() { - var cn = $('div.navbar-collapse'); - var sh = $(window).height(); - if (cn.get(0)) { - if (sh<320) { - cn.addClass('short-screen'); - } - else { - cn.removeClass('short-screen'); - } - } - }; - - // alert centering - $('.flash.alert.centered').center({'mode': "horizontally"}); - - // navs - $(".nav ul.dropdown-menu").not("#w2p-auth-bar").each(function() { - var toggle = $(this).parent(); - if (toggle.parent().hasClass("nav")) { - toggle.attr("data-w2pmenulevel", "l0"); - toggle.children("a") - .addClass("dropdown-toggle") - .append(' ') - .attr("data-toggle", "dropdown"); - } else { - toggle.addClass("dropdown-submenu").removeClass("dropdown"); +jQuery(function(){ + // bootstrap3 classes for elements of horizontal form - data + var FH_CL_PREFIX = 'col-md-', // class prefix + FH_LABEL_COLW = '4', // nr. of columns of 12 + FH_CONTROL_COLW = '8'; // 12 - FH_LABEL_COLW; + + // bootstrap3 classes for elements of horizontal form - calculations + var fh_label_class = FH_CL_PREFIX + FH_LABEL_COLW, + fh_offest_class = FH_CL_PREFIX+'offset-'+FH_LABEL_COLW, + fh_control_class = FH_CL_PREFIX + FH_CONTROL_COLW; + + // functions + function menu_is_collapsed() { + return !jQuery('.navbar-toggle').is(':hidden'); }; - }); - $('.navbar-nav a.dropdown-toggle').click(function(e) { - if (menu_is_collapsed()) { - e.preventDefault(); - }else{ - window.location=$(this).attr('href'); + function closeSubmenu() { + jQuery(".dropdown-submenu > a.active").each(function(){ + var o = jQuery(this); + o.parent().children("ul") + .toggleClass('open').data('phase', null); + o.toggleClass('active'); + }); }; - }); - $(".dropdown-submenu>a").click(function(event) { - if (menu_is_collapsed()) { - event.preventDefault(); - event.stopPropagation(); - var submenu = $(this).parent().children("ul"); - submenu.data('phase','opening'); - var dropdownOfThis = $(this).parent().parent(); - var actives = dropdownOfThis.find('ul.dropdown-menu.open'); - if (actives && actives.length) { - var hasData = actives.data('phase'); - if (hasData && hasData=='opened') { - actives.removeClass('open'); - actives.siblings('a.active').removeClass('active'); - hasData || actives.data('phase', null); + jQuery.fn.center = function (options) { + var defaults = {'parent': false, 'mode': "both"}; + var settings = jQuery.extend(defaults, options); + var parent; + if (settings.parent) + parent = this.parent(); + else + parent = window; + if (settings.mode != "horizontally") { + this.css("top", Math.max + (0, ((jQuery(parent).height() - jQuery(this).outerHeight()) / 2) + jQuery(parent).scrollTop()) + "px"); + } + if (settings.mode != "vertically") { + this.css("left", Math.max + (0, ((jQuery(parent).width() - jQuery(this).outerWidth()) / 2) + jQuery(parent).scrollLeft()) + "px"); + } + return this; + }; + + function adjust_maxheight_of_collapsed_nav() { + var cn = jQuery('div.navbar-collapse'); + var sh = jQuery(window).height(); + if (cn.get(0)) { + if (sh<320) + cn.addClass('short-screen'); + else if(cn.hasClass('short-screen')) + cn.removeClass('short-screen'); + } + }; + + // alert centering + jQuery('.flash.alert.centered').center({'mode': "horizontally"}); + + // navs + jQuery(".nav ul.dropdown-menu").not("#w2p-auth-bar").each(function() { + var toggle = jQuery(this).parent(); + if (toggle.parent().hasClass("nav")) { + toggle.attr("data-w2pmenulevel", "l0"); + toggle.children("a") + .addClass("dropdown-toggle") + .append(' ') + .attr("data-toggle", "dropdown"); + } else { + toggle.addClass("dropdown-submenu").removeClass("dropdown"); }; - }; - submenu.toggleClass('open').data('phase','opened'); - $(this).toggleClass('active'); - }else{ - window.location=$(this).attr('href'); - }; - }); + }); - $(".nav-tabs .web2py-menu-active").addClass('active'); - $(".nav-tabs a").not(".dropdown-toggle").attr("data-toggle", "tab"); - - // form fixes - $(document).ready(function() { - $("form.bs3-form .w2p_list a").each(function() { - // the plus and minus buttons are generated by web2py.js - $(this).addClass('btn btn-default'); - }); - $("form.bs3-form p.w2p-autocomplete-widget").each(function() { - // not generated by formstyle - $(this).children('input').addClass('form-control'); - }); - $("form.bs3-form input[name='password_two']").each(function() { - // auth addition after form creation - var $this = $(this).addClass('form-control'); - var groupClass = 'form-group' - var labelClass = 'control-label'; - var commentClass = 'help-block'; - var comment; - var mode; - var hasError = false; - if ($this.parent().hasClass('form-horizontal')) { - mode = 'horizontal'; - labelClass = fh_label_class+' control-label'; - }; - if ($this.parent().hasClass('form-inline')) { - mode = 'inline'; - labelClass = 'sr-only'; - commentClass = 'sr-only'; - var labelText = $this.prev('label').text(); - $this.attr("placeholder", labelText.slice(0,-2)); - }; - var error = $this.next('div.error_wrapper'); - if (error.length > 0) { - var hasError = true; - groupClass = 'form-group has-error' - var text = error[0].nextSibling.nodeValue; + jQuery('.navbar-nav a.dropdown-toggle').click(function(e) { + if (menu_is_collapsed()) + e.preventDefault(); + else + window.location=jQuery(this).attr('href'); + }); + + jQuery(".dropdown-submenu>a").click(function(event) { + if (menu_is_collapsed()) { + event.preventDefault(); + event.stopPropagation(); + var submenu = jQuery(this).parent().children("ul"); + submenu.data('phase','opening'); + var dropdownOfThis = jQuery(this).parent().parent(); + var actives = dropdownOfThis.find('ul.dropdown-menu.open'); + if (actives && actives.length) { + var hasData = actives.data('phase'); + if (hasData && hasData=='opened') { + actives.removeClass('open'); + actives.siblings('a.active').removeClass('active'); + hasData || actives.data('phase', null); + }; + }; + submenu.toggleClass('open').data('phase','opened'); + jQuery(this).toggleClass('active'); + }else{ + window.location=jQuery(this).attr('href'); + }; + }); + + jQuery(".nav-tabs .web2py-menu-active").addClass('active'); + jQuery(".nav-tabs a").not(".dropdown-toggle").attr("data-toggle", "tab"); + + // form fixes + jQuery("ul.w2p_list").css('margin-left',0); + jQuery("ul.w2p_list input").addClass('form-control'); + jQuery("input.date,input.time,input.datetime,input.double,input.integer").css('width','33.33333333%'); + // the plus and minus buttons are generated by web2py.js + jQuery("form.bs3-form .w2p_list a").addClass('btn btn-default'); + // not generated by formstyle + jQuery("form.bs3-form p.w2p-autocomplete-widget input").addClass('form-control'); + jQuery("form.bs3-form input[name='password_two']").each(function() { + // auth addition after form creation + var self = jQuery(this).addClass('form-control'); + var groupClass = 'form-group'; + var labelClass = 'control-label'; + var commentClass = 'help-block'; + var comment; + var mode; + var hasError = false; + if (self.parent().hasClass('form-horizontal')) { + mode = 'horizontal'; + labelClass = fh_label_class+' control-label'; + }; + if (self.parent().hasClass('form-inline')) { + mode = 'inline'; + labelClass = 'sr-only'; + commentClass = 'sr-only'; + var labelText = self.prev('label').text(); + self.attr("placeholder", labelText.slice(0,-2)); + }; + var error = self.next('div.error_wrapper'); + if (error.length > 0) { + var hasError = true; + groupClass = 'form-group has-error' + var text = error[0].nextSibling.nodeValue; if (text) { comment = ""+text+""; error[0].parentNode.removeChild(error[0].nextSibling); }; - } else { - var text = $this[0].nextSibling.nodeValue; - if (text) { - comment = ""+text+""; - $this[0].parentNode.removeChild($this[0].nextSibling); + } else { + var text = self[0].nextSibling.nodeValue; + if (text) { + comment = ""+text+""; + self[0].parentNode.removeChild(self[0].nextSibling); + }; }; - }; - $this.prev('label').addClass(labelClass).andSelf().wrapAll("
"); - if (mode == 'horizontal') { - $this.wrap('
'); - }; - if (hasError) { - $this.parent().append(error); - }; - $this.parent().append(comment); - }); - $('form.bs3-form #auth_user_remember').each(function() { - // auth addition after form creation - var $input = $(this); - var $label = $input.next('label'); - var $iParent = $input.parent(); - $input.removeClass('checkbox'); - $iParent.prev('label').remove(); - $input.prependTo($label); - var newGroup = $label; - $iParent.replaceWith(newGroup); - if (newGroup.parent().hasClass('form-horizontal')) { - newGroup.wrap($('
')); - } else { - newGroup.wrap($('
')); - }; - }); - }); - - // form errors - $('form.bs3-form .error_wrapper').each(function() { - var $this = $(this) - var rcContainer = $this.parents('.rc_container'); - if (rcContainer.length > 0) { - $this.appendTo(rcContainer); - } - }); - $('form.bs3-form').find('div.error').addClass('text-danger').closest(".form-group").addClass('has-error'); - - // uploadwidget - $('#file-reset-btn').click(function() { - var el = $('div.w2p-uploaded-file')[0]; - var whatReset = jQuery.data(el, "reset"); - if (whatReset == "changed") { - $('.w2p-uploaded-file input[type="file"]') - .replaceWith( - $('.w2p-uploaded-file input[type="file"]') - .clone()); - $('.w2p-file-preview, .w2p-uploaded-file input[type="file"], #edit-btn-dd, #file-reset-btn').toggle(); - }else{ - $('.w2p-file-preview, #no-file, #edit-btn-dd, #file-reset-btn').toggle(); - $('div.w2p-uploaded-file').children('input[type=checkbox]').trigger('click'); - } - jQuery.removeData(el, "reset"); - }); - $('#change-file-option').click(function(e) { - e.preventDefault(); - $('.w2p-file-preview, .w2p-uploaded-file input[type="file"], #edit-btn-dd, #file-reset-btn').toggle(); - jQuery.data($('div.w2p-uploaded-file')[0], "reset", "changed"); - }); - $('#delete-file-option').click(function(e) { - e.preventDefault(); - var wimg = $('#image-thumb').outerWidth(), - himg = $('#image-thumb').outerHeight(); - $('#no-file') - .width(wimg) - .height(himg) - .css({'line-height':himg+'px'}); - $('.w2p-file-preview, #no-file, #edit-btn-dd, #file-reset-btn').toggle(); - $('div.w2p-uploaded-file').children('input[type=checkbox]').trigger('click'); - jQuery.data($('div.w2p-uploaded-file')[0], "reset", "deleted"); - }); - - // on page load - adjust_maxheight_of_collapsed_nav(); - - // resize and orientation change events - $(window).on('orientationchange resize', function(event) { + self.prev('label').addClass(labelClass).andSelf().wrapAll("
"); + if (mode == 'horizontal') { + self.wrap('
'); + }; + if (hasError) { + self.parent().append(error); + }; + self.parent().append(comment); + }); + jQuery('form.bs3-form #auth_user_remember').each(function() { + // auth addition after form creation + var $input = jQuery(this); + var $label = $input.next('label'); + var $iParent = $input.parent(); + $input.removeClass('checkbox'); + $iParent.prev('label').remove(); + $input.prependTo($label); + var newGroup = $label; + $iParent.replaceWith(newGroup); + if (newGroup.parent().hasClass('form-horizontal')) { + newGroup.wrap(jQuery('
')); + } else { + newGroup.wrap(jQuery('
')); + }; + }); + // form errors + jQuery('form.bs3-form .error_wrapper').each(function() { + var self = jQuery(this); + var rcContainer = self.parents('.rc_container'); + if (rcContainer.length > 0) { + self.appendTo(rcContainer); + } + }); + jQuery('form.bs3-form').find('div.error').addClass('text-danger').closest(".form-group").addClass('has-error'); + + // uploadwidget + jQuery('#file-reset-btn').click(function() { + var el = jQuery('div.w2p-uploaded-file')[0]; + var whatReset = jQuery.data(el, "reset"); + if (whatReset == "changed") { + jQuery('.w2p-uploaded-file input[type="file"]') + .replaceWith(jQuery('.w2p-uploaded-file input[type="file"]').clone()); + jQuery('.w2p-file-preview, .w2p-uploaded-file input[type="file"], #edit-btn-dd, #file-reset-btn').toggle(); + } else { + jQuery('.w2p-file-preview, #no-file, #edit-btn-dd, #file-reset-btn').toggle(); + jQuery('div.w2p-uploaded-file').children('input[type=checkbox]').trigger('click'); + } + jQuery.removeData(el, "reset"); + }); + jQuery('#change-file-option').click(function(e) { + e.preventDefault(); + jQuery('.w2p-file-preview, .w2p-uploaded-file input[type="file"], #edit-btn-dd, #file-reset-btn').toggle(); + jQuery.data(jQuery('div.w2p-uploaded-file')[0], "reset", "changed"); + }); + jQuery('#delete-file-option').click(function(e) { + e.preventDefault(); + var wimg = jQuery('#image-thumb').outerWidth(), + himg = jQuery('#image-thumb').outerHeight(); + jQuery('#no-file').width(wimg).height(himg).css({'line-height':himg+'px'}); + jQuery('.w2p-file-preview, #no-file, #edit-btn-dd, #file-reset-btn').toggle(); + jQuery('div.w2p-uploaded-file').children('input[type=checkbox]').trigger('click'); + jQuery.data(jQuery('div.w2p-uploaded-file')[0], "reset", "deleted"); + }); + + // on page load adjust_maxheight_of_collapsed_nav(); - $('.flash.alert').center({'mode':"horizontally"}); - if (menu_is_collapsed() === false) { - closeSubmenu(); - $('.navbar-nav .dropdown.open a.dropdown-toggle').dropdown('toggle'); - $('#main-menu.in, #login-menu.in').collapse('hide'); - }; + + // resize and orientation change events + jQuery(window).on('orientationchange resize', function(event) { + adjust_maxheight_of_collapsed_nav(); + jQuery('.flash.alert').center({'mode':"horizontally"}); + if (menu_is_collapsed() === false) { + closeSubmenu(); + jQuery('.navbar-nav .dropdown.open a.dropdown-toggle').dropdown('toggle'); + jQuery('#main-menu.in, #login-menu.in').collapse('hide'); + }; + }); }); - -}(jQuery)); diff --git a/gluon/packages/dal b/gluon/packages/dal index 14aa9612..ccda4424 160000 --- a/gluon/packages/dal +++ b/gluon/packages/dal @@ -1 +1 @@ -Subproject commit 14aa9612c04e754d88e24201f193c8db4e122f04 +Subproject commit ccda442484e6d952b0e37b6dc6fd8c5e2825db71