diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index e2879011a72..47c047abb18 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1,4 +1,4 @@ -@charset "UTF-8"; +@charset "utf-8"; @font-face { font-family: "mnmliconsRegular"; src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot"); @@ -142,7 +142,7 @@ border: 1px solid #ababab; color: #404040; margin: 0; - padding: 4px 12px; + padding: 3px 12px; font-size: 13px; text-align: center; background-color: #efefef; @@ -1554,7 +1554,8 @@ .openerp .oe_form_button_save_dirty:hover { background: #ed6f6a; } -.openerp .oe_form_topbar { +.openerp .oe_form header { + position: relative; border-bottom: 1px solid #cacaca; background-color: #fcfcfc; background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); @@ -1566,19 +1567,20 @@ padding: 0 8px; line-height: 30px; } -.openerp .oe_form_topbar button { +.openerp .oe_form header button { font-size: 12px; + float: left; height: 24px !important; line-height: 24px; vertical-align: top; padding: 0 10px; margin: 3px 4px 3px 0; } -.openerp .oe_form_topbar button span.i { +.openerp .oe_form header button span.i { line-height: 20px; height: 24px; } -.openerp .oe_form_topbar ul { +.openerp .oe_form header ul { height: 30px; padding: 0; margin: 0; @@ -1586,7 +1588,7 @@ border-left: 1px solid #cacaca; border-right: 1px solid #cacaca; } -.openerp .oe_form_topbar ul li { +.openerp .oe_form header ul li { padding: 0; margin: 0; float: left; @@ -1595,35 +1597,39 @@ height: 30px; padding: 0 12px; } -.openerp .oe_form_topbar ul li:first-child { +.openerp .oe_form header ul li:first-child { border-left: 1px solid #cacaca; } -.openerp .oe_form_topbar ul li a { +.openerp .oe_form header ul li a { color: #4c4c4c; } -.openerp .oe_form_topbar ul li a:hover { +.openerp .oe_form header ul li a:hover { color: black; } -.openerp .oe_form_topbar .oe_form_steps img { +.openerp .oe_form header .oe_form_steps { + display: inline-block; + float: right; +} +.openerp .oe_form header .oe_form_steps img { margin: 0 8px; vertical-align: top; } -.openerp .oe_form_topbar .oe_form_steps li { +.openerp .oe_form header .oe_form_steps li { border-right: none; padding: 0; } -.openerp .oe_form_topbar .oe_form_steps li:first-child { +.openerp .oe_form header .oe_form_steps li:first-child { margin-left: 12px; border-left: none; } -.openerp .oe_form_topbar .oe_form_steps li:last-child { +.openerp .oe_form header .oe_form_steps li:last-child { margin-right: 12px; } -.openerp .oe_form_topbar .oe_form_steps_active { +.openerp .oe_form header .oe_form_steps_active { font-weight: bold; color: #b33630; } -.openerp .oe_form_topbar.oe_form_topbar_hifirst button:first-child, .openerp button.oe_form_button_hi { +.openerp header.oe_form_topbar_hifirst button:first-child, .openerp button.oe_form_button_hi { color: white; background: #dc5f59; background: -moz-linear-gradient(#dc5f59, #b33630); @@ -1633,7 +1639,7 @@ -webkit-box-shadow: none; -box-shadow: none; } -.openerp .oe_form_topbar.oe_form_topbar_hifirst button:first-child:hover, .openerp button.oe_form_button_hi:hover { +.openerp header.oe_form_topbar_hifirst button:first-child:hover, .openerp button.oe_form_button_hi:hover { background: #df6b66; background: -moz-linear-gradient(#df6b66, #bf3a33); background: -webkit-gradient(linear, left top, left bottom, from(#df6b66), to(#bf3a33)); @@ -1647,41 +1653,57 @@ padding: 8px 0; border-bottom: 1px solid #dddddd; } -.openerp .oe_application .oe_form_sheet_width, .openerp .oe_application .oe_form_bottom { +.openerp .oe_application .oe_form_sheet_width, .openerp .oe_application footer { min-width: 650px; - max-width: 980px; + max-width: 960px; margin: 0 auto; } .openerp .oe_application .oe_form_sheet { - padding: 8px 8px 8px 8px; + padding: 18px; background: white; - min-height: 420px; + min-height: 330px; border: 1px solid #afafb6; -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); -box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); } -.openerp .oe_form .oe_form_group_cell { - line-height: 18px; - padding: 2px; - height: 20px; +.openerp .oe_form_editable .oe_form_editable_hidden { + display: none; } -.openerp .oe_form .oe_form_group_cell > .oe_form_field_many2one, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_many2one input, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_char input, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_text textarea, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_email, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_email input, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_url, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_url input, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_float input, -.openerp .oe_form .oe_form_group_cell > .oe_form_field_selection select, -.openerp .oe_form .oe_form_group_cell > div > .oe_datepicker_root, -.openerp .oe_form .oe_form_group_cell > div > .oe_datepicker_root > input.oe_datepicker_master { +.openerp .oe_form_readonly .oe_form_readonly_hidden { + display: none; +} +.openerp .oe_form_readonly .oe_form_field:empty { + display: none; +} +.openerp .oe_form .oe_form_field_text { width: 100%; } -.openerp .oe_form .oe_form_group_cell.oe_form_group_nested { - padding: 0; +.openerp .oe_form .oe_form_field_char input, +.openerp .oe_form .oe_form_field_text textarea, +.openerp .oe_form .oe_form_field_url input, +.openerp .oe_form .oe_form_field_selection select { + width: inherit; +} +.openerp .oe_form .oe_form_field_float input { + width: 100px; +} +.openerp .oe_form h1 .oe_form_field_float input { + width: 140px; +} +.openerp .oe_form h2 .oe_form_field_float input { + width: 120px; +} +.openerp .oe_form h1, .openerp .oe_form h2, .openerp .oe_form h3, .openerp .oe_form h4, .openerp .oe_form h5, .openerp .oe_form h6 { + margin: 0 0 4px 0; +} +.openerp .oe_form h1 input, .openerp .oe_form h2 input, .openerp .oe_form h3 input, .openerp .oe_form h4 input, .openerp .oe_form h5 input, .openerp .oe_form h6 input { + height: inherit !important; + font-size: inherit; +} +.openerp .oe_form_nosheet > *:not(.oe_form_topbar) { + margin-left: 10px !important; + margin-right: 10px !important; } .openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { font-weight: bold; @@ -1696,9 +1718,33 @@ top: -4px; padding: 0 2px; } -.openerp .oe_form textarea { +.openerp .oe_form .oe_form_field_text textarea { resize: vertical; } +.openerp .oe_form .oe_form_field { + width: 100%; + display: inline-block; + padding: 2px 2px 2px 0px; + line-height: 18px; +} +.openerp .oe_form .oe_form_field input { + margin: 0px; +} +.openerp .oe_form .oe_form_field_integer { + width: 180px; +} +.openerp .oe_form .oe_form_field_float { + width: 180px; +} +.openerp .oe_form .oe_form_field_date { + width: 7em; +} +.openerp .oe_form .oe_form_field_datetime { + width: 11em; +} +.openerp .oe_form .oe_form_inline { + width: auto; +} .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], @@ -1716,7 +1762,6 @@ -ms-box-sizing: border-box; box-sizing: border-box; padding: 0 2px; - margin: 0 2px; border: 1px solid #999999; -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -1768,9 +1813,6 @@ .openerp .oe_form .oe_form_field_boolean { padding-top: 4px; } -.openerp .oe_form .oe_form_field_datetime input { - min-width: 11em; -} .openerp .oe_form .oe_form_field_many2manytags .text-wrap { width: 100% !important; } @@ -1808,17 +1850,6 @@ background-color: #ff6666 !important; border: 1px solid #dd0000 !important; } -.openerp .oe_form .oe_button.oe_field_button { - display: block; - -webkit-border-top-left-radius: 0px; - -webkit-border-bottom-left-radius: 0px; - -moz-border-radius-topleft: 0px; - -moz-border-radius-bottomleft: 0px; - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; - margin-right: -1px; - height: 22px; -} .openerp .oe_form .oe_input_icon { cursor: pointer; margin: 3px 0 0 -21px; @@ -1835,9 +1866,39 @@ .openerp .oe_form .oe_form_group_cell .oe_kanban_view { position: static; } +.openerp .oe_form .oe_form_field_with_button input { + width: 100%; +} +.openerp .oe_form .oe_form_field_with_button > .oe_button { + float: right; + -webkit-border-top-left-radius: 0px; + -webkit-border-bottom-left-radius: 0px; + -moz-border-radius-topleft: 0px; + -moz-border-radius-bottomleft: 0px; + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + height: 22px; +} +.openerp .oe_form .oe_form_field_with_button > div { + position: relative; + overflow: hidden; +} +.openerp .oe_form .oe_form_title { + width: 65%; +} +.openerp .oe_form .oe_form_button_box { + width: 200px; + text-align: center; +} +.openerp .oe_form .oe_form_group { + margin: 5px 0px 5px 0px; +} +.openerp .oe_form .oe_form_group_cell .oe_kanban_view { + position: static; +} .openerp .oe_form .oe_form_button.oe_button { height: 22px; - color: #4c4c4c; + white-space: nowrap; } .openerp .oe_form .oe_form_button.oe_button span { position: relative; @@ -1847,15 +1908,10 @@ vertical-align: -3px; padding: 0 2px; } -.openerp .oe_form .oe_form_group_cell > .oe_form_button.oe_button { - display: block; - white-space: nowrap; - min-width: 100%; - width: 100%; -} .openerp .oe_form .oe-binary-file-set { overflow: hidden; position: relative; + display: inline-block; width: 45px; height: 30px; } @@ -1872,6 +1928,9 @@ margin: 0; padding: 0; } +.openerp .oe_form .oe_binary_image { + display: inline-block; +} .openerp .oe_horizontal_border { border-bottom: 1px solid black; } @@ -1941,9 +2000,16 @@ .openerp .oe_form_notebook_page { padding: 0; } +.openerp div.ui-tabs { + padding: 3px 0px 3px 0px; +} .openerp .ui-tabs-hide { display: none; } +.openerp .oe_form .oe_form_field_progressbar { + display: inline-block; + min-width: 70px; +} .openerp .oe_form .oe_form_field_progressbar.ui-progressbar { height: 22px; font-size: 10px; @@ -1984,22 +2050,16 @@ .openerp .oe-select-create-popup-view-form > .oe_formview > .oe_form_pager { display: none; } -.openerp .oe_form .oe_form_title, .openerp .oe_form .oe_form_title input { - font-size: 20px; - font-weight: bold; - height: 30px; -} -.openerp .oe_form .oe_form_group_odd_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell:nth-child(odd), -.openerp .oe_form .oe_form_group_label_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell_label { +.openerp .oe_form td.oe_form_group_cell_label { border-right: 1px solid #dddddd; + padding: 2px 0px 2px 0px; } -.openerp .oe_form .oe_form_group_odd_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell:nth-child(odd) label, -.openerp .oe_form .oe_form_group_label_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell_label label { +.openerp .oe_form td.oe_form_group_cell_label label { + line-height: 18px; display: block; min-width: 120px; } -.openerp .oe_form .oe_form_group_odd_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell, -.openerp .oe_form .oe_form_group_label_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell { +.openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { padding-left: 8px; } .openerp .oe_form .oe_form_subtotal_footer { @@ -2090,7 +2150,7 @@ .openerp .oe-listview-content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe-listview-content > tbody > tr th.oe_list_checkbox:first-child:after { border-width: 0; } -.openerp .oe-listview-content > tbody > tr > td.oe-number { +.openerp .oe-listview-content > tbody > tr > td.oe_number { text-align: right !important; } .openerp .oe-listview-content > tbody > tr:nth-child(odd) { diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index eda410aa6ca..894e6ffded4 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -177,7 +177,7 @@ $colour4: #8a89ba border: 1px solid #ababab color: #404040 margin: 0 - padding: 4px 12px + padding: 3px 12px font-size: 13px text-align: center @include vertical-gradient(#efefef, #d8d8d8) @@ -1231,13 +1231,15 @@ $colour4: #8a89ba background: #ED6F6A // }}} // FormView.customdivs {{{ - .oe_form_topbar + .oe_form header + position: relative border-bottom: 1px solid #cacaca @include vertical-gradient(#fcfcfc, #dedede) padding: 0 8px line-height: 30px button font-size: 12px + float: left height: 24px !important line-height: 24px vertical-align: top @@ -1268,10 +1270,12 @@ $colour4: #8a89ba &:hover color: black .oe_form_steps - img + display: inline-block + float: right + img margin: 0 8px vertical-align: top - li + li border-right: none padding: 0 &:first-child @@ -1282,7 +1286,7 @@ $colour4: #8a89ba .oe_form_steps_active font-weight: bold color: #b33630 - .oe_form_topbar.oe_form_topbar_hifirst button:first-child, button.oe_form_button_hi + header.oe_form_topbar_hifirst button:first-child, button.oe_form_button_hi color: white background: #DC5F59 background: -moz-linear-gradient(#DC5F59, #B33630) @@ -1291,7 +1295,7 @@ $colour4: #8a89ba -moz-box-shadow: none -webkit-box-shadow: none -box-shadow: none - .oe_form_topbar.oe_form_topbar_hifirst button:first-child:hover, button.oe_form_button_hi:hover + header.oe_form_topbar_hifirst button:first-child:hover, button.oe_form_button_hi:hover background: #DF6B66 background: -moz-linear-gradient( #DF6B66, #BF3A33) background: -webkit-gradient(linear, left top, left bottom, from( #DF6B66), to( #BF3A33)) @@ -1304,38 +1308,52 @@ $colour4: #8a89ba background: url(/web/static/src/img/form_sheetbg.png) padding: 8px 0 border-bottom: 1px solid #ddd - .oe_form_sheet_width, .oe_form_bottom + .oe_form_sheet_width, footer min-width: 650px - max-width: 980px + max-width: 960px margin: 0 auto .oe_form_sheet - padding: 8px 8px 8px 8px + padding: 18px background: white - min-height: 420px + min-height: 330px border: 1px solid #afafb6 @include box-shadow(0 0 10px rgba(0,0,0,0.3)) // }}} // FormView.layout {{{ + .oe_form_editable .oe_form_editable_hidden + display: none + .oe_form_readonly .oe_form_readonly_hidden + display: none + .oe_form_readonly .oe_form_field:empty + display: none .oe_form - .oe_form_group_cell - line-height: 18px - padding: 2px - height: 20px - .oe_form_group_cell > .oe_form_field_many2one, - .oe_form_group_cell > .oe_form_field_many2one input, - .oe_form_group_cell > .oe_form_field_char input, - .oe_form_group_cell > .oe_form_field_text textarea, - .oe_form_group_cell > .oe_form_field_email, - .oe_form_group_cell > .oe_form_field_email input, - .oe_form_group_cell > .oe_form_field_url, - .oe_form_group_cell > .oe_form_field_url input, - .oe_form_group_cell > .oe_form_field_float input, - .oe_form_group_cell > .oe_form_field_selection select, - .oe_form_group_cell > div > .oe_datepicker_root, - .oe_form_group_cell > div > .oe_datepicker_root > input.oe_datepicker_master + .oe_form_field_text width: 100% - .oe_form_group_cell.oe_form_group_nested - padding: 0 + + .oe_form_field_char input, + .oe_form_field_text textarea, + .oe_form_field_url input, + .oe_form_field_selection select + width: inherit + + .oe_form_field_float input + width: 100px + + h1 .oe_form_field_float input + width: 140px + + h2 .oe_form_field_float input + width: 120px + + h1, h2, h3, h4, h5, h6 + margin: 0 0 4px 0 + input + height: inherit !important + font-size: inherit + .oe_form_nosheet > *:not(.oe_form_topbar) + margin-left: 10px !important + margin-right: 10px !important + // }}} // FormView.label {{{ .oe_form @@ -1353,8 +1371,27 @@ $colour4: #8a89ba // }}} // FormView.fields {{{ .oe_form - textarea + .oe_form_field_text textarea resize: vertical + .oe_form_field + width: 100% + display: inline-block + padding: 2px 2px 2px 0px + line-height: 18px + input + margin: 0px + + .oe_form_field_integer + width: 180px + .oe_form_field_float + width: 180px + .oe_form_field_date + width: 7em + .oe_form_field_datetime + width: 11em + .oe_form_inline + width: auto + input[type="text"], input[type="password"], input[type="file"], @@ -1371,7 +1408,6 @@ $colour4: #8a89ba -ms-box-sizing: border-box box-sizing: border-box padding: 0 2px - margin: 0 2px border: 1px solid #999 -moz-border-radius: 3px -webkit-border-radius: 3px @@ -1412,8 +1448,6 @@ $colour4: #8a89ba white-space: nowrap .oe_form_field_boolean padding-top: 4px - .oe_form_field_datetime input - min-width: 11em .oe_form_field_many2manytags .text-wrap width: 100% !important @@ -1446,16 +1480,6 @@ $colour4: #8a89ba input, select, textarea background-color: #F66 !important border: 1px solid #D00 !important - .oe_button.oe_field_button - display: block - -webkit-border-top-left-radius: 0px - -webkit-border-bottom-left-radius: 0px - -moz-border-radius-topleft: 0px - -moz-border-radius-bottomleft: 0px - border-top-left-radius: 0px - border-bottom-left-radius: 0px - margin-right: -1px - height: 22px .oe_input_icon cursor: pointer margin: 3px 0 0 -21px @@ -1470,23 +1494,53 @@ $colour4: #8a89ba .oe_form_group_cell .oe_kanban_view // Hack due to absolute positioning of kanban view messing with o2m position: static + .oe_form_field_with_button + input + width: 100% + > .oe_button + float: right + -webkit-border-top-left-radius: 0px + -webkit-border-bottom-left-radius: 0px + -moz-border-radius-topleft: 0px + -moz-border-radius-bottomleft: 0px + border-top-left-radius: 0px + border-bottom-left-radius: 0px + height: 22px + > div + position: relative + overflow: hidden + + .oe_form_title + width: 65% + .oe_form_button_box + width: 200px + text-align: center + + .oe_form_group + margin: 5px 0px 5px 0px + + .oe_form_group_cell .oe_kanban_view + // Hack due to absolute positioning of kanban view messing with o2m + position: static + // }}} // FormView.buttons {{{ .oe_form .oe_form_button.oe_button height: 22px - color: #4c4c4c + white-space: nowrap span position: relative vertical-align: top .oe_form_button > img vertical-align: -3px padding: 0 2px - .oe_form_group_cell > .oe_form_button.oe_button - display: block - white-space: nowrap - min-width: 100% - width: 100% + // From FP: .oe_form_group_cell > .oe_form_button.oe_button + // From FP: display: block + // From FP: white-space: nowrap + // From FP: min-width: 100% + // From FP: width: 100% + // }}} // FormView.binaryfile {{{ /* http://www.quirksmode.org/dom/inputfile.html @@ -1496,6 +1550,7 @@ $colour4: #8a89ba .oe-binary-file-set overflow: hidden position: relative + display: inline-block width: 45px height: 30px input.oe-binary-file @@ -1511,6 +1566,8 @@ $colour4: #8a89ba -ms-filter: "alpha(opacity=0)" margin: 0 padding: 0 + .oe_binary_image + display: inline-block // }}} // FormView.separator {{{ .oe_horizontal_border @@ -1567,12 +1624,17 @@ $colour4: #8a89ba cursor: default .oe_form_notebook_page padding: 0 + div.ui-tabs + padding: 3px 0px 3px 0px .ui-tabs-hide display: none // }}} // FormView.progressbar {{{ .oe_form + .oe_form_field_progressbar + display: inline-block + min-width: 70px .oe_form_field_progressbar.ui-progressbar height: 22px font-size: 10px @@ -1615,18 +1677,14 @@ $colour4: #8a89ba // }}} // FormView.classes for openerp views {{{ .oe_form - .oe_form_title, .oe_form_title input - font-size: 20px - font-weight: bold - height: 30px - .oe_form_group_odd_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell:nth-child(odd), - .oe_form_group_label_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell_label + td.oe_form_group_cell_label border-right: 1px solid #ddd + padding: 2px 0px 2px 0px label + line-height: 18px display: block min-width: 120px - .oe_form_group_odd_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell, - .oe_form_group_label_border > tbody > tr.oe_form_group_row > td.oe_form_group_cell + td.oe_form_group_cell + .oe_form_group_cell padding-left: 8px .oe_form_subtotal_footer float: right @@ -1702,7 +1760,7 @@ $colour4: #8a89ba width: 17px &:after border-width: 0 - > td.oe-number + > td.oe_number text-align: right !important > tr:nth-child(odd) background-color: #f0f0fa diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 53a61828857..be78ce8f006 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -521,6 +521,7 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form. switch_mode: function() { var self = this; if(this.get("mode") == "view") { + self.$element.removeClass('oe_form_editable').addClass('oe_form_readonly'); self.$buttons.find('.oe_form_buttons_edit').hide(); self.$buttons.find('.oe_form_buttons_view').show(); self.$sidebar.show(); @@ -528,6 +529,7 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form. field.set({"force_readonly": true}); }); } else { + self.$element.removeClass('oe_form_readonly').addClass('oe_form_editable'); self.$buttons.find('.oe_form_buttons_edit').show(); self.$buttons.find('.oe_form_buttons_view').hide(); self.$sidebar.hide(); @@ -919,9 +921,6 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt // but one day, we will have to get rid of xml2json var xml = instance.web.json_node_to_xml(this.fvg.arch); this.$form = $('
' + xml + '
'); - if (this.fvg.arch.attrs && this.fvg.arch.attrs['layout'] !== 'manual') { - this.$form.attr('layout', 'auto'); - } this.fields_to_init = []; this.tags_to_init = []; @@ -953,16 +952,13 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt var obj = self.tags_registry.get_object(tag_name); var w = new (obj)(self.view, instance.web.xml_to_json($elem[0])); w.replace($elem); - }) + }); // TODO: return a deferred }, - render_element: function(template, layout/* dictionaries */) { - var dicts = [].slice.call(arguments).slice(2); - dicts.unshift({ 'layout' : layout }); + render_element: function(template /* dictionaries */) { + var dicts = [].slice.call(arguments).slice(1); var dict = _.extend.apply(_, dicts); dict['classnames'] = dict['class'] || ''; // class is a reserved word and might caused problem to Safari when used from QWeb - var alt_template = template + '.' + layout; - template = QWeb.has_template(alt_template) ? alt_template : template; return $(QWeb.render(template, dict)); }, alter_field: function(field) { @@ -977,10 +973,8 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } this.$target.toggleClass('oe_layout_debugging'); }, - process: function($tag, layout) { + process: function($tag) { var self = this; - layout = $tag.attr('layout') || layout || 'auto'; - $tag.removeAttr('layout'); var tagname = $tag[0].nodeName.toLowerCase(); if (this.tags_registry.contains(tagname)) { this.tags_to_init.push($tag); @@ -990,39 +984,45 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt if (fn) { var args = [].slice.call(arguments); args[0] = $tag; - args[1] = layout; return fn.apply(self, args); } else { // generic tag handling, just process children $tag.children().each(function() { - self.process($(this), layout); + self.process($(this)); }); self.handle_common_properties($tag, $tag); $tag.removeAttr("modifiers"); return $tag; } }, - process_sheet: function($sheet, layout) { - var $new_sheet = this.render_element('FormRenderingSheet', layout, $sheet.getAttributes()); + process_sheet: function($sheet) { + var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes()); this.handle_common_properties($new_sheet, $sheet); - var $dst = (layout === 'auto') ? $new_sheet.find('group:first') : $new_sheet.find('.oe_form_sheet'); - $sheet.children().appendTo($dst); + var $dst = $new_sheet.find('.oe_form_sheet'); + $sheet.contents().appendTo($dst); $sheet.before($new_sheet).remove(); - this.process($new_sheet, layout); + this.process($new_sheet); }, - process_form: function($form, layout) { - var $new_form = this.render_element('FormRenderingForm', layout, $form.getAttributes()); + process_form: function($form) { + if ($form.find('> sheet').length === 0) { + $form.addClass('oe_form_nosheet'); + } + var $new_form = this.render_element('FormRenderingForm', $form.getAttributes()); this.handle_common_properties($new_form, $form); - var $dst = (layout === 'auto') ? $new_form.find('group:first') : $new_form; - $form.children().appendTo($dst); + $form.contents().appendTo($new_form); if ($form[0] === this.$form[0]) { // If root element, replace it this.$form = $new_form; } else { $form.before($new_form).remove(); } - this.process($new_form, layout); + this.process($new_form); }, + /* + * Used by direct children of a tag only + * This method will add the implicit for every field + * in the + */ preprocess_field: function($field) { var self = this; var name = $field.attr('name'), @@ -1055,31 +1055,34 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } return $label; }, - process_field: function($field, layout) { - var $label = this.preprocess_field($field); - if ($label) - this.process($label, layout); + process_field: function($field) { + if ($field.parent().is('group')) { + // No implicit labels for normal fields, only for direct children + var $label = this.preprocess_field($field); + if ($label) { + this.process($label); + } + } this.fields_to_init.push($field); return $field; }, - process_group: function($group, layout) { + process_group: function($group) { var self = this; - if ($group.parent().is('.oe_form_group_cell')) { - $group.parent().addClass('oe_form_group_nested'); - } $group.children('field').each(function() { self.preprocess_field($(this)); }); - var $new_group = this.render_element('FormRenderingGroup', layout, $group.getAttributes()), - $table; - if ($new_group.is('table')) { + var $new_group = this.render_element('FormRenderingGroup', $group.getAttributes()); + var $table; + if ($new_group.first().is('table.oe_form_group')) { $table = $new_group; + } else if ($new_group.filter('table.oe_form_group').length) { + $table = $new_group.filter('table.oe_form_group').first(); } else { - $table = $new_group.find('table:first'); + $table = $new_group.find('table.oe_form_group').first(); } - $table.addClass('oe_form_group'); + var $tr, $td, - cols = parseInt($group.attr('col') || 4, 10), + cols = parseInt($group.attr('col') || 2, 10), row_cols = cols; var children = []; @@ -1089,6 +1092,8 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt var tagName = $child[0].tagName.toLowerCase(); var $td = $('').addClass('oe_form_group_cell').attr('colspan', colspan); var newline = tagName === 'newline'; + + // Note FME: those classes are used in layout debug mode if ($tr && row_cols > 0 && (newline || row_cols < colspan)) { $tr.addClass('oe_form_group_row_incomplete'); if (newline) { @@ -1118,7 +1123,6 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt } $group.before($new_group).remove(); - // Now compute width of cells $table.find('> tbody > tr').each(function() { var to_compute = [], row_cols = cols, @@ -1176,7 +1180,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt this.handle_common_properties($new_group, $group); return $new_group; }, - process_notebook: function($notebook, layout) { + process_notebook: function($notebook) { var self = this; var pages = []; $notebook.find('> page').each(function() { @@ -1184,14 +1188,13 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt var page_attrs = $page.getAttributes(); page_attrs.id = _.uniqueId('notebook_page_'); pages.push(page_attrs); - var $new_page = self.render_element('FormRenderingNotebookPage', layout, page_attrs); - var $dst = (layout === 'auto') ? $new_page.find('group:first') : $new_page; - $page.children().appendTo($dst); + var $new_page = self.render_element('FormRenderingNotebookPage', page_attrs); + $page.contents().appendTo($new_page); $page.before($new_page).remove(); self.handle_common_properties($new_page, $page); }); - var $new_notebook = this.render_element('FormRenderingNotebook', layout, { pages : pages }); - $notebook.children().appendTo($new_notebook); + var $new_notebook = this.render_element('FormRenderingNotebook', { pages : pages }); + $notebook.contents().appendTo($new_notebook); $notebook.before($new_notebook).remove(); $new_notebook.children().each(function() { self.process($(this)); @@ -1200,13 +1203,13 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt this.handle_common_properties($new_notebook, $notebook); return $new_notebook; }, - process_separator: function($separator, layout) { - var $new_separator = this.render_element('FormRenderingSeparator', layout, $separator.getAttributes()); + process_separator: function($separator) { + var $new_separator = this.render_element('FormRenderingSeparator', $separator.getAttributes()); $separator.before($new_separator).remove(); this.handle_common_properties($new_separator, $separator); return $new_separator; }, - process_label: function($label, layout) { + process_label: function($label) { var name = $label.attr("for"), field_orm = this.fvg.fields[name]; var dict = { @@ -1223,7 +1226,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt align = 'center'; } dict.align = align; - var $new_label = this.render_element('FormRenderingLabel', layout, dict); + var $new_label = this.render_element('FormRenderingLabel', dict); $label.before($new_label).remove(); this.handle_common_properties($new_label, $label); if (name) { @@ -1832,6 +1835,7 @@ instance.web.form.ReinitializeFieldMixin = { instance.web.form.FieldChar = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.ReinitializeFieldMixin, { template: 'FieldChar', + widget_class: 'oe_form_field_char', init: function (field_manager, node) { this._super(field_manager, node); this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1'; @@ -1936,6 +1940,7 @@ instance.web.form.FieldUrl = instance.web.form.FieldChar.extend({ instance.web.form.FieldFloat = instance.web.form.FieldChar.extend({ is_field_number: true, + widget_class: 'oe_form_field_float', init: function (field_manager, node) { this._super(field_manager, node); this.set({'value': 0}); @@ -1955,7 +1960,7 @@ instance.web.form.FieldFloat = instance.web.form.FieldChar.extend({ }); instance.web.DateTimeWidget = instance.web.OldWidget.extend({ - template: "web.datetimepicker", + template: "web.datepicker", jqueryui_object: 'datetimepicker', type_of_date: "datetime", init: function(parent) { @@ -2040,7 +2045,7 @@ instance.web.DateWidget = instance.web.DateTimeWidget.extend({ }); instance.web.form.FieldDatetime = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.ReinitializeFieldMixin, { - template: "EmptyComponent", + template: "FieldDatetime", build_widget: function() { return new instance.web.DateTimeWidget(this); }, @@ -2086,6 +2091,7 @@ instance.web.form.FieldDatetime = instance.web.form.AbstractField.extend(_.exten })); instance.web.form.FieldDate = instance.web.form.FieldDatetime.extend({ + template: "FieldDate", build_widget: function() { return new instance.web.DateWidget(this); } @@ -4088,7 +4094,7 @@ instance.web.form.FieldBinaryImage = instance.web.form.FieldBinary.extend({ }); instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ - template: "EmptyComponent", + tagName: "span", start: function() { this._super(); this.selected_value = null; diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 67c8ce0239e..081c4444a72 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -1338,7 +1338,7 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we } else if (column.id in group.aggregates) { var r = {}; r[column.id] = {value: group.aggregates[column.id]}; - $('') + $('') .html(instance.web.format_cell( r, column, {process_modifiers: false})) .appendTo($row); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index b3acd3bc3fd..152fd2249e0 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -591,7 +591,7 @@ t-if="!field.attrs.modifiers.tree_invisible" t-att-data-id="record.id" t-att-style="color_for(record) + style " - t-attf-class="#{class} #{rank} #{(fields[field.attrs.name].type === 'float') or (fields[field.attrs.name].type === 'integer') ? 'oe-number' : ''}"> + t-attf-class="#{class} #{rank} #{(fields[field.attrs.name].type === 'float') or (fields[field.attrs.name].type === 'integer') ? 'oe_number' : ''}"> @@ -634,7 +634,7 @@ - @@ -679,7 +679,7 @@ @@ -773,31 +773,19 @@ - -
- +
+
+
+
-
- - - - - - -
- - -
-
- - - + +
@@ -812,7 +800,6 @@
-
@@ -895,75 +882,47 @@ - -
+ + -
-
- - - +
+ - -
- - - - -
+ + + + +
-
- -
-
- - - - - +
+
+
- - - - - - - -
- - - -
+ + + this.removeClass('oe_form_field_email').addClass('oe_form_field_url'); - - -
- + + -
+
@@ -1050,17 +1003,19 @@ - +
- -
+ + + +
- + -
+ -
+
    @@ -1084,51 +1039,36 @@
+
- - - - - -
- -
-
- - - - - -
-
-
- - - - -
-
-
- -
+ +
+
+
+
+ + + + +
- -