diff options
| author | Vishmita Jadeja (openerp) <vja@tinyerp.com> | 2013-05-01 11:11:29 +0530 |
|---|---|---|
| committer | Vishmita Jadeja (openerp) <vja@tinyerp.com> | 2013-05-01 11:11:29 +0530 |
| commit | 3b7863b479593fd6f2ccba8996f227f8d2e7df25 (patch) | |
| tree | 0ce0101d6938cc5217c2ab69b52126a369766b3e /addons/web/static/src | |
| parent | ae6d15de59251618a21d4520e50456fd9777de33 (diff) | |
| parent | 511efd43a90b6bbc30bac9764358fc81b42fb13a (diff) | |
[Merge]Merge with trunk
bzr revid: vja@tinyerp.com-20130501054129-2ie8kj73yosxbfo8
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/css/base.css | 5903 | ||||
| -rw-r--r-- | addons/web/static/src/css/base.sass | 77 | ||||
| -rw-r--r-- | addons/web/static/src/fixbind.js | 28 | ||||
| -rw-r--r-- | addons/web/static/src/js/chrome.js | 104 | ||||
| -rw-r--r-- | addons/web/static/src/js/corelib.js | 24 | ||||
| -rw-r--r-- | addons/web/static/src/js/coresetup.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/data.js | 105 | ||||
| -rw-r--r-- | addons/web/static/src/js/formats.js | 30 | ||||
| -rw-r--r-- | addons/web/static/src/js/pyeval.js | 22 | ||||
| -rw-r--r-- | addons/web/static/src/js/search.js | 226 | ||||
| -rw-r--r-- | addons/web/static/src/js/testing.js | 4 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_form.js | 509 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_list.js | 9 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_list_editable.js | 3 | ||||
| -rw-r--r-- | addons/web/static/src/js/views.js | 54 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 138 |
16 files changed, 3581 insertions, 3659 deletions
diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 33bba914f3f..1e82daeb4ff 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -6,8 +6,7 @@ src: url("/web/static/src/font/mnmliconsv21-webfont.ttf") format("truetype"); src: url("/web/static/src/font/mnmliconsv21-webfont.svg") format("svg") active; font-weight: normal; - font-style: normal; -} + font-style: normal; } @font-face { font-family: "EntypoRegular"; @@ -17,8 +16,7 @@ src: url("/web/static/src/font/entypo-webfont.ttf") format("truetype"); src: url("/web/static/src/font/entypo-webfont.svg") format("svg") active; font-weight: normal; - font-style: normal; -} + font-style: normal; } .openerp { padding: 0; @@ -30,3117 +28,2589 @@ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ -} -.openerp.openerp_webclient_container { - height: 100%; -} -.openerp :-moz-placeholder { - color: #afafb6 !important; - font-style: italic !important; -} -.openerp ::-webkit-input-placeholder { - color: #afafb6 !important; - font-style: italic !important; -} -.openerp :-ms-input-placeholder { - color: #afafb6 !important; - font-style: italic !important; -} -.openerp a { - text-decoration: none; - cursor: pointer !important; -} -.openerp table { - padding: 0; - border-collapse: collapse; -} -.openerp thead { - font-weight: bold; - background-color: #f0f0f0; -} -.openerp thead th { - border-left: 1px solid #dfdfdf; -} -.openerp thead th:first-child { - border-left: none; -} -.openerp thead th.null { - border-left: none; -} -.openerp th, .openerp td { - padding: 0; - text-align: left; -} -.openerp th { - font-weight: bold; - vertical-align: middle; -} -.openerp td { - vertical-align: top; -} -.openerp .zebra tbody tr:nth-child(odd) td { - background-color: #f0f0fa; - background-color: #efeff8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); -} -.openerp .zebra tbody tr:hover td { - background-color: #e6e6e6; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#dedede)); - background-image: -webkit-linear-gradient(top, #eeeeee, #dedede); - background-image: -moz-linear-gradient(top, #eeeeee, #dedede); - background-image: -ms-linear-gradient(top, #eeeeee, #dedede); - background-image: -o-linear-gradient(top, #eeeeee, #dedede); - background-image: linear-gradient(to bottom, #eeeeee, #dedede); -} -.openerp input, .openerp textarea, .openerp select { - padding: 2px 4px; - border: 1px solid #cccccc; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: white; -} -.openerp img { - vertical-align: middle; -} -.openerp h4 { - margin: 4px 0; -} -.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - display: inline-block; - border: 1px solid rgba(0, 0, 0, 0.4); - color: #4c4c4c; - margin: 0; - padding: 3px 12px; - font-size: 13px; - text-align: center; - background-color: #e3e3e3; - background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); - background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); - background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); - background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); - background-image: -o-linear-gradient(top, #efefef, #d8d8d8); - background-image: linear-gradient(to bottom, #efefef, #d8d8d8); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); - -webkit-font-smoothing: antialiased; - outline: none; -} -.openerp a.button:hover, .openerp button:hover, .openerp input[type='submit']:hover, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover { - background-color: #ececec; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - cursor: pointer; - background-position: 0; -} -.openerp a.button:focus, .openerp button:focus, .openerp input[type='submit']:focus, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus { - border: 1px solid #80bfff; - background-position: 0; - background-color: #ececec; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - -moz-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active { - background-color: #ececec; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); - background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp a.button.disabled, .openerp button:disabled, .openerp input[type='submit']:disabled { - background: #efefef !important; - border: 1px solid #d1d1d1 !important; - -moz-box-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; - color: #aaaaaa !important; - cursor: default; - text-shadow: 0 1px 1px white !important; -} -.openerp .ui-widget-content a { - color: #7c7bad; -} -.openerp .oe_bounce_container { - display: inline-block; -} -.openerp .text-tag .text-button { - height: auto !important; - min-height: 16px; -} -.openerp .ui-tabs { - position: static; -} -.openerp.ui-dialog { - display: none; - padding: 6px; - background-color: rgba(60, 60, 60, 0.7); - border: 1px solid; - border-color: #888888 #555555 #444444; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.openerp.ui-dialog .ui-dialog-content { - padding: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { - padding: 16px; -} -.openerp.ui-dialog .ui-dialog-titlebar { - border-bottom: 1px solid #cacaca; - -moz-border-radius: 2px 2px 0 0; - -webkit-border-radius: 2px 2px 0 0; - border-radius: 2px 2px 0 0; - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp.ui-dialog .ui-dialog-titlebar .ui-dialog-title { - margin: 0; - padding: 0; -} -.openerp.ui-dialog .ui-widget-header { - border: none; -} -.openerp.ui-dialog .ui-dialog-content { - background: white; -} -.openerp.ui-dialog .ui-dialog-buttonpane { - border-top: 1px solid #e0e0e0; - background: #f5f7f9; - margin: 0; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .ui-dialog-buttonpane button { - margin: 0 4px 0 0; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: left; -} -.openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - margin-right: 4px; -} -.openerp.ui-dialog .ui-dialog-titlebar-close { - padding: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { - display: none; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before { - content: "×"; - font-size: 18px; - font-weight: bold; - line-height: 16px; - color: black; - text-shadow: 0 1px 0 white; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.openerp.ui-dialog .ui-dialog-titlebar-close:before:hover { - color: black; - text-decoration: none; -} -.openerp.ui-dialog .oe_about { - background-color: white; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about a { - color: #7c7bad; -} -.openerp.ui-dialog .oe_about a:hover { - text-decoration: underline; -} -.openerp.ui-dialog .oe_about a:focus { - outline: none; -} -.openerp.ui-dialog .oe_about .oe_logo { - margin-left: -6px; -} -.openerp.ui-dialog .oe_about .oe_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #8a0e0e; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); - color: #eeeeee; - padding: 0 16px; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp.ui-dialog .oe_about .oe_bottom a { - color: #eeeeee; -} -.openerp.ui-dialog.oe_act_window .ui-dialog-content { - padding: 0px; -} -.openerp .modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: black; - filter: alpha(opacity=30); - opacity: 0.3; -} -.openerp .oe_i { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; -} -.openerp .oe_e { - font-family: "entypoRegular" !important; - font-size: 34px; - font-weight: 300 !important; -} -.openerp .oe_left { - float: left; - margin-right: 8px; -} -.openerp .oe_right { - float: right; - margin-left: 8px; -} -.openerp .oe_text_right { - text-align: right; -} -.openerp .oe_clear { - clear: both; -} -.openerp .oe_wait { - cursor: wait; -} -.openerp .oe_fade { - color: #888888; - font-weight: normal; -} -.openerp .oe_bold { - font-weight: bold; -} -.openerp .oe_inline { - width: auto !important; -} -.openerp .oe_highlight { - color: white; - background: #dc5f59; -} -.openerp button.oe_highlight { - background-color: #c02c2c; - background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a)); - background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -moz-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -ms-linear-gradient(top, #df3f3f, #a21a1a); - background-image: -o-linear-gradient(top, #df3f3f, #a21a1a); - background-image: linear-gradient(to bottom, #df3f3f, #a21a1a); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; -} -.openerp button.oe_highlight:hover { - background-color: #c63939; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e25858), to(#ab1b1b)); - background-image: -webkit-linear-gradient(top, #e25858, #ab1b1b); - background-image: -moz-linear-gradient(top, #e25858, #ab1b1b); - background-image: -ms-linear-gradient(top, #e25858, #ab1b1b); - background-image: -o-linear-gradient(top, #e25858, #ab1b1b); - background-image: linear-gradient(to bottom, #e25858, #ab1b1b); -} -.openerp button.oe_highlight:active { - background-color: #cb2121; - background-image: -webkit-gradient(linear, left top, left bottom, from(#c52020), to(#d22323)); - background-image: -webkit-linear-gradient(top, #c52020, #d22323); - background-image: -moz-linear-gradient(top, #c52020, #d22323); - background-image: -ms-linear-gradient(top, #c52020, #d22323); - background-image: -o-linear-gradient(top, #c52020, #d22323); - background-image: linear-gradient(to bottom, #c52020, #d22323); -} -.openerp .oe_background_grey { - background: #eeeeee !important; -} -.openerp .oe_form_dirty .oe_highlight_on_dirty { - color: white; - background: #dc5f59; - font-weight: bold; -} -.openerp .oe_form_dirty button.oe_highlight_on_dirty { - background-color: #c74a44; - background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630)); - background-image: -webkit-linear-gradient(top, #dc5f59, #b33630); - background-image: -moz-linear-gradient(top, #dc5f59, #b33630); - background-image: -ms-linear-gradient(top, #dc5f59, #b33630); - background-image: -o-linear-gradient(top, #dc5f59, #b33630); - background-image: linear-gradient(to bottom, #dc5f59, #b33630); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_form_dirty button.oe_highlight_on_dirty:hover { - background: #ed6f6a; -} -.openerp .oe_title { - width: 50%; - float: left; -} -.openerp .oe_title:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; -} -.openerp .oe_button_box { - width: 270px; - text-align: right; -} -.openerp .oe_button_box button { - margin: 4px; -} -.openerp .oe_avatar > img { - max-height: 90px; - max-width: 90px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); - border: none; - margin-bottom: 10px; -} -.openerp .oe_avatar + div { - margin-left: 5px; -} -.openerp .oe_image_small > img { - max-width: 50px; - max-height: 50px; -} -.openerp .oe_image_medium > img { - max-width: 180px; - max-height: 180px; -} -.openerp .oe_button.oe_link { - border: none; - padding: 0; - margin: 0; - background: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_button.oe_link img { - display: inline-block; -} -.openerp .oe_button.oe_link span { - border: none; - padding: 0; - margin: 0; - background: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - color: #7c7bad; - font-weight: bold; -} -.openerp .oe_button.oe_link span:hover { - text-decoration: underline; -} -.openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off { - color: #cccccc; - text-shadow: 0 0 2px black; - vertical-align: top; - position: relative; - top: -5px; -} -.openerp .oe_webclient .oe_star_on:hover, .openerp .oe_webclient .oe_star_off:hover { - text-decoration: none; -} -.openerp .oe_webclient .oe_star_on { - color: gold; -} -.openerp p.oe_grey { - max-width: 650px; -} -.openerp .oe_grey { - color: #aaaaaa; -} -.openerp .oe_tag { - border: 1px solid #afafb6; - font-size: 11px; - padding: 2px 4px; - margin: 0 2px 2px 0; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: #f0f0fa; - color: #4c4c4c; -} -.openerp .oe_tag_dark { - background: #7c7bad; - color: #eeeeee; -} -.openerp .oe_tags { - margin-bottom: 1px; -} -.openerp .oe_tags.oe_inline { - min-width: 250px; -} -.openerp .oe_tags .text-wrap { - width: 100% !important; -} -.openerp .oe_tags .text-wrap textarea { - width: 100% !important; -} -.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { - font-style: italic; - text-decoration: none; -} -.openerp.oe_tooltip { - font-size: 12px; -} -.openerp.oe_tooltip .oe_tooltip_string { - color: #ffdd55; - font-weight: bold; - font-size: 13px; -} -.openerp.oe_tooltip .oe_tooltip_help { - white-space: pre-wrap; -} -.openerp.oe_tooltip .oe_tooltip_technical { - padding: 0 0 4px 0; - margin: 5px 0 0 15px; -} -.openerp.oe_tooltip .oe_tooltip_technical li { - list-style: circle; -} -.openerp.oe_tooltip .oe_tooltip_technical_title { - font-weight: bold; -} -.openerp.oe_tooltip .oe_tooltip_close { - margin: -5px 0 0 2px; - cursor: default; - float: right; - color: white; -} -.openerp.oe_tooltip .oe_tooltip_close:hover { - color: #999999; - cursor: pointer; -} -.openerp.oe_tooltip .oe_tooltip_message { - max-width: 310px; -} -.openerp .oe_notebook { - margin: 8px 0; - padding: 0 16px; - list-style: none; - zoom: 1; -} -.openerp .oe_notebook.ui-corner-all { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.openerp .oe_notebook:before, .openerp .oe_notebook:after { - display: table; - content: ""; - zoom: 1; -} -.openerp .oe_notebook:after { - clear: both; -} -.openerp .oe_notebook > li { - float: left; -} -.openerp .oe_notebook > li > a { - display: block; - color: gray; -} -.openerp .oe_notebook > li.ui-tabs-active > a { - color: #4c4c4c; -} -.openerp .oe_notebook { - border-color: #dddddd; - border-style: solid; - border-width: 0 0 1px; -} -.openerp .oe_notebook > li { - position: relative; -} -.openerp .oe_notebook > li > a { - padding: 0 12px; - margin-right: 2px; - line-height: 30px; - border: 1px solid transparent; - -moz-border-radius: 4px 4px 0 0; - -webkit-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.openerp .oe_notebook > li > a:hover { - text-decoration: none; - background-color: #eeeeee; - border-color: #eeeeee #eeeeee #dddddd; -} -.openerp .oe_notebook > li.ui-state-active > a, .openerp .oe_notebook > li.ui-state-active > a:hover { - background-color: white; - border: 1px solid #dddddd; - border-bottom-color: transparent; - cursor: default; -} -.openerp .oe_notebook_page { - padding: 0; -} -.openerp div.ui-tabs { - padding: 3px 0px 3px 0px; -} -.openerp .ui-tabs-hide { - display: none; -} -.openerp .oe_dropdown, .openerp .oe_dropdown_hover, .openerp .oe_dropdown_toggle { - position: relative; - cursor: pointer; -} -.openerp .oe_dropdown_toggle { - color: #4c4c4c; - font-weight: normal; -} -.openerp .oe_dropdown_hover:hover .oe_dropdown_menu, .openerp .oe_dropdown_menu.oe_opened { - display: block; -} -.openerp .oe_dropdown_menu { - display: none; - position: absolute; - top: 26px; - left: 0; - z-index: 3; - margin: 0; - padding: 0; - border: 1px solid #afafb6; - background: white; - padding: 4px 0; - min-width: 140px; - text-align: left; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); -} -.openerp .oe_dropdown_menu > li { - list-style-type: none; - float: none; - display: block; - position: relative; - margin: 0; - padding: 2px 8px; -} -.openerp .oe_dropdown_menu > li:hover { - background-color: #efeff8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_dropdown_menu > li > a { - white-space: nowrap; - display: block; - color: #4c4c4c; - text-decoration: none; - width: 200px; - text-overflow: ellipsis; - overflow: hidden; -} -.openerp .oe_dropdown_menu > li > a:hover { - text-decoration: none; -} -.openerp .oe_dropdown_arrow:after { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-top: 8px; - margin-left: 3px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #404040; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_sidebar { - white-space: nowrap; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment { - height: 20px; - cursor: pointer; - padding-left: 6px; - margin-top: 6px; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment span { - font-weight: bold; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment .oe_hidden_input_file { - width: 200px; -} -.openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment:hover { - background-color: #efeff8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item { - position: absolute; - top: 4px; - right: 4px; - display: none; - width: 12px; - height: 12px; - padding: 1px; - color: #8786b7; - line-height: 8px; - text-align: center; - font-weight: bold; - text-shadow: 0 1px 1px white; -} -.openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item:hover { - text-decoration: none; - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_sidebar .oe_dropdown_menu li:hover .oe_sidebar_delete_item { - display: inline-block; -} -.openerp .oe_loading { - display: none; - z-index: 100; - position: fixed; - top: 0; - right: 50%; - padding: 4px 12px; - background: #a61300; - color: white; - text-align: center; - border: 1px solid #990000; - border-top: none; - -moz-border-radius-bottomright: 8px; - -moz-border-radius-bottomleft: 8px; - border-bottom-right-radius: 8px; - border-bottom-left-radius: 8px; -} -.openerp .oe_notification { - z-index: 1050; -} -.openerp .oe_webclient_timezone_notification a { - color: white; - text-decoration: underline; -} -.openerp .oe_webclient_timezone_notification p { - margin-top: 1em; -} -.openerp .oe_webclient_timezone_notification dt { - font-weight: bold; -} -.openerp .oe_timezone_systray span { - margin-top: 1px; - background-color: #f6cf3b; -} -.openerp .oe_dialog_warning { - width: 100%; -} -.openerp .oe_dialog_warning p { - text-align: center; -} -.openerp .oe_dialog_icon { - padding: 5px; - width: 32px; -} -.openerp .oe_login { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - text-align: center; - font-size: 14px; - height: 100%; -} -.openerp .oe_login ul, .openerp .oe_login li { - margin: 0; - list-style-type: none; - padding: 0 0 4px 0; -} -.openerp .oe_login button { - cursor: pointer; - padding: 6px 16px; - border: 1px solid #222222; - color: white; - margin: 0; - background-color: #8c1313; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606)); - background-image: -webkit-linear-gradient(top, #b92020, #600606); - background-image: -moz-linear-gradient(top, #b92020, #600606); - background-image: -ms-linear-gradient(top, #b92020, #600606); - background-image: -o-linear-gradient(top, #b92020, #600606); - background-image: linear-gradient(to bottom, #b92020, #600606); - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; -} -.openerp .oe_login input, .openerp .oe_login select { - width: 252px; - font-family: "Lucida Grande", Helvetica, Verdana, Arial; - border: 1px solid #999999; - background: whitesmoke; - -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.openerp .oe_login input { - margin-bottom: 9px; - padding: 5px 6px; -} -.openerp .oe_login select { - padding: 1px; -} -.openerp .oe_login .oe_login_dbpane { - position: fixed; - top: 0; - right: 8px; - padding: 5px 10px; - color: #eeeeee; - border: solid 1px #333333; - background: #1e1e1e; - background: rgba(30, 30, 30, 0.94); - -moz-border-radius: 0 0 8px 8px; - -webkit-border-radius: 0 0 8px 8px; - border-radius: 0 0 8px 8px; -} -.openerp .oe_login .oe_login_dbpane input { - padding: 2px 4px; - margin: 4px 0; -} -.openerp .oe_login .oe_login_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #8a0e0e; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); -} -.openerp .oe_login .oe_login_pane { - position: absolute; - top: 50%; - left: 50%; - margin: -160px -166px; - border: solid 1px #333333; - background: #1e1e1e; - background: rgba(30, 30, 30, 0.94); - padding: 22px 32px; - color: #eeeeee; - text-align: left; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); - -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); - box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); -} -.openerp .oe_login .oe_login_pane h2 { - margin-top: 0; - font-size: 18px; -} -.openerp .oe_login .oe_login_logo { - position: absolute; - top: -70px; - left: 0; - width: 100%; - margin: 0 auto; - text-align: center; -} -.openerp .oe_login .oe_login_footer { - position: absolute; - bottom: -40px; - left: 0; - width: 100%; - text-align: center; -} -.openerp .oe_login .oe_login_footer a { - color: #eeeeee; - margin: 0 8px; -} -.openerp .oe_login .oe_login_footer a:hover { - text-decoration: underline; -} -.openerp .oe_login .oe_login_footer span { - font-weight: bold; - font-size: 16px; -} -.openerp .oe_login .oe_login_error_message { - display: none; - background-color: #b41616; - color: #eeeeee; - padding: 14px 18px; - margin-top: 15px; - text-align: center; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); -} -.openerp .oe_login_invalid .oe_login_error_message { - display: inline-block; -} -.openerp .oe_database_manager { - background: white; - color: black; - text-align: left; -} -.openerp .oe_database_manager .oe_database_manager_menu { - color: black; -} -.openerp .oe_webclient { - width: 100%; - height: 100%; - border-spacing: 0px; -} -.openerp .oe_content_full_screen .oe_application { - top: 0; - left: 0; -} -.openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar { - display: none; -} -.openerp .oe_topbar { - width: 100%; - height: 32px; - background-color: #414141; - background-color: #454343; - background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626)); - background-image: -webkit-linear-gradient(top, #646060, #262626); - background-image: -moz-linear-gradient(top, #646060, #262626); - background-image: -ms-linear-gradient(top, #646060, #262626); - background-image: -o-linear-gradient(top, #646060, #262626); - background-image: linear-gradient(to bottom, #646060, #262626); -} -.openerp .oe_topbar .oe_topbar_anonymous_login { - background-color: #dc5f59; - color: #eeeeee; - background-color: #be4343; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fc8787), to(maroon)); - background-image: -webkit-linear-gradient(top, #fc8787, maroon); - background-image: -moz-linear-gradient(top, #fc8787, maroon); - background-image: -ms-linear-gradient(top, #fc8787, maroon); - background-image: -o-linear-gradient(top, #fc8787, maroon); - background-image: linear-gradient(to bottom, #fc8787, maroon); -} -.openerp .oe_topbar .oe_topbar_anonymous_login a { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - text-decoration: none; - color: white; - background: transparent; - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -.openerp .oe_topbar .oe_topbar_anonymous_login a:hover { - background: rgba(0, 0, 0, 0.1); - color: white; - text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; -} -.openerp .oe_topbar .oe_topbar_item { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - text-decoration: none; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -.openerp .oe_topbar .oe_topbar_item:hover { - background: rgba(0, 0, 0, 0.2); - text-shadow: black 0px 0px 3px; - color: white; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_topbar .oe_topbar_avatar { - width: 24px; - height: 24px; - margin: -2px 2px 0 0; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.openerp .oe_topbar .oe_topbar_avatar { - vertical-align: top; -} -.openerp .oe_topbar .oe_dropdown_arrow:after { - border-top: 4px solid white; -} -.openerp .oe_topbar .oe_dropdown_menu { - top: 32px; - background: #333333; - background: rgba(37, 37, 37, 0.9); - border-color: #999999; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 0 1px 1px; - -moz-border-radius: 0 0 6px 6px; - -webkit-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.openerp .oe_topbar .oe_dropdown_menu li { - float: none; - padding: 3px 12px; -} -.openerp .oe_topbar .oe_dropdown_menu li a { - color: #eeeeee; -} -.openerp .oe_topbar .oe_dropdown_menu li:hover { - background-color: #212121; - background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919)); - background-image: -webkit-linear-gradient(top, #292929, #191919); - background-image: -moz-linear-gradient(top, #292929, #191919); - background-image: -ms-linear-gradient(top, #292929, #191919); - background-image: -o-linear-gradient(top, #292929, #191919); - background-image: linear-gradient(to bottom, #292929, #191919); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_topbar .oe_topbar_name { - max-width: 150px; - overflow: hidden; - display: inline-block; - max-height: 100%; - text-overflow: ellipsis; - white-space: nowrap; -} -.openerp .oe_menu { - float: left; - padding: 0; - margin: 0; - font-size: 13px; -} -.openerp .oe_menu > li { - list-style-type: none; - padding: 0; - margin: 0; - float: left; - display: block; - color: #eeeeee; -} -.openerp .oe_menu > li > a { - display: block; - padding: 5px 10px 7px; - line-height: 20px; - height: 20px; - text-decoration: none; - color: #eeeeee; - vertical-align: top; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-transition: all 0.2s ease-out; - -moz-transition: all 0.2s ease-out; - -ms-transition: all 0.2s ease-out; - -o-transition: all 0.2s ease-out; - transition: all 0.2s ease-out; -} -.openerp .oe_menu > li > a:hover { - background: rgba(0, 0, 0, 0.2); - text-shadow: black 0px 0px 3px; - color: white; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_menu > li > .oe_active { - background: rgba(0, 0, 0, 0.3); - text-shadow: black 0px 0px 3px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; -} -.openerp .oe_user_menu { - float: right; - padding: 0; - margin: 0; -} -.openerp .oe_user_menu li { - list-style-type: none; - float: left; -} -.openerp .oe_user_menu .oe_dropdown_menu { - right: -1px; -} -.openerp .oe_systray > div { - float: left; - padding: 0 4px 0 4px; -} -.openerp .oe_systray { - float: right; -} -.openerp .oe_leftbar { - display: none; - width: 220px; - background: #f0eeee; - border-right: 1px solid #afafb6; - text-shadow: 0 1px 1px white; - padding-bottom: 16px; -} -.openerp a.oe_logo { - position: relative; - width: 220px; - display: block; - text-align: center; -} -.openerp a.oe_logo img { - margin: 14px 0; - border: 0; -} -.openerp a.oe_logo .oe_logo_edit { - margin: 14px 0; - position: absolute; - top: 1px; - padding: 4px; - width: 100%; - display: none; - text-align: center; - color: #eeeeee; - background: rgba(37, 37, 37, 0.9); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.openerp a.oe_logo:hover .oe_logo_edit_admin { - display: block; -} -.openerp .oe_footer { - position: fixed; - bottom: 0; - padding: 4px 0; - background: #f0eeee; - width: 220px; - text-align: center; -} -.openerp .oe_footer a { - font-weight: bold; - color: black; -} -.openerp .oe_footer a span { - color: #c81010; -} -.openerp .oe_secondary_menu_section { - font-weight: bold; - margin-left: 8px; - color: #7c7bad; -} -.openerp .oe_secondary_submenu { - padding: 2px 0 8px 0; - margin: 0; -} -.openerp .oe_secondary_submenu li { - position: relative; - margin: 0; - padding: 1px 0 1px 20px !important; - list-style-type: none; -} -.openerp .oe_secondary_submenu li a { - display: block; - color: #4c4c4c; - padding: 2px 4px 2px 0; -} -.openerp .oe_secondary_submenu li .oe_menu_label { - position: absolute; - top: 1px; - right: 1px; - font-size: 10px; - background: #7c7bad; - color: white; - padding: 2px 4px; - margin: 1px 6px 0 0; - border: 1px solid lightGray; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_menu_text { - white-space: nowrap; - overflow: hidden; - display: inline-block; - text-overflow: ellipsis; - max-width: 85%; -} -.openerp .oe_secondary_submenu .oe_menu_counter { - float: right; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - margin: 1px; - padding: 1px 4px; - border: none; -} -.openerp .oe_secondary_submenu .oe_menu_counter:hover { - cursor: pointer; - -webkit-transform: scale(1.1); - -moz-transform: scale(1.1); - -ms-transform: scale(1.1); - -o-transform: scale(1.1); - transform: scale(1.1); -} -.openerp .oe_secondary_submenu .oe_active { - border-top: 1px solid lightGray; - border-bottom: 1px solid #dedede; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); - background: #7c7bad; -} -.openerp .oe_secondary_submenu .oe_active a { - color: white; -} -.openerp .oe_secondary_submenu .oe_active .oe_menu_label { - background: #eeeeee; - color: #7c7bad; - text-shadow: 0 1px 1px white; - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_active .oe_menu_counter { - background: #eeeeee; - color: #7c7bad; - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); -} -.openerp .oe_secondary_submenu .oe_menu_toggler:before { - width: 0; - height: 0; - display: inline-block; - content: "&darr"; - text-indent: -99999px; - vertical-align: top; - margin-left: -12px; - margin-top: 4px; - margin-right: 4px; - border-top: 4px solid transparent; - border-bottom: 4px solid transparent; - border-left: 4px solid #4c4c4c; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_secondary_submenu .oe_menu_opened:before { - margin-top: 6px; - margin-left: -16px; - margin-right: 4px; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #4c4c4c; -} -.openerp .oe_secondary_submenu .oe_secondary_submenu { - margin-left: -20px; -} -.openerp .oe_secondary_submenu .oe_secondary_submenu li { - margin-left: 20px; -} -.openerp .oe_about { - background-color: white; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp .oe_about a { - color: #7c7bad; -} -.openerp .oe_about a:hover { - text-decoration: underline; -} -.openerp .oe_about a:focus { - outline: none; -} -.openerp .oe_about .oe_logo { - margin-left: -6px; -} -.openerp .oe_about .oe_bottom { - position: absolute; - top: 50%; - left: 0; - right: 0; - bottom: 0; - text-shadow: 0 1px 1px #999999; - background-color: #8a0e0e; - background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); - background-image: -webkit-linear-gradient(top, #b41616, #600606); - background-image: -moz-linear-gradient(top, #b41616, #600606); - background-image: -ms-linear-gradient(top, #b41616, #600606); - background-image: -o-linear-gradient(top, #b41616, #600606); - background-image: linear-gradient(to bottom, #b41616, #600606); - color: #eeeeee; - padding: 0 16px; - -moz-border-radius: 0 0 2px 2px; - -webkit-border-radius: 0 0 2px 2px; - border-radius: 0 0 2px 2px; -} -.openerp .oe_about .oe_bottom a { - color: #eeeeee; -} -.openerp .oe_application { - width: 100%; - height: 100%; -} -.openerp .oe_application a { - color: #7c7bad; -} -.openerp .oe_application a:hover { - text-decoration: underline; -} -.openerp .oe_application > div { - height: 100%; -} -.openerp .oe_application .oe_breadcrumb_item:not(:last-child) { - max-width: 7em; - white-space: nowrap; - text-overflow: ellipsis; -} -.openerp .oe_application .oe_breadcrumb_title > * { - display: inline-block; - overflow: hidden; -} -.openerp .oe_view_manager { - display: table; - height: inherit; - width: 100%; -} -.openerp .oe_view_manager .oe_view_manager_body { - display: table-row; - height: inherit; -} -.openerp .oe_view_manager .oe_view_manager_view_kanban { - height: inherit; -} -.openerp .oe_view_manager table.oe_view_manager_header { - border-collapse: separate; - width: 100%; - table-layout: fixed; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row { - clear: both; - text-shadow: 0 1px 1px white; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:last-child td { - padding-top: 0; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:first-child td { - padding-top: 8px; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_sidebar { - margin: 0px auto; - text-align: center; -} -.openerp .oe_view_manager table.oe_view_manager_header td { - line-height: 26px; -} -.openerp .oe_view_manager table.oe_view_manager_header h2 { - font-size: 18px; - margin: 0; - float: left; -} -.openerp .oe_view_manager table.oe_view_manager_header h2 a { - color: #7c7bad; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_dropdown_menu { - line-height: normal; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group { - display: inline-block; - border: 1px solid #ababab; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li { - float: left; - border-right: 1px solid #ababab; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li:last-child { - border: none; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a { - color: #4c4c4c; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a:hover { - text-decoration: none; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active { - background: #999999; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active a { - color: white; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); -} -.openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_buttons { - white-space: nowrap; -} -.openerp .oe_view_manager .oe_view_manager_switch { - padding: 0; - margin: 0 0 0 8px; -} -.openerp .oe_view_manager .oe_view_manager_switch li { - margin: 0; - width: 24px; - height: 24px; - line-height: 16px; - padding: 0; - text-align: center; - list-style-type: none; -} -.openerp .oe_view_manager .oe_view_manager_switch li a { - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_list:after, .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_tree:after { - padding: 2px; - content: "i"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_form:after { - content: "m"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_graph:after { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; - content: "}"; - top: -2px; - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_gantt:after { - font-family: "mnmliconsRegular" !important; - font-size: 21px; - font-weight: 300 !important; - content: "y"; - top: -2px; - position: relative; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_calendar:after { - content: "P"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_kanban:after { - content: "k"; -} -.openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_diagram:after { - content: "f"; -} -.openerp .oe_list_pager { - line-height: 26px; -} -.openerp .oe_pager_value { - float: left; - margin-right: 8px; -} -.openerp ul.oe_pager_group { - padding: 0; - margin: 0; -} -.openerp .oe_pager_group { - float: left; - height: 24px; - line-height: 24px; - display: inline-block; - border: 1px solid #ababab; - cursor: pointer; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} -.openerp .oe_pager_group li { - height: 24px; - line-height: 24px; - padding: 0; - margin: 0; - list-style-type: none; - float: left; - border-right: 1px solid #ababab; -} -.openerp .oe_pager_group li:last-child { - border: none; -} -.openerp .oe_pager_group a { - color: #4c4c4c; - padding: 0 8px; -} -.openerp .oe_pager_group a:hover { - text-decoration: none; -} -.openerp .oe_pager_group .active { - background: #999999; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; -} -.openerp .oe_pager_group .active a { - color: white; - text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); -} -.openerp .oe_list_pager.oe_list_pager_single_page .oe_pager_group { - display: none; -} -.openerp .oe_view_manager_current { - height: 100%; -} -.openerp .oe_view_manager_current > .oe_view_manager_header { - border-bottom: 1px solid #cacaca; - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); -} -.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row td { - padding: 8px; -} -.openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row:first-child td { - padding-top: 8px; -} -.openerp .oe_view_manager_inline, .openerp .oe_view_manager_inlineview { - height: 100%; -} -.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header { - display: none; -} -.openerp .oe_popup_form > .oe_formview > .oe_form_pager { - display: none !important; -} -.openerp .oe_popup_list_pager { - float: right; -} -.openerp .oe_searchview { - cursor: text; - position: relative; - float: right; - padding: 1px 0; - line-height: 18px; - width: 400px; - border: 1px solid #ababab; - background: white; - -moz-border-radius: 13px; - -webkit-border-radius: 13px; - border-radius: 13px; - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; -} -.openerp .oe_searchview input, .openerp .oe_searchview textarea { - padding: 3px; - height: 14px; - font-size: 12px; - line-height: 18px; -} -.openerp .oe_searchview.oe_focused { - border-color: #a6a6fe; - -moz-box-shadow: 0 1px 2px #a6a6fe inset; - -webkit-box-shadow: 0 1px 2px #a6a6fe inset; - box-shadow: 0 1px 2px #a6a6fe inset; -} -.openerp .oe_searchview .oe_searchview_clear { - cursor: pointer; - position: absolute; - top: 0; - right: 18px; - width: 15px; - height: 100%; - background: url(../img/search_reset.gif) center center no-repeat; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer { - position: absolute; - top: 0; - right: 0; - height: 100%; - padding: 0 7px 0 4px; - color: #cccccc; - cursor: pointer; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer:hover { - color: #999999; -} -.openerp .oe_searchview .oe_searchview_unfold_drawer:before { - position: absolute; - top: 10px; - right: 7px; - width: 0; - height: 0; - display: inline-block; - content: ""; - vertical-align: top; - border-top: 5px solid #4c4c4c; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_searchview .oe_searchview_search { - font-size: 1px; - letter-spacing: -1px; - color: transparent; - font-weight: normal; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - position: absolute; - left: 3px; - top: 1px; - padding: 0; - border: none; - background: transparent; -} -.openerp .oe_searchview .oe_searchview_search:before { - font: 21px "mnmliconsRegular"; - content: "r"; - color: #a3a3a3; -} -.openerp .oe_searchview .oe_searchview_facets { - min-height: 22px; - margin-left: 15px; -} -.openerp .oe_searchview .oe_searchview_facets * { - vertical-align: top; - display: inline-block; - line-height: 17px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { - height: 18px; - margin: 1px 0; - font-size: 11px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { - outline: none; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_input { - padding: 0 0 0 6px; - font-size: 12px; - height: 16px; - margin-top: 3px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_input:focus { - outline: none; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { - position: relative; - cursor: pointer; - padding: 0; - -webkit-font-smoothing: auto; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { - border-color: #a6a6fe; - -moz-box-shadow: 0 0 3px 1px #a6a6fe; - -webkit-box-shadow: 0 0 3px 1px #a6a6fe; - box-shadow: 0 0 3px 1px #a6a6fe; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_values { - background: #f0f0fa; - -moz-border-radius: 0 3px 3px 0; - -webkit-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category, .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { - height: 18px; - padding: 0 4px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category { - color: white; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category.oe_i { - font-size: 16px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { - border-left: 1px solid #afafb6; - text-shadow: 0 1px 1px white; - color: #4c4c4c; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value:last-child { - padding-right: 16px; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove { - position: absolute; - top: 3px; - right: 3px; - color: #8786b7; - line-height: 8px; - width: 12px; - height: 12px; - padding-top: 1px; - text-align: center; - font-weight: bold; - cursor: pointer; - text-shadow: 0 1px 1px white; -} -.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove:hover { - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_searchview.oe_searchview_open_drawer .oe_searchview_drawer { - display: block; -} -.openerp .oe_searchview .oe_searchview_drawer { - position: absolute; - z-index: 100; - margin-top: 4px; - top: 100%; - right: -1px; - background-color: white; - min-width: 100%; - display: none; - border: 1px solid #afafb6; - text-align: left; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); -} -.openerp .oe_searchview .oe_searchview_drawer > div { - border-top: 1px solid #cccccc; - margin: 0; - padding: 8px; -} -.openerp .oe_searchview .oe_searchview_drawer > div:first-child { - border-top: none; - margin: 0; -} -.openerp .oe_searchview .oe_searchview_drawer h3 { - margin: 8px 4px 4px 12px; - color: #7c7bad; - font-size: 13px; -} -.openerp .oe_searchview .oe_searchview_drawer h4, .openerp .oe_searchview .oe_searchview_drawer h4 * { - margin: 0; - cursor: pointer; - font-weight: normal; - display: inline-block; -} -.openerp .oe_searchview .oe_searchview_drawer h4:hover, .openerp .oe_searchview .oe_searchview_drawer h4 *:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer h4:before { - content: "▸ "; - color: #a3a3a3; -} -.openerp .oe_searchview .oe_searchview_drawer button { - margin: 4px 0; -} -.openerp .oe_searchview .oe_searchview_drawer .button { - border: none; - background: transparent; - padding: 0 2px; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section { - display: table; - width: 100%; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section > div { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - display: table-cell; - width: 50%; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section ul { - margin: 0 8px 8px; - padding: 0; - list-style: none; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li { - list-style: none; - padding: 2px 4px 2px 20px; - line-height: 14px; - color: inherit; - cursor: pointer; - position: relative; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li.oe_selected:before { - content: "W"; - font-family: "entypoRegular" !important; - font-size: 24px; - font-weight: 300 !important; - color: #a3a3a3; - position: absolute; - left: 4px; - top: -2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer form { - margin-left: 12px; -} -.openerp .oe_searchview .oe_searchview_drawer form p { - margin: 4px 0; - line-height: 18px; -} -.openerp .oe_searchview .oe_searchview_drawer form button { - margin: 0 0 8px 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom { - padding: 0 8px 8px 8px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom form { - display: none; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li { - cursor: pointer; - position: relative; - line-height: 14px; - padding: 2px 4px 2px 20px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li:hover { - background-color: #f0f0fa; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li button { - position: absolute; - top: 0; - right: 5px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_dashboard form { - display: none; - margin-top: 2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced form { - display: none; - margin-top: 8px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced button.oe_add_condition:before { - content: "Z"; - font-family: "entypoRegular" !important; - font-size: 24px; - font-weight: 300 !important; - margin-right: 4px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced ul { - list-style: none; - padding: 0; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li { - cursor: pointer; - position: relative; - list-style: none; - margin: 0; - white-space: nowrap; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li:first-child .searchview_extended_prop_or { - visibility: hidden; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced .searchview_extended_prop_or { - opacity: 0.5; - margin-left: -14px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_opened h4:before { - content: "▾ "; - position: relative; - top: -1px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_opened form { - display: block; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop { - display: inline-block; - width: 12px; - height: 12px; - line-height: 12px; - padding: 1px; - color: #8786b7; - line-height: 8px; - text-align: center; - font-weight: bold; - text-shadow: 0 1px 1px white; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete:hover, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop:hover { - text-decoration: none; - color: white; - background: #8786b7; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete { - display: none; - position: absolute; - bottom: 1px; - right: 4px; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_private:hover .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:hover .oe_searchview_custom_delete { - display: inline-block; -} -.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:after { - content: ","; - font-family: "entypoRegular" !important; - font-size: 22px; - font-weight: 300 !important; - margin: 0 0 0 4px; - padding: 0; -} -.openerp .oe_view_nocontent { - padding: 15px; - margin-top: 0; - color: #777777; - font-size: 125%; - max-width: 700px; -} -.openerp .oe_view_nocontent .oe_view_nocontent_create { - margin-top: 0; - padding-top: 35px; - color: #4c4c4c; -} -.openerp .oe_view_nocontent .oe_view_nocontent_create:before { - content: ""; - display: inline-block; - position: absolute; - width: 70px; - height: 80px; - margin-left: -70px; - margin-top: -50px; - background: transparent url(/web/static/src/img/view_empty_arrow.png) no-repeat 0px 0px; -} -.openerp .oe_view_nocontent > p { - padding-left: 78px; -} -.openerp .oe_view_nocontent .oe_empty_custom_dashboard { - background: transparent url(/web/static/src/img/graph_background.png) no-repeat 0 0; - margin-top: -15px; - padding: 100px 0 0 137px; - min-height: 327px; - margin-left: -15px; -} -.openerp .oe_view.oe_cannot_create .oe_view_nocontent_create { - display: none; -} -.openerp .oe_formview { - background: white; -} -.openerp .oe_form_dropdown_section { - position: relative; - display: inline-block; -} -.openerp .oe_form_invalid input, .openerp .oe_form_invalid select, .openerp .oe_form_invalid textarea { - background-color: #ff6666 !important; - border: 1px solid #dd0000 !important; -} -.openerp .oe_view_manager_current .oe_form_editable .oe_highlight { - color: #404040; - background: none; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight { - background-color: #e3e3e3; - background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); - background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); - background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); - background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); - background-image: -o-linear-gradient(top, #efefef, #d8d8d8); - background-image: linear-gradient(to bottom, #efefef, #d8d8d8); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:active { - background-color: #ececec; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); - background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); - background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:hover { - background-color: #ececec; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); - background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); - background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; -} -.openerp .oe_form_invisible { - display: none !important; -} -.openerp .oe_form_readonly .oe_edit_only, .openerp .oe_form_readonly .oe_form_field:empty { - display: none !important; -} -.openerp .oe_form_readonly .oe_form .oe_form_field_date { - width: auto; -} -.openerp .oe_form_nosheet { - margin: 16px; -} -.openerp .oe_form_nosheet > header { - margin: -16px -16px 0 -16px; - padding: 0; -} -.openerp .oe_form_nosheet.oe_form_nomargin { - margin: 0; -} -.openerp .oe_form_nosheet.oe_form_nomargin > header { - margin: 0; -} -.openerp .oe_form_sheetbg { - padding: 16px 0; -} -.openerp .oe_form_sheet_width { - min-width: 650px; - max-width: 860px; - margin: 0 auto; -} -.openerp .oe_form_sheet { - background: white; - min-height: 330px; - padding: 16px; -} -.openerp .oe_form_sheet .oe_list { - overflow-x: auto; -} -.openerp .oe_application .oe_form_sheetbg { - background: url(/web/static/src/img/form_sheetbg.png); - border-bottom: 1px solid #dddddd; -} -.openerp .oe_application .oe_form_sheet { - border: 1px solid #c8c8d3; - -moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); - -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); -} -.openerp .oe_application .oe_form_sheet .ui-tabs { - margin: 0 -16px; -} -.openerp .oe_application .oe_form_sheet .oe_notebook_page { - padding: 0 16px; -} -.openerp .oe_form header { - position: relative; - border-bottom: 1px solid #cacaca; - padding-left: 2px; - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp .oe_form header > span { - margin-left: 4px; -} -.openerp .oe_form header ul { - display: inline-block; - float: right; -} -.openerp .oe_form header .oe_button { - margin: 3px 2px 1px; -} -.openerp .oe_form header .oe_button:first-child { - margin-left: 6px; -} -.openerp .oe_form header .oe_tags { - margin: 5px 0 0 5px; - width: 400px; - padding-bottom: 0; -} -.openerp .oe_form div.oe_chatter { - box-sizing: border-box; - min-width: 682px; - max-width: 892px; - margin: 0 auto; - padding: 16px 16px 48px; -} -.openerp .oe_form div.oe_form_configuration p, .openerp .oe_form div.oe_form_configuration ul, .openerp .oe_form div.oe_form_configuration ol { - color: #aaaaaa; - max-width: 650px; -} -.openerp .oe_form div.oe_form_configuration label { - min-width: 150px; -} -.openerp .oe_form div.oe_form_configuration .oe_form_group_cell_label { - padding: 1px 0; -} -.openerp .oe_form div.oe_form_configuration .oe_form_group_cell div div { - padding: 1px 0; -} -.openerp .oe_form .oe_subtotal_footer { - width: 1% !important; -} -.openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell { - text-align: right; - padding: 0 !important; -} -.openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell_label { - border-right: none; -} -.openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { - width: 108px; - border-top: 1px solid #cacaca; - margin-top: 4px; - padding-top: 4px; - font-weight: bold; - font-size: 18px; -} -.openerp .oe_form .oe_subtotal_footer label:after { - content: ":"; -} -.openerp .oe_form .oe_subtotal_footer label.oe_subtotal_footer_separator { - font-weight: bold !important; - padding: 2px 11px 2px 0px !important; -} -.openerp .oe_form .oe_subtotal_footer label.oe_form_label_help { - font-weight: normal; -} -.openerp .oe_form .oe_form_button { - margin: 2px; -} -.openerp .oe_form td.oe_form_group_cell_label { - border-right: 1px solid #dddddd; - padding: 2px 0px; -} -.openerp .oe_form td.oe_form_group_cell_label label { - line-height: 18px; - display: block; - min-width: 140px; -} -.openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { - padding: 2px 0 2px 8px; -} -.openerp .oe_form .oe_form_group { - width: 100%; - margin: 9px 0 9px 0; -} -.openerp .oe_form .oe_form_group .oe_form_group_cell.oe_group_right { - padding-left: 20px; -} -.openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { - font-weight: bold; - white-space: nowrap; - padding-right: 8px; -} -.openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { - font-size: 80%; - color: darkGreen; - vertical-align: top; - position: relative; - top: -4px; - padding: 0 2px; -} -.openerp .oe_horizontal_border { - border-bottom: 1px solid black; -} -.openerp .oe_horizontal_separator { - font-weight: bold; - font-size: 20px; - margin: 15px 0px 10px 0px; - color: #7c7bad; -} -.openerp .oe_horizontal_separator:empty { - height: 5px; -} -.openerp .oe_vertical_separator { - border-left: 1px solid #666666; - padding: 0 4px 0 4px; -} -.openerp .oe_form_field_progressbar { - display: inline-block; - min-width: 70px; -} -.openerp .oe_form_field_progressbar.ui-progressbar { - height: 22px; - font-size: 10px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #999999; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - background: white; - min-width: 50px; -} -.openerp .oe_form_field_progressbar.ui-progressbar span { - position: absolute; - margin-left: 10px; - font-weight: bold; -} -.openerp .oe_form_field_progressbar.ui-progressbar .ui-widget-header { - background: #cccccc url(/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; -} -.openerp .oe_form .oe_form_field_text { - width: 100%; -} -.openerp .oe_form .oe_form_field_char input, -.openerp .oe_form .oe_form_field_url input, -.openerp .oe_form .oe_form_field_email input, -.openerp .oe_form .oe_form_field_text textarea, -.openerp .oe_form .oe_form_field_selection select { - width: 100%; -} -.openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { - width: 500px; -} -.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 .oe_form_field { - width: 100%; - display: inline-block; - padding: 2px 2px 2px 0px; - vertical-align: top; -} -.openerp .oe_form .oe_form_field input { - margin: 0px; -} -.openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select { - height: 22px; - padding-top: 2px; -} -.openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select, .openerp .oe_form textarea { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - background: white; - min-width: 60px; - color: #1f1f1f; -} -.openerp .oe_form input[readonly], .openerp .oe_form select[readonly], .openerp .oe_form textarea[readonly], .openerp .oe_form input[disabled], .openerp .oe_form select[disabled] { - background: #e5e5e5 !important; - color: #666666; -} -.openerp .oe_form textarea[disabled] { - border: none; - padding-left: 8px; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - border-radius: 0px; -} -.openerp .oe_form textarea.oe_inline[disabled] { - border-left: 8px solid #eeeeee; -} -.openerp .oe_form .oe_form_field_url button img { - vertical-align: top; -} -.openerp .oe_form .oe_form_field_monetary, -.openerp .oe_form .oe_form_field_date, -.openerp .oe_form .oe_form_field_datetime { - white-space: nowrap; -} -.openerp .oe_form .oe_form_field_boolean { - width: auto; - height: 14px; -} -.openerp .oe_form .oe_form_field_boolean .boolean { - position: relative; - top: -20px; - width: 14px; - height: 14px; - z-index: 10000; - backgroundColor: "#fff"; - opacity: 0; -} -.openerp .oe_form .oe_datepicker_container { - display: none; -} -.openerp .oe_form .oe_datepicker_root { - display: inline-block; -} -.openerp .oe_form .oe_form_required input:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required select:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required textarea:not([disabled]):not([readonly]) { - background-color: #d2d2ff !important; -} -.openerp .oe_form .oe_form_invalid input, .openerp .oe_form .oe_form_invalid select, .openerp .oe_form .oe_form_invalid textarea { - background-color: #ff6666 !important; - border: 1px solid #dd0000 !important; -} -.openerp .oe_form .oe_input_icon { - cursor: pointer; - margin: 3px 0 0 -21px; - vertical-align: top; -} -.openerp .oe_form .oe_input_icon_disabled { - position: absolute; - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50); - right: 5px; - top: 3px; -} -.openerp .oe_form .oe_form_field_with_button.oe_no_button > .oe_button { - display: none; -} -.openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) > .oe_button { - float: right; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - border-bottom-left-radius: 0px; - height: 22px; -} -.openerp .oe_form .oe_form_field_with_button input { - width: 100%; -} -.openerp .oe_form .oe_form_field_with_button > div { - position: relative; - overflow: hidden; -} -.openerp .oe_form .oe_form_embedded_html { - position: relative; - width: 600px; - margin-left: 130px; - margin-top: 32px; - margin-bottom: 32px; - text-align: justify; -} -.openerp .oe_form_editable .oe_form .oe_form_field_integer input { - width: 6em; -} -.openerp .oe_form_editable .oe_form .oe_form_field_float input { - width: 7em; -} -.openerp .oe_form_editable .oe_form .oe_form_field_date input { - width: 7.5em; -} -.openerp .oe_form_editable .oe_form .oe_form_field_datetime input { - width: 11.5em; -} -.openerp .oe_hidden_input_file { - position: relative; -} -.openerp .oe_hidden_input_file input.oe_form_binary_file { - z-index: 0; - line-height: 0; - font-size: 12px; - position: absolute; - top: 1px; - left: 0; - right: 0; - opacity: 0; - filter: alpha(opacity=0); - -ms-filter: "alpha(opacity=0)"; - margin: 0; - padding: 0; -} -.openerp .oe_form .oe_form_field_image { - padding: 0; - position: relative; - display: inline-block; - width: auto; - vertical-align: top; -} -.openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { - position: absolute; - top: 1px; - padding: 4px 0; - width: 100%; - display: none; - text-align: center; - color: #eeeeee; - background: rgba(37, 37, 37, 0.9); - -moz-border-radius: 3px 3px 0 0; - -webkit-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.openerp .oe_form .oe_form_field_image:hover .oe_form_field_image_controls { - display: block; -} -.openerp .oe_fileupload { - display: inline-block; - clear: both; - width: 100%; -} -.openerp .oe_fileupload .oe_add { - float: left; - position: relative; - width: 100%; - left: 2px; - top: 7px; - overflow: hidden; -} -.openerp .oe_fileupload .oe_add button { - display: inline; - height: 24px; - font-size: 12px; - line-height: 12px; - vertical-align: middle; -} -.openerp .oe_fileupload .oe_add button.oe_attach { - width: 24px; - overflow: hidden; - width: 24px; - overflow: hidden; - background: transparent; - color: #7c7bad; - box-shadow: none; - border: none; - text-shadow: none; -} -.openerp .oe_fileupload .oe_add button.oe_attach .oe_e { - position: relative; - top: -1px; - left: -9px; -} -.openerp .oe_fileupload .oe_add input.oe_form_binary_file { - display: inline-block; - margin-left: -85px; - height: 22px; - width: 152px; - margin-top: -24px; - cursor: pointer; -} -.openerp .oe_fileupload .oe_add .oe_attach_label { - color: #7c7bad; - margin-left: -3px; -} -.openerp .oe_fileupload .oe_attachments { - margin-bottom: 4px; - margin-right: 0px; - font-size: 12px; - border-radius: 2px; - border: solid 1px rgba(124, 123, 173, 0.14); -} -.openerp .oe_fileupload .oe_attachments .oe_attachment { - padding: 2px; - padding-left: 4px; - padding-right: 4px; -} -.openerp .oe_fileupload .oe_attachments .oe_attachment .oe_e { - font-size: 23px; - margin-top: -5px; -} -.openerp .oe_fileupload .oe_attachments .oe_attachment .oe_e:hover { - text-decoration: none; -} -.openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(odd) { - background: white; -} -.openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(even) { - background: #f4f5fa; -} -.openerp .oe_form_field_many2one td:first-child { - position: relative; -} -.openerp .oe_form_field_many2one span.oe_m2o_drop_down_button { - position: absolute; - top: 2px; - right: 0px; -} -.openerp .oe_form_field_many2one .oe_m2o_cm_button { - line-height: 14px; - float: right; - padding-left: 2px; -} -.openerp .oe_form_field_many2one input { - padding-right: 13px; -} -.openerp.ui-autocomplete li.oe_m2o_dropdown_option a { - font-style: italic; - padding-left: 2em; -} -.openerp.ui-autocomplete li:not(.oe_m2o_dropdown_option) + li.oe_m2o_dropdown_option { - margin-top: 10px; -} -.openerp ul.oe_form_status, .openerp ul.oe_form_status_clickable { - display: inline-block; - margin: 0; - padding: 0 18px 0 0; -} -.openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li { - display: inline-block; - list-style-type: none; - margin: 0 -18px 0 0; - padding: 0; - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp ul.oe_form_status li:first-child .label, .openerp ul.oe_form_status_clickable li:first-child .label { - border-left: 1px solid #cacaca; - padding-left: 14px; -} -.openerp ul.oe_form_status li:last-child, .openerp ul.oe_form_status_clickable li:last-child { - border-right: 1px solid #cacaca; -} -.openerp ul.oe_form_status li:last-child .label, .openerp ul.oe_form_status_clickable li:last-child .label { - padding-right: 14px; -} -.openerp ul.oe_form_status li:last-child .arrow, .openerp ul.oe_form_status_clickable li:last-child .arrow { - display: none; -} -.openerp ul.oe_form_status li .label, .openerp ul.oe_form_status_clickable li .label { - color: #4c4c4c; - text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede; - padding: 7px; - display: inline-block; - padding-left: 24px; - margin: 0; - position: relative; -} -.openerp ul.oe_form_status li .arrow, .openerp ul.oe_form_status_clickable li .arrow { - width: 17px; - display: inline-block; - vertical-align: top; - overflow: hidden; - margin-left: -5px; -} -.openerp ul.oe_form_status li .arrow span, .openerp ul.oe_form_status_clickable li .arrow span { - position: relative; - width: 24px; - height: 24px; - display: inline-block; - margin-left: -12px; - margin-top: 3px; - box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2); - background-color: #dedede; - background: -moz-linear-gradient(135deg, #dedede, #fcfcfc); - background: -o-linear-gradient(135deg, #fcfcfc, #dedede); - background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede)); - background: -ms-linear-gradient(top, #fcfcfc, #dedede); - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.openerp ul.oe_form_status li.oe_active, .openerp ul.oe_form_status_clickable li.oe_active { - background-color: #5382b9; - background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4)); - background-image: -webkit-linear-gradient(top, #729fcf, #3465a4); - background-image: -moz-linear-gradient(top, #729fcf, #3465a4); - background-image: -ms-linear-gradient(top, #729fcf, #3465a4); - background-image: -o-linear-gradient(top, #729fcf, #3465a4); - background-image: linear-gradient(to bottom, #729fcf, #3465a4); -} -.openerp ul.oe_form_status li.oe_active .arrow span, .openerp ul.oe_form_status_clickable li.oe_active .arrow span { - background-color: #3465a4; - background: -moz-linear-gradient(135deg, #3465a4, #729fcf); - background: -o-linear-gradient(135deg, #729fcf, #3465a4); - background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4)); - background: -ms-linear-gradient(top, #729fcf, #3465a4); -} -.openerp ul.oe_form_status li.oe_active .label, .openerp ul.oe_form_status_clickable li.oe_active .label { - color: white; - text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4; -} -.openerp ul.oe_form_status_clickable li { - cursor: pointer; -} -.openerp ul.oe_form_status_clickable li:hover { - background-color: #d9d9d9; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); - background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); - background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); -} -.openerp ul.oe_form_status_clickable li:hover .label { - text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede; -} -.openerp ul.oe_form_status_clickable li:hover .arrow span { - background-color: #d9d9d9; - background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); - background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); - background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); - background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); -} -.openerp ul.oe_form_status_clickable li .label { - color: #7c7bad; -} -.openerp ul.oe_form_status_clickable li.oe_active:hover { - background-color: #3a699f; - background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d)); - background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d); - background-image: -moz-linear-gradient(top, #4c85c2, #284d7d); - background-image: -ms-linear-gradient(top, #4c85c2, #284d7d); - background-image: -o-linear-gradient(top, #4c85c2, #284d7d); - background-image: linear-gradient(to bottom, #4c85c2, #284d7d); -} -.openerp ul.oe_form_status_clickable li.oe_active:hover .label { - text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4; -} -.openerp ul.oe_form_status_clickable li.oe_active:hover .arrow span { - background-color: #284d7d; - background: -moz-linear-gradient(135deg, #284d7d, #4c85c2); - background: -o-linear-gradient(135deg, #4c85c2, #284d7d); - background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d)); - background: -ms-linear-gradient(top, #4c85c2, #284d7d); -} -.openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { - display: none; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page, .openerp .oe_form_field_many2many > .oe_view_manager .oe_list_pager_single_page { - display: none !important; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_view_list, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_view_list { - min-height: 132px; -} -.openerp .oe_form_field_one2many .oe_form_field_one2many_list_row_add, .openerp .oe_form_field_many2many .oe_form_field_one2many_list_row_add { - font-weight: bold; -} -.openerp .oe_form_field_one2many .oe_list_content > thead, .openerp .oe_form_field_many2many .oe_list_content > thead { - border-bottom: 1px; -} -.openerp .oe_form_field_one2many .oe_list_content > tbody tr:nth-child(odd), .openerp .oe_form_field_many2many .oe_list_content > tbody tr:nth-child(odd) { - background: transparent; -} -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save { - background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat; -} -.openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save:before { - visibility: hidden; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top, .openerp .oe_form_field_many2many > .oe_view_manager .oe_header_row_top { - display: none; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td { - padding: 0px 8px; - line-height: 16px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { - font-size: 13px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { - height: auto; - line-height: 16px; -} -.openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { - height: auto; - line-height: 16px; -} -.openerp .oe_form_field_one2many .oe_list_buttons.oe_editing .oe_list_save, .openerp .oe_form_field_many2many .oe_list_buttons.oe_editing .oe_list_save { - visibility: hidden; -} -.openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_required { - background-color: #d2d2ff; -} -.openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_readonly { - background-color: #eeeeee; -} -.openerp .oe_list_editable .oe_list_content td.oe_list_field_cell { - padding: 4px 6px 3px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) { - color: transparent; - text-shadow: none; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) * { - visibility: hidden; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_drop_down_button { - top: 5px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_cm_button { - line-height: 19px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_input_icon { - margin-top: 5px; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field { - min-width: 0; - max-width: none; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { - height: 27px; - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; - border: 1px solid #aaaaff; - margin: 0; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field select { - min-width: 0; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input { - text-align: right; - width: 100% !important; -} -.openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime input.oe_datepicker_master, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date input.oe_datepicker_master { - width: 100% !important; -} -.openerp .oe_list_group_name { - white-space: nowrap; -} -.openerp .oe_form .oe_form_field_many2many > .oe_list .oe_list_pager_single_page { - display: none; -} -.openerp .oe_list_buttons .oe_alternative { - visibility: hidden; -} -.openerp .oe_list_buttons .oe_list_save, .openerp .oe_list_buttons .oe_list_discard { - display: none; -} -.openerp .oe_list_buttons.oe_editing .oe_list_add { - display: none; -} -.openerp .oe_list_buttons.oe_editing .oe_list_save { - display: inline-block; -} -.openerp .oe_list_buttons.oe_editing .oe_list_discard { - display: inline; -} -.openerp .oe_list_buttons.oe_editing .oe_alternative { - visibility: visible; -} -.openerp .oe_list.oe_cannot_edit .oe_list_header_handle, .openerp .oe_list.oe_cannot_edit .oe_list_field_handle { - display: none !important; - padding: 0 !important; -} -.openerp .oe_list.oe_cannot_delete .oe_list_record_delete { - display: none !important; -} -.openerp .oe_list .oe_form .oe_form_nosheet { - margin: 0; - padding: 0; - border: none; -} -.openerp .oe_list .oe_form .oe_form_field { - width: auto; - position: absolute; - margin: 0 !important; - padding: 0; -} -.openerp .oe_list .oe_form .oe_form_field_boolean { - padding: 1px 6px 3px; -} -.openerp .oe_list .oe_list_content .oe_group_header { - background-color: #ededed; - background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); - background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); - background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); - background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); - background-image: -o-linear-gradient(top, #fcfcfc, #dedede); - background-image: linear-gradient(to bottom, #fcfcfc, #dedede); -} -.openerp .oe_list_content { - width: 100%; -} -.openerp .oe_list_content td:first-child:after, .openerp .oe_list_content th:first-child:after { - border-width: 0; -} -.openerp .oe_list_content td.oe_number { - text-align: right !important; - max-width: 100px; -} -.openerp .oe_list_content td.oe_list_field_date, .openerp .oe_list_content th.oe_list_header_date { - min-width: 6em; -} -.openerp .oe_list_content > thead { - border-bottom: 2px solid #cacaca; - background: #eeeeee; - vertical-align: top; -} -.openerp .oe_list_content td, .openerp .oe_list_content th { - padding: 3px 6px; - line-height: 18px; -} -.openerp .oe_list_content th.oe_sortable, .openerp .oe_list_content th.oe_sortable div { - cursor: pointer; -} -.openerp .oe_list_content th.oe_sortable div { - position: relative; -} -.openerp .oe_list_content th.oe_sortable div:after { - float: right; - margin-right: 6px; - content: ""; - margin-top: 7px; - border-width: 0 4px 4px; - border-style: solid; - border-color: black transparent; - visibility: hidden; -} -.openerp .oe_list_content th.sortup div:after { - visibility: visible; - filter: alpha(opacity=60); - opacity: 0.6; -} -.openerp .oe_list_content .oe_list_header_many2many_tags { - min-width: 70px; -} -.openerp .oe_list_content th.sortdown div:after { - border-bottom: none; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid black; - visibility: visible; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - filter: alpha(opacity=60); - opacity: 0.6; -} -.openerp .oe_list_content > tbody { - cursor: pointer; -} -.openerp .oe_list_content > tbody > tr { - height: 27px; - border-top: 1px solid #dddddd; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { - padding: 3px 6px; - white-space: pre-line; -} -.openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button { - border: none; - background: transparent; - padding: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child { - width: 17px; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child:after { - border-width: 0; -} -.openerp .oe_list_content > tbody > tr > td.oe_list_field_boolean input { - filter: alpha(opacity=50); - opacity: 0.5; -} -.openerp .oe_list_content > tbody > tr:nth-child(odd) { - background-color: #f0f0fa; - background-color: #efeff8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); - background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); - background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); -} -.openerp .oe_list_content > tfoot { - border-top: 2px solid #cacaca; - border-bottom: 1px solid #cacaca; - background: #eeeeee; - font-weight: bold; -} -.openerp .oe_list_content .numeric { - text-align: right; - width: 82px; -} -.openerp .oe_list_content .numeric input { - text-align: right; -} -.openerp .oe_list_content th.oe_list_header_handle { - font-size: 1px; - overflow: hidden; - text-indent: -9001px; -} -.openerp .oe_list_content td.oe_list_field_handle { - width: 1em; - padding: 0 !important; - cursor: ns-resize; -} -.openerp .oe_list_content td.oe_list_field_handle .oe_list_handle { - font-size: 1px; - letter-spacing: -1px; - color: transparent; - font-weight: normal; - margin-right: 7px; -} -.openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before { - font: 18px "entypoRegular"; - content: "}"; - color: #e0e0e0; -} -.openerp .oe_list_content .oe_list_field_progressbar progress { - width: 100%; -} -.openerp .tree_header { - background-color: #f0f0f0; - border-bottom: 1px solid #cacaca; - color: #4c4c4c; - padding: 5px; - height: 25px; -} -.openerp .tree_header button { - float: right; - height: 27px; - margin-right: 5px; -} -.openerp .oe-treeview-table { - width: 100%; - background-color: white; - border-spacing: 0; - color: #4c4c4c; -} -.openerp .oe-treeview-table th { - padding: 10px; - font-weight: bold; - background-color: #f0f0f0; - border-bottom: 2px solid #cacaca; -} -.openerp .oe-treeview-table td { - cursor: pointer; - vertical-align: middle; - text-align: left; - vertical-align: middle; - height: 20px; - padding-left: 4px; - padding-right: 4px; - border-right: 1px solid #e7e7e7; -} -.openerp .oe-treeview-table td.oe_number { - text-align: right !important; -} -.openerp .oe-treeview-table tr { - border-bottom: 1px solid #d6d6d6; -} -.openerp .oe-treeview-table tr:hover { - background-color: #e7e7e7; -} -.openerp .oe-treeview-table span { - font-size: 90%; - font-weight: normal; - white-space: nowrap; - display: block; -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first { - background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; -} -.openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { - background-image: url(/web/static/src/img/collapse.gif); -} -.openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { - margin-left: 16px; -} -.openerp .oe_layout_debugging .oe_form_group { - outline: 2px dashed green; -} -.openerp .oe_layout_debugging .oe_form_group_cell { - outline: 1px solid blue; -} -.openerp .oe_layout_debugging .oe_form_group:hover, .openerp .oe_layout_debugging .oe_form_group_cell:hover { - outline-color: red; -} -.openerp .oe_layout_debugging .oe_form_group_row_incomplete > td:last-child:after { - content: "[Incomplete Row]"; - background: red; - padding: 2px; - font-weight: bold; - color: white; - float: right; -} -.openerp .oe_layout_debugging .oe_form_group_row_incomplete.oe_form_group_row_newline > td:last-child:after { - content: "[newline]"; -} -.openerp .oe_debug_view { - float: left; -} -.openerp .oe_debug_view_log { - font-size: 95%; -} -.openerp .oe_debug_view_log label { - display: block; - width: 49%; - text-align: right; - float: left; - font-weight: bold; - color: #000099; -} -.openerp .oe_debug_view_log span { - display: block; - width: 49%; - float: right; - color: #333333; -} + + */ } + .openerp.openerp_webclient_container { + height: 100%; } + .openerp :-moz-placeholder { + color: #afafb6 !important; + font-style: italic !important; } + .openerp ::-webkit-input-placeholder { + color: #afafb6 !important; + font-style: italic !important; } + .openerp :-ms-input-placeholder { + color: #afafb6 !important; + font-style: italic !important; } + .openerp a { + text-decoration: none; + cursor: pointer !important; } + .openerp table { + padding: 0; + border-collapse: collapse; } + .openerp thead { + font-weight: bold; + background-color: #f0f0f0; } + .openerp thead th { + border-left: 1px solid #dfdfdf; } + .openerp thead th:first-child { + border-left: none; } + .openerp thead th.null { + border-left: none; } + .openerp th, .openerp td { + padding: 0; + text-align: left; } + .openerp th { + font-weight: bold; + vertical-align: middle; } + .openerp td { + vertical-align: top; } + .openerp .zebra tbody tr:nth-child(odd) td { + background-color: #f0f0fa; + background-color: #efeff8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); } + .openerp .zebra tbody tr:hover td { + background-color: #e6e6e6; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eeeeee), to(#dedede)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dedede); + background-image: -moz-linear-gradient(top, #eeeeee, #dedede); + background-image: -ms-linear-gradient(top, #eeeeee, #dedede); + background-image: -o-linear-gradient(top, #eeeeee, #dedede); + background-image: linear-gradient(to bottom, #eeeeee, #dedede); } + .openerp input, .openerp textarea, .openerp select { + padding: 2px 4px; + border: 1px solid #cccccc; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: white; } + .openerp img { + vertical-align: middle; } + .openerp h4 { + margin: 4px 0; } + .openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { + display: inline-block; + border: 1px solid rgba(0, 0, 0, 0.4); + color: #4c4c4c; + margin: 0; + padding: 3px 12px; + font-size: 13px; + text-align: center; + background-color: #e3e3e3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); + background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); + background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); + background-image: -o-linear-gradient(top, #efefef, #d8d8d8); + background-image: linear-gradient(to bottom, #efefef, #d8d8d8); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); + -webkit-font-smoothing: antialiased; + outline: none; } + .openerp a.button:hover, .openerp button:hover, .openerp input[type='submit']:hover, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover { + background-color: #ececec; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + cursor: pointer; + background-position: 0; } + .openerp a.button:focus, .openerp button:focus, .openerp input[type='submit']:focus, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-focus { + border: 1px solid #80bfff; + background-position: 0; + background-color: #ececec; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + -moz-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 0 3px #80bfff, 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp a.button:active, .openerp a.button.active, .openerp button:active, .openerp button.active, .openerp input[type='submit']:active, .openerp input[type='submit'].active, .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-active { + background-color: #ececec; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); + background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp a.button.disabled, .openerp button:disabled, .openerp input[type='submit']:disabled { + background: #efefef !important; + border: 1px solid #d1d1d1 !important; + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + color: #aaaaaa !important; + cursor: default; + text-shadow: 0 1px 1px white !important; } + .openerp .ui-widget-content a { + color: #7c7bad; } + .openerp .oe_bounce_container { + display: inline-block; } + .openerp .text-tag .text-button { + height: auto !important; + min-height: 16px; } + .openerp .ui-tabs { + position: static; } + .openerp.ui-dialog { + display: none; + padding: 6px; + background-color: rgba(60, 60, 60, 0.7); + border: 1px solid; + border-color: #888888 #555555 #444444; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + -webkit-box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + box-shadow: 0 1px 12px rgba(0, 0, 0, 0.6); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } + .openerp.ui-dialog .ui-dialog-content { + padding: 0; } + .openerp.ui-dialog .ui-dialog-titlebar, .openerp.ui-dialog .ui-dialog-content, .openerp.ui-dialog .ui-dialog-buttonpane { + padding: 16px; } + .openerp.ui-dialog .ui-dialog-titlebar { + border-bottom: 1px solid #cacaca; + -moz-border-radius: 2px 2px 0 0; + -webkit-border-radius: 2px 2px 0 0; + border-radius: 2px 2px 0 0; + background-color: #ededed; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp.ui-dialog .ui-dialog-titlebar .ui-dialog-title { + margin: 0; + padding: 0; } + .openerp.ui-dialog .ui-widget-header { + border: none; } + .openerp.ui-dialog .ui-dialog-content { + background: white; } + .openerp.ui-dialog .ui-dialog-buttonpane { + border-top: 1px solid #e0e0e0; + background: #f5f7f9; + margin: 0; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .ui-dialog-buttonpane button { + margin: 0 4px 0 0; } + .openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: left; } + .openerp.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { + margin-right: 4px; } + .openerp.ui-dialog .ui-dialog-titlebar-close { + padding: 0; } + .openerp.ui-dialog .ui-dialog-titlebar-close .ui-icon-closethick { + display: none; } + .openerp.ui-dialog .ui-dialog-titlebar-close:before { + content: "×"; + font-size: 18px; + font-weight: bold; + line-height: 16px; + color: black; + text-shadow: 0 1px 0 white; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; } + .openerp.ui-dialog .ui-dialog-titlebar-close:before:hover { + color: black; + text-decoration: none; } + .openerp.ui-dialog .oe_about { + background-color: white; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .oe_about a { + color: #7c7bad; } + .openerp.ui-dialog .oe_about a:hover { + text-decoration: underline; } + .openerp.ui-dialog .oe_about a:focus { + outline: none; } + .openerp.ui-dialog .oe_about .oe_logo { + margin-left: -6px; } + .openerp.ui-dialog .oe_about .oe_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #8a0e0e; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); + color: #eeeeee; + padding: 0 16px; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp.ui-dialog .oe_about .oe_bottom a { + color: #eeeeee; } + .openerp.ui-dialog.oe_act_window .ui-dialog-content { + padding: 0px; } + .openerp .modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: black; + filter: alpha(opacity=30); + opacity: 0.3; } + .openerp .oe_i { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; } + .openerp .oe_e { + font-family: "entypoRegular" !important; + font-size: 34px; + font-weight: 300 !important; } + .openerp .oe_left { + float: left; + margin-right: 8px; } + .openerp .oe_right { + float: right; + margin-left: 8px; } + .openerp .oe_text_center { + text-align: center; } + .openerp .oe_text_left { + text-align: left; } + .openerp .oe_text_right { + text-align: right; } + .openerp .oe_clear { + clear: both; } + .openerp .oe_wait { + cursor: wait; } + .openerp .oe_fade { + color: #888888; + font-weight: normal; } + .openerp .oe_bold { + font-weight: bold; } + .openerp .oe_inline { + width: auto !important; } + .openerp .oe_highlight { + color: white; + background: #dc5f59; } + .openerp button.oe_highlight { + background-color: #c02c2c; + background-image: -webkit-gradient(linear, left top, left bottom, from(#df3f3f), to(#a21a1a)); + background-image: -webkit-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -moz-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -ms-linear-gradient(top, #df3f3f, #a21a1a); + background-image: -o-linear-gradient(top, #df3f3f, #a21a1a); + background-image: linear-gradient(to bottom, #df3f3f, #a21a1a); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; } + .openerp button.oe_highlight:hover { + background-color: #c63939; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e25858), to(#ab1b1b)); + background-image: -webkit-linear-gradient(top, #e25858, #ab1b1b); + background-image: -moz-linear-gradient(top, #e25858, #ab1b1b); + background-image: -ms-linear-gradient(top, #e25858, #ab1b1b); + background-image: -o-linear-gradient(top, #e25858, #ab1b1b); + background-image: linear-gradient(to bottom, #e25858, #ab1b1b); } + .openerp button.oe_highlight:active { + background-color: #cb2121; + background-image: -webkit-gradient(linear, left top, left bottom, from(#c52020), to(#d22323)); + background-image: -webkit-linear-gradient(top, #c52020, #d22323); + background-image: -moz-linear-gradient(top, #c52020, #d22323); + background-image: -ms-linear-gradient(top, #c52020, #d22323); + background-image: -o-linear-gradient(top, #c52020, #d22323); + background-image: linear-gradient(to bottom, #c52020, #d22323); } + .openerp .oe_background_grey { + background: #eeeeee !important; } + .openerp .oe_form_dirty .oe_highlight_on_dirty { + color: white; + background: #dc5f59; + font-weight: bold; } + .openerp .oe_form_dirty button.oe_highlight_on_dirty { + background-color: #c74a44; + background-image: -webkit-gradient(linear, left top, left bottom, from(#dc5f59), to(#b33630)); + background-image: -webkit-linear-gradient(top, #dc5f59, #b33630); + background-image: -moz-linear-gradient(top, #dc5f59, #b33630); + background-image: -ms-linear-gradient(top, #dc5f59, #b33630); + background-image: -o-linear-gradient(top, #dc5f59, #b33630); + background-image: linear-gradient(to bottom, #dc5f59, #b33630); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_form_dirty button.oe_highlight_on_dirty:hover { + background: #ed6f6a; } + .openerp .oe_title { + width: 50%; + float: left; } + .openerp .oe_title:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; } + .openerp .oe_button_box { + width: 270px; + text-align: right; } + .openerp .oe_button_box button { + margin: 4px; } + .openerp .oe_avatar > img { + max-height: 90px; + max-width: 90px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4); + border: none; + margin-bottom: 10px; } + .openerp .oe_avatar + div { + margin-left: 5px; } + .openerp .oe_image_small > img { + max-width: 50px; + max-height: 50px; } + .openerp .oe_image_medium > img { + max-width: 180px; + max-height: 180px; } + .openerp .oe_button.oe_link { + border: none; + padding: 0; + margin: 0; + background: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_button.oe_link img { + display: inline-block; } + .openerp .oe_button.oe_link span { + border: none; + padding: 0; + margin: 0; + background: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + color: #7c7bad; + font-weight: bold; } + .openerp .oe_button.oe_link span:hover { + text-decoration: underline; } + .openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off { + color: #cccccc; + text-shadow: 0 0 2px black; + vertical-align: top; + position: relative; + top: -5px; } + .openerp .oe_webclient .oe_star_on:hover, .openerp .oe_webclient .oe_star_off:hover { + text-decoration: none; } + .openerp .oe_webclient .oe_star_on { + color: gold; } + .openerp p.oe_grey { + max-width: 650px; } + .openerp .oe_grey { + color: #aaaaaa; } + .openerp .oe_tag { + border: 1px solid #afafb6; + font-size: 11px; + padding: 2px 4px; + margin: 0 2px 2px 0; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: #f0f0fa; + color: #4c4c4c; } + .openerp .oe_tag_dark { + background: #7c7bad; + color: #eeeeee; } + .openerp .oe_form_field_radio.oe_horizontal { + white-space: nowrap; } + .openerp .oe_form_field_radio.oe_horizontal label { + display: inline-block; + text-align: center; + height: 16px; } + .openerp .oe_form_field_radio.oe_vertical label { + margin-left: 4px; } + .openerp .oe_form_field_radio.oe_form_required .oe_radio_input { + border: 2px solid transparent; + display: inline-block; + height: 12px; + width: 12px; + vertical-align: bottom; + border-radius: 10px; + margin: 1px 0; } + .openerp .oe_form_field_radio.oe_form_required.oe_form_invalid .oe_radio_input { + border-color: red; } + .openerp .oe_tags { + margin-bottom: 1px; } + .openerp .oe_tags.oe_inline { + min-width: 250px; } + .openerp .oe_tags .text-wrap { + width: 100% !important; } + .openerp .oe_tags .text-wrap textarea { + width: 100% !important; } + .openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { + font-style: italic; + text-decoration: none; } + .openerp.oe_tooltip { + font-size: 12px; } + .openerp.oe_tooltip .oe_tooltip_string { + color: #ffdd55; + font-weight: bold; + font-size: 13px; } + .openerp.oe_tooltip .oe_tooltip_help { + white-space: pre-wrap; } + .openerp.oe_tooltip .oe_tooltip_technical { + padding: 0 0 4px 0; + margin: 5px 0 0 15px; } + .openerp.oe_tooltip .oe_tooltip_technical li { + list-style: circle; } + .openerp.oe_tooltip .oe_tooltip_technical_title { + font-weight: bold; } + .openerp.oe_tooltip .oe_tooltip_close { + margin: -5px 0 0 2px; + cursor: default; + float: right; + color: white; } + .openerp.oe_tooltip .oe_tooltip_close:hover { + color: #999999; + cursor: pointer; } + .openerp.oe_tooltip .oe_tooltip_message { + max-width: 310px; } + .openerp .oe_notebook { + margin: 8px 0; + padding: 0 16px; + list-style: none; + zoom: 1; } + .openerp .oe_notebook.ui-corner-all { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .openerp .oe_notebook:before, .openerp .oe_notebook:after { + display: table; + content: ""; + zoom: 1; } + .openerp .oe_notebook:after { + clear: both; } + .openerp .oe_notebook > li { + float: left; } + .openerp .oe_notebook > li > a { + display: block; + color: gray; } + .openerp .oe_notebook > li.ui-tabs-active > a { + color: #4c4c4c; } + .openerp .oe_notebook { + border-color: #dddddd; + border-style: solid; + border-width: 0 0 1px; } + .openerp .oe_notebook > li { + position: relative; } + .openerp .oe_notebook > li > a { + padding: 0 12px; + margin-right: 2px; + line-height: 30px; + border: 1px solid transparent; + -moz-border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; } + .openerp .oe_notebook > li > a:hover { + text-decoration: none; + background-color: #eeeeee; + border-color: #eeeeee #eeeeee #dddddd; } + .openerp .oe_notebook > li.ui-state-active > a, .openerp .oe_notebook > li.ui-state-active > a:hover { + background-color: white; + border: 1px solid #dddddd; + border-bottom-color: transparent; + cursor: default; } + .openerp .oe_notebook_page { + padding: 0; } + .openerp div.ui-tabs { + padding: 3px 0px 3px 0px; } + .openerp .ui-tabs-hide { + display: none; } + .openerp .oe_dropdown, .openerp .oe_dropdown_hover, .openerp .oe_dropdown_toggle { + position: relative; + cursor: pointer; } + .openerp .oe_dropdown_toggle { + color: #4c4c4c; + font-weight: normal; } + .openerp .oe_dropdown_hover:hover .oe_dropdown_menu, .openerp .oe_dropdown_menu.oe_opened { + display: block; } + .openerp .oe_dropdown_menu { + display: none; + position: absolute; + top: 26px; + left: 0; + z-index: 3; + margin: 0; + padding: 0; + border: 1px solid #afafb6; + background: white; + padding: 4px 0; + min-width: 140px; + text-align: left; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } + .openerp .oe_dropdown_menu > li { + list-style-type: none; + float: none; + display: block; + position: relative; + margin: 0; + padding: 2px 8px; } + .openerp .oe_dropdown_menu > li:hover { + background-color: #efeff8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_dropdown_menu > li > a { + white-space: nowrap; + display: block; + color: #4c4c4c; + text-decoration: none; + width: 200px; + text-overflow: ellipsis; + overflow: hidden; } + .openerp .oe_dropdown_menu > li > a:hover { + text-decoration: none; } + .openerp .oe_dropdown_arrow:after { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 3px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #404040; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_sidebar { + white-space: nowrap; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment { + height: 20px; + cursor: pointer; + padding-left: 6px; + margin-top: 6px; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment span { + font-weight: bold; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment .oe_hidden_input_file { + width: 200px; } + .openerp .oe_sidebar .oe_dropdown_menu .oe_sidebar_add_attachment:hover { + background-color: #efeff8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item { + position: absolute; + top: 4px; + right: 4px; + display: none; + width: 12px; + height: 12px; + padding: 1px; + color: #8786b7; + line-height: 8px; + text-align: center; + font-weight: bold; + text-shadow: 0 1px 1px white; } + .openerp .oe_sidebar .oe_dropdown_menu li .oe_sidebar_delete_item:hover { + text-decoration: none; + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_sidebar .oe_dropdown_menu li:hover .oe_sidebar_delete_item { + display: inline-block; } + .openerp .oe_loading { + display: none; + z-index: 100; + position: fixed; + top: 0; + right: 50%; + padding: 4px 12px; + background: #a61300; + color: white; + text-align: center; + border: 1px solid #990000; + border-top: none; + -moz-border-radius-bottomright: 8px; + -moz-border-radius-bottomleft: 8px; + border-bottom-right-radius: 8px; + border-bottom-left-radius: 8px; } + .openerp .oe_notification { + z-index: 1050; } + .openerp .oe_webclient_timezone_notification a { + color: white; + text-decoration: underline; } + .openerp .oe_webclient_timezone_notification p { + margin-top: 1em; } + .openerp .oe_webclient_timezone_notification dt { + font-weight: bold; } + .openerp .oe_timezone_systray span { + margin-top: 1px; + background-color: #f6cf3b; } + .openerp .oe_dialog_warning { + width: 100%; } + .openerp .oe_dialog_warning p { + text-align: center; } + .openerp .oe_dialog_icon { + padding: 5px; + width: 32px; } + .openerp .oe_login { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + text-align: center; + font-size: 14px; + height: 100%; } + .openerp .oe_login ul, .openerp .oe_login li { + margin: 0; + list-style-type: none; + padding: 0 0 4px 0; } + .openerp .oe_login button { + cursor: pointer; + padding: 6px 16px; + border: 1px solid #222222; + color: white; + margin: 0; + background-color: #8c1313; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606)); + background-image: -webkit-linear-gradient(top, #b92020, #600606); + background-image: -moz-linear-gradient(top, #b92020, #600606); + background-image: -ms-linear-gradient(top, #b92020, #600606); + background-image: -o-linear-gradient(top, #b92020, #600606); + background-image: linear-gradient(to bottom, #b92020, #600606); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; } + .openerp .oe_login input, .openerp .oe_login select { + width: 252px; + font-family: "Lucida Grande", Helvetica, Verdana, Arial; + border: 1px solid #999999; + background: whitesmoke; + -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .openerp .oe_login input { + margin-bottom: 9px; + padding: 5px 6px; } + .openerp .oe_login select { + padding: 1px; } + .openerp .oe_login .oe_login_dbpane { + position: fixed; + top: 0; + right: 8px; + padding: 5px 10px; + color: #eeeeee; + border: solid 1px #333333; + background: #1e1e1e; + background: rgba(30, 30, 30, 0.94); + -moz-border-radius: 0 0 8px 8px; + -webkit-border-radius: 0 0 8px 8px; + border-radius: 0 0 8px 8px; } + .openerp .oe_login .oe_login_dbpane input { + padding: 2px 4px; + margin: 4px 0; } + .openerp .oe_login .oe_login_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #8a0e0e; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); } + .openerp .oe_login .oe_login_pane { + position: absolute; + top: 50%; + left: 50%; + margin: -160px -166px; + border: solid 1px #333333; + background: #1e1e1e; + background: rgba(30, 30, 30, 0.94); + padding: 22px 32px; + color: #eeeeee; + text-align: left; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); + -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); + box-shadow: 0 0 18px rgba(0, 0, 0, 0.9); } + .openerp .oe_login .oe_login_pane h2 { + margin-top: 0; + font-size: 18px; } + .openerp .oe_login .oe_login_logo { + position: absolute; + top: -70px; + left: 0; + width: 100%; + margin: 0 auto; + text-align: center; } + .openerp .oe_login .oe_login_footer { + position: absolute; + bottom: -40px; + left: 0; + width: 100%; + text-align: center; } + .openerp .oe_login .oe_login_footer a { + color: #eeeeee; + margin: 0 8px; } + .openerp .oe_login .oe_login_footer a:hover { + text-decoration: underline; } + .openerp .oe_login .oe_login_footer span { + font-weight: bold; + font-size: 16px; } + .openerp .oe_login .oe_login_error_message { + display: none; + background-color: #b41616; + color: #eeeeee; + padding: 14px 18px; + margin-top: 15px; + text-align: center; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.8); } + .openerp .oe_login_invalid .oe_login_error_message { + display: inline-block; } + .openerp .oe_database_manager { + background: white; + color: black; + text-align: left; } + .openerp .oe_database_manager .oe_database_manager_menu { + color: black; } + .openerp .oe_webclient { + width: 100%; + height: 100%; + border-spacing: 0px; } + .openerp .oe_content_full_screen .oe_application { + top: 0; + left: 0; } + .openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar { + display: none; } + .openerp .oe_topbar { + width: 100%; + height: 32px; + background-color: #414141; + background-color: #454343; + background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626)); + background-image: -webkit-linear-gradient(top, #646060, #262626); + background-image: -moz-linear-gradient(top, #646060, #262626); + background-image: -ms-linear-gradient(top, #646060, #262626); + background-image: -o-linear-gradient(top, #646060, #262626); + background-image: linear-gradient(to bottom, #646060, #262626); } + .openerp .oe_topbar .oe_topbar_anonymous_login { + background-color: #dc5f59; + color: #eeeeee; + background-color: #be4343; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fc8787), to(maroon)); + background-image: -webkit-linear-gradient(top, #fc8787, maroon); + background-image: -moz-linear-gradient(top, #fc8787, maroon); + background-image: -ms-linear-gradient(top, #fc8787, maroon); + background-image: -o-linear-gradient(top, #fc8787, maroon); + background-image: linear-gradient(to bottom, #fc8787, maroon); } + .openerp .oe_topbar .oe_topbar_anonymous_login a { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + text-decoration: none; + color: white; + background: transparent; + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; } + .openerp .oe_topbar .oe_topbar_anonymous_login a:hover { + background: rgba(0, 0, 0, 0.1); + color: white; + text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; } + .openerp .oe_topbar .oe_topbar_item { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + text-decoration: none; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; } + .openerp .oe_topbar .oe_topbar_item:hover { + background: rgba(0, 0, 0, 0.2); + text-shadow: black 0px 0px 3px; + color: white; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_topbar .oe_topbar_avatar { + width: 24px; + height: 24px; + margin: -2px 2px 0 0; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; } + .openerp .oe_topbar .oe_topbar_avatar { + vertical-align: top; } + .openerp .oe_topbar .oe_dropdown_arrow:after { + border-top: 4px solid white; } + .openerp .oe_topbar .oe_dropdown_menu { + top: 32px; + background: #333333; + background: rgba(37, 37, 37, 0.9); + border-color: #999999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -moz-border-radius: 0 0 6px 6px; + -webkit-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } + .openerp .oe_topbar .oe_dropdown_menu li { + float: none; + padding: 3px 12px; } + .openerp .oe_topbar .oe_dropdown_menu li a { + color: #eeeeee; } + .openerp .oe_topbar .oe_dropdown_menu li:hover { + background-color: #212121; + background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(to bottom, #292929, #191919); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_topbar .oe_topbar_name { + max-width: 150px; + overflow: hidden; + display: inline-block; + max-height: 100%; + text-overflow: ellipsis; + white-space: nowrap; } + .openerp .oe_menu { + float: left; + padding: 0; + margin: 0; + font-size: 13px; } + .openerp .oe_menu > li { + list-style-type: none; + padding: 0; + margin: 0; + float: left; + display: block; + color: #eeeeee; } + .openerp .oe_menu > li > a { + display: block; + padding: 5px 10px 7px; + line-height: 20px; + height: 20px; + text-decoration: none; + color: #eeeeee; + vertical-align: top; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 0.2s ease-out; + -moz-transition: all 0.2s ease-out; + -ms-transition: all 0.2s ease-out; + -o-transition: all 0.2s ease-out; + transition: all 0.2s ease-out; } + .openerp .oe_menu > li > a:hover { + background: rgba(0, 0, 0, 0.2); + text-shadow: black 0px 0px 3px; + color: white; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_menu > li > .oe_active { + background: rgba(0, 0, 0, 0.3); + text-shadow: black 0px 0px 3px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset; } + .openerp .oe_user_menu { + float: right; + padding: 0; + margin: 0; } + .openerp .oe_user_menu li { + list-style-type: none; + float: left; } + .openerp .oe_user_menu .oe_dropdown_menu { + right: -1px; } + .openerp .oe_systray > div { + float: left; + padding: 0 4px 0 4px; } + .openerp .oe_systray { + float: right; } + .openerp .oe_leftbar { + display: none; + width: 220px; + background: #f0eeee; + border-right: 1px solid #afafb6; + text-shadow: 0 1px 1px white; + padding-bottom: 16px; } + .openerp a.oe_logo { + position: relative; + width: 220px; + display: block; + text-align: center; } + .openerp a.oe_logo img { + margin: 14px 0; + border: 0; } + .openerp a.oe_logo .oe_logo_edit { + margin: 14px 0; + position: absolute; + top: 1px; + padding: 4px; + width: 100%; + display: none; + text-align: center; + color: #eeeeee; + background: rgba(37, 37, 37, 0.9); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; } + .openerp a.oe_logo:hover .oe_logo_edit_admin { + display: block; } + .openerp .oe_footer { + position: fixed; + bottom: 0; + padding: 4px 0; + background: #f0eeee; + width: 220px; + text-align: center; } + .openerp .oe_footer a { + font-weight: bold; + color: black; } + .openerp .oe_footer a span { + color: #c81010; } + .openerp .oe_secondary_menu_section { + font-weight: bold; + margin-left: 8px; + color: #7c7bad; } + .openerp .oe_secondary_submenu { + padding: 2px 0 8px 0; + margin: 0; } + .openerp .oe_secondary_submenu li { + position: relative; + margin: 0; + padding: 1px 0 1px 20px !important; + list-style-type: none; } + .openerp .oe_secondary_submenu li a { + display: block; + color: #4c4c4c; + padding: 2px 4px 2px 0; } + .openerp .oe_secondary_submenu li .oe_menu_label { + position: absolute; + top: 1px; + right: 1px; + font-size: 10px; + background: #7c7bad; + color: white; + padding: 2px 4px; + margin: 1px 6px 0 0; + border: 1px solid lightGray; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_menu_text { + white-space: nowrap; + overflow: hidden; + display: inline-block; + text-overflow: ellipsis; + max-width: 85%; } + .openerp .oe_secondary_submenu .oe_menu_counter { + float: right; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + margin: 1px; + padding: 1px 4px; + border: none; } + .openerp .oe_secondary_submenu .oe_menu_counter:hover { + cursor: pointer; + -webkit-transform: scale(1.1); + -moz-transform: scale(1.1); + -ms-transform: scale(1.1); + -o-transform: scale(1.1); + transform: scale(1.1); } + .openerp .oe_secondary_submenu .oe_active { + border-top: 1px solid lightGray; + border-bottom: 1px solid #dedede; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); + background: #7c7bad; } + .openerp .oe_secondary_submenu .oe_active a { + color: white; } + .openerp .oe_secondary_submenu .oe_active .oe_menu_label { + background: #eeeeee; + color: #7c7bad; + text-shadow: 0 1px 1px white; + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_active .oe_menu_counter { + background: #eeeeee; + color: #7c7bad; + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); } + .openerp .oe_secondary_submenu .oe_menu_toggler:before { + width: 0; + height: 0; + display: inline-block; + content: "&darr"; + text-indent: -99999px; + vertical-align: top; + margin-left: -12px; + margin-top: 4px; + margin-right: 4px; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid #4c4c4c; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_secondary_submenu .oe_menu_opened:before { + margin-top: 6px; + margin-left: -16px; + margin-right: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #4c4c4c; } + .openerp .oe_secondary_submenu .oe_secondary_submenu { + margin-left: -20px; } + .openerp .oe_secondary_submenu .oe_secondary_submenu li { + margin-left: 20px; } + .openerp .oe_about { + background-color: white; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAKUlEQVQIHWO8e/fufwYsgAUkJigoiCIF5DMyoYggcUiXgNnBiGQKmAkARpcEQeriln4AAAAASUVORK5CYII=); + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp .oe_about a { + color: #7c7bad; } + .openerp .oe_about a:hover { + text-decoration: underline; } + .openerp .oe_about a:focus { + outline: none; } + .openerp .oe_about .oe_logo { + margin-left: -6px; } + .openerp .oe_about .oe_bottom { + position: absolute; + top: 50%; + left: 0; + right: 0; + bottom: 0; + text-shadow: 0 1px 1px #999999; + background-color: #8a0e0e; + background-image: -webkit-gradient(linear, left top, left bottom, from(#b41616), to(#600606)); + background-image: -webkit-linear-gradient(top, #b41616, #600606); + background-image: -moz-linear-gradient(top, #b41616, #600606); + background-image: -ms-linear-gradient(top, #b41616, #600606); + background-image: -o-linear-gradient(top, #b41616, #600606); + background-image: linear-gradient(to bottom, #b41616, #600606); + color: #eeeeee; + padding: 0 16px; + -moz-border-radius: 0 0 2px 2px; + -webkit-border-radius: 0 0 2px 2px; + border-radius: 0 0 2px 2px; } + .openerp .oe_about .oe_bottom a { + color: #eeeeee; } + .openerp .oe_application { + width: 100%; + height: 100%; } + .openerp .oe_application a { + color: #7c7bad; } + .openerp .oe_application a:hover { + text-decoration: underline; } + .openerp .oe_application > div { + height: 100%; } + .openerp .oe_application .oe_breadcrumb_item:not(:last-child) { + max-width: 7em; + white-space: nowrap; + text-overflow: ellipsis; } + .openerp .oe_application .oe_breadcrumb_title > * { + display: inline-block; + overflow: hidden; } + .openerp .oe_view_manager { + display: table; + height: inherit; + width: 100%; } + .openerp .oe_view_manager .oe_view_manager_body { + display: table-row; + height: inherit; } + .openerp .oe_view_manager .oe_view_manager_view_kanban { + height: inherit; } + .openerp .oe_view_manager table.oe_view_manager_header { + border-collapse: separate; + width: 100%; + table-layout: fixed; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row { + clear: both; + text-shadow: 0 1px 1px white; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:last-child td { + padding-top: 0; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_header_row:first-child td { + padding-top: 8px; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_sidebar { + margin: 0px auto; + text-align: center; } + .openerp .oe_view_manager table.oe_view_manager_header td { + line-height: 26px; } + .openerp .oe_view_manager table.oe_view_manager_header h2 { + font-size: 18px; + margin: 0; + float: left; } + .openerp .oe_view_manager table.oe_view_manager_header h2 a { + color: #7c7bad; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_dropdown_menu { + line-height: normal; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group { + display: inline-block; + border: 1px solid #ababab; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li { + float: left; + border-right: 1px solid #ababab; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group li:last-child { + border: none; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a { + color: #4c4c4c; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group a:hover { + text-decoration: none; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active { + background: #999999; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; } + .openerp .oe_view_manager table.oe_view_manager_header .oe_button_group .active a { + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); } + .openerp .oe_view_manager table.oe_view_manager_header .oe_view_manager_buttons { + white-space: nowrap; } + .openerp .oe_view_manager .oe_view_manager_switch { + padding: 0; + margin: 0 0 0 8px; } + .openerp .oe_view_manager .oe_view_manager_switch li { + margin: 0; + width: 24px; + height: 24px; + line-height: 16px; + padding: 0; + text-align: center; + list-style-type: none; } + .openerp .oe_view_manager .oe_view_manager_switch li a { + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_list:after, .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_tree:after { + padding: 2px; + content: "i"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_form:after { + content: "m"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_graph:after { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; + content: "}"; + top: -2px; + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_gantt:after { + font-family: "mnmliconsRegular" !important; + font-size: 21px; + font-weight: 300 !important; + content: "y"; + top: -2px; + position: relative; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_calendar:after { + content: "P"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_kanban:after { + content: "k"; } + .openerp .oe_view_manager .oe_view_manager_switch .oe_vm_switch_diagram:after { + content: "f"; } + .openerp .oe_list_pager { + line-height: 26px; } + .openerp .oe_pager_value { + float: left; + margin-right: 8px; } + .openerp ul.oe_pager_group { + padding: 0; + margin: 0; } + .openerp .oe_pager_group { + float: left; + height: 24px; + line-height: 24px; + display: inline-block; + border: 1px solid #ababab; + cursor: pointer; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; } + .openerp .oe_pager_group li { + height: 24px; + line-height: 24px; + padding: 0; + margin: 0; + list-style-type: none; + float: left; + border-right: 1px solid #ababab; } + .openerp .oe_pager_group li:last-child { + border: none; } + .openerp .oe_pager_group a { + color: #4c4c4c; + padding: 0 8px; } + .openerp .oe_pager_group a:hover { + text-decoration: none; } + .openerp .oe_pager_group .active { + background: #999999; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) inset; } + .openerp .oe_pager_group .active a { + color: white; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4); } + .openerp .oe_list_pager.oe_list_pager_single_page .oe_pager_group { + display: none; } + .openerp .oe_view_manager_current { + height: 100%; } + .openerp .oe_view_manager_current > .oe_view_manager_header { + border-bottom: 1px solid #cacaca; + background-color: #ededed; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4), 0 0 9px rgba(0, 0, 0, 0.1); } + .openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row td { + padding: 8px; } + .openerp .oe_view_manager_current > .oe_view_manager_header .oe_header_row:first-child td { + padding-top: 8px; } + .openerp .oe_view_manager_inline, .openerp .oe_view_manager_inlineview { + height: 100%; } + .openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header { + display: none; } + .openerp .oe_popup_form > .oe_formview > .oe_form_pager { + display: none !important; } + .openerp .oe_popup_list_pager { + float: right; } + .openerp .oe_searchview { + cursor: text; + position: relative; + float: right; + padding: 1px 0; + line-height: 18px; + width: 400px; + border: 1px solid #ababab; + background: white; + -moz-border-radius: 13px; + -webkit-border-radius: 13px; + border-radius: 13px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; } + .openerp .oe_searchview input, .openerp .oe_searchview textarea { + padding: 3px; + height: 14px; + font-size: 12px; + line-height: 18px; } + .openerp .oe_searchview.oe_focused { + border-color: #a6a6fe; + -moz-box-shadow: 0 1px 2px #a6a6fe inset; + -webkit-box-shadow: 0 1px 2px #a6a6fe inset; + box-shadow: 0 1px 2px #a6a6fe inset; } + .openerp .oe_searchview .oe_searchview_clear { + cursor: pointer; + position: absolute; + top: 0; + right: 18px; + width: 15px; + height: 100%; + background: url(../img/search_reset.gif) center center no-repeat; } + .openerp .oe_searchview .oe_searchview_unfold_drawer { + position: absolute; + top: 0; + right: 0; + height: 100%; + padding: 0 7px 0 4px; + color: #cccccc; + cursor: pointer; } + .openerp .oe_searchview .oe_searchview_unfold_drawer:hover { + color: #999999; } + .openerp .oe_searchview .oe_searchview_unfold_drawer:before { + position: absolute; + top: 10px; + right: 7px; + width: 0; + height: 0; + display: inline-block; + content: ""; + vertical-align: top; + border-top: 5px solid #4c4c4c; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_searchview .oe_searchview_search { + font-size: 1px; + letter-spacing: -1px; + color: transparent; + text-shadow: none; + font-weight: normal; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + position: absolute; + left: 3px; + top: 1px; + padding: 0; + border: none; + background: transparent; } + .openerp .oe_searchview .oe_searchview_search:before { + font: 21px "mnmliconsRegular"; + content: "r"; + color: #a3a3a3; } + .openerp .oe_searchview .oe_searchview_facets { + min-height: 22px; + margin-left: 15px; } + .openerp .oe_searchview .oe_searchview_facets * { + vertical-align: top; + display: inline-block; + line-height: 17px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { + height: 18px; + margin: 1px 0; + font-size: 11px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { + outline: none; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_input { + padding: 0 0 0 6px; + font-size: 12px; + height: 16px; + margin-top: 3px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_input:focus { + outline: none; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { + position: relative; + cursor: pointer; + padding: 0; + -webkit-font-smoothing: auto; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet:focus { + border-color: #a6a6fe; + -moz-box-shadow: 0 0 3px 1px #a6a6fe; + -webkit-box-shadow: 0 0 3px 1px #a6a6fe; + box-shadow: 0 0 3px 1px #a6a6fe; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_values { + background: #f0f0fa; + -moz-border-radius: 0 3px 3px 0; + -webkit-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category, .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { + height: 18px; + padding: 0 4px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category { + color: white; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_category.oe_i { + font-size: 16px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value { + border-left: 1px solid #afafb6; + text-shadow: 0 1px 1px white; + color: #4c4c4c; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_value:last-child { + padding-right: 16px; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove { + position: absolute; + top: 3px; + right: 3px; + color: #8786b7; + line-height: 8px; + width: 12px; + height: 12px; + padding-top: 1px; + text-align: center; + font-weight: bold; + cursor: pointer; + text-shadow: 0 1px 1px white; } + .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet .oe_facet_remove:hover { + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_searchview.oe_searchview_open_drawer .oe_searchview_drawer { + display: block; } + .openerp .oe_searchview .oe_searchview_drawer { + position: absolute; + z-index: 2; + margin-top: 4px; + top: 100%; + right: -1px; + background-color: white; + min-width: 100%; + display: none; + border: 1px solid #afafb6; + text-align: left; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); } + .openerp .oe_searchview .oe_searchview_drawer > div { + border-top: 1px solid #cccccc; + margin: 0; + padding: 8px; } + .openerp .oe_searchview .oe_searchview_drawer > div:first-child { + border-top: none; + margin: 0; } + .openerp .oe_searchview .oe_searchview_drawer h3 { + margin: 8px 4px 4px 12px; + color: #7c7bad; + font-size: 13px; } + .openerp .oe_searchview .oe_searchview_drawer h4, .openerp .oe_searchview .oe_searchview_drawer h4 * { + margin: 0; + cursor: pointer; + font-weight: normal; + display: inline-block; } + .openerp .oe_searchview .oe_searchview_drawer h4:hover, .openerp .oe_searchview .oe_searchview_drawer h4 *:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer h4:before { + content: "▸ "; + color: #a3a3a3; } + .openerp .oe_searchview .oe_searchview_drawer button { + margin: 4px 0; } + .openerp .oe_searchview .oe_searchview_drawer .button { + border: none; + background: transparent; + padding: 0 2px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section { + display: table; + width: 100%; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section > div { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + display: table-cell; + width: 50%; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section ul { + margin: 0 8px 8px; + padding: 0; + list-style: none; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li { + list-style: none; + padding: 2px 4px 2px 20px; + line-height: 14px; + color: inherit; + cursor: pointer; + position: relative; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li.oe_selected:before { + content: "W"; + font-family: "entypoRegular" !important; + font-size: 24px; + font-weight: 300 !important; + color: #a3a3a3; + position: absolute; + left: 4px; + top: -2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section li:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer form { + margin-left: 12px; } + .openerp .oe_searchview .oe_searchview_drawer form p { + margin: 4px 0; + line-height: 18px; } + .openerp .oe_searchview .oe_searchview_drawer form button { + margin: 0 0 8px 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom { + padding: 0 8px 8px 8px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom form { + display: none; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li { + cursor: pointer; + position: relative; + line-height: 14px; + padding: 2px 4px 2px 20px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li:hover { + background-color: #f0f0fa; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom li button { + position: absolute; + top: 0; + right: 5px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_dashboard form { + display: none; + margin-top: 2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced form { + display: none; + margin-top: 8px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced button.oe_add_condition:before { + content: "Z"; + font-family: "entypoRegular" !important; + font-size: 24px; + font-weight: 300 !important; + margin-right: 4px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced ul { + list-style: none; + padding: 0; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li { + cursor: pointer; + position: relative; + list-style: none; + margin: 0; + white-space: nowrap; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li:first-child .searchview_extended_prop_or { + visibility: hidden; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced .searchview_extended_prop_or { + opacity: 0.5; + margin-left: -14px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_opened h4:before { + content: "▾ "; + position: relative; + top: -1px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_opened form { + display: block; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop { + display: inline-block; + width: 12px; + height: 12px; + line-height: 12px; + padding: 1px; + color: #8786b7; + line-height: 8px; + text-align: center; + font-weight: bold; + text-shadow: 0 1px 1px white; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete:hover, .openerp .oe_searchview .oe_searchview_drawer .searchview_extended_delete_prop:hover { + text-decoration: none; + color: white; + background: #8786b7; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4); + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_delete { + display: none; + position: absolute; + bottom: 1px; + right: 4px; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_private:hover .oe_searchview_custom_delete, .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:hover .oe_searchview_custom_delete { + display: inline-block; } + .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom_public:after { + content: ","; + font-family: "entypoRegular" !important; + font-size: 22px; + font-weight: 300 !important; + margin: 0 0 0 4px; + padding: 0; } + .openerp .oe_view_nocontent { + padding: 15px; + margin-top: 0; + color: #777777; + font-size: 125%; + max-width: 700px; } + .openerp .oe_view_nocontent .oe_view_nocontent_create { + margin-top: 0; + padding-top: 35px; + color: #4c4c4c; } + .openerp .oe_view_nocontent .oe_view_nocontent_create:before { + content: ""; + display: inline-block; + position: absolute; + width: 70px; + height: 80px; + margin-left: -70px; + margin-top: -50px; + background: transparent url(/web/static/src/img/view_empty_arrow.png) no-repeat 0px 0px; } + .openerp .oe_view_nocontent > p { + padding-left: 78px; } + .openerp .oe_view_nocontent .oe_empty_custom_dashboard { + background: transparent url(/web/static/src/img/graph_background.png) no-repeat 0 0; + margin-top: -15px; + padding: 100px 0 0 137px; + min-height: 327px; + margin-left: -15px; } + .openerp .oe_view.oe_cannot_create .oe_view_nocontent_create { + display: none; } + .openerp .oe_formview { + background: white; } + .openerp .oe_form_dropdown_section { + position: relative; + display: inline-block; } + .openerp .oe_form_invalid input, .openerp .oe_form_invalid select, .openerp .oe_form_invalid textarea { + background-color: #ff6666 !important; + border: 1px solid #dd0000 !important; } + .openerp .oe_view_manager_current .oe_form_editable .oe_highlight { + color: #404040; + background: none; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight { + background-color: #e3e3e3; + background-image: -webkit-gradient(linear, left top, left bottom, from(#efefef), to(#d8d8d8)); + background-image: -webkit-linear-gradient(top, #efefef, #d8d8d8); + background-image: -moz-linear-gradient(top, #efefef, #d8d8d8); + background-image: -ms-linear-gradient(top, #efefef, #d8d8d8); + background-image: -o-linear-gradient(top, #efefef, #d8d8d8); + background-image: linear-gradient(to bottom, #efefef, #d8d8d8); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:active { + background-color: #ececec; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f6f6f6)); + background-image: -webkit-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -moz-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -ms-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: -o-linear-gradient(top, #e3e3e3, #f6f6f6); + background-image: linear-gradient(to bottom, #e3e3e3, #f6f6f6); + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_view_manager_current .oe_form_editable button.oe_highlight:hover { + background-color: #ececec; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e3e3e3)); + background-image: -webkit-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -moz-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -ms-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: -o-linear-gradient(top, #f6f6f6, #e3e3e3); + background-image: linear-gradient(to bottom, #f6f6f6, #e3e3e3); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; } + .openerp .oe_form_invisible { + display: none !important; } + .openerp .oe_form_editable .oe_read_only { + display: none !important; } + .openerp .oe_form_readonly .oe_edit_only, .openerp .oe_form_readonly .oe_form_field:empty { + display: none !important; } + .openerp .oe_form_readonly .oe_form .oe_form_field_date { + width: auto; } + .openerp .oe_form_nosheet { + margin: 16px; } + .openerp .oe_form_nosheet > header { + margin: -16px -16px 0 -16px; + padding: 0; } + .openerp .oe_form_nosheet.oe_form_nomargin { + margin: 0; } + .openerp .oe_form_nosheet.oe_form_nomargin > header { + margin: 0; } + .openerp .oe_form_sheetbg { + padding: 16px 0; } + .openerp .oe_form_sheet_width { + min-width: 650px; + max-width: 860px; + margin: 0 auto; } + .openerp .oe_form_sheet { + background: white; + min-height: 330px; + padding: 16px; } + .openerp .oe_form_sheet .oe_list { + overflow-x: auto; } + .openerp .oe_application .oe_form_sheetbg { + background: url(/web/static/src/img/form_sheetbg.png); + border-bottom: 1px solid #dddddd; } + .openerp .oe_application .oe_form_sheet { + border: 1px solid #c8c8d3; + -moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + -webkit-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); } + .openerp .oe_application .oe_form_sheet .ui-tabs { + margin: 0 -16px; } + .openerp .oe_application .oe_form_sheet .oe_notebook_page { + padding: 0 16px; } + .openerp .oe_form header { + position: relative; + border-bottom: 1px solid #cacaca; + padding-left: 2px; + background-color: #ededed; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp .oe_form header > span { + margin-left: 4px; } + .openerp .oe_form header ul { + display: inline-block; + float: right; } + .openerp .oe_form header .oe_button { + margin: 3px 2px 1px; } + .openerp .oe_form header .oe_button:first-child { + margin-left: 6px; } + .openerp .oe_form header .oe_tags { + margin: 5px 0 0 5px; + width: 400px; + padding-bottom: 0; } + .openerp .oe_form div.oe_chatter { + box-sizing: border-box; + min-width: 682px; + max-width: 892px; + margin: 0 auto; + padding: 16px 16px 48px; } + .openerp .oe_form div.oe_form_configuration p, .openerp .oe_form div.oe_form_configuration ul, .openerp .oe_form div.oe_form_configuration ol { + color: #aaaaaa; + max-width: 650px; } + .openerp .oe_form div.oe_form_configuration label { + min-width: 150px; } + .openerp .oe_form div.oe_form_configuration .oe_form_group_cell_label { + padding: 1px 0; } + .openerp .oe_form div.oe_form_configuration .oe_form_group_cell div div { + padding: 1px 0; } + .openerp .oe_form .oe_subtotal_footer { + width: 1% !important; } + .openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell { + text-align: right; + padding: 0 !important; } + .openerp .oe_form .oe_subtotal_footer td.oe_form_group_cell_label { + border-right: none; } + .openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { + width: 108px; + border-top: 1px solid #cacaca; + margin-top: 4px; + padding-top: 4px; + font-weight: bold; + font-size: 18px; } + .openerp .oe_form .oe_subtotal_footer label:after { + content: ":"; } + .openerp .oe_form .oe_subtotal_footer label.oe_subtotal_footer_separator { + font-weight: bold !important; + padding: 2px 11px 2px 0px !important; } + .openerp .oe_form .oe_subtotal_footer label.oe_form_label_help { + font-weight: normal; } + .openerp .oe_form .oe_form_box_info { + background: #ffee99; + border-bottom: 1px solid #ccbb66; + padding: 4px; } + .openerp .oe_form .oe_form_box_info > p { + margin: auto; } + .openerp .oe_form .oe_form_box_warning { + background: #bd362f; + border-bottom: 1px solid #990000; + padding: 4px; } + .openerp .oe_form .oe_form_box_warning * { + color: white; + text-shadow: none; } + .openerp .oe_form .oe_form_box_warning > p { + margin: auto; } + .openerp .oe_form .oe_form_button { + margin: 2px; } + .openerp .oe_form td.oe_form_group_cell_label { + border-right: 1px solid #dddddd; + padding: 2px 0px; } + .openerp .oe_form td.oe_form_group_cell_label label { + line-height: 18px; + display: block; + min-width: 140px; } + .openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell { + padding: 2px 0 2px 8px; } + .openerp .oe_form .oe_form_group { + width: 100%; + margin: 9px 0 9px 0; } + .openerp .oe_form .oe_form_group .oe_form_group_cell.oe_group_right { + padding-left: 20px; } + .openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] { + font-weight: bold; + white-space: nowrap; + padding-right: 8px; } + .openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { + font-size: 80%; + color: darkGreen; + vertical-align: top; + position: relative; + top: -4px; + padding: 0 2px; } + .openerp .oe_horizontal_border { + border-bottom: 1px solid black; } + .openerp .oe_horizontal_separator { + font-weight: bold; + font-size: 20px; + margin: 15px 0px 10px 0px; + color: #7c7bad; } + .openerp .oe_horizontal_separator:empty { + height: 5px; } + .openerp .oe_vertical_separator { + border-left: 1px solid #666666; + padding: 0 4px 0 4px; } + .openerp .oe_form_field_progressbar { + display: inline-block; + min-width: 70px; } + .openerp .oe_form_field_progressbar.ui-progressbar { + height: 22px; + font-size: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #999999; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + background: white; + min-width: 50px; } + .openerp .oe_form_field_progressbar.ui-progressbar span { + position: absolute; + margin-left: 10px; + font-weight: bold; } + .openerp .oe_form_field_progressbar.ui-progressbar .ui-widget-header { + background: #cccccc url(/web/static/lib/jquery.ui/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; } + .openerp .oe_form .oe_form_field_text { + width: 100%; } + .openerp .oe_form .oe_form_field_text .oe_form_text_content { + text-overflow: ellipsis; + display: inline-block; + white-space: pre-wrap; + overflow-x: hidden; + width: 100%; } + .openerp .oe_form .oe_form_field_char input, + .openerp .oe_form .oe_form_field_url input, + .openerp .oe_form .oe_form_field_email input, + .openerp .oe_form .oe_form_field_text textarea, + .openerp .oe_form .oe_form_field_selection select { + width: 100%; } + .openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { + width: 500px; } + .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 .oe_form_field { + width: 100%; + display: inline-block; + padding: 2px 2px 2px 0px; + vertical-align: top; } + .openerp .oe_form .oe_form_field input { + margin: 0px; } + .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select { + height: 22px; + padding-top: 2px; } + .openerp .oe_form input[type="text"], .openerp .oe_form input[type="password"], .openerp .oe_form input[type="file"], .openerp .oe_form select, .openerp .oe_form textarea { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + background: white; + min-width: 60px; + color: #1f1f1f; + font-family: "Lucida Grande", Helvetica, Verdana, Arial, sans-serif; } + .openerp .oe_form input[readonly], .openerp .oe_form select[readonly], .openerp .oe_form textarea[readonly], .openerp .oe_form input[disabled], .openerp .oe_form select[disabled] { + background: #e5e5e5 !important; + color: #666666; } + .openerp .oe_form textarea[disabled] { + border: none; + padding-left: 8px; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + border-radius: 0px; + color: #4c4c4c; } + .openerp .oe_form textarea.oe_inline[disabled] { + border-left: 8px solid #eeeeee; } + .openerp .oe_form .oe_form_field_url button img { + vertical-align: top; } + .openerp .oe_form .oe_form_field_monetary, + .openerp .oe_form .oe_form_field_date, + .openerp .oe_form .oe_form_field_datetime { + white-space: nowrap; } + .openerp .oe_form .oe_form_field_boolean { + width: auto; } + .openerp .oe_form .oe_datepicker_container { + display: none; } + .openerp .oe_form .oe_datepicker_root { + display: inline-block; } + .openerp .oe_form .oe_form_required input:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required select:not([disabled]):not([readonly]), .openerp .oe_form .oe_form_required textarea:not([disabled]):not([readonly]) { + background-color: #d2d2ff !important; } + .openerp .oe_form .oe_form_invalid input, .openerp .oe_form .oe_form_invalid select, .openerp .oe_form .oe_form_invalid textarea { + background-color: #ff6666 !important; + border: 1px solid #dd0000 !important; } + .openerp .oe_form .oe_input_icon { + cursor: pointer; + margin: 3px 0 0 -21px; + vertical-align: top; } + .openerp .oe_form .oe_input_icon_disabled { + position: absolute; + cursor: default; + opacity: 0.5; + filter: alpha(opacity=50); + right: 5px; + top: 3px; } + .openerp .oe_form .oe_form_field_with_button.oe_no_button > .oe_button { + display: none; } + .openerp .oe_form .oe_form_field_with_button:not(.oe_no_button) > .oe_button { + float: right; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border-bottom-left-radius: 0px; + height: 22px; } + .openerp .oe_form .oe_form_field_with_button input { + width: 100%; } + .openerp .oe_form .oe_form_field_with_button > div { + position: relative; + overflow: hidden; } + .openerp .oe_form .oe_form_embedded_html { + position: relative; + width: 600px; + margin-left: 130px; + margin-top: 32px; + margin-bottom: 32px; + text-align: justify; } + .openerp .oe_form_editable .oe_form .oe_form_field_integer input { + width: 6em; } + .openerp .oe_form_editable .oe_form .oe_form_field_float input { + width: 7em; } + .openerp .oe_form_editable .oe_form .oe_form_field_date input { + width: 100px; } + .openerp .oe_form_editable .oe_form .oe_form_field_datetime input { + width: 150px; } + .openerp .oe_hidden_input_file { + position: relative; } + .openerp .oe_hidden_input_file input.oe_form_binary_file { + z-index: 0; + line-height: 0; + font-size: 12px; + position: absolute; + top: 1px; + left: 0; + right: 0; + opacity: 0; + filter: alpha(opacity=0); + -ms-filter: "alpha(opacity=0)"; + margin: 0; + padding: 0; } + .openerp .oe_form .oe_form_field_image { + padding: 0; + position: relative; + display: inline-block; + width: auto; + vertical-align: top; } + .openerp .oe_form .oe_form_field_image .oe_form_field_image_controls { + position: absolute; + top: 1px; + padding: 4px 0; + width: 100%; + display: none; + text-align: center; + color: #eeeeee; + background: rgba(37, 37, 37, 0.9); + -moz-border-radius: 3px 3px 0 0; + -webkit-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; } + .openerp .oe_form .oe_form_field_image:hover .oe_form_field_image_controls { + display: block; } + .openerp .oe_fileupload { + display: inline-block; + clear: both; + width: 100%; } + .openerp .oe_fileupload .oe_add { + float: left; + position: relative; + width: 100%; + left: 2px; + top: 7px; + overflow: hidden; } + .openerp .oe_fileupload .oe_add button { + display: inline; + height: 24px; + font-size: 12px; + line-height: 12px; + vertical-align: middle; } + .openerp .oe_fileupload .oe_add button.oe_attach { + width: 24px; + overflow: hidden; + width: 24px; + overflow: hidden; + background: transparent; + color: #7c7bad; + box-shadow: none; + border: none; + text-shadow: none; } + .openerp .oe_fileupload .oe_add button.oe_attach .oe_e { + position: relative; + top: -1px; + left: -9px; } + .openerp .oe_fileupload .oe_add input.oe_form_binary_file { + display: inline-block; + margin-left: -85px; + height: 22px; + width: 152px; + margin-top: -24px; + cursor: pointer; } + .openerp .oe_fileupload .oe_add .oe_attach_label { + color: #7c7bad; + margin-left: -3px; } + .openerp .oe_fileupload .oe_attachments { + margin-bottom: 4px; + margin-right: 0px; + font-size: 12px; + border-radius: 2px; + border: solid 1px rgba(124, 123, 173, 0.14); } + .openerp .oe_fileupload .oe_attachments .oe_attachment { + padding: 2px; + padding-left: 4px; + padding-right: 4px; } + .openerp .oe_fileupload .oe_attachments .oe_attachment .oe_e { + font-size: 23px; + margin-top: -5px; } + .openerp .oe_fileupload .oe_attachments .oe_attachment .oe_e:hover { + text-decoration: none; } + .openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(odd) { + background: white; } + .openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(even) { + background: #f4f5fa; } + .openerp .oe_form_field_many2one td:first-child { + position: relative; } + .openerp .oe_form_field_many2one span.oe_m2o_drop_down_button { + position: absolute; + top: 2px; + right: 0px; } + .openerp .oe_form_field_many2one .oe_m2o_cm_button { + line-height: 14px; + float: right; + padding-left: 2px; } + .openerp .oe_form_field_many2one input { + padding-right: 13px; } + .openerp.ui-autocomplete li.oe_m2o_dropdown_option a { + font-style: italic; + padding-left: 2em; } + .openerp.ui-autocomplete li:not(.oe_m2o_dropdown_option) + li.oe_m2o_dropdown_option { + margin-top: 10px; } + .openerp ul.oe_form_status, .openerp ul.oe_form_status_clickable { + display: inline-block; + margin: 0; + padding: 0 18px 0 0; } + .openerp ul.oe_form_status li, .openerp ul.oe_form_status_clickable li { + display: inline-block; + list-style-type: none; + margin: 0 -18px 0 0; + padding: 0; + background-color: #ededed; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp ul.oe_form_status li:first-child .label, .openerp ul.oe_form_status_clickable li:first-child .label { + border-left: 1px solid #cacaca; + padding-left: 14px; } + .openerp ul.oe_form_status li:last-child, .openerp ul.oe_form_status_clickable li:last-child { + border-right: 1px solid #cacaca; } + .openerp ul.oe_form_status li:last-child .label, .openerp ul.oe_form_status_clickable li:last-child .label { + padding-right: 14px; } + .openerp ul.oe_form_status li:last-child .arrow, .openerp ul.oe_form_status_clickable li:last-child .arrow { + display: none; } + .openerp ul.oe_form_status li .label, .openerp ul.oe_form_status_clickable li .label { + color: #4c4c4c; + text-shadow: 0 1px 1px #fcfcfc, 0 -1px 1px #dedede; + padding: 7px; + display: inline-block; + padding-left: 24px; + margin: 0; + position: relative; } + .openerp ul.oe_form_status li .arrow, .openerp ul.oe_form_status_clickable li .arrow { + width: 17px; + display: inline-block; + vertical-align: top; + overflow: hidden; + margin-left: -5px; } + .openerp ul.oe_form_status li .arrow span, .openerp ul.oe_form_status_clickable li .arrow span { + position: relative; + width: 24px; + height: 24px; + display: inline-block; + margin-left: -12px; + margin-top: 3px; + box-shadow: -1px 1px 2px rgba(255, 255, 255, 0.2), inset -1px 1px 1px rgba(0, 0, 0, 0.2); + background-color: #dedede; + background: -moz-linear-gradient(135deg, #dedede, #fcfcfc); + background: -o-linear-gradient(135deg, #fcfcfc, #dedede); + background: -webkit-gradient(linear, left top, right bottom, from(#fcfcfc), to(#dedede)); + background: -ms-linear-gradient(top, #fcfcfc, #dedede); + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); } + .openerp ul.oe_form_status li.oe_active, .openerp ul.oe_form_status_clickable li.oe_active { + background-color: #5382b9; + background-image: -webkit-gradient(linear, left top, left bottom, from(#729fcf), to(#3465a4)); + background-image: -webkit-linear-gradient(top, #729fcf, #3465a4); + background-image: -moz-linear-gradient(top, #729fcf, #3465a4); + background-image: -ms-linear-gradient(top, #729fcf, #3465a4); + background-image: -o-linear-gradient(top, #729fcf, #3465a4); + background-image: linear-gradient(to bottom, #729fcf, #3465a4); } + .openerp ul.oe_form_status li.oe_active .arrow span, .openerp ul.oe_form_status_clickable li.oe_active .arrow span { + background-color: #3465a4; + background: -moz-linear-gradient(135deg, #3465a4, #729fcf); + background: -o-linear-gradient(135deg, #729fcf, #3465a4); + background: -webkit-gradient(linear, left top, right bottom, from(#729fcf), to(#3465a4)); + background: -ms-linear-gradient(top, #729fcf, #3465a4); } + .openerp ul.oe_form_status li.oe_active .label, .openerp ul.oe_form_status_clickable li.oe_active .label { + color: white; + text-shadow: 0 1px 1px #729fcf, 0 -1px 1px #3465a4; } + .openerp ul.oe_form_status_clickable li { + cursor: pointer; } + .openerp ul.oe_form_status_clickable li:hover { + background-color: #d9d9d9; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); + background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); + background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); } + .openerp ul.oe_form_status_clickable li:hover .label { + text-shadow: 0 -1px 1px #fcfcfc, 0 1px 1px #dedede; } + .openerp ul.oe_form_status_clickable li:hover .arrow span { + background-color: #d9d9d9; + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#cacaca)); + background-image: -webkit-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -moz-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -ms-linear-gradient(top, #e8e8e8, #cacaca); + background-image: -o-linear-gradient(top, #e8e8e8, #cacaca); + background-image: linear-gradient(to bottom, #e8e8e8, #cacaca); } + .openerp ul.oe_form_status_clickable li .label { + color: #7c7bad; } + .openerp ul.oe_form_status_clickable li.oe_active:hover { + background-color: #3a699f; + background-image: -webkit-gradient(linear, left top, left bottom, from(#4c85c2), to(#284d7d)); + background-image: -webkit-linear-gradient(top, #4c85c2, #284d7d); + background-image: -moz-linear-gradient(top, #4c85c2, #284d7d); + background-image: -ms-linear-gradient(top, #4c85c2, #284d7d); + background-image: -o-linear-gradient(top, #4c85c2, #284d7d); + background-image: linear-gradient(to bottom, #4c85c2, #284d7d); } + .openerp ul.oe_form_status_clickable li.oe_active:hover .label { + text-shadow: 0 -1px 1px #729fcf, 0 1px 1px #3465a4; } + .openerp ul.oe_form_status_clickable li.oe_active:hover .arrow span { + background-color: #284d7d; + background: -moz-linear-gradient(135deg, #284d7d, #4c85c2); + background: -o-linear-gradient(135deg, #4c85c2, #284d7d); + background: -webkit-gradient(linear, left top, right bottom, from(#4c85c2), to(#284d7d)); + background: -ms-linear-gradient(top, #4c85c2, #284d7d); } + .openerp .oe_form .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page { + display: none; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_list_pager_single_page, .openerp .oe_form_field_many2many > .oe_view_manager .oe_list_pager_single_page { + display: none !important; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_view_list, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_view_list { + min-height: 132px; } + .openerp .oe_form_field_one2many .oe_form_field_one2many_list_row_add, .openerp .oe_form_field_many2many .oe_form_field_one2many_list_row_add { + font-weight: bold; } + .openerp .oe_form_field_one2many .oe_list_content > thead, .openerp .oe_form_field_many2many .oe_list_content > thead { + border-bottom: 1px; } + .openerp .oe_form_field_one2many .oe_list_content > tbody tr:nth-child(odd), .openerp .oe_form_field_many2many .oe_list_content > tbody tr:nth-child(odd) { + background: transparent; } + .openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save { + background: url(/web/static/src/img/iconset-b-remove.png) 50% 50% no-repeat; } + .openerp .oe_form_field_one2many .oe_list .oe_list_edit_row_save:before, .openerp .oe_form_field_many2many .oe_list .oe_list_edit_row_save:before { + visibility: hidden; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_header_row_top, .openerp .oe_form_field_many2many > .oe_view_manager .oe_header_row_top { + display: none; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td { + padding: 0px 8px; + line-height: 16px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_i, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_i { + font-size: 13px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group { + height: auto; + line-height: 16px; } + .openerp .oe_form_field_one2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li, .openerp .oe_form_field_many2many > .oe_view_manager .oe_view_manager_header2 td .oe_pager_group li { + height: auto; + line-height: 16px; } + .openerp .oe_form_field_one2many .oe_list_buttons.oe_editing .oe_list_save, .openerp .oe_form_field_many2many .oe_list_buttons.oe_editing .oe_list_save { + visibility: hidden; } + .openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_required { + background-color: #d2d2ff; } + .openerp .oe_form_editable .oe_list_editable .oe_list_content td.oe_readonly { + background-color: #eeeeee; } + .openerp .oe_list_editable .oe_list_content td.oe_list_field_cell { + padding: 4px 6px 3px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) { + color: transparent; + text-shadow: none; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_edition .oe_list_field_cell:not(.oe_readonly) * { + visibility: hidden; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_drop_down_button { + top: 5px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_m2o_cm_button { + line-height: 19px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_input_icon { + margin-top: 5px; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field { + min-width: 0; + max-width: none; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea { + height: 27px; + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; + border: 1px solid #aaaaff; + margin: 0; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field textarea, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field select { + min-width: 0; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_float input, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_view_integer input { + text-align: right; + width: 100% !important; } + .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_datetime input.oe_datepicker_master, .openerp .oe_list.oe_list_editable.oe_editing .oe_form_field.oe_form_field_date input.oe_datepicker_master { + width: 100% !important; } + .openerp .oe_list_group_name { + white-space: nowrap; } + .openerp .oe_form .oe_form_field_many2many > .oe_list .oe_list_pager_single_page { + display: none; } + .openerp .oe_list_buttons .oe_alternative { + visibility: hidden; } + .openerp .oe_list_buttons .oe_list_save, .openerp .oe_list_buttons .oe_list_discard { + display: none; } + .openerp .oe_list_buttons.oe_editing .oe_list_add { + display: none; } + .openerp .oe_list_buttons.oe_editing .oe_list_save { + display: inline-block; } + .openerp .oe_list_buttons.oe_editing .oe_list_discard { + display: inline; } + .openerp .oe_list_buttons.oe_editing .oe_alternative { + visibility: visible; } + .openerp .oe_list.oe_cannot_edit .oe_list_header_handle, .openerp .oe_list.oe_cannot_edit .oe_list_field_handle { + display: none !important; + padding: 0 !important; } + .openerp .oe_list.oe_cannot_delete .oe_list_record_delete { + display: none !important; } + .openerp .oe_list .oe_form .oe_form_nosheet { + margin: 0; + padding: 0; + border: none; } + .openerp .oe_list .oe_form .oe_form_field { + width: auto; + position: absolute; + margin: 0 !important; + padding: 0; } + .openerp .oe_list .oe_form .oe_form_field_boolean { + padding: 1px 6px 3px; } + .openerp .oe_list .oe_list_content .oe_group_header { + background-color: #ededed; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcfcfc), to(#dedede)); + background-image: -webkit-linear-gradient(top, #fcfcfc, #dedede); + background-image: -moz-linear-gradient(top, #fcfcfc, #dedede); + background-image: -ms-linear-gradient(top, #fcfcfc, #dedede); + background-image: -o-linear-gradient(top, #fcfcfc, #dedede); + background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } + .openerp .oe_list_content { + width: 100%; } + .openerp .oe_list_content td:first-child:after, .openerp .oe_list_content th:first-child:after { + border-width: 0; } + .openerp .oe_list_content td.oe_number { + text-align: right !important; + max-width: 100px; } + .openerp .oe_list_content td.oe_list_field_date, .openerp .oe_list_content th.oe_list_header_date { + min-width: 6em; } + .openerp .oe_list_content > thead { + border-bottom: 2px solid #cacaca; + background: #eeeeee; + vertical-align: top; } + .openerp .oe_list_content td, .openerp .oe_list_content th { + padding: 3px 6px; + line-height: 18px; } + .openerp .oe_list_content th.oe_sortable, .openerp .oe_list_content th.oe_sortable div { + cursor: pointer; } + .openerp .oe_list_content th.oe_sortable div { + position: relative; } + .openerp .oe_list_content th.oe_sortable div:after { + float: right; + margin-right: 6px; + content: ""; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: black transparent; + visibility: hidden; } + .openerp .oe_list_content th.sortup div:after { + visibility: visible; + filter: alpha(opacity=60); + opacity: 0.6; } + .openerp .oe_list_content .oe_list_header_many2many_tags { + min-width: 70px; } + .openerp .oe_list_content th.sortdown div:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid black; + visibility: visible; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + opacity: 0.6; } + .openerp .oe_list_content > tbody { + cursor: pointer; } + .openerp .oe_list_content > tbody > tr { + height: 27px; + border-top: 1px solid #dddddd; } + .openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { + padding: 3px 6px; + white-space: pre-line; } + .openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button { + border: none; + background: transparent; + padding: 0; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } + .openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child { + width: 17px; } + .openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child:after, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child:after { + border-width: 0; } + .openerp .oe_list_content > tbody > tr > td.oe_list_field_boolean input { + filter: alpha(opacity=50); + opacity: 0.5; } + .openerp .oe_list_content > tbody > tr:nth-child(odd) { + background-color: #f0f0fa; + background-color: #efeff8; + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0f0fa), to(#eeeef6)); + background-image: -webkit-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -moz-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -ms-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: -o-linear-gradient(top, #f0f0fa, #eeeef6); + background-image: linear-gradient(to bottom, #f0f0fa, #eeeef6); } + .openerp .oe_list_content > tfoot { + border-top: 2px solid #cacaca; + border-bottom: 1px solid #cacaca; + background: #eeeeee; + font-weight: bold; } + .openerp .oe_list_content .numeric { + text-align: right; + width: 82px; } + .openerp .oe_list_content .numeric input { + text-align: right; } + .openerp .oe_list_content th.oe_list_header_handle { + font-size: 1px; + overflow: hidden; + text-indent: -9001px; } + .openerp .oe_list_content td.oe_list_field_handle { + width: 1em; + padding: 0 !important; + cursor: ns-resize; } + .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle { + font-size: 1px; + letter-spacing: -1px; + color: transparent; + text-shadow: none; + font-weight: normal; + margin-right: 7px; } + .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before { + font: 18px "entypoRegular"; + content: "}"; + color: #e0e0e0; } + .openerp .oe_list_content .oe_list_field_progressbar progress { + width: 100%; } + .openerp .tree_header { + background-color: #f0f0f0; + border-bottom: 1px solid #cacaca; + color: #4c4c4c; + padding: 5px; + height: 25px; } + .openerp .tree_header button { + float: right; + height: 27px; + margin-right: 5px; } + .openerp .oe-treeview-table { + width: 100%; + background-color: white; + border-spacing: 0; + color: #4c4c4c; } + .openerp .oe-treeview-table th { + padding: 10px; + font-weight: bold; + background-color: #f0f0f0; + border-bottom: 2px solid #cacaca; } + .openerp .oe-treeview-table td { + cursor: pointer; + vertical-align: middle; + text-align: left; + vertical-align: middle; + height: 20px; + padding-left: 4px; + padding-right: 4px; + border-right: 1px solid #e7e7e7; } + .openerp .oe-treeview-table td.oe_number { + text-align: right !important; } + .openerp .oe-treeview-table tr { + border-bottom: 1px solid #d6d6d6; } + .openerp .oe-treeview-table tr:hover { + background-color: #e7e7e7; } + .openerp .oe-treeview-table span { + font-size: 90%; + font-weight: normal; + white-space: nowrap; + display: block; } + .openerp .oe-treeview-table .treeview-tr.oe-treeview-first { + background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat; } + .openerp .oe-treeview-table .oe_open .treeview-tr.oe-treeview-first { + background-image: url(/web/static/src/img/collapse.gif); } + .openerp .oe-treeview-table .treeview-tr.oe-treeview-first span, .openerp .oe-treeview-table .treeview-td.oe-treeview-first span { + margin-left: 16px; } + .openerp .oe_layout_debugging .oe_form_group { + outline: 2px dashed green; } + .openerp .oe_layout_debugging .oe_form_group_cell { + outline: 1px solid blue; } + .openerp .oe_layout_debugging .oe_form_group:hover, .openerp .oe_layout_debugging .oe_form_group_cell:hover { + outline-color: red; } + .openerp .oe_layout_debugging .oe_form_group_row_incomplete > td:last-child:after { + content: "[Incomplete Row]"; + background: red; + padding: 2px; + font-weight: bold; + color: white; + float: right; } + .openerp .oe_layout_debugging .oe_form_group_row_incomplete.oe_form_group_row_newline > td:last-child:after { + content: "[newline]"; } + .openerp .oe_debug_view { + float: left; } + .openerp .oe_debug_view_log { + font-size: 95%; } + .openerp .oe_debug_view_log label { + display: block; + width: 49%; + text-align: right; + float: left; + font-weight: bold; + color: #000099; } + .openerp .oe_debug_view_log span { + display: block; + width: 49%; + float: right; + color: #333333; } @-moz-document url-prefix() { .openerp .oe_view_manager .oe_view_manager_switch li { - line-height: 21px; - } + line-height: 21px; } .openerp .oe_searchview .oe_searchview_search { - top: -1px; - } + top: -1px; } .openerp .oe_form_field_many2one .oe_m2o_cm_button { - line-height: 18px; - } + line-height: 18px; } .openerp .oe_secondary_submenu { - line-height: 14px; - } + line-height: 14px; } .openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off { - top: 0px; - } -} + top: 0px; } } .kitten-mode-activated { background-size: cover; - background-attachment: fixed; -} -.kitten-mode-activated > * { - opacity: 0.7; -} + background-attachment: fixed; } + .kitten-mode-activated > * { + opacity: 0.7; } + +.loading-kitten { + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + border-radius: 15px; + -moz-box-shadow: 0 0 5px 5px #999999; + -webkit-box-shadow: 0 0 5px 5px #999999; + box-shadow: 0 0 5px 5px #999999; } div.ui-widget-overlay { background: black; filter: alpha(opacity=30); - opacity: 0.3; -} + opacity: 0.3; } .ui-widget { font-family: "Lucida Grande", Helvetica, Verdana, Arial, sans-serif; color: #4c4c4c; - font-size: 13px; -} + font-size: 13px; } .ui-menu { padding: 2px 0; @@ -3148,201 +2618,154 @@ div.ui-widget-overlay { -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); margin-top: 4px; - border: 1px solid #afafb6; -} -.ui-menu .ui-menu-item { - width: 100%; - padding: 0; -} -.ui-menu .ui-menu-item a { - padding: 1px 16px; -} -.ui-menu .ui-menu-item a.ui-corner-all { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -.ui-menu .ui-menu-item a.ui-state-active { - background: #f0f0fa; -} -.ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { - background: #7c7bad; -} + border: 1px solid #afafb6; } + .ui-menu .ui-menu-item { + width: 100%; + padding: 0; } + .ui-menu .ui-menu-item a { + padding: 1px 16px; } + .ui-menu .ui-menu-item a.ui-corner-all { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; } + .ui-menu .ui-menu-item a.ui-state-active { + background: #f0f0fa; } + .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { + background: #7c7bad; } .ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; - border-radius: 3px; -} + border-radius: 3px; } +.openerp .db_option_table td { + padding-bottom: 10px !important; } + +.openerp_ie .placeholder { + color: #afafb6 !important; + font-style: italic !important; } +.openerp_ie .oe_form_binary_file { + width: 80px; } .openerp_ie .oe_form_field_boolean input { - background: white; -} + background: white; } .openerp_ie .db_option_table .oe_form_field_selection { - width: auto; -} + width: auto; } .openerp_ie input[type='checkbox'] { border: none; background: none; - box-shadow: none; -} + box-shadow: none; } .openerp_ie .oe_logo img { - border: none; -} + border: none; } .openerp_ie .oe_header_row button.oe_highlight { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } +.openerp_ie .oe_view_manager_view_kanban { + display: table-cell; } .openerp_ie .oe_view_manager_buttons button.oe_write_full { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie .oe_view_manager_buttons button.oe_highlight { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie .oe_view_manager_buttons button .oe_form_button_edit { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie .oe_view_manager_buttons button .oe_form_button_create { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie .oe_kanban_image { - border: none; -} + border: none; } .openerp_ie .oe_msg_icon { - border: none; -} + border: none; } .openerp_ie .oe_form header ul { - height: 29px; -} + height: 29px; } .openerp_ie .oe_attach { - filter: none; -} + filter: none; } .openerp_ie .oe_link { - filter: none; -} + filter: none; } .openerp_ie .oe_kanban_show_more { clear: both; - text-align: center; -} + text-align: center; } .openerp_ie.oe_kanban_grouped .oe_kanban_show_more .oe_button { width: 100%; - padding: 3px 12px; -} + padding: 3px 12px; } .openerp_ie .oe_form_buttons button { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie .oe_sidebar button { padding-top: 0; - padding-bottom: 0; -} + padding-bottom: 0; } .openerp_ie img { - border: none; -} + border: none; } .openerp_ie .oe_dropdown_arrow { - line-height: 1.7em; -} + line-height: 1.7em; } .openerp_ie .oe_form_buttons button, .openerp_ie .oe_view_manager_buttons button { - line-height: 1.7em; -} + line-height: 1.7em; } .openerp_ie .oe_form_buttons .oe_highlight, .openerp_ie .oe_view_manager_buttons .oe_highlight { - line-height: 1.7em; -} + line-height: 1.7em; } .openerp_ie .oe_topbar { - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#646060', endColorstr='#262626'); -} + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#646060', endColorstr='#262626'); } .openerp_ie .ui-state-error, .openerp_ie .ui-widget-content .ui-state-error, .openerp_ie .ui-widget-header .ui-state-error { - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } .openerp_ie .oe_popup_form { - width: 99% !important; -} + width: 99% !important; } .openerp_ie .oe_form_label { - white-space: normal !important; -} + white-space: normal !important; } .openerp_ie ul.oe_form_status li, .openerp_ie ul.oe_form_status_clickable li { display: inline-block; - clear: both; -} -.openerp_ie ul.oe_form_status li:last-child, .openerp_ie ul.oe_form_status_clickable li:last-child { - overflow: hidden; - border-right: 1px solid #cacaca; -} -.openerp_ie ul.oe_form_status li:last-child .label, .openerp_ie ul.oe_form_status_clickable li:last-child .label { - padding-right: 14px; - border-right: none; -} -.openerp_ie ul.oe_form_status li:last-child .arrow, .openerp_ie ul.oe_form_status_clickable li:last-child .arrow { - display: inline-block; - opacity: 0; - filter: alpha(opacity=0); - border: none; - width: 0; - border-right: none; -} + clear: both; } + .openerp_ie ul.oe_form_status li:last-child, .openerp_ie ul.oe_form_status_clickable li:last-child { + overflow: hidden; + border-right: 1px solid #cacaca; } + .openerp_ie ul.oe_form_status li:last-child .label, .openerp_ie ul.oe_form_status_clickable li:last-child .label { + padding-right: 14px; + border-right: none; } + .openerp_ie ul.oe_form_status li:last-child .arrow, .openerp_ie ul.oe_form_status_clickable li:last-child .arrow { + display: inline-block; + opacity: 0; + filter: alpha(opacity=0); + border: none; + width: 0; + border-right: none; } .openerp_ie ul.oe_form_status .label, .openerp_ie ul.oe_form_status_clickable .label { border-bottom: 1px solid #cacaca; - background: transparent; -} + background: transparent; } .openerp_ie ul.oe_form_status .arrow span, .openerp_ie ul.oe_form_status_clickable .arrow span { - background-color: #fefefe !important; -} + background-color: #fefefe !important; } .openerp_ie ul.oe_form_status li.oe_active .label, .openerp_ie ul.oe_form_status_clickable li.oe_active .label { - border-bottom: 1px solid #729fcf; -} + border-bottom: 1px solid #729fcf; } .openerp_ie ul.oe_form_status li.oe_active .arrow span, .openerp_ie ul.oe_form_status_clickable li.oe_active .arrow span { - background-color: #729fcf !important; -} + background-color: #729fcf !important; } .openerp_ie .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button { - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFEF', endColorstr='#D8D8D8'); -} + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#EFEFEF', endColorstr='#D8D8D8'); } @media print { .openerp { - text-shadow: none; - } - .openerp .oe_header_row, .openerp ul.oe_header, .openerp div.oe_mail_thread_action, .openerp .oe_mail_recthread_actions, .openerp .oe_button_box, .openerp .oe_form button, .openerp button.oe_invite, .openerp .oe_form header, .openerp .openerp .oe_notebook > li.ui-state-default, .openerp .oe_topbar, .openerp .oe_leftbar, .openerp .oe_loading { - display: none !important; - } - .openerp .oe_list_content button, .openerp .oe_list_content input[type=checkbox] { - visibility: hidden; - } - .openerp .tree_header button, .openerp .oe_mail .oe_mail_thread_msg .oe_mail_unread, .openerp .oe_mail_fetch_more, .openerp .oe_m2o_drop_down_button img, .openerp .oe_form_field_one2many_list_row_add { - visibility: hidden; - } - .openerp a.oe_m2o_cm_button, .openerp a.oe_e { - visibility: hidden; - } - .openerp .oe_form .oe_form_field_date img, .openerp .oe_form .oe_form_field_datetime img { - visibility: hidden; - } - .openerp .oe_notebook > li.ui-tabs-selected { - display: block; - } - .openerp .oe_application .oe_form_sheet, .openerp .oe_application .oe_form_sheetbg { - border: 0px !important; - box-shadow: 0px 0px 0px; - } - .openerp .oe_application .oe_form_sheet .oe_list, .openerp .oe_application .oe_form_sheetbg .oe_list { - overflow-x: visible; - } - .openerp .oe_view_manager_current > .oe_view_manager_header { - border: 0px !important; - box-shadow: 0px 0px 0px; - } - .openerp .text-core .text-wrap .text-arrow { - background: none; - } - .openerp .openerp div.oe_mail_wall { - overflow: hidden !important; - } -} - + text-shadow: none; } + .openerp .oe_header_row, .openerp ul.oe_header, .openerp div.oe_mail_thread_action, .openerp .oe_mail_recthread_actions, .openerp .oe_button_box, .openerp .oe_form button, .openerp button.oe_invite, .openerp .oe_form header, .openerp .openerp .oe_notebook > li.ui-state-default, .openerp .oe_topbar, .openerp .oe_leftbar, .openerp .oe_loading { + display: none !important; } + .openerp .oe_list_content button, .openerp .oe_list_content input[type=checkbox] { + visibility: hidden; } + .openerp .tree_header button, .openerp .oe_mail .oe_mail_thread_msg .oe_mail_unread, .openerp .oe_mail_fetch_more, .openerp .oe_m2o_drop_down_button img, .openerp .oe_form_field_one2many_list_row_add { + visibility: hidden; } + .openerp a.oe_m2o_cm_button, .openerp a.oe_e { + visibility: hidden; } + .openerp .oe_form .oe_form_field_date img, .openerp .oe_form .oe_form_field_datetime img { + visibility: hidden; } + .openerp .oe_notebook > li.ui-tabs-selected { + display: block; } + .openerp .oe_application .oe_form_sheet, .openerp .oe_application .oe_form_sheetbg { + border: 0px !important; + box-shadow: 0px 0px 0px; } + .openerp .oe_application .oe_form_sheet .oe_list, .openerp .oe_application .oe_form_sheetbg .oe_list { + overflow-x: visible; } + .openerp .oe_view_manager_current > .oe_view_manager_header { + border: 0px !important; + box-shadow: 0px 0px 0px; } + .openerp .text-core .text-wrap .text-arrow { + background: none; } + .openerp .openerp div.oe_mail_wall { + overflow: hidden !important; } } .blockUI.blockOverlay { background-color: black; - opacity: 0.6; -} + opacity: 0.6; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index db25cff9b3e..b4e70e6bdc9 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -123,6 +123,7 @@ $sheet-padding: 16px font-size: 1px letter-spacing: -1px color: transparent + text-shadow: none font-weight: normal &:before font: 21px "mnmliconsRegular" @@ -133,6 +134,7 @@ $sheet-padding: 16px font-size: 1px letter-spacing: -1px color: transparent + text-shadow: none font-weight: normal &:before font: $size "entypoRegular" @@ -370,6 +372,10 @@ $sheet-padding: 16px .oe_right float: right margin-left: 8px + .oe_text_center + text-align: center + .oe_text_left + text-align: left .oe_text_right text-align: right .oe_clear @@ -476,7 +482,28 @@ $sheet-padding: 16px .oe_tag_dark background: $tag-bg-dark color: #eee - + .oe_form_field_radio + &.oe_horizontal + white-space: nowrap + label + display: inline-block + text-align: center + height: 16px + &.oe_vertical + label + margin-left: 4px + &.oe_form_required + .oe_radio_input + border: 2px solid transparent + display: inline-block + height: 12px + width: 12px + vertical-align: bottom + border-radius: 10px + margin: 1px 0 + &.oe_form_invalid + .oe_radio_input + border-color: red .oe_tags &.oe_inline min-width: 250px @@ -1436,7 +1463,7 @@ $sheet-padding: 16px .oe_searchview_drawer position: absolute - z-index: 100 + z-index: 2 // detach drawer from field slightly margin-top: 4px top: 100% @@ -1660,6 +1687,9 @@ $sheet-padding: 16px @include box-shadow((0 1px 2px rgba(0, 0, 0, .1), 0 1px 1px rgba(255, 255, 255, .8) inset)) .oe_form_invisible display: none !important + .oe_form_editable + .oe_read_only + display: none !important .oe_form_readonly .oe_edit_only, .oe_form_field:empty display: none !important @@ -1760,7 +1790,21 @@ $sheet-padding: 16px padding: 2px 11px 2px 0px !important label.oe_form_label_help font-weight: normal - + .oe_form_box_info + background: #fe9 + border-bottom: 1px solid #cb6 + padding: 4px + > p + margin: auto + .oe_form_box_warning + background: #bd362f + border-bottom: 1px solid #900 + padding: 4px + * + color: white + text-shadow: none + > p + margin: auto // }}} // FormView.group {{{ .oe_form @@ -1832,6 +1876,12 @@ $sheet-padding: 16px .oe_form .oe_form_field_text width: 100% + .oe_form_text_content + text-overflow: ellipsis + display: inline-block + white-space: pre-wrap + overflow-x: hidden + width: 100% .oe_form_field_char input, .oe_form_field_url input, .oe_form_field_email input, @@ -1860,6 +1910,7 @@ $sheet-padding: 16px background: white min-width: 60px color: #1f1f1f + font-family: "Lucida Grande", Helvetica, Verdana, Arial, sans-serif input[readonly], select[readonly], textarea[readonly], input[disabled], select[disabled] background: #E5E5E5 !important color: #666 @@ -1868,6 +1919,7 @@ $sheet-padding: 16px padding-left: 8px @include box-shadow(none) @include radius(0px) + color: #4c4c4c textarea.oe_inline[disabled] border-left: 8px solid #eee .oe_form_field_url button img @@ -1939,9 +1991,9 @@ $sheet-padding: 16px .oe_form_field_float input width: 7em .oe_form_field_date input - width: 7.5em + width: 100px .oe_form_field_datetime input - width: 11.5em + width: 150px // }}} // FormView.fields_binary {{{ /* http://www.quirksmode.org/dom/inputfile.html @@ -2468,6 +2520,9 @@ $sheet-padding: 16px background-attachment: fixed >* opacity: 0.70 +.loading-kitten + @include radius(15px) + @include box-shadow(0 0 5px 5px #999) // }}} // jQueryUI top level {{{ @@ -2505,8 +2560,18 @@ div.ui-widget-overlay @include radius(3px) // }}} +.openerp + .db_option_table + td + padding-bottom: 10px !important + // Internet Explorer 9+ specifics {{{ .openerp_ie + .placeholder + color: $tag-border !important + font-style: italic !important + .oe_form_binary_file + width: 80px .oe_form_field_boolean input background: #fff .db_option_table .oe_form_field_selection @@ -2522,6 +2587,8 @@ div.ui-widget-overlay button.oe_highlight padding-top: 0 padding-bottom: 0 + .oe_view_manager_view_kanban + display: table-cell .oe_view_manager_buttons button.oe_write_full padding-top: 0 diff --git a/addons/web/static/src/fixbind.js b/addons/web/static/src/fixbind.js new file mode 100644 index 00000000000..4a441ce0b9e --- /dev/null +++ b/addons/web/static/src/fixbind.js @@ -0,0 +1,28 @@ +// Fix old versions of Webkit (such as ones used on iOS < 6 or PhantomJS <= 1.7) +// which does not have Function.prototype.bind function + +// Use moz polyfill: +// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; +} diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js index eaa4bcbfe1c..4a89eee8984 100644 --- a/addons/web/static/src/js/chrome.js +++ b/addons/web/static/src/js/chrome.js @@ -251,9 +251,9 @@ instance.web.CrashManager = instance.web.Class.extend({ if (handler) { new (handler)(this, error).display(); return; - }; + } if (error.data.name === "openerp.addons.web.session SessionExpiredException") { - this.show_warning({type: "Session Expired", data: { message: "Your OpenERP session expired. Please refresh the current web page." }}); + this.show_warning({type: "Session Expired", data: { message: _t("Your OpenERP session expired. Please refresh the current web page.") }}); return; } if (error.data.exception_type === "except_osv" || error.data.exception_type === "warning" @@ -530,7 +530,11 @@ instance.web.DatabaseManager = instance.web.Widget.extend({ 'login': 'admin', 'password': form_obj['create_admin_pwd'], 'login_successful': function() { - self.do_action("reload"); + var url = '/?db=' + form_obj['db_name']; + if (self.session.debug) { + url += '&debug'; + } + instance.web.redirect(url); }, }, _push_me: false, @@ -641,6 +645,11 @@ instance.web.client_actions.add("database_manager", "instance.web.DatabaseManage instance.web.Login = instance.web.Widget.extend({ template: "Login", remember_credentials: true, + events: { + 'change input[name=db],select[name=db]': function(ev) { + this.set('database_selector', $(ev.currentTarget).val()); + }, + }, init: function(parent, action) { this._super(parent); @@ -652,18 +661,18 @@ instance.web.Login = instance.web.Widget.extend({ if (_.isEmpty(this.params)) { this.params = $.bbq.getState(true); } + if (action && action.params && action.params.db) { + this.params.db = action.params.db; + } else if ($.deparam.querystring().db) { + this.params.db = $.deparam.querystring().db; + } + if (this.params.db) { + this.selected_db = this.params.db; + } if (this.params.login_successful) { this.on('login_successful', this, this.params.login_successful); } - - if (this.has_local_storage && this.remember_credentials) { - this.selected_db = localStorage.getItem('last_db_login_success'); - this.selected_login = localStorage.getItem('last_login_login_success'); - if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) { - this.selected_password = localStorage.getItem('last_password_login_success'); - } - } }, start: function() { var self = this; @@ -671,10 +680,10 @@ instance.web.Login = instance.web.Widget.extend({ self.$el.find('.oe_login_manage_db').click(function() { self.do_action("database_manager"); }); + self.on('change:database_selector', this, function() { + this.database_selected(this.get('database_selector')); + }); var d = $.when(); - if ($.deparam.querystring().db) { - self.params.db = $.deparam.querystring().db; - } if ($.param.fragment().token) { self.params.token = $.param.fragment().token; } @@ -682,16 +691,44 @@ instance.web.Login = instance.web.Widget.extend({ if (self.params.db && self.params.login && self.params.password) { d = self.do_login(self.params.db, self.params.login, self.params.password); } else { - if (self.params.db) { - self.on_db_loaded([self.params.db]) - } else { - d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed); - } + d = self.rpc("/web/database/get_list", {}) + .done(self.on_db_loaded) + .fail(self.on_db_failed) + .always(function() { + if (self.selected_db && self.has_local_storage && self.remember_credentials) { + self.$("[name=login]").val(localStorage.getItem(self.selected_db + '|last_login') || ''); + if (self.session.debug) { + self.$("[name=password]").val(localStorage.getItem(self.selected_db + '|last_password') || ''); + } + } + }); } return d; }, + remember_last_used_database: function(db) { + // This cookie will be used server side in order to avoid db reloading on first visit + var ttl = 24 * 60 * 60 * 365; + document.cookie = [ + 'last_used_database=' + db, + 'path=/', + 'max-age=' + ttl, + 'expires=' + new Date(new Date().getTime() + ttl * 1000).toGMTString() + ].join(';'); + }, + database_selected: function(db) { + var params = $.deparam.querystring(); + params.db = db; + this.remember_last_used_database(db); + this.$('.oe_login_dbpane').empty().text(_t('Loading...')); + this.$('[name=login], [name=password]').prop('readonly', true); + instance.web.redirect('/?' + $.param(params)); + }, on_db_loaded: function (result) { + var self = this; this.db_list = result; + if (!this.selected_db) { + this.selected_db = result[0]; + } this.$("[name=db]").replaceWith(QWeb.render('Login.dblist', { db_list: this.db_list, selected_db: this.selected_db})); if(this.db_list.length === 0) { this.do_action("database_manager"); @@ -732,17 +769,11 @@ instance.web.Login = instance.web.Widget.extend({ self.hide_error(); self.$(".oe_login_pane").fadeOut("slow"); return this.session.session_authenticate(db, login, password).then(function() { - if (self.has_local_storage) { - if(self.remember_credentials) { - localStorage.setItem('last_db_login_success', db); - localStorage.setItem('last_login_login_success', login); - if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) { - localStorage.setItem('last_password_login_success', password); - } - } else { - localStorage.setItem('last_db_login_success', ''); - localStorage.setItem('last_login_login_success', ''); - localStorage.setItem('last_password_login_success', ''); + self.remember_last_used_database(db); + if (self.has_local_storage && self.remember_credentials) { + localStorage.setItem(db + '|last_login', login); + if (self.session.debug) { + localStorage.setItem(db + '|last_password', password); } } self.trigger('login_successful'); @@ -800,6 +831,9 @@ instance.web.Reload = function(parent, action) { var sobj = $.deparam(l.search.substr(1)); sobj.ts = new Date().getTime(); + if (params.url_search) { + sobj = _.extend(sobj, params.url_search); + } var search = '?' + $.param(sobj); var hash = l.hash; @@ -1218,7 +1252,8 @@ instance.web.WebClient = instance.web.Client.extend({ $("body").addClass("kitten-mode-activated"); $("body").css("background-image", "url(" + instance.session.origin + "/web/static/src/img/back-enable.jpg" + ")"); if ($.blockUI) { - $.blockUI.defaults.message = '<img src="http://www.amigrave.com/kitten.gif">'; + var imgkit = Math.floor(Math.random() * 2 + 1); + $.blockUI.defaults.message = '<img src="http://www.amigrave.com/loading-kitten/' + imgkit + '.gif" class="loading-kitten">'; } } if (!self.session.session_is_valid()) { @@ -1303,7 +1338,7 @@ instance.web.WebClient = instance.web.Client.extend({ }, logo_edit: function(ev) { var self = this; - new self.alive(instance.web.Model("res.users").get_func("read")(this.session.uid, ["company_id"])).then(function(res) { + self.alive(new instance.web.Model("res.users").get_func("read")(this.session.uid, ["company_id"])).then(function(res) { self.rpc("/web/action/load", { action_id: "base.action_res_company_form" }).done(function(result) { result.res_id = res['company_id'][0]; result.target = "new"; @@ -1500,8 +1535,9 @@ instance.web.EmbeddedClient = instance.web.Client.extend({ }); }, - do_action: function(action) { - return this.action_manager.do_action(action); + do_action: function(/*...*/) { + var am = this.action_manager; + return am.do_action.apply(am, arguments); }, authenticate: function() { diff --git a/addons/web/static/src/js/corelib.js b/addons/web/static/src/js/corelib.js index 63e22672bd7..c4bb81117f8 100644 --- a/addons/web/static/src/js/corelib.js +++ b/addons/web/static/src/js/corelib.js @@ -232,13 +232,17 @@ instance.web.ParentedMixin = { Utility method to only execute asynchronous actions if the current object has not been destroyed. - @param {Promise} promise The promise representing the asynchronous action. - @param {bool} reject Defaults to false. If true, the returned promise will be - rejected with no arguments if the current object is destroyed. If false, - the returned promise will never be resolved nor rejected. - @returns {Promise} A promise that will mirror the given promise if everything goes - fine but will either be rejected with no arguments or never resolved if the - current object is destroyed. + @param {$.Deferred} promise The promise representing the asynchronous + action. + @param {bool} [reject=false] If true, the returned promise will be + rejected with no arguments if the current + object is destroyed. If false, the + returned promise will never be resolved + or rejected. + @returns {$.Deferred} A promise that will mirror the given promise if + everything goes fine but will either be rejected + with no arguments or never resolved if the + current object is destroyed. */ alive: function(promise, reject) { var def = $.Deferred(); @@ -697,10 +701,10 @@ instance.web.Widget = instance.web.Controller.extend({ * Method called after rendering. Mostly used to bind actions, perform asynchronous * calls, etc... * - * By convention, the method should return a promise to inform the caller when - * this widget has been initialized. + * By convention, this method should return an object that can be passed to $.when() + * to inform the caller when this widget has been initialized. * - * @returns {jQuery.Deferred} + * @returns {jQuery.Deferred or any} */ start: function() { return $.when(); diff --git a/addons/web/static/src/js/coresetup.js b/addons/web/static/src/js/coresetup.js index 43d292b66db..dedb4a49710 100644 --- a/addons/web/static/src/js/coresetup.js +++ b/addons/web/static/src/js/coresetup.js @@ -89,6 +89,10 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess }); }, session_is_valid: function() { + var db = $.deparam.querystring().db; + if (db && this.db !== db) { + return false; + } return !!this.uid; }, /** diff --git a/addons/web/static/src/js/data.js b/addons/web/static/src/js/data.js index bbff633c687..d60f72c6577 100644 --- a/addons/web/static/src/js/data.js +++ b/addons/web/static/src/js/data.js @@ -112,24 +112,27 @@ instance.web.Query = instance.web.Class.extend({ * @returns {jQuery.Deferred<Array<openerp.web.QueryGroup>> | null} */ group_by: function (grouping) { - if (grouping === undefined) { - return null; + var ctx = instance.web.pyeval.eval( + 'context', this._model.context(this._context)); + + // undefined passed in explicitly (!) + if (_.isUndefined(grouping)) { + grouping = []; } if (!(grouping instanceof Array)) { grouping = _.toArray(arguments); } - if (_.isEmpty(grouping)) { return null; } + if (_.isEmpty(grouping) && !ctx['group_by_no_leaf']) { + return null; + } var self = this; - - var ctx = instance.web.pyeval.eval( - 'context', this._model.context(this._context)); return this._model.call('read_group', { groupby: grouping, fields: _.uniq(grouping.concat(this._fields || [])), domain: this._model.domain(this._filter), - context: this._model.context(this._context), + context: ctx, offset: this._offset, limit: this._limit, orderby: instance.web.serialize_sort(this._order_by) || false @@ -325,7 +328,7 @@ instance.web.Model = instance.web.Class.extend({ * Fetches the model's domain, combined with the provided domain if any * * @param {Array} [domain] to combine with the model's internal domain - * @returns The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain + * @returns {instance.web.CompoundDomain} The model's internal domain, or the AND-ed union of the model's internal domain and the provided domain */ domain: function (domain) { if (!domain) { return this._domain; } @@ -337,7 +340,7 @@ instance.web.Model = instance.web.Class.extend({ * combined with the provided context if any * * @param {Object} [context] to combine with the model's internal context - * @returns The union of the user's context and the model's internal context, as well as the provided context if any. In that order. + * @returns {instance.web.CompoundContext} The union of the user's context and the model's internal context, as well as the provided context if any. In that order. */ context: function (context) { return new instance.web.CompoundContext( @@ -481,9 +484,12 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, * Creates a new record in db * * @param {Object} data field values to set on the new record + * @param {Object} options Dictionary that can contain the following keys: + * - readonly_fields: Values from readonly fields that were updated by + * on_changes. Only used by the BufferedDataSet to make the o2m work correctly. * @returns {$.Deferred} */ - create: function(data) { + create: function(data, options) { return this._model.call('create', [data], {context: this.get_context()}); }, /** @@ -491,8 +497,10 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, * * @param {Number|String} id identifier for the record to alter * @param {Object} data field values to write into the record - * @param {Function} callback function called with operation result - * @param {Function} error_callback function called in case of write error + * @param {Object} options Dictionary that can contain the following keys: + * - context: The context to use in the server-side call. + * - readonly_fields: Values from readonly fields that were updated by + * on_changes. Only used by the BufferedDataSet to make the o2m work correctly. * @returns {$.Deferred} */ write: function (id, data, options) { @@ -599,6 +607,9 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin, alter_ids: function(n_ids) { this.ids = n_ids; }, + remove_ids: function (ids) { + this.alter_ids(_(this.ids).difference(ids)); + }, /** * Resequence records. * @@ -696,22 +707,28 @@ instance.web.DataSetSearch = instance.web.DataSet.extend({ get_domain: function (other_domain) { this._model.domain(other_domain); }, + alter_ids: function (ids) { + this._super(ids); + if (this.index !== null && this.index >= this.ids.length) { + this.index = this.ids.length > 0 ? this.ids.length - 1 : 0; + } + }, + remove_ids: function (ids) { + var before = this.ids.length; + this._super(ids); + if (this._length) { + this._length -= (before - this.ids.length); + } + }, unlink: function(ids, callback, error_callback) { var self = this; return this._super(ids).done(function(result) { - self.ids = _(self.ids).difference(ids); - if (self._length) { - self._length -= 1; - } - if (self.index !== null) { - self.index = self.index <= self.ids.length - 1 ? - self.index : (self.ids.length > 0 ? self.ids.length -1 : 0); - } + self.remove_ids( ids); self.trigger("dataset_changed", ids, callback, error_callback); }); }, size: function () { - if (this._length !== undefined) { + if (this._length != null) { return this._length; } return this._super(); @@ -732,10 +749,13 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({ self.last_default_get = res; }); }, - create: function(data) { - var cached = {id:_.uniqueId(this.virtual_id_prefix), values: data, - defaults: this.last_default_get}; - this.to_create.push(_.extend(_.clone(cached), {values: _.clone(cached.values)})); + create: function(data, options) { + var cached = { + id:_.uniqueId(this.virtual_id_prefix), + values: _.extend({}, data, (options || {}).readonly_fields || {}), + defaults: this.last_default_get + }; + this.to_create.push(_.extend(_.clone(cached), {values: _.clone(data)})); this.cache.push(cached); return $.Deferred().resolve(cached.id).promise(); }, @@ -762,7 +782,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({ cached = {id: id, values: {}}; this.cache.push(cached); } - $.extend(cached.values, record.values); + $.extend(cached.values, _.extend({}, record.values, (options || {}).readonly_fields || {})); if (dirty) this.trigger("dataset_changed", id, data, options); return $.Deferred().resolve(true).promise(); @@ -860,8 +880,16 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({ } return completion.promise(); }, - call_button: function (method, args) { - var id = args[0][0], index; + /** + * Invalidates caching of a record in the dataset to ensure the next read + * of that record will hit the server. + * + * Of use when an action is going to remote-alter a record which will then + * need to be reloaded, e.g. action button. + * + * @param {Object} id record to remove from the BDS's cache + */ + evict_record: function (id) { for(var i=0, len=this.cache.length; i<len; ++i) { var record = this.cache[i]; // if record we call the button upon is in the cache @@ -871,8 +899,15 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({ break; } } + }, + call_button: function (method, args) { + this.evict_record(args[0][0]); return this._super(method, args); }, + exec_workflow: function (id, signal) { + this.evict_record(id); + return this._super(id, signal); + }, alter_ids: function(n_ids) { this._super(n_ids); this.trigger("dataset_changed", n_ids); @@ -903,9 +938,9 @@ instance.web.ProxyDataSet = instance.web.DataSetSearch.extend({ return this._super.apply(this, arguments); } }, - create: function(data) { + create: function(data, options) { if (this.create_function) { - return this.create_function(data, this._super); + return this.create_function(data, options, this._super); } else { return this._super.apply(this, arguments); } @@ -946,7 +981,10 @@ instance.web.CompoundContext = instance.web.Class.extend({ }, get_eval_context: function () { return this.__eval_context; - } + }, + eval: function() { + return instance.web.pyeval.eval('context', this, undefined, {no_user_context: true}); + }, }); instance.web.CompoundDomain = instance.web.Class.extend({ @@ -969,7 +1007,10 @@ instance.web.CompoundDomain = instance.web.Class.extend({ }, get_eval_context: function() { return this.__eval_context; - } + }, + eval: function() { + return instance.web.pyeval.eval('domain', this); + }, }); instance.web.DropMisordered = instance.web.Class.extend({ diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index 851b60af229..854c5f76218 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -314,4 +314,34 @@ instance.web.auto_date_to_str = function(value, type) { } }; +/** + * performs a half up rounding with arbitrary precision, correcting for float loss of precision + * See the corresponding float_round() in server/tools/float_utils.py for more info + * @param {Number} the value to be rounded + * @param {Number} a non zero precision parameter. eg: 0.01 rounds to two digits. + */ +instance.web.round_precision = function(value, precision){ + if(!value){ + return 0; + }else if(!precision){ + throw new Error('round_precision(...): Cannot round value: '+value+' with a precision of zero (or undefined)'); + } + var normalized_value = value / precision; + var epsilon_magnitude = Math.log(Math.abs(normalized_value))/Math.log(2); + var epsilon = Math.pow(2, epsilon_magnitude - 53); + normalized_value += normalized_value >= 0 ? epsilon : -epsilon; + var rounded_value = Math.round(normalized_value); + return rounded_value * precision; +}; + +/** + * performs a half up rounding with a fixed amount of decimals, correcting for float loss of precision + * See the corresponding float_round() in server/tools/float_utils.py for more info + * @param {Number} the value to be rounded + * @param {Number} the number of decimals. eg: round_decimals(3.141592,2) -> 3.14 + */ +instance.web.round_decimals = function(value, decimals){ + return instance.web.round_precision(value, Math.pow(10,-decimals)); +}; + }; diff --git a/addons/web/static/src/js/pyeval.js b/addons/web/static/src/js/pyeval.js index 554c4aa7db0..c8207066ca9 100644 --- a/addons/web/static/src/js/pyeval.js +++ b/addons/web/static/src/js/pyeval.js @@ -502,12 +502,15 @@ openerp.web.pyeval = function (instance) { return py.PY_call(py.PY_getAttr(d, 'strftime'), [args.format]); }); + var args = _.map(('year month day hour minute second microsecond ' + + 'years months weeks days hours minutes secondes microseconds ' + + 'weekday leakdays yearday nlyearday').split(' '), function (arg) { + return [arg, null] + }); + args.unshift('*'); var relativedelta = py.type('relativedelta', null, { __init__: function () { - this.ops = py.PY_parseArgs(arguments, - '* year month day hour minute second microsecond ' - + 'years months weeks days hours minutes secondes microseconds ' - + 'weekday leakdays yearday nlyearday'); + this.ops = py.PY_parseArgs(arguments, args); }, __add__: function (other) { if (!py.PY_isInstance(other, datetime.date)) { @@ -600,7 +603,7 @@ openerp.web.pyeval = function (instance) { }); var eval_contexts = function (contexts, evaluation_context) { - evaluation_context = evaluation_context || {}; + evaluation_context = _.extend(instance.web.pyeval.context(), evaluation_context || {}); return _(contexts).reduce(function (result_context, ctx) { // __eval_context evaluations can lead to some of `contexts`'s // values being null, skip them as well as empty contexts @@ -625,9 +628,10 @@ openerp.web.pyeval = function (instance) { // siblings _.extend(evaluation_context, evaluated); return _.extend(result_context, evaluated); - }, _.extend({}, instance.session.user_context)); + }, {}); }; var eval_domains = function (domains, evaluation_context) { + evaluation_context = _.extend(instance.web.pyeval.context(), evaluation_context || {}); var result_domain = []; _(domains).each(function (domain) { if (_.isString(domain)) { @@ -654,6 +658,7 @@ openerp.web.pyeval = function (instance) { return result_domain; }; var eval_groupbys = function (contexts, evaluation_context) { + evaluation_context = _.extend(instance.web.pyeval.context(), evaluation_context || {}); var result_group = []; _(contexts).each(function (ctx) { if (_.isString(ctx)) { @@ -704,14 +709,15 @@ openerp.web.pyeval = function (instance) { * @param {Array} object domains or contexts to evaluate * @param {Object} [context] evaluation context */ - instance.web.pyeval.eval = function (type, object, context) { + instance.web.pyeval.eval = function (type, object, context, options) { + options = options || {}; context = _.extend(instance.web.pyeval.context(), context || {}); context['context'] = py.dict.fromJSON(context); //noinspection FallthroughInSwitchStatementJS switch(type) { case 'context': object = [object]; - case 'contexts': return eval_contexts(object, context); + case 'contexts': return eval_contexts((options.no_user_context ? [] : [instance.session.user_context]).concat(object), context); case 'domain': object = [object]; case 'domains': return eval_domains(object, context); case 'groupbys': return eval_groupbys(object, context); diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index edbec1626b0..0051598e48a 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -324,7 +324,10 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea e.preventDefault(); break; } - } + }, + 'autocompleteopen': function () { + this.$el.autocomplete('widget').css('z-index', 1004); + }, }, /** * @constructs instance.web.SearchView @@ -352,7 +355,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea this.has_defaults = !_.isEmpty(this.defaults); this.inputs = []; - this.controls = {}; + this.controls = []; this.headless = this.options.hidden && !this.has_defaults; @@ -379,6 +382,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea model: this.dataset._model, view_id: this.view_id, view_type: 'search', + context: this.dataset.get_context(), }); $.when(load_view).then(function (r) { @@ -492,6 +496,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea */ complete_global_search: function (req, resp) { $.when.apply(null, _(this.inputs).chain() + .filter(function (input) { return input.visible(); }) .invoke('complete', req.term) .value()).then(function () { resp(_(_(arguments).compact()).flatten(true)); @@ -580,18 +585,18 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea * * @param {Array} items a list of nodes to convert to widgets * @param {Object} fields a mapping of field names to (ORM) field attributes - * @param {String} [group_name] name of the group to put the new controls in + * @param {Object} [group] group to put the new controls in */ - make_widgets: function (items, fields, group_name) { - group_name = group_name || null; - if (!(group_name in this.controls)) { - this.controls[group_name] = []; + make_widgets: function (items, fields, group) { + if (!group) { + group = new instance.web.search.Group( + this, 'q', {attrs: {string: _t("Filters")}}); } - var self = this, group = this.controls[group_name]; + var self = this; var filters = []; _.each(items, function (item) { if (filters.length && item.tag !== 'filter') { - group.push(new instance.web.search.FilterGroup(filters, this)); + group.push(new instance.web.search.FilterGroup(filters, group)); filters = []; } @@ -599,15 +604,18 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea case 'separator': case 'newline': break; case 'filter': - filters.push(new instance.web.search.Filter(item, this)); + filters.push(new instance.web.search.Filter(item, group)); break; case 'group': - self.make_widgets(item.children, fields, item.attrs.string); + self.make_widgets(item.children, fields, + new instance.web.search.Group(group, 'w', item)); break; case 'field': - group.push(this.make_field(item, fields[item['attrs'].name])); + var field = this.make_field( + item, fields[item['attrs'].name], group); + group.push(field); // filters - self.make_widgets(item.children, fields, group_name); + self.make_widgets(item.children, fields, group); break; } }, this); @@ -622,12 +630,13 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea * * @param {Object} item fields_view_get node for the field * @param {Object} field fields_get result for the field + * @param {Object} [parent] * @returns instance.web.search.Field */ - make_field: function (item, field) { + make_field: function (item, field, parent) { var obj = instance.web.search.fields.get_any( [item.attrs.widget, field.type]); if(obj) { - return new (obj) (item, field, this); + return new (obj) (item, field, parent || this); } else { console.group('Unknown field type ' + field.type); console.error('View node', item); @@ -862,13 +871,18 @@ instance.web.search.Widget = instance.web.Widget.extend( /** @lends instance.web * @constructs instance.web.search.Widget * @extends instance.web.Widget * - * @param view the ancestor view of this widget + * @param parent parent of this widget */ - init: function (view) { - this._super(view); - this.view = view; + init: function (parent) { + this._super(parent); + var ancestor = parent; + do { + this.view = ancestor; + } while (!(ancestor instanceof instance.web.SearchView) + && (ancestor = (ancestor.getParent && ancestor.getParent()))); } }); + instance.web.search.add_expand_listener = function($root) { $root.find('a.searchview_group_string').click(function (e) { $root.toggleClass('folded expanded'); @@ -877,13 +891,24 @@ instance.web.search.add_expand_listener = function($root) { }); }; instance.web.search.Group = instance.web.search.Widget.extend({ - template: 'SearchView.group', - init: function (view_section, view, fields) { - this._super(view); - this.attrs = view_section.attrs; - this.lines = view.make_widgets( - view_section.children, fields); - } + init: function (parent, icon, node) { + this._super(parent); + var attrs = node.attrs; + this.modifiers = attrs.modifiers = + attrs.modifiers ? JSON.parse(attrs.modifiers) : {}; + this.attrs = attrs; + this.icon = icon; + this.name = attrs.string; + this.children = []; + + this.view.controls.push(this); + }, + push: function (input) { + this.children.push(input); + }, + visible: function () { + return !this.modifiers.invisible; + }, }); instance.web.search.Input = instance.web.search.Widget.extend( /** @lends instance.web.search.Input# */{ @@ -892,12 +917,12 @@ instance.web.search.Input = instance.web.search.Widget.extend( /** @lends instan * @constructs instance.web.search.Input * @extends instance.web.search.Widget * - * @param view + * @param parent */ - init: function (view) { - this._super(view); + init: function (parent) { + this._super(parent); + this.load_attrs({}); this.view.inputs.push(this); - this.style = undefined; }, /** * Fetch auto-completion values for the widget. @@ -945,15 +970,30 @@ instance.web.search.Input = instance.web.search.Widget.extend( /** @lends instan "get_domain not implemented for widget " + this.attrs.type); }, load_attrs: function (attrs) { - if (attrs.modifiers) { - attrs.modifiers = JSON.parse(attrs.modifiers); - attrs.invisible = attrs.modifiers.invisible || false; - if (attrs.invisible) { - this.style = 'display: none;' + attrs.modifiers = attrs.modifiers ? JSON.parse(attrs.modifiers) : {}; + this.attrs = attrs; + }, + /** + * Returns whether the input is "visible". The default behavior is to + * query the ``modifiers.invisible`` flag on the input's description or + * view node. + * + * @returns {Boolean} + */ + visible: function () { + if (this.attrs.modifiers.invisible) { + return false; + } + var parent = this; + while ((parent = parent.getParent()) && + ( (parent instanceof instance.web.search.Group) + || (parent instanceof instance.web.search.Input))) { + if (!parent.visible()) { + return false; } } - this.attrs = attrs; - } + return true; + }, }); instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends instance.web.search.FilterGroup# */{ template: 'SearchView.filters', @@ -967,17 +1007,19 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in * @extends instance.web.search.Input * * @param {Array<instance.web.search.Filter>} filters elements of the group - * @param {instance.web.SearchView} view view in which the filters are contained + * @param {instance.web.SearchView} parent parent in which the filters are contained */ - init: function (filters, view) { + init: function (filters, parent) { // If all filters are group_by and we're not initializing a GroupbyGroup, // create a GroupbyGroup instead of the current FilterGroup if (!(this instanceof instance.web.search.GroupbyGroup) && _(filters).all(function (f) { - return f.attrs.context && f.attrs.context.group_by; })) { - return new instance.web.search.GroupbyGroup(filters, view); + if (!f.attrs.context) { return false; } + var c = instance.web.pyeval.eval('context', f.attrs.context); + return !_.isEmpty(c.group_by);})) { + return new instance.web.search.GroupbyGroup(filters, parent); } - this._super(view); + this._super(parent); this.filters = filters; this.view.query.on('add remove change reset', this.proxy('search_change')); }, @@ -997,7 +1039,9 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in facet.values.each(function (v) { var i = _(self.filters).indexOf(v.get('value')); if (i === -1) { return; } - $filters.eq(i).addClass('oe_selected'); + $filters.filter(function () { + return Number($(this).data('index')) === i; + }).addClass('oe_selected'); }); }, /** @@ -1087,7 +1131,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in }); }, toggle_filter: function (e) { - this.toggle(this.filters[$(e.target).index()]); + this.toggle(this.filters[Number($(e.target).data('index'))]); }, toggle: function (filter) { this.view.query.toggle(this.make_facet([this.make_value(filter)])); @@ -1096,6 +1140,7 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in var self = this; item = item.toLowerCase(); var facet_values = _(this.filters).chain() + .filter(function (filter) { return filter.visible(); }) .filter(function (filter) { var at = { string: filter.attrs.string || '', @@ -1122,8 +1167,8 @@ instance.web.search.FilterGroup = instance.web.search.Input.extend(/** @lends in instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ icon: 'w', completion_label: _lt("Group by: %s"), - init: function (filters, view) { - this._super(filters, view); + init: function (filters, parent) { + this._super(filters, parent); // Not flanders: facet unicity is handled through the // (category, field) pair of facet attributes. This is all well and // good for regular filter groups where a group matches a facet, but for @@ -1131,8 +1176,8 @@ instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ // view which proxies to the first GroupbyGroup, so it can be used // for every GroupbyGroup and still provides the various methods needed // by the search view. Use weirdo name to avoid risks of conflicts - if (!this.getParent()._s_groupby) { - this.getParent()._s_groupby = { + if (!this.view._s_groupby) { + this.view._s_groupby = { help: "See GroupbyGroup#init", get_context: this.proxy('get_context'), get_domain: this.proxy('get_domain'), @@ -1141,14 +1186,14 @@ instance.web.search.GroupbyGroup = instance.web.search.FilterGroup.extend({ } }, match_facet: function (facet) { - return facet.get('field') === this.getParent()._s_groupby; + return facet.get('field') === this.view._s_groupby; }, make_facet: function (values) { return { category: _t("GroupBy"), icon: this.icon, values: values, - field: this.getParent()._s_groupby + field: this.view._s_groupby }; } }); @@ -1166,10 +1211,10 @@ instance.web.search.Filter = instance.web.search.Input.extend(/** @lends instanc * @extends instance.web.search.Input * * @param node - * @param view + * @param parent */ - init: function (node, view) { - this._super(view); + init: function (node, parent) { + this._super(parent); this.load_attrs(node.attrs); }, facet_for: function () { return $.when(null); }, @@ -1185,10 +1230,10 @@ instance.web.search.Field = instance.web.search.Input.extend( /** @lends instanc * * @param view_section * @param field - * @param view + * @param parent */ - init: function (view_section, field, view) { - this._super(view); + init: function (view_section, field, parent) { + this._super(parent); this.load_attrs(_.extend({}, field, view_section.attrs)); }, facet_for: function (value) { @@ -1228,7 +1273,7 @@ instance.web.search.Field = instance.web.search.Input.extend( /** @lends instanc * * @param {String} name the field's name * @param {String} operator the field's operator (either attribute-specified or default operator for the field - * @param {Number|String} value parsed value for the field + * @param {Number|String} facet parsed value for the field * @returns {Array<Array>} domain to include in the resulting search */ make_domain: function (name, operator, facet) { @@ -1294,20 +1339,22 @@ instance.web.search.CharField = instance.web.search.Field.extend( /** @lends ins } }); instance.web.search.NumberField = instance.web.search.Field.extend(/** @lends instance.web.search.NumberField# */{ - value_from: function () { - if (!this.$el.val()) { - return null; - } - var val = this.parse(this.$el.val()), - check = Number(this.$el.val()); - if (isNaN(val) || val !== check) { - this.$el.addClass('error'); - throw new instance.web.search.Invalid( - this.attrs.name, this.$el.val(), this.error_message); - } - this.$el.removeClass('error'); - return val; - } + complete: function (value) { + var val = this.parse(value); + if (isNaN(val)) { return $.when(); } + var label = _.str.sprintf( + _t("Search %(field)s for: %(value)s"), { + field: '<em>' + this.attrs.string + '</em>', + value: '<strong>' + _.str.escapeHTML(value) + '</strong>'}); + return $.when([{ + label: label, + facet: { + category: this.attrs.string, + field: this, + values: [{label: value, value: val}] + } + }]); + }, }); /** * @class @@ -1460,8 +1507,8 @@ instance.web.search.DateTimeField = instance.web.search.DateField.extend(/** @le }); instance.web.search.ManyToOneField = instance.web.search.CharField.extend({ default_operator: {}, - init: function (view_section, field, view) { - this._super(view_section, field, view); + init: function (view_section, field, parent) { + this._super(view_section, field, parent); this.model = new instance.web.Model(this.attrs.relation); }, complete: function (needle) { @@ -1673,6 +1720,13 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({ if (!_.isEmpty(results.group_by)) { results.context.group_by = results.group_by; } + // Don't save user_context keys in the custom filter, otherwise end + // up with e.g. wrong uid or lang stored *and used in subsequent + // reqs* + var ctx = results.context; + _(_.keys(instance.session.user_context)).each(function (key) { + delete ctx[key]; + }); var filter = { name: $name.val(), user_id: private_filter ? instance.session.uid : false, @@ -1702,22 +1756,28 @@ instance.web.search.Filters = instance.web.search.Input.extend({ var running_count = 0; // get total filters count var is_group = function (i) { return i instanceof instance.web.search.FilterGroup; }; - var filters_count = _(this.view.controls).chain() + var visible_filters = _(this.view.controls).chain().reject(function (group) { + return _(_(group.children).filter(is_group)).isEmpty() + || group.modifiers.invisible; + }); + var filters_count = visible_filters + .pluck('children') .flatten() .filter(is_group) .map(function (i) { return i.filters.length; }) .sum() .value(); - var col1 = [], col2 = _(this.view.controls).map(function (inputs, group) { - var filters = _(inputs).filter(is_group); - return { - name: group === 'null' ? "<span class='oe_i'>q</span> " + _t("Filters") : "<span class='oe_i'>w</span> " + group, - filters: filters, - length: _(filters).chain().map(function (i) { - return i.filters.length; }).sum().value() - }; - }); + var col1 = [], col2 = visible_filters.map(function (group) { + var filters = _(group.children).filter(is_group); + return { + name: _.str.sprintf("<span class='oe_i'>%s</span> %s", + group.icon, group.name), + filters: filters, + length: _(filters).chain().map(function (i) { + return i.filters.length; }).sum().value() + }; + }).value(); while (col2.length) { // col1 + group should be smaller than col2 + group diff --git a/addons/web/static/src/js/testing.js b/addons/web/static/src/js/testing.js index e7aad43ffc7..e665a43db01 100644 --- a/addons/web/static/src/js/testing.js +++ b/addons/web/static/src/js/testing.js @@ -176,9 +176,9 @@ openerp.testing = {}; }); QUnit.module(testing.current_module + '.' + name, {_oe: options}); - body(testing.case); + body(testing['case']); }; - testing.case = function (name, options, callback) { + testing['case'] = function (name, options, callback) { if (_.isFunction(options)) { callback = options; options = {}; diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 9432a106f6f..0373af78358 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -765,7 +765,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.has_been_loaded.done(function() { if (self.datarecord.id && confirm(_t("Do you really want to delete this record?"))) { self.dataset.unlink([self.datarecord.id]).done(function() { - self.execute_pager_action('next'); + if (self.dataset.size()) { + self.execute_pager_action('next'); + } else { + self.do_action('history_back'); + } def.resolve(); }); } else { @@ -802,6 +806,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM if (save_obj.error) return $.Deferred().reject(); return $.when.apply($, save_obj.ret); + }).done(function() { + self.$el.removeClass('oe_form_dirty'); }); }, _process_save: function(save_obj) { @@ -810,7 +816,8 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM try { var form_invalid = false, values = {}, - first_invalid_field = null; + first_invalid_field = null, + readonly_values = {}; for (var f in self.fields) { if (!self.fields.hasOwnProperty(f)) { continue; } f = self.fields[f]; @@ -819,11 +826,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM if (!first_invalid_field) { first_invalid_field = f; } - } else if (f.name !== 'id' && !f.get("readonly") && (!self.datarecord.id || f._dirty_flag)) { + } else if (f.name !== 'id' && (!self.datarecord.id || f._dirty_flag)) { // Special case 'id' field, do not save this field // on 'create' : save all non readonly fields // on 'edit' : save non readonly modified fields - values[f.name] = f.get_value(); + if (!f.get("readonly")) { + values[f.name] = f.get_value(); + } else { + readonly_values[f.name] = f.get_value(); + } } } if (form_invalid) { @@ -836,7 +847,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var save_deferral; if (!self.datarecord.id) { // Creation save - save_deferral = self.dataset.create(values).then(function(r) { + save_deferral = self.dataset.create(values, {readonly_fields: readonly_values}).then(function(r) { return self.record_created(r, prepend_on_create); }, null); } else if (_.isEmpty(values)) { @@ -844,7 +855,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM save_deferral = $.Deferred().resolve({}).promise(); } else { // Write save - save_deferral = self.dataset.write(self.datarecord.id, values, {}).then(function(r) { + save_deferral = self.dataset.write(self.datarecord.id, values, {readonly_fields: readonly_values}).then(function(r) { return self.record_saved(r); }, null); } @@ -1016,7 +1027,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM return value; } var fields = _.chain(this.fields) - .map(function (field, name) { + .map(function (field) { var value = field.get_value(); // ignore fields which are empty, invisible, readonly, o2m // or m2m @@ -1031,7 +1042,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM } return { - name: name, + name: field.name, string: field.string, value: value, displayed: display(field, value), @@ -1042,10 +1053,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM .value(); var conditions = _.chain(self.fields) .filter(function (field) { return field.field.change_default; }) - .map(function (field, name) { + .map(function (field) { var value = field.get_value(); return { - name: name, + name: field.name, string: field.string, value: value, displayed: display(field, value), @@ -1439,6 +1450,9 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt $(this).children().each(function() { var $td = $(this), $child = $td.children(':first'); + if ($child.attr('cell-class')) { + $td.addClass($child.attr('cell-class')); + } switch ($child[0].tagName.toLowerCase()) { case 'separator': break; @@ -1515,7 +1529,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt if (! page.__ic) return; page.__ic.on("change:effective_invisible", null, function() { - if (!page.__ic.get('effective_invisible')) { + if (!page.__ic.get('effective_invisible') && page.autofocus) { $new_notebook.tabs('select', i); return; } @@ -1887,10 +1901,11 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ if (this.node.attrs.icon && (! /\//.test(this.node.attrs.icon))) { this.node.attrs.icon = '/web/static/src/img/icons/' + this.node.attrs.icon + '.png'; } - this.view.on('view_content_has_changed', this, this.check_disable); }, start: function() { this._super.apply(this, arguments); + this.view.on('view_content_has_changed', this, this.check_disable); + this.check_disable(); this.$el.click(this.on_click); if (this.node.attrs.help || instance.session.debug) { this.do_attach_tooltip(); @@ -1916,18 +1931,20 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({ modal: true, buttons: [ {text: _t("Cancel"), click: function() { - def.resolve(); $(this).dialog("close"); } }, {text: _t("Ok"), click: function() { - self.on_confirmed().done(function() { - def.resolve(); + var self2 = this; + self.on_confirmed().always(function() { + $(self2).dialog("close"); }); - $(this).dialog("close"); } } - ] + ], + beforeClose: function() { + def.resolve(); + }, }); return def.promise(); } else { @@ -2118,7 +2135,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(instance.w value without triggering a re-rendering. */ internal_set_value: function(value_) { - var tmp = this.no_render; + var tmp = this.no_rerender; this.no_rerender = true; this.set({'value': value_}); this.no_rerender = tmp; @@ -2218,6 +2235,18 @@ instance.web.form.ReinitializeFieldMixin = _.extend({}, instance.web.form.Reini }, }); +/** + Some hack to make placeholders work in ie9. +*/ +if ($.browser.msie && $.browser.version === "9.0") { + document.addEventListener("DOMNodeInserted",function(event){ + var nodename = event.target.nodeName.toLowerCase(); + if ( nodename === "input" || nodename == "textarea" ) { + $(event.target).placeholder(); + } + }); +} + instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, { template: 'FieldChar', widget_class: 'oe_form_field_char', @@ -2276,7 +2305,8 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we return this.get('value') === '' || this._super(); }, focus: function() { - this.$('input:first')[0].focus(); + var input = this.$('input:first')[0]; + return input ? input.focus() : false; }, set_dimensions: function (height, width) { this._super(height, width); @@ -2337,7 +2367,8 @@ instance.web.form.FieldUrl = instance.web.form.FieldChar.extend({ if (!s) { tmp = "http://" + this.get('value'); } - this.$el.find('a').attr('href', tmp).text(this.get('value') ? tmp : ''); + var text = this.get('value') ? this.node.attrs.text || tmp : ''; + this.$el.find('a').attr('href', tmp).text(text); } }, on_button_clicked: function() { @@ -2372,7 +2403,8 @@ instance.web.form.FieldFloat = instance.web.form.FieldChar.extend({ this._super.apply(this, [value_]); }, focus: function () { - this.$('input:first').select(); + var $input = this.$('input:first'); + return $input.length ? $input.select() : false; } }); @@ -2382,7 +2414,6 @@ instance.web.DateTimeWidget = instance.web.Widget.extend({ type_of_date: "datetime", events: { 'change .oe_datepicker_master': 'change_datetime', - 'dragstart img.oe_datepicker_trigger': function () { return false; }, }, init: function(parent) { this._super(parent); @@ -2393,6 +2424,42 @@ instance.web.DateTimeWidget = instance.web.Widget.extend({ this.$input = this.$el.find('input.oe_datepicker_master'); this.$input_picker = this.$el.find('input.oe_datepicker_container'); + $.datepicker.setDefaults({ + clearText: _t('Clear'), + clearStatus: _t('Erase the current date'), + closeText: _t('Done'), + closeStatus: _t('Close without change'), + prevText: _t('<Prev'), + prevStatus: _t('Show the previous month'), + nextText: _t('Next>'), + nextStatus: _t('Show the next month'), + currentText: _t('Today'), + currentStatus: _t('Show the current month'), + monthNames: Date.CultureInfo.monthNames, + monthNamesShort: Date.CultureInfo.abbreviatedMonthNames, + monthStatus: _t('Show a different month'), + yearStatus: _t('Show a different year'), + weekHeader: _t('Wk'), + weekStatus: _t('Week of the year'), + dayNames: Date.CultureInfo.dayNames, + dayNamesShort: Date.CultureInfo.abbreviatedDayNames, + dayNamesMin: Date.CultureInfo.shortestDayNames, + dayStatus: _t('Set DD as first week day'), + dateStatus: _t('Select D, M d'), + firstDay: Date.CultureInfo.firstDayOfWeek, + initStatus: _t('Select a date'), + isRTL: false + }); + $.timepicker.setDefaults({ + timeOnlyTitle: _t('Choose Time'), + timeText: _t('Time'), + hourText: _t('Hour'), + minuteText: _t('Minute'), + secondText: _t('Second'), + currentText: _t('Now'), + closeText: _t('Done') + }); + this.picker({ onClose: this.on_picker_select, onSelect: this.on_picker_select, @@ -2519,9 +2586,8 @@ instance.web.form.FieldDatetime = instance.web.form.AbstractField.extend(instanc return this.get('value') === '' || this._super(); }, focus: function() { - if (this.datewidget && this.datewidget.$input) { - this.datewidget.$input[0].focus(); - } + var input = this.datewidget && this.datewidget.$input[0]; + return input ? input.focus() : false; }, set_dimensions: function (height, width) { this._super(height, width); @@ -2546,42 +2612,45 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we }, 'change textarea': 'store_dom_value', }, - init: function (field_manager, node) { - this._super(field_manager, node); - }, initialize_content: function() { var self = this; - this.$textarea = this.$el.find('textarea'); - this.auto_sized = false; - this.default_height = this.$textarea.css('height'); - if (this.get("effective_readonly")) { - this.$textarea.attr('disabled', 'disabled'); + if (! this.get("effective_readonly")) { + this.$textarea = this.$el.find('textarea'); + this.auto_sized = false; + this.default_height = this.$textarea.css('height'); + if (this.get("effective_readonly")) { + this.$textarea.attr('disabled', 'disabled'); + } + this.setupFocus(this.$textarea); + } else { + this.$textarea = undefined; } - this.setupFocus(this.$textarea); }, commit_value: function () { - this.store_dom_value(); + if (! this.get("effective_readonly") && this.$textarea) { + this.store_dom_value(); + } return this._super(); }, store_dom_value: function () { - if (!this.get('effective_readonly') && this.$('textarea').length) { - this.internal_set_value( - instance.web.parse_value( - this.$textarea.val(), - this)); - } + this.internal_set_value(instance.web.parse_value(this.$textarea.val(), this)); }, render_value: function() { - var show_value = instance.web.format_value(this.get('value'), this, ''); - if (show_value === '') { - this.$textarea.css('height', parseInt(this.default_height)+"px"); - } - this.$textarea.val(show_value); - if (! this.auto_sized) { - this.auto_sized = true; - this.$textarea.autosize(); + if (! this.get("effective_readonly")) { + var show_value = instance.web.format_value(this.get('value'), this, ''); + if (show_value === '') { + this.$textarea.css('height', parseInt(this.default_height)+"px"); + } + this.$textarea.val(show_value); + if (! this.auto_sized) { + this.auto_sized = true; + this.$textarea.autosize(); + } else { + this.$textarea.trigger("autosize"); + } } else { - this.$textarea.trigger("autosize"); + var txt = this.get("value") || ''; + this.$(".oe_form_text_content").text(txt); } }, is_syntax_valid: function() { @@ -2599,14 +2668,17 @@ instance.web.form.FieldText = instance.web.form.AbstractField.extend(instance.we return this.get('value') === '' || this._super(); }, focus: function($el) { - this.$textarea[0].focus(); + var input = !this.get("effective_readonly") && this.$textarea && this.$textarea[0]; + return input ? input.focus() : false; }, set_dimensions: function (height, width) { this._super(height, width); - this.$textarea.css({ - width: width, - minHeight: height - }); + if (!this.get("effective_readonly") && this.$textarea) { + this.$textarea.css({ + width: width, + minHeight: height + }); + } }, }); @@ -2637,7 +2709,7 @@ instance.web.form.FieldTextHtml = instance.web.form.AbstractField.extend(instanc "| removeformat | bullets numbering | outdent " + "indent | link unlink | source", bodyStyle: // style to assign to document body contained within the editor - "margin:4px; color:#4c4c4c; font-size:13px; font-family:\"Lucida Grande\",Helvetica,Verdana,Arial,sans-serif; cursor:text" + "margin:4px; color:#4c4c4c; font-size:13px; font-family:'Lucida Grande',Helvetica,Verdana,Arial,sans-serif; cursor:text" }); this.$cleditor = this.$textarea.cleditor()[0]; this.$cleditor.change(function() { @@ -2681,7 +2753,8 @@ instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({ this.$checkbox[0].checked = this.get('value'); }, focus: function() { - this.$checkbox[0].focus(); + var input = this.$checkbox && this.$checkbox[0]; + return input ? input.focus() : false; }, click_disabled_boolean: function(){ var $disabled = $(document).find('input[type=checkbox]:disabled'); @@ -2694,7 +2767,6 @@ instance.web.form.FieldBoolean = instance.web.form.AbstractField.extend({ $parent.append($overlay); }); } - }); /** @@ -2779,7 +2851,8 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan } }, focus: function() { - this.$('select:first')[0].focus(); + var input = this.$('select:first')[0]; + return input ? input.focus() : false; }, set_dimensions: function (height, width) { this._super(height, width); @@ -2790,6 +2863,99 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan } }); +instance.web.form.FieldRadio = instance.web.form.AbstractField.extend(instance.web.form.ReinitializeFieldMixin, { + template: 'FieldRadio', + events: { + 'click input': 'click_change_value' + }, + init: function(field_manager, node) { + /* Radio button widget: Attributes options: + * - "horizontal" to display in column + * - "no_radiolabel" don't display text values + */ + this._super(field_manager, node); + this.selection = _.clone(this.field.selection) || []; + this.domain = false; + }, + initialize_content: function () { + this.uniqueId = _.uniqueId("radio"); + this.on("change:effective_readonly", this, this.render_value); + this.field_manager.on("view_content_has_changed", this, this.get_selection); + this.get_selection(); + }, + click_change_value: function (event) { + var val = $(event.target).val(); + val = this.field.type == "selection" ? val : +val; + if (val == this.get_value()) { + this.set_value(false); + } else { + this.set_value(val); + } + }, + /** Get the selection and render it + * selection: [[identifier, value_to_display], ...] + * For selection fields: this is directly given by this.field.selection + * For many2one fields: perform a search on the relation of the many2one field + */ + get_selection: function() { + var self = this; + var selection = []; + var def = $.Deferred(); + if (self.field.type == "many2one") { + var domain = instance.web.pyeval.eval('domain', this.build_domain()) || []; + if (! _.isEqual(self.domain, domain)) { + self.domain = domain; + var ds = new instance.web.DataSet(self, self.field.relation); + ds.call('search', [self.domain]) + .then(function (records) { + ds.name_get(records).then(function (records) { + selection = records; + def.resolve(); + }); + }); + } else { + selection = self.selection; + def.resolve(); + } + } + else if (self.field.type == "selection") { + selection = self.field.selection || []; + def.resolve(); + } + return def.then(function () { + if (! _.isEqual(selection, self.selection)) { + self.selection = _.clone(selection); + self.renderElement(); + self.render_value(); + } + }); + }, + set_value: function (value_) { + if (value_) { + if (this.field.type == "selection") { + value_ = _.find(this.field.selection, function (sel) { return sel[0] == value_}); + } + else if (!this.selection.length) { + this.selection = [value_]; + } + } + this._super(value_); + }, + get_value: function () { + var value = this.get('value'); + return value instanceof Array ? value[0] : value; + }, + render_value: function () { + var self = this; + this.$el.toggleClass("oe_readonly", this.get('effective_readonly')); + this.$("input:checked").prop("checked", false); + if (this.get_value()) { + this.$("input").filter(function () {return this.value == self.get_value()}).prop("checked", true); + this.$(".oe_radio_readonly").text(this.get('value') ? this.get('value')[1] : ""); + } + } +}); + // jquery autocomplete tweak to allow html and classnames (function() { var proto = $.ui.autocomplete.prototype, @@ -2983,8 +3149,6 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc e.stopPropagation(); } }, - 'dragstart .oe_m2o_drop_down_button img': function () { return false; }, - 'dragstart .oe_m2o_cm_button': function () { return false; } }, init: function(field_manager, node) { this._super(field_manager, node); @@ -3015,6 +3179,26 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc if (!this.get("effective_readonly")) this.render_editable(); }, + destroy_content: function () { + if (this.$drop_down) { + this.$drop_down.off('click'); + delete this.$drop_down; + } + if (this.$input) { + this.$input.closest(".ui-dialog .ui-dialog-content").off('scroll'); + this.$input.off('keyup blur autocompleteclose autocompleteopen ' + + 'focus focusout change keydown'); + delete this.$input; + } + if (this.$follow_button) { + this.$follow_button.off('blur focus click'); + delete this.$follow_button; + } + }, + destroy: function () { + this.destroy_content(); + return this._super(); + }, init_error_displayer: function() { // nothing }, @@ -3211,7 +3395,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc } if (! no_recurse) { var dataset = new instance.web.DataSetStatic(this, this.field.relation, self.build_context()); - dataset.name_get([self.get("value")]).done(function(data) { + this.alive(dataset.name_get([self.get("value")])).done(function(data) { self.display_value["" + self.get("value")] = data[0][1]; self.render_value(true); }); @@ -3245,7 +3429,8 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc res_model: self.field.relation, res_id: self.get("value"), views: [[false, 'form']], - target: 'current' + target: 'current', + context: self.build_context().eval(), }); return false; }); @@ -3275,9 +3460,8 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc return ! this.get("value"); }, focus: function () { - if (!this.get('effective_readonly')) { - this.$input[0].focus(); - } + var input = !this.get('effective_readonly') && this.$input && this.$input[0]; + return input ? input.focus() : false; }, _quick_create: function() { this.no_ed = true; @@ -3695,8 +3879,8 @@ instance.web.form.One2ManyViewManager = instance.web.ViewManager.extend({ var pop = new instance.web.form.FormOpenPopup(this); pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), { title: _t("Open: ") + self.o2m.string, - create_function: function(data) { - return self.o2m.dataset.create(data).done(function(r) { + create_function: function(data, options) { + return self.o2m.dataset.create(data, options).done(function(r) { self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r])); self.o2m.dataset.trigger("dataset_changed", r); }); @@ -3755,8 +3939,12 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ this.o2m.trigger_on_change(); }, is_valid: function () { - var form = this.editor.form; - + var editor = this.editor; + var form = editor.form; + // If no edition is pending, the listview can not be invalid (?) + if (!editor.record) { + return true + } // If the form has not been modified, the view can only be valid // NB: is_dirty will also be set on defaults/onchanges/whatever? // oe_form_dirty seems to only be set on actual user actions @@ -3786,11 +3974,11 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ title: _t("Create: ") + self.o2m.string, initial_view: "form", alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined, - create_function: function(data, callback, error_callback) { - return self.o2m.dataset.create(data).done(function(r) { + create_function: function(data, options) { + return self.o2m.dataset.create(data, options).done(function(r) { self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r])); self.o2m.dataset.trigger("dataset_changed", r); - }).done(callback).fail(error_callback); + }); }, read_function: function() { return self.o2m.dataset.read_ids.apply(self.o2m.dataset, arguments); @@ -4003,6 +4191,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in if (this.get("effective_readonly")) return; var self = this; + var ignore_blur = false; self.$text = this.$("textarea"); self.$text.textext({ plugins : 'tags arrow autocomplete', @@ -4021,6 +4210,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in if (data.id) { self.add_id(data.id); } else { + ignore_blur = true; data.action(); } }, @@ -4071,10 +4261,13 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in self.$text .focusin(function () { self.trigger('focused'); + ignore_blur = false; }) .focusout(function() { self.$text.trigger("setInputData", ""); - self.trigger('blurred'); + if (!ignore_blur) { + self.trigger('blurred'); + } }).keydown(function(e) { if (e.which === $.ui.keyCode.TAB && self._drop_shown) { self.$text.textext()[0].autocomplete().selectFromDropdown(); @@ -4128,7 +4321,8 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(in this.set({'value': _.uniq(this.get('value').concat([id]))}); }, focus: function () { - this.$text[0].focus(); + var input = this.$text && this.$text[0]; + return input ? input.focus() : false; }, set_dimensions: function (height, width) { this._super(height, width); @@ -4281,6 +4475,7 @@ instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends in }); } }, + is_action_enabled: function () { return true; }, }); instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend(instance.web.form.CompletionFieldMixin, { @@ -4515,9 +4710,9 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({ this.created_elements = []; this.dataset = new instance.web.ProxyDataSet(this, this.model, this.context); this.dataset.read_function = this.options.read_function; - this.dataset.create_function = function(data, sup) { + this.dataset.create_function = function(data, options, sup) { var fct = self.options.create_function || sup; - return fct.call(this, data).done(function(r) { + return fct.call(this, data, options).done(function(r) { self.trigger('create_completed saved', r); self.created_elements.push(r); }); @@ -5066,7 +5261,7 @@ instance.web.form.FieldBinaryImage = instance.web.form.FieldBinary.extend({ }); /** - * Widget for (one2many field) to upload one or more file in same time and display in list. + * Widget for (many2many field) to upload one or more file in same time and display in list. * The user can delete his files. * Options on attribute ; "blockui" {Boolean} block the UI or not * during the file is uploading @@ -5080,6 +5275,8 @@ instance.web.form.FieldMany2ManyBinaryMultiFiles = instance.web.form.AbstractFie if(this.field.type != "many2many" || this.field.relation != 'ir.attachment') { throw _.str.sprintf(_t("The type of the field '%s' must be a many2many field with a relation to 'ir.attachment' model."), this.field.string); } + this.data = {}; + this.set_value([]); this.ds_file = new instance.web.DataSetSearch(this, 'ir.attachment'); this.fileupload_id = _.uniqueId('oe_fileupload_temp'); $(window).on(this.fileupload_id, _.bind(this.on_file_loaded, this)); @@ -5089,73 +5286,39 @@ instance.web.form.FieldMany2ManyBinaryMultiFiles = instance.web.form.AbstractFie this.$el.on('change', 'input.oe_form_binary_file', this.on_file_change ); }, set_value: function(value_) { - var value_ = value_ || []; - var self = this; - var ids = []; - _.each(value_, function(command) { - if (isNaN(command) && command.id == undefined) { - switch (command[0]) { - case commands.CREATE: - ids = ids.concat(command[2]); - return; - case commands.REPLACE_WITH: - ids = ids.concat(command[2]); - return; - case commands.UPDATE: - ids = ids.concat(command[2]); - return; - case commands.LINK_TO: - ids = ids.concat(command[1]); - return; - case commands.DELETE: - ids = _.filter(ids, function (id) { return id != command[1];}); - return; - case commands.DELETE_ALL: - ids = []; - return; - } - } else { - ids.push(command); - } - }); - this._super( ids ); + value_ = value_ || []; + if (value_.length >= 1 && value_[0] instanceof Array) { + value_ = value_[0][2]; + } + this._super(value_); }, get_value: function() { - return _.map(this.get('value'), function (value) { return commands.link_to( isNaN(value) ? value.id : value ); }); + var tmp = [commands.replace_with(this.get("value"))]; + return tmp; }, get_file_url: function (attachment) { return this.session.url('/web/binary/saveas', {model: 'ir.attachment', field: 'datas', filename_field: 'datas_fname', id: attachment['id']}); }, read_name_values : function () { var self = this; - // select the list of id for a get_name - var values = []; - _.each(this.get('value'), function (val) { - if (typeof val != 'object') { - values.push(val); - } - }); + // don't reset know values + var _value = _.filter(this.get('value'), function (id) { return typeof self.data[id] == 'undefined'; } ); // send request for get_name - if (values.length) { - return this.ds_file.call('read', [values, ['id', 'name', 'datas_fname']]).done(function (datas) { + if (_value.length) { + return this.ds_file.call('read', [_value, ['id', 'name', 'datas_fname']]).done(function (datas) { _.each(datas, function (data) { data.no_unlink = true; data.url = self.session.url('/web/binary/saveas', {model: 'ir.attachment', field: 'datas', filename_field: 'datas_fname', id: data.id}); - - _.each(self.get('value'), function (val, key) { - if(val == data.id) { - self.get('value')[key] = data; - } - }); + self.data[data.id] = data; }); }); } else { - return $.when(this.get('value')); + return $.when(); } }, render_value: function () { var self = this; - this.read_name_values().then(function (datas) { + this.read_name_values().then(function () { var render = $(instance.web.qweb.render('FieldBinaryFileUploader.files', {'widget': self})); render.on('click', '.oe_delete', _.bind(self.on_file_delete, self)); @@ -5173,45 +5336,36 @@ instance.web.form.FieldMany2ManyBinaryMultiFiles = instance.web.form.AbstractFie var self = this; var $target = $(event.target); if ($target.val() !== '') { - var filename = $target.val().replace(/.*[\\\/]/,''); - - // if the files is currently uploded, don't send again - if( !isNaN(_.find(this.get('value'), function (file) { return (file.filename || file.name) == filename && file.upload; } )) ) { + // don't uplode more of one file in same time + if (self.data[0] && self.data[0].upload ) { return false; } + for (var id in this.get('value')) { + // if the files exits, delete the file before upload (if it's a new file) + if (self.data[id] && (self.data[id].filename || self.data[id].name) == filename && !self.data[id].no_unlink ) { + self.ds_file.unlink([id]); + } + } // block UI or not if(this.node.attrs.blockui>0) { instance.web.blockUI(); } - // if the files exits for this answer, delete the file before upload - var files = _.filter(this.get('value'), function (file) { - if((file.filename || file.name) == filename) { - self.ds_file.unlink([file.id]); - return false; - } else { - return true; - } - }); - // TODO : unactivate send on wizard and form // submit file this.$('form.oe_form_binary_form').submit(); this.$(".oe_fileupload").hide(); - - // add file on result - files.push({ + // add file on data result + this.data[0] = { 'id': 0, 'name': filename, 'filename': filename, 'url': '', 'upload': true - }); - - this.set({'value': files}); + }; } }, on_file_loaded: function (event, result) { @@ -5222,39 +5376,39 @@ instance.web.form.FieldMany2ManyBinaryMultiFiles = instance.web.form.AbstractFie instance.web.unblockUI(); } - // TODO : activate send on wizard and form - if (result.error || !result.id ) { this.do_warn( _t('Uploading error'), result.error); - files = _.filter(files, function (val) { return !val.upload; }); + delete this.data[0]; } else { - for(var i in files){ - if(files[i].filename == result.filename && files[i].upload) { - files[i] = { - 'id': result.id, - 'name': result.name, - 'filename': result.filename, - 'url': this.get_file_url(result) - }; - } + if (this.data[0] && this.data[0].filename == result.filename && this.data[0].upload) { + delete this.data[0]; + this.data[result.id] = { + 'id': result.id, + 'name': result.name, + 'filename': result.filename, + 'url': this.get_file_url(result) + }; + } else { + this.data[result.id] = { + 'id': result.id, + 'name': result.name, + 'filename': result.filename, + 'url': this.get_file_url(result) + }; } + var values = _.clone(this.get('value')); + values.push(result.id); + this.set({'value': values}); } - - this.set({'value': files}); this.render_value() }, on_file_delete: function (event) { event.stopPropagation(); var file_id=$(event.target).data("id"); if (file_id) { - var files=[]; - for(var i in this.get('value')){ - if(file_id != this.get('value')[i].id){ - files.push(this.get('value')[i]); - } - else if(!this.get('value')[i].no_unlink) { - this.ds_file.unlink([file_id]); - } + var files = _.filter(this.get('value'), function (id) {return id != file_id;}); + if(!this.data[file_id].no_unlink) { + this.ds_file.unlink([file_id]); } this.set({'value': files}); } @@ -5277,11 +5431,11 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ this.calc_domain(); this.on("change:value", this, this.get_selection); this.on("change:evaluated_selection_domain", this, this.get_selection); - this.get_selection(); this.on("change:selection", this, function() { this.selection = this.get("selection"); this.render_value(); }); + this.get_selection(); if (this.options.clickable) { this.$el.on('click','li',this.on_click_stage); } @@ -5300,15 +5454,15 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({ var self = this; var content = QWeb.render("FieldStatus.content", {widget: self}); self.$el.html(content); - var colors = JSON.parse((self.node.attrs || {}).statusbar_colors || "{}"); - var color = colors[self.get('value')]; - if (color) { - self.$("oe_active").css("color", color); - } }, calc_domain: function() { var d = instance.web.pyeval.eval('domain', this.build_domain()); - domain = ['|', ['id', '=', this.get('value')]].concat(d); + var domain = []; //if there is no domain defined, fetch all the records + + if (d.length) { + domain = ['|',['id', '=', this.get('value')]].concat(d); + } + if (! _.isEqual(domain, this.get("evaluated_selection_domain"))) { this.set("evaluated_selection_domain", domain); } @@ -5400,10 +5554,10 @@ instance.web.form.FieldMonetary = instance.web.form.FieldFloat.extend({ }); }, parse_value: function(val, def) { - return instance.web.parse_value(val, {type: "float"}, def); + return instance.web.parse_value(val, {type: "float", digits: (this.node.attrs || {}).digits || this.field.digits}, def); }, format_value: function(val, def) { - return instance.web.format_value(val, {type: "float"}, def); + return instance.web.format_value(val, {type: "float", digits: (this.node.attrs || {}).digits || this.field.digits}, def); }, }); @@ -5423,6 +5577,7 @@ instance.web.form.widgets = new instance.web.Registry({ 'date' : 'instance.web.form.FieldDate', 'datetime' : 'instance.web.form.FieldDatetime', 'selection' : 'instance.web.form.FieldSelection', + 'radio' : 'instance.web.form.FieldRadio', 'many2one' : 'instance.web.form.FieldMany2One', 'many2onebutton' : 'instance.web.form.Many2OneButton', 'many2many' : 'instance.web.form.FieldMany2Many', diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index d23bedf1d1c..b96079d2051 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -321,9 +321,9 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi .appendTo($this.empty()) .click(function (e) {e.stopPropagation();}) .append('<option value="80">80</option>' + - '<option value="100">100</option>' + '<option value="200">200</option>' + '<option value="500">500</option>' + + '<option value="2000">2000</option>' + '<option value="NaN">' + _t("Unlimited") + '</option>') .change(function () { var val = parseInt($select.val(), 10); @@ -578,7 +578,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi this.no_leaf = !!context['group_by_no_leaf']; this.grouped = !!group_by; - return this.load_view(context).then( + return this.alive(this.load_view(context)).then( this.proxy('reload_content')); }, /** @@ -895,8 +895,9 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web. this.record_callbacks = { 'remove': function (event, record) { - var $row = self.$current.children( - '[data-id=' + record.get('id') + ']'); + var id = record.get('id'); + self.dataset.remove_ids([id]) + var $row = self.$current.children('[data-id=' + id + ']'); var index = $row.data('index'); $row.remove(); }, diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index f1bd7c4325e..4e042b60c5d 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -96,7 +96,8 @@ openerp.web.list_editable = function (instance) { }); }, editable: function () { - return !this.options.disable_editable_mode + return !this.grouped + && !this.options.disable_editable_mode && (this.fields_view.arch.attrs.editable || this._context_editable || this.options.editable); diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f5638004b47..53e2e21c7c3 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -149,6 +149,9 @@ instance.web.ActionManager = instance.web.Widget.extend({ for (var i = 0; i < this.breadcrumbs.length; i += 1) { var item = this.breadcrumbs[i]; var tit = item.get_title(); + if (item.hide_breadcrumb) { + continue; + } if (!_.isArray(tit)) { tit = [tit]; } @@ -282,6 +285,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ * @param {Object} [options] * @param {Boolean} [options.clear_breadcrumbs=false] Clear the breadcrumbs history list * @param {Function} [options.on_reverse_breadcrumb] Callback to be executed whenever an anterior breadcrumb item is clicked on. + * @param {Function} [options.hide_breadcrumb] Do not display this widget's title in the breadcrumb * @param {Function} [options.on_close] Callback to be executed when the dialog is closed (only relevant for target=new actions) * @param {Function} [options.action_menu_id] Manually set the menu id on the fly. * @param {Object} [options.additional_context] Additional context to be merged with the action's context. @@ -291,6 +295,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ options = _.defaults(options || {}, { clear_breadcrumbs: false, on_reverse_breadcrumb: function() {}, + hide_breadcrumb: false, on_close: function() {}, action_menu_id: null, additional_context: {}, @@ -403,7 +408,12 @@ instance.web.ActionManager = instance.web.Widget.extend({ widget: function () { return new instance.web.ViewManagerAction(self, action); }, action: action, klass: 'oe_act_window', - post_process: function (widget) { widget.add_breadcrumb(options.on_reverse_breadcrumb); } + post_process: function (widget) { + widget.add_breadcrumb({ + on_reverse_breadcrumb: options.on_reverse_breadcrumb, + hide_breadcrumb: options.hide_breadcrumb, + }); + }, }, options); }, ir_actions_client: function (action, options) { @@ -427,6 +437,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ widget: widget, title: action.name, on_reverse_breadcrumb: options.on_reverse_breadcrumb, + hide_breadcrumb: options.hide_breadcrumb, }); if (action.tag !== 'reload') { self.do_push_state({}); @@ -649,7 +660,8 @@ instance.web.ViewManager = instance.web.Widget.extend({ set_title: function(title) { this.$el.find('.oe_view_title_text:first').text(title); }, - add_breadcrumb: function(on_reverse_breadcrumb) { + add_breadcrumb: function(options) { + var options = options || {}; var self = this; var views = [this.active_view || this.views_src[0].view_type]; this.on('switch_mode', self, function(mode) { @@ -661,7 +673,7 @@ instance.web.ViewManager = instance.web.Widget.extend({ views.push(mode); } }); - this.getParent().push_breadcrumb({ + var item = _.extend({ widget: this, action: this.action, show: function(index) { @@ -695,9 +707,9 @@ instance.web.ViewManager = instance.web.Widget.extend({ titles.pop(); } return titles; - }, - on_reverse_breadcrumb: on_reverse_breadcrumb, - }); + } + }, options); + this.getParent().push_breadcrumb(item); }, /** * Returns to the view preceding the caller view in this manager's @@ -992,7 +1004,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ switch_mode: function (view_type, no_store, options) { var self = this; - return $.when(this._super.apply(this, arguments)).done(function () { + return this.alive($.when(this._super.apply(this, arguments))).done(function () { var controller = self.views[self.active_view].controller; self.$el.find('.oe_debug_view').html(QWeb.render('ViewManagerDebug', { view: controller, @@ -1263,6 +1275,7 @@ instance.web.View = instance.web.Widget.extend({ "view_id": this.view_id, "view_type": this.view_type, "toolbar": !!this.options.$sidebar, + "context": this.dataset.get_context(), }); } return view_loaded_def.then(function(r) { @@ -1351,7 +1364,7 @@ instance.web.View = instance.web.Widget.extend({ } else if (action_data.type=="action") { return this.rpc('/web/action/load', { action_id: action_data.name, - context: instance.web.pyeval.eval('context', context), + context: _.extend({'active_model': dataset.model, 'active_ids': dataset.ids, 'active_id': record_id}, instance.web.pyeval.eval('context', context)), do_not_eval: true }).then(handler); } else { @@ -1439,18 +1452,18 @@ instance.web.View = instance.web.Widget.extend({ is_action_enabled: function(action) { var attrs = this.fields_view.arch.attrs; return (action in attrs) ? JSON.parse(attrs[action]) : true; - } + }, }); /** * Performs a fields_view_get and apply postprocessing. * return a {$.Deferred} resolved with the fvg * - * @param {Object} [args] + * @param {Object} args * @param {String|Object} args.model instance.web.Model instance or string repr of the model - * @param {null|Object} args.context context if args.model is a string - * @param {null|Number} args.view_id id of the view to be loaded, default view if null - * @param {null|String} args.view_type type of view to be loaded if view_id is null + * @param {Object} [args.context] context if args.model is a string + * @param {Number} [args.view_id] id of the view to be loaded, default view if null + * @param {String} [args.view_type] type of view to be loaded if view_id is null * @param {Boolean} [args.toolbar=false] get the toolbar definition */ instance.web.fields_view_get = function(args) { @@ -1477,7 +1490,7 @@ instance.web.fields_view_get = function(args) { if (typeof model === 'string') { model = new instance.web.Model(args.model, args.context); } - return args.model.call('fields_view_get', [args.view_id, args.view_type, model.context(), args.toolbar]).then(function(fvg) { + return args.model.call('fields_view_get', [args.view_id, args.view_type, args.context, args.toolbar]).then(function(fvg) { return postprocess(fvg); }); }; @@ -1555,12 +1568,17 @@ instance.web.xml_to_str = function(node) { } else { throw new Error(_t("Could not serialize XML")); } - // Browsers won't deal with self closing tags except br, hr, input, ... - // http://stackoverflow.com/questions/97522/what-are-all-the-valid-self-closing-elements-in-xhtml-as-implemented-by-the-maj - // + // Browsers won't deal with self closing tags except void elements: + // http://www.w3.org/TR/html-markup/syntax.html + var void_elements = 'area base br col command embed hr img input keygen link meta param source track wbr'.split(' '); + // The following regex is a bit naive but it's ok for the xmlserializer output str = str.replace(/<([a-z]+)([^<>]*)\s*\/\s*>/g, function(match, tag, attrs) { - return "<" + tag + attrs + "></" + tag + ">"; + if (void_elements.indexOf(tag) < 0) { + return "<" + tag + attrs + "></" + tag + ">"; + } else { + return match; + } }); return str; }; diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 4ceb3a468d5..c27e16cbb79 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -71,9 +71,9 @@ </div> <ul> <li>Username</li> - <li><input name="login" type="text" t-att-value="widget.selected_login || ''" autofocus="autofocus"/></li> + <li><input name="login" type="text" value="" autofocus="autofocus"/></li> <li>Password</li> - <li><input name="password" type="password" t-att-value="widget.selected_password || ''"/></li> + <li><input name="password" type="password" value=""/></li> <li><button name="submit">Log in</button></li> </ul> </form> @@ -106,33 +106,47 @@ <div class="oe_view_manager_header" style="padding: 8px;"> <div class="oe_header_row"> <h2 class="oe_view_title"> - <span class="oe_view_title_text oe_breadcrumb_title">Create Database</span> + <span class="oe_view_title_text oe_breadcrumb_title">Create a New Database</span> </h2> - <button type="submit" class="oe_button oe_highlight db_create">Create</button> </div> </div> </div> - <table align="center" class="db_option_table"> + <p class="oe_grey" style="margin: 10px"> + Fill in this form to create an OpenERP database. You can + create databases for different companies or for different + goals (testing, production). Once the database is created, + you will be able to install your first application. + </p> + <p class="oe_grey" style="margin: 10px"> + By default, the master password is 'admin'. This password + is required to created, delete dump or restore databases. + </p> + <table class="db_option_table" style="margin: 10px"> <tr> <td><label for="super_admin_pwd">Master password:</label></td> - <td><input type="password" name="super_admin_pwd" class="required" value="admin" /></td> + <td> + <input type="password" name="super_admin_pwd" class="required" value="admin"/> + </td> </tr> <tr> - <td><label for="db_name">New database name:</label></td> - <td><input type="text" name="db_name" class="required" matches="^[a-zA-Z0-9][a-zA-Z0-9_-]+$" autofocus="true"/></td> + <td><label for="db_name">Select a database name:</label></td> + <td> + <input type="text" name="db_name" class="required" matches="^[a-zA-Z0-9][a-zA-Z0-9_-]+$" autofocus="true" placeholder="e.g. mycompany"/> + </td> </tr> <tr> - <td><label for="demo_data">Load Demonstration data:</label></td> + <td><label for="demo_data">Load demonstration data:</label></td> <td class="oe_form_group_cell"> - <span class="oe_form_field oe_form_field_boolean"> + <span class="oe_form_field oe_form_field_boolean oe_grey" > <input type="checkbox" name="demo_data" /> + Check this box to evaluate OpenERP. </span> </td> </tr> <tr> <td><label for="db_lang">Default language:</label></td> - <td class="oe_form_field oe_form_field_selection "> - <select name="db_lang" t-if="widget.lang_list"> + <td class="oe_form_field oe_form_field_selection"> + <select name="db_lang" t-if="widget.lang_list" class="oe_inline"> <t t-foreach="widget.lang_list" t-as="lang"> <option t-att-value="lang[0]" t-att-selected="lang[0] === 'en_US' ? 'selected' : undefined"> <t t-esc="lang[1]" /> @@ -142,13 +156,17 @@ </td> </tr> <tr> - <td><label for="create_admin_pwd">Admin password:</label></td> + <td><label for="create_admin_pwd">Choose a password:</label></td> <td><input type="password" name="create_admin_pwd" class="required" /></td> </tr> <tr> <td><label for="create_confirm_pwd">Confirm password:</label></td> <td><input type="password" name="create_confirm_pwd" class="required" equalTo="input[name=create_admin_pwd]"/></td> </tr> + <tr> + <td></td> + <td><button type="submit" class="oe_button oe_highlight db_create">Create Database</button></td> + </tr> </table> </form> <form id="db_duplicate" name="duplicate_db_form" style="display: none;"> @@ -632,7 +650,7 @@ <li t-if="section.name == 'files'" class="oe_sidebar_add_attachment"> <t t-call="HiddenInputFile"> <t t-set="fileupload_id" t-value="widget.fileupload_id"/> - <t t-set="fileupload_action">/web/binary/upload_attachment</t> + <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> <input type="hidden" name="model" t-att-value="widget.dataset and widget.dataset.model"/> <input type="hidden" name="id" t-att-value="widget.model_id"/> <input type="hidden" name="session_id" t-att-value="widget.session.session_id"/> @@ -1032,17 +1050,22 @@ </t> <t t-name="FieldText"> <div class="oe_form_field oe_form_field_text" t-att-style="widget.node.attrs.style"> - <textarea rows="6" - t-att-name="widget.name" - class="field_text" - t-att-tabindex="widget.node.attrs.tabindex" - t-att-autofocus="widget.node.attrs.autofocus" - t-att-placeholder="! widget.get('effective_readonly') ? widget.node.attrs.placeholder : ''" - t-att-maxlength="widget.field.size" - ></textarea><img class="oe_field_translate oe_input_icon" - t-if="widget.field.translate and !widget.get('effective_readonly')" - t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0" - /> + <t t-if="!widget.get('effective_readonly')"> + <textarea rows="6" + t-att-name="widget.name" + class="field_text" + t-att-tabindex="widget.node.attrs.tabindex" + t-att-autofocus="widget.node.attrs.autofocus" + t-att-placeholder="! widget.get('effective_readonly') ? widget.node.attrs.placeholder : ''" + t-att-maxlength="widget.field.size" + ></textarea><img class="oe_field_translate oe_input_icon" + t-if="widget.field.translate and !widget.get('effective_readonly')" + t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0" + /> + </t> + <t t-if="widget.get('effective_readonly')"> + <span class="oe_form_text_content"></span> + </t> </div> </t> <t t-name="FieldTextHtml"> @@ -1061,8 +1084,9 @@ t-att-name="widget.name" t-att-placeholder="placeholder" class="oe_datepicker_master" - /><img class="oe_input_icon oe_datepicker_trigger" t-att-src='_s + "/web/static/src/img/ui/field_calendar.png"' - title="Select date" width="16" height="16" border="0"/> + /><img class="oe_input_icon oe_datepicker_trigger" draggable="false" + t-att-src='_s + "/web/static/src/img/ui/field_calendar.png"' + title="Select date" width="16" height="16" border="0"/> </span> </t> <t t-name="FieldDate"> @@ -1087,6 +1111,34 @@ </select> </span> </t> +<t t-name="FieldRadio"> + <span t-attf-class="oe_form_field oe_form_field_radio #{widget.options.horizontal ? 'oe_horizontal' : 'oe_vertical'}" t-att-style="widget.node.attrs.style"> + <span t-if="!widget.get('effective_readonly')"> + <t t-if="widget.options.horizontal"> + <t t-set="width" t-value="Math.floor(100 / widget.selection.length)"/> + <t t-if="!widget.options.no_radiolabel"> + <t t-foreach="widget.selection" t-as="selection"> + <label t-att-for="widget.uniqueId + '_' + selection[0]" t-att-style="'width: ' + width + '%;'"><t t-esc="selection[1]"/></label> + </t> + <br/> + </t> + <t t-foreach="widget.selection" t-as="selection"> + <div t-att-style="'width: ' + width + '%;'"> + <span class="oe_radio_input"><input type="radio" t-att-name="widget.uniqueId" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-value="selection[0]"/></span> + </div> + </t> + </t> + <t t-if="!widget.options.horizontal"> + <t t-foreach="widget.selection" t-as="selection"> + <div> + <span class="oe_radio_input"><input type="radio" t-att-id="widget.uniqueId + '_' + selection[0]" t-att-name="widget.uniqueId" t-att-value="selection[0]"/></span><label t-if="!widget.options.no_radiolabel" t-att-for="widget.uniqueId + '_' + selection[0]"><t t-esc="selection[1]"/></label> + </div> + </t> + </t> + </span> + <span t-if="widget.get('effective_readonly')" class="oe_radio_readonly"><t t-esc="widget.get('value')[1]"/></span> + </span> +</t> <t t-name="FieldMany2One"> <span class="oe_form_field oe_form_field_many2one oe_form_field_with_button" t-att-style="widget.node.attrs.style"> <t t-if="widget.get('effective_readonly')"> @@ -1096,7 +1148,7 @@ </t> <t t-if="!widget.get('effective_readonly')"> <a t-if="! widget.options.no_open" href="#" tabindex="-1" - class="oe_m2o_cm_button oe_e">/</a> + class="oe_m2o_cm_button oe_e" draggable="false">/</a> <div> <input type="text" t-att-id="widget.id_for_label" @@ -1105,7 +1157,7 @@ t-att-placeholder="widget.node.attrs.placeholder" /> <span class="oe_m2o_drop_down_button"> - <img t-att-src='_s + "/web/static/src/img/down-arrow.png"'/> + <img t-att-src='_s + "/web/static/src/img/down-arrow.png"' draggable="false"/> </span> </div> </t> @@ -1266,8 +1318,9 @@ </t> <t t-name="FieldBinaryFileUploader.files"> <div class="oe_attachments"> - <t t-if="widget.get('value')"> - <t t-if="!widget.get('effective_readonly')" t-foreach="widget.get('value')" t-as="file"> + <t t-if="!widget.get('effective_readonly')"> + <t t-foreach="widget.get('value')" t-as="id"> + <t t-set="file" t-value="widget.data[id]"/> <div class="oe_attachment"> <span t-if="(file.upload or file.percent_loaded<100)" t-attf-title="{(file.name || file.filename) + (file.date?' \n('+file.date+')':'' )}" t-attf-name="{file.name || file.filename}"> <span class="oe_fileuploader_in_process">...Upload in progress...</span> @@ -1281,7 +1334,10 @@ </t> </div> </t> - <t t-if="widget.get('effective_readonly')" t-foreach="widget.get('value')" t-as="file"> + </t> + <t t-if="widget.get('effective_readonly')"> + <t t-foreach="widget.get('value')" t-as="id"> + <t t-set="file" t-value="widget.data[id]"/> <div> <a t-att-href="file.url" t-attf-title="{(file.name || file.filename) + (file.date?' \n('+file.date+')':'' )}"> <t t-raw="file.name || file.filename"/> @@ -1297,7 +1353,7 @@ <div class="oe_add" t-if="!widget.get('effective_readonly')"> <!-- uploader of file --> <button class="oe_attach"><span class="oe_e">'</span></button> - <span class='oe_attach_label'>File</span> + <span class='oe_attach_label'><t t-esc="widget.string"/></span> <t t-call="HiddenInputFile"> <t t-set="fileupload_id" t-value="widget.fileupload_id"/> <t t-set="fileupload_action" t-translation="off">/web/binary/upload_attachment</t> @@ -1496,8 +1552,9 @@ <t t-esc="attrs.string"/> </button> <ul t-name="SearchView.filters"> - <li t-foreach="widget.filters" t-as="filter" - t-att-title="filter.attrs.string ? filter.attrs.help : undefined"> + <li t-foreach="widget.filters" t-as="filter" t-if="!filter.visible || filter.visible()" + t-att-title="filter.attrs.string ? filter.attrs.help : undefined" + t-att-data-index="filter_index"> <t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/> </li> </ul> @@ -1584,15 +1641,6 @@ </div> </div> </t> -<t t-name="SearchView.group"> - <t t-call="SearchView.util.expand"> - <t t-set="expand" t-value="attrs.expand"/> - <t t-set="label" t-value="attrs.string"/> - <t t-set="content"> - <t t-call="SearchView.render_lines"/> - </t> - </t> -</t> <div t-name="SearchView.Filters" class="oe_searchview_filters oe_searchview_section"> </div> @@ -1823,7 +1871,7 @@ <tr> <td t-foreach="records[0]" t-as="column"> <input class="sel_fields" placeholder="--- Don't Import ---"/><span class="oe_m2o_drop_down_button"> - <img t-att-src='_s + "/web/static/src/img/down-arrow.png"' /></span> + <img t-att-src='_s + "/web/static/src/img/down-arrow.png"' draggable="false"/></span> </td> </tr> <tr t-foreach="records" t-as="record" class="oe_import_grid-row"> |
