diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml
index 260b4b3ea0b..39be1635d1a 100644
--- a/addons/product/product_demo.xml
+++ b/addons/product/product_demo.xml
@@ -209,7 +209,8 @@
-
+
+
On Site Monitoring
@@ -221,8 +222,12 @@
This type of service include basic monitoring of products.
This type of service include basic monitoring of products.
+
+
+
-
+
+
On Site Assistance
@@ -233,10 +238,13 @@
This type of service include assistance for security questions, system configuration requirements, implementation or special needs.
+
+
+
-
+
+
PC Assemble SC234
- PCSC234
450.0
@@ -249,10 +257,14 @@ Processor AMD 8-Core
512MB RAM
HDD SH-1
+
+
+ PCSC234
+
-
+
+
iPad Retina Display
- A2323
500.0
@@ -264,10 +276,14 @@ HDD SH-1
Dual-core A5 with quad-core graphics
FaceTime HD Camera, 1.2 MP Photos
+
+
+ A2323
+
-
+
+
Bose Mini Bluetooth Speaker
- B3423
600.0
@@ -278,10 +294,14 @@ FaceTime HD Camera, 1.2 MP Photos
Custom computer assembled on order based on customer's requirement.
Bose's smallest portable Bluetooth speaker
+
+
+ B3423
+
-
+
+
iPad Mini
- A1232
800.0
@@ -290,9 +310,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ A1232
+
+
+
Apple In-Ear Headphones
- A8767
70.0
@@ -301,9 +325,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ A8767
+
+
+
iMac
- A1090
1299.0
1799.0
@@ -311,9 +339,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ A1090
+
+
+
Apple Wireless Keyboard
- AK789
10.0
@@ -322,9 +354,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ AK789
+
+
+
Mouse, Optical
- M-Opt
12.50
@@ -333,10 +369,13 @@ FaceTime HD Camera, 1.2 MP Photos
+
+
+ M-Opt
+
-
+
iPod
- A6678
14
@@ -356,17 +395,17 @@ FaceTime HD Camera, 1.2 MP Photos
consu
-
+
+ A6678
32 Gb
12
-
+
-
+
Mouse, Wireless
- M-Wir
18
@@ -375,9 +414,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ M-Wir
+
+
+
RAM SR5
- RAM-SR5
78.0
@@ -386,9 +429,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ RAM-SR5
+
+
+
RAM SR2
- RAM-SR2
87.0
@@ -397,9 +444,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ RAM-SR2
+
+
+
RAM SR3
- RAM-SR3
80.0
@@ -408,9 +459,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ RAM-SR3
+
+
+
Computer Case
- C-Case
20.0
@@ -419,9 +474,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ C-Case
+
+
+
HDD SH-1
- HDD-SH1
860.0
@@ -430,9 +489,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ HDD-SH1
+
+
+
HDD SH-2
- HDD-SH2
1020.0
@@ -441,9 +504,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ HDD-SH2
+
+
+
HDD on Demand
- HDD-DEM
1100.0
@@ -453,9 +520,13 @@ FaceTime HD Camera, 1.2 MP Photos
On demand hard-disk having capacity based on requirement.
-
+
+
+ HDD-DEM
+
+
+
Motherboard I9P57
- MBi9
1700.0
@@ -464,9 +535,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ MBi9
+
+
+
Motherboard A20Z7
- MBa20
1790.0
@@ -475,9 +550,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ MBa20
+
+
+
Processor Core i5 2.70 Ghz
- CPUi5
2010.0
@@ -486,9 +565,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ CPUi5
+
+
+
Processor AMD 8-Core
- CPUa8
1910.0
@@ -497,9 +580,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ CPUa8
+
+
+
Graphics Card
- CARD
876.0
@@ -508,9 +595,13 @@ FaceTime HD Camera, 1.2 MP Photos
-
+
+
+ CARD
+
+
+
Laptop E5023
- LAP-E5
2870.0
@@ -523,9 +614,13 @@ FaceTime HD Camera, 1.2 MP Photos
Standard-1294P Processor
QWERTY keyboard
-
+
+
+ LAP-E5
+
+
+
Laptop S3450
- LAP-S3
3000.0
@@ -538,9 +633,13 @@ QWERTY keyboard
Hi-Speed 234Q Processor
QWERTY keyboard
-
+
+
+ LAP-S3
+
+
+
Laptop Customized
- LAP-CUS
3300.0
@@ -550,9 +649,13 @@ QWERTY keyboard
Custom Laptop based on customer's requirement.
-
+
+
+ LAP-CUS
+
+
+
External Hard disk
- EXT-HDD
390.0
@@ -561,10 +664,14 @@ QWERTY keyboard
+
+
+ EXT-HDD
+
-
+
+
Pen drive, SP-2
- PD-SP2
90.0
@@ -573,10 +680,14 @@ QWERTY keyboard
+
+
+ PD-SP2
+
-
+
+
Pen drive, SP-4
- PD-SP4
126.0
@@ -585,9 +696,13 @@ QWERTY keyboard
-
+
+
+ PD-SP4
+
+
+
Multimedia Speakers
- MM-SPK
134.0
@@ -597,9 +712,13 @@ QWERTY keyboard
.
-
+
+
+ MM-SPK
+
+
+
Headset standard
- HEAD
57.0
@@ -609,9 +728,13 @@ QWERTY keyboard
Hands free headset for laptop PC with in-line microphone and headphone plug.
-
+
+
+ HEAD
+
+
+
Headset USB
- HEAD-USB
60.0
@@ -621,10 +744,14 @@ QWERTY keyboard
Headset for laptop PC with USB connector.
+
+
+ HEAD-USB
+
-
+
+
Webcam
- WCAM
38.0
@@ -633,10 +760,14 @@ QWERTY keyboard
+
+
+ WCAM
+
-
+
+
Blank CD
- CD
18.40
20.0
@@ -644,10 +775,14 @@ QWERTY keyboard
+
+
+ CD
+
-
+
+
Blank DVD-RW
- DVD
21.60
24.0
@@ -655,10 +790,14 @@ QWERTY keyboard
+
+
+ DVD
+
-
+
+
Printer, All-in-one
- PRINT
4258.0
@@ -668,10 +807,14 @@ QWERTY keyboard
All in one hi-speed printer with fax and scanner.
+
+
+ PRINT
+
-
+
+
Ink Cartridge
- INK
60.0
@@ -680,10 +823,14 @@ QWERTY keyboard
+
+
+ INK
+
-
+
+
Toner Cartridge
- TONER
66.0
@@ -692,10 +839,14 @@ QWERTY keyboard
+
+
+ TONER
+
-
+
+
Windows 7 Professional
- Win7
330.0
@@ -704,10 +855,14 @@ QWERTY keyboard
+
+
+ Win7
+
-
+
+
Windows Home Server 2011
- WServer
540.0
@@ -716,10 +871,14 @@ QWERTY keyboard
+
+
+ WServer
+
-
+
+
Office Suite
- OSuite
110.0
@@ -729,10 +888,14 @@ QWERTY keyboard
Office Editing Software with word processing, spreadsheets, presentations, graphics, and databases...
+
+
+ OSuite
+
-
+
+
Zed+ Antivirus
- Zplus
235.0
@@ -741,10 +904,14 @@ QWERTY keyboard
+
+
+ Zplus
+
-
+
+
GrapWorks Software
- GRAPs/w
155.0
@@ -754,10 +921,14 @@ QWERTY keyboard
Full featured image editing software.
+
+
+ GRAPs/w
+
-
+
+
Router R430
- ROUT_430
55.0
@@ -766,10 +937,14 @@ QWERTY keyboard
+
+
+ ROUT_430
+
-
+
+
Datacard
- DC
35.0
@@ -778,10 +953,14 @@ QWERTY keyboard
+
+
+ DC
+
-
+
+
Switch, 24 ports
- SW24
55.0
@@ -790,10 +969,14 @@ QWERTY keyboard
+
+
+ SW24
+
-
+
+
USB Adapter
- ADPT
13.0
18.0
@@ -801,328 +984,333 @@ QWERTY keyboard
+
+
+ ADPT
+
+
-
+
3
1
-
+
3
1
-
+
3
1
-
+
3
1
-
+
2
5
-
+
4
1
-
+
2
1
-
+
2
1
-
+
5
1
-
+
5
1
-
+
5
1
-
+
1
1
-
+
1
1
-
+
3
1
-
+
3
1
-
+
4
5
-
+
3
1
-
+
2
1
-
+
3
1
-
+
3
1
-
+
3
1
-
+
8
1
-
+
8
1
-
+
4
1
-
+
5
1
-
+
2
12
-
+
2
12
-
+
2
5
-
+
2
12
-
+
2
5
-
+
2
1
-
+
2
1
-
+
4
1
-
+
4
1
-
+
5
1
-
+
5
1
-
+
7
1
-
+
4
1
-
+
4
0
-
+
5
0
-
+
2
0
-
+
4
0
-
+
10
0
-
+
3
0
-
+
5
0
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index baa6b6c780b..083f9f3aef7 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -51,11 +51,7 @@ class Website(openerp.addons.web.controllers.main.Home):
def index(self, **kw):
return self.page("website.homepage")
- @http.route('/admin', type='http', auth="none")
- def admin(self, *args, **kw):
- return super(Website, self).index(*args, **kw)
-
- # FIXME: auth, if /pagenew known anybody can create new empty page
+ # FIXME: auth, if /pagenew known anybody can create new empty page
@website.route('/pagenew/', type='http', auth="admin")
def pagenew(self, path, noredirect=NOPE):
module = 'website'
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py
index 1b680549164..d6ad607fa3f 100644
--- a/addons/website/models/ir_ui_view.py
+++ b/addons/website/models/ir_ui_view.py
@@ -11,8 +11,8 @@ class view(osv.osv):
'inherited_option_ids': fields.one2many('ir.ui.view','inherit_option_id','Optional Inheritancies'),
'page': fields.boolean("Whether this view is a web page template (complete)"),
'website_meta_title': fields.char("Website meta title", size=70, translate=True),
- 'website_meta_description': fields.text("Website meta description", translate=True),
- 'website_meta_keywords': fields.char("Website meta keywords", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
_defaults = {
'page': False,
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index ec9d56632f5..b3aaf611ddc 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -181,11 +181,12 @@ class website(osv.osv):
logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
return self.render(cr, uid, ids, 'website.404', qweb_context)
- try:
- main_object = request.registry[view_ref[0]].browse(cr, uid, view_ref[1])
- qweb_context['main_object'] = main_object
- except Exception:
- pass
+ if 'main_object' not in qweb_context:
+ try:
+ main_object = request.registry[view_ref[0]].browse(cr, uid, view_ref[1])
+ qweb_context['main_object'] = main_object
+ except Exception:
+ pass
try:
return view.render(
diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css
index ebcb7f43826..dc9bb076e59 100644
--- a/addons/website/static/src/css/editor.css
+++ b/addons/website/static/src/css/editor.css
@@ -1,3 +1,4 @@
+@charset "utf-8";
/* ---- CKEditor Minimal Reset ---- */
.navbar.navbar-inverse .cke_chrome {
border: none;
@@ -304,53 +305,87 @@ table.editorbar-panel td.selected {
}
/* ---- SNIPPETS DROP ZONES ---- */
-.oe_drop_zone.oe_insert {
- display: block;
- height: 48px;
- margin: 0px;
- margin-top: -4px;
- margin-bottom: -44px;
- -webkit-transition: margin 250ms linear;
- -moz-transition: margin 250ms linear;
- -o-transition: margin 250ms linear;
- transition: margin 250ms linear;
+#dark_for_dropzone {
width: 100%;
position: absolute;
+ top: 0;
+ left: 0;
+ opacity: 0.4;
z-index: 1000;
+ pointer-events: none;
}
-.oe_drop_zone.oe_insert:not(.oe_vertical):before {
- content: "";
- display: block;
- border-top: dashed 2px rgba(209, 178, 255, 0.72);
- position: relative;
- top: 0px;
+#dark_for_dropzone td {
+ background: black;
}
-.oe_drop_zone.oe_insert.oe_hover:before {
- border-top: dashed 2px rgba(116, 255, 161, 0.72);
-}
-.oe_drop_zone.oe_insert.oe_vertical {
- width: 48px;
- float: left;
- position: relative;
- margin: 0px -24px !important;
-}
-.oe_drop_zone.oe_insert.oe_overlay {
- border-radius: 3px;
- background: rgba(153, 0, 255, 0.5);
+#dark_for_dropzone td.center.active {
+ background: transparent;
}
.oe_drop_zone, .oe_drop_zone_style {
border: none;
- background: rgba(153, 0, 255, 0.3);
+ background: rgba(100, 255, 255, 0.9);
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
-ms-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
}
-.oe_drop_zone.oe_hover, .oe_drop_zone_style.oe_hover {
- background: rgba(0, 255, 133, 0.3);
- z-index: 1001;
+.oe_drop_zone div, .oe_drop_zone_style div {
+ margin: 0;
+ line-height: 48px;
+ text-align: center;
+ color: magenta;
+ font-weight: bold;
+ font-size: 24px;
+}
+.oe_drop_zone .oe_active, .oe_drop_zone_style .oe_active {
+ display: none;
+}
+
+.oe_drop_zone_style div {
+ line-height: 24px;
+}
+
+.oe_drop_zone {
+ display: block;
+ height: 48px;
+ margin: 0px;
+ margin-top: -4px;
+ margin-bottom: -44px;
+ z-index: 1002;
+ width: 100%;
+ position: absolute;
+}
+.oe_drop_zone:not(.oe_vertical):before {
+ content: "";
+ display: block;
+ border-top: dashed 2px rgba(209, 178, 255, 0.72);
+ position: relative;
+ top: 0px;
+}
+.oe_drop_zone.oe_hover:before {
+ border-top: dashed 2px rgba(116, 255, 161, 0.72);
+}
+.oe_drop_zone.oe_vertical {
+ width: 48px;
+ float: left;
+ position: relative;
+ margin: 4px -24px !important;
+}
+.oe_drop_zone.oe_vertical div {
+ display: none;
+}
+.oe_drop_zone.oe_overlay {
+ border-radius: 3px;
+}
+.oe_drop_zone.oe_drop_active {
+ background: rgba(100, 255, 255, 0.3);
+}
+.oe_drop_zone.oe_drop_active div {
+ display: none;
+}
+.oe_drop_zone.oe_drop_active .oe_active {
+ display: block;
}
.oe_drop_zone_style {
@@ -602,34 +637,29 @@ table.editorbar-panel td.selected {
/* ---- ACE EDITOR ---- */
.oe_ace_view_editor {
- -webkit-transition: all 0.2s ease-in;
- -moz-transition: all 0.2s ease-in;
- -o-transition: all 0.2s ease-in;
- transition: all 0.2s ease-in;
- filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=30);
- opacity: 0.3;
position: fixed;
top: 51px;
right: 0;
z-index: 1000;
height: 100%;
+ width: 720px;
}
.oe_ace_view_editor .oe_ace_view_editor_title {
width: 100%;
- padding-top: 4px;
- padding-left: 4px;
- height: 40px;
+ padding-top: 0;
+ padding-left: 0;
+ height: 30px;
background: #2f3129;
}
.oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list {
width: 50%;
- height: 32px;
+ height: 30px;
font-size: 14px;
font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace;
line-height: normal;
}
.oe_ace_view_editor .oe_ace_view_editor_title .btn {
- height: 32px;
+ height: 30px;
padding: 0 4px 0 4px;
font-size: 14px;
font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace;
@@ -637,21 +667,18 @@ table.editorbar-panel td.selected {
}
.oe_ace_view_editor .ace_editor {
position: absolute;
- top: 40px;
+ top: 30px;
right: 0;
bottom: 51px;
left: 0;
width: 720px;
}
-.oe_ace_view_editor:hover {
+.oe_ace_view_editor.oe_ace_open {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
opacity: 1;
}
-.oe_ace_view_editor.oe_ace_open {
- width: 720px;
-}
.oe_ace_view_editor.oe_ace_closed {
- width: 0;
+ z-index: -1000;
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
opacity: 0;
}
diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass
index 1ef6d67bb49..bc8b238736e 100644
--- a/addons/website/static/src/css/editor.sass
+++ b/addons/website/static/src/css/editor.sass
@@ -4,15 +4,15 @@
@import "compass/css3/user-interface"
@import "compass/css3/transition"
-//smartphones, iPhone, portrait 480x320 phones
+//smartphones, iPhone, portrait 480x320 phones
$smart_phone: 320px
//portrait e-readers (Nook/Kindle), smaller tablets @ 600 or @ 640 wide.*/
-$small-tablet: 481px
+$small-tablet: 481px
//portrait tablets, portrait iPad, landscape e-readers, landscape 800x480 or 854x480 phones
-$portrait-tablet: 641px
-//tablet, landscape iPad, lo-res laptops ands desktops
+$portrait-tablet: 641px
+//tablet, landscape iPad, lo-res laptops ands desktops
$tablet: 961px
-//big landscape tablets, laptops, and desktops
+//big landscape tablets, laptops, and desktops
$desktop: 1025px
/* ---- CKEditor Minimal Reset ---- */
@@ -179,7 +179,7 @@ table.editorbar-panel
background: black !important
> a
padding: 2px 10px !important
- width: 100%
+ width: 100%
display: block
border: 0
z-index: 1
@@ -189,13 +189,13 @@ table.editorbar-panel
display: inline-block
white-space: nowrap
background: black
- > div
+ > div
background: rgb(0,0,0)
label
width: 44px
color: #fff
padding-left: 10px
-
+
div
width: 100px
text-align: center
@@ -242,16 +242,45 @@ table.editorbar-panel
/* ---- SNIPPETS DROP ZONES ---- */
-.oe_drop_zone.oe_insert
+#dark_for_dropzone
+ width: 100%
+ position: absolute
+ top: 0
+ left: 0
+ opacity: 0.4
+ z-index: 1000
+ pointer-events: none
+ td
+ background: #000
+ &.center.active
+ background: transparent
+
+.oe_drop_zone, .oe_drop_zone_style
+ border: none
+ background: rgba(100, 255, 255, .9)
+ +border-radius(4px)
+ div
+ margin: 0
+ line-height: 48px
+ text-align: center
+ color: #FF00FF
+ font-weight: bold
+ font-size: 24px
+ .oe_active
+ display: none
+
+.oe_drop_zone_style div
+ line-height: 24px
+
+.oe_drop_zone
display: block
height: 48px
margin: 0px
margin-top: -4px
margin-bottom: -44px
- @include transition(margin 250ms linear)
+ z-index: 1002
width: 100%
position: absolute
- z-index: 1000
&:not(.oe_vertical):before
content: ""
display: block
@@ -264,22 +293,17 @@ table.editorbar-panel
width: 48px
float: left
position: relative
- margin: 0px -24px !important
+ margin: 4px -24px !important
+ div
+ display: none
&.oe_overlay
border-radius: 3px
- //@include background-image( repeating-linear-gradient(45deg, rgba(255,255,255,.1) ,rgba(255,255,255,.1) 35px, rgba(0,0,0,.1) 35px, rgba(0,0,0,.1) 75px))
- //background-size: 100px 100px
- background: rgba(153, 0, 255,.5)
-
-.oe_drop_zone, .oe_drop_zone_style
- border: none
- //@include background-image( repeating-linear-gradient(45deg, rgba(255,255,255,.1) ,rgba(255,255,255,.1) 35px, rgba(0,0,0,.1) 35px, rgba(0,0,0,.1) 75px))
- //background-size: 100px 100px
- background: rgba(153, 0, 255, .3)
- +border-radius(4px)
- &.oe_hover
- background: rgba(0, 255, 133, .3)
- z-index: 1001
+ &.oe_drop_active
+ background: rgba(100, 255, 255, .3)
+ div
+ display: none
+ .oe_active
+ display: block
.oe_drop_zone_style
color: white
@@ -293,7 +317,7 @@ table.editorbar-panel
display: none
position: absolute
background: transparent
- //@include background-image( repeating-linear-gradient(45deg, rgba(255,255,255,.02) ,rgba(255,255,255,.02) 35px, rgba(0,0,0,.02) 35px, rgba(0,0,0,.02) 75px))
+ //@include background-image( repeating-linear-gradient(45deg, rgba(255,255,255,.02) ,rgba(255,255,255,.02) 35px, rgba(0,0,0,.02) 35px, rgba(0,0,0,.02) 75px))
+border-radius(3px)
@include transition(opacity 100ms linear)
+box-sizing(border-box)
@@ -467,7 +491,7 @@ $highlighted_text_color: #ffffff
/* ---- ACE EDITOR ---- */
$ace_width: 720px
-$editorbar_height: 40px
+$editorbar_height: 30px
// TODO Fix => might break with themes
$navbar_height: 51px
@@ -476,25 +500,24 @@ $navbar_height: 51px
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace
line-height: normal
.oe_ace_view_editor
- @include transition(all 0.2s ease-in)
- +opacity(0.3)
position: fixed
top: $navbar_height
right: 0
z-index: 1000
height: 100%
+ width: $ace_width
.oe_ace_view_editor_title
width: 100%
- padding-top: 4px
- padding-left: 4px
+ padding-top: 0
+ padding-left: 0
height: $editorbar_height
background: #2F3129
.oe_view_list
width: 50%
- height: $editorbar_height - 8px
+ height: $editorbar_height
@include editor-font
.btn
- height: $editorbar_height - 8px
+ height: $editorbar_height
padding: 0 4px 0 4px
@include editor-font
.ace_editor
@@ -504,12 +527,10 @@ $navbar_height: 51px
bottom: $navbar_height
left: 0
width: $ace_width
- &:hover
- +opacity(1)
&.oe_ace_open
- width: $ace_width
+ +opacity(1)
&.oe_ace_closed
- width: 0
+ z-index: -1000
+opacity(0)
/* ---- EDITOR TOUR ---- */
diff --git a/addons/website/static/src/css/snippets.css b/addons/website/static/src/css/snippets.css
index 63e8fbefa76..c6bb24d04f0 100644
--- a/addons/website/static/src/css/snippets.css
+++ b/addons/website/static/src/css/snippets.css
@@ -216,5 +216,4 @@
[data-snippet-id] {
min-height: 10px;
min-width: 10px;
-}
-
+}
\ No newline at end of file
diff --git a/addons/website/static/src/css/website.css b/addons/website/static/src/css/website.css
index ce87e592136..c5b58815c67 100644
--- a/addons/website/static/src/css/website.css
+++ b/addons/website/static/src/css/website.css
@@ -235,7 +235,10 @@ footer {
}
.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child {
- position: static;
+ position: relative;
+}
+.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child div, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child div {
+ display: none;
}
.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before {
diff --git a/addons/website/static/src/css/website.sass b/addons/website/static/src/css/website.sass
index 5197653429c..2735dfe9fc8 100644
--- a/addons/website/static/src/css/website.sass
+++ b/addons/website/static/src/css/website.sass
@@ -161,7 +161,9 @@ footer
height: 220px !important
.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child
- position: static
+ position: relative
+ div
+ display: none
.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before
content: 'Click Edit To Create Content'
diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js
index 1a0417ff11a..faf3e8f7e04 100644
--- a/addons/website/static/src/js/website.ace.js
+++ b/addons/website/static/src/js/website.ace.js
@@ -66,6 +66,9 @@
});
website.ace.ViewEditor = openerp.Widget.extend({
+ resizing: false,
+ refX: 0,
+ minWidth: 40,
template: 'website.ace_view_editor',
events: {
'change #ace-view-list': 'displaySelectedView',
@@ -89,6 +92,32 @@
self.loadViews.call(self, views);
self.open.call(self);
});
+
+ var $editor = self.$('.ace_editor');
+ function resizeEditor (target) {
+ var width = Math.min(document.body.clientWidth, Math.max(parseInt(target, 10), self.minWidth));
+ $editor.width(width);
+ self.aceEditor.resize();
+ self.$el.width(width);
+ }
+ function startResizing (e) {
+ self.refX = e.pageX;
+ self.resizing = true;
+ }
+ function stopResizing () {
+ self.resizing = false;
+ }
+ function updateWidth (e) {
+ if (self.resizing) {
+ var offset = e.pageX - self.refX;
+ var width = self.$el.width() - offset;
+ self.refX = e.pageX;
+ resizeEditor(width);
+ }
+ }
+ document.body.addEventListener('mouseup', stopResizing, true);
+ self.$('.ace_gutter').mouseup(stopResizing).mousedown(startResizing).click(stopResizing);
+ $(document).mousemove(updateWidth);
},
loadViews: function (views) {
var self = this;
@@ -205,11 +234,7 @@
},
close: function () {
window.location.hash = "";
- var self = this;
- this.$el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () {
- globalEditor = null;
- self.destroy.call(self);
- }).removeClass('oe_ace_open').addClass('oe_ace_closed');
+ this.$el.removeClass('oe_ace_open').addClass('oe_ace_closed');
},
});
diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js
index 81fe087a59e..485ba48e35b 100644
--- a/addons/website/static/src/js/website.editor.js
+++ b/addons/website/static/src/js/website.editor.js
@@ -307,7 +307,7 @@
});
},
cancel: function () {
- window.location.href = window.location.href.replace(/unable_editor(=[^&]*)?|#.*/g, '');
+ website.reload();
},
});
@@ -394,7 +394,7 @@
// - contextmenu & tabletools (disable contextual menu)
// - bunch of unused plugins
var plugins = [
- 'a11yhelp', 'basicstyles', 'bidi', 'blockquote',
+ 'a11yhelp', 'basicstyles', 'blockquote',
'clipboard', 'colorbutton', 'colordialog', 'dialogadvtab',
'elementspath', 'enterkey', 'entities', 'filebrowser',
'find', 'floatingspace','format', 'htmlwriter', 'iframe',
@@ -927,7 +927,7 @@
}
- var Observer = window.MutationObserver || window.WebkitMutationObserver || window.JsMutationObserver;
+ website.Observer = window.MutationObserver || window.WebkitMutationObserver || window.JsMutationObserver;
var OBSERVER_CONFIG = {
childList: true,
attributes: true,
@@ -935,7 +935,7 @@
subtree: true,
attributeOldValue: true,
};
- var observer = new Observer(function (mutations) {
+ var observer = new website.Observer(function (mutations) {
// NOTE: Webkit does not fire DOMAttrModified => webkit browsers
// relying on JsMutationObserver shim (Chrome < 18, Safari < 6)
// will not mark dirty on attribute changes (@class, img/@src,
diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js
index 1f4e54b43df..963a0b1664d 100644
--- a/addons/website/static/src/js/website.js
+++ b/addons/website/static/src/js/website.js
@@ -38,7 +38,12 @@
return $.when.apply(null, dones);
};
website.reload = function () {
- window.location.href = window.location.href.replace(/unable_editor(=[^&]*)?|#.*/g, '');
+ location.hash = "scrollTop=" + window.document.body.scrollTop;
+ if (location.search.indexOf("unable_editor") > -1) {
+ window.location.href = window.location.href.replace(/unable_editor(=[^&]*)?/g, '');
+ } else {
+ window.location.reload();
+ }
};
var all_ready = null;
@@ -167,6 +172,11 @@
website.init_kanban(this);
});
+ setTimeout(function () {
+ if (window.location.hash.indexOf("scrollTop=") > -1) {
+ window.document.body.scrollTop = +location.hash.match(/scrollTop=([0-9]+)/)[1];
+ }
+ },0);
});
return website;
diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js
index 0d20253290a..342837f43c1 100644
--- a/addons/website/static/src/js/website.seo.js
+++ b/addons/website/static/src/js/website.seo.js
@@ -241,7 +241,8 @@
return hashIndex >= 0 ? url.substring(0, hashIndex) : url;
},
title: function () {
- return ($('title').length > 0) && $('title').text() && $('title').text().trim();
+ var $title = $('title');
+ return ($title.length > 0) && $title.text() && $title.text().trim();
},
changeTitle: function (title) {
// TODO create tag if missing
@@ -250,7 +251,7 @@
},
description: function () {
var $description = $('meta[name=description]');
- return ($description.length > 0) && $description.attr('value') && $description.attr('value').trim();
+ return ($description.length > 0) && ($description.attr('value') && $description.attr('value').trim());
},
changeDescription: function (description) {
// TODO create tag if missing
@@ -322,6 +323,9 @@
'click button[data-action=update]': 'update',
'hidden.bs.modal': 'destroy',
},
+ canEditTitle: false,
+ canEditDescription: false,
+ canEditKeywords: false,
maxTitleSize: 65,
maxDescriptionSize: 155,
start: function () {
@@ -331,13 +335,13 @@
$modal.find('.js_seo_page_url').text(htmlPage.url());
$modal.find('input[name=seo_page_title]').val(htmlPage.title());
$modal.find('textarea[name=seo_page_description]').val(htmlPage.description());
- self.suggestImprovements();
- self.imageList = new website.seo.ImageList(self, { page: htmlPage });
- if (htmlPage.images().length === 0) {
- $modal.find('.js_image_section').remove();
- } else {
- self.imageList.appendTo($modal.find('.js_seo_image_list'));
- }
+ // self.suggestImprovements();
+ // self.imageList = new website.seo.ImageList(self, { page: htmlPage });
+ // if (htmlPage.images().length === 0) {
+ // $modal.find('.js_image_section').remove();
+ // } else {
+ // self.imageList.appendTo($modal.find('.js_seo_image_list'));
+ // }
self.keywordList = new website.seo.KeywordList(self, { page: htmlPage });
self.keywordList.on('list-full', self, function () {
$modal.find('input[name=seo_page_keywords]')
@@ -356,8 +360,27 @@
self.keywordList.add(word);
});
self.keywordList.appendTo($modal.find('.js_seo_keywords_list'));
+ self.disableUnsavableFields();
$modal.modal();
},
+ disableUnsavableFields: function () {
+ var self = this;
+ var $modal = self.$el;
+ self.loadMetaData().then(function (data) {
+ self.canEditTitle = data && ('website_meta_title' in data);
+ self.canEditDescription = data && ('website_meta_description' in data);
+ self.canEditKeywords = data && ('website_meta_keywords' in data);
+ if (!self.canEditTitle) {
+ $modal.find('input[name=seo_page_title]').attr('disabled', true);
+ }
+ if (!self.canEditDescription) {
+ $modal.find('textarea[name=seo_page_description]').attr('disabled', true);
+ }
+ if (!self.canEditTitle && !canEditDescription && !canEditKeywords) {
+ $modal.find('button[data-action=update]').attr('disabled', true);
+ }
+ });
+ },
suggestImprovements: function () {
var tips = [];
var self = this;
@@ -397,11 +420,16 @@
},
update: function () {
var self = this;
- var data = {
- website_meta_title: self.htmlPage.title(),
- website_meta_description: self.htmlPage.description(),
- website_meta_keywords: self.keywordList.keywords().join(", "),
- };
+ var data = {};
+ if (self.canEditTitle) {
+ data.website_meta_title = self.htmlPage.title();
+ }
+ if (self.canEditDescription) {
+ data.website_meta_description = self.htmlPage.description();
+ }
+ if (self.canEditKeywords) {
+ data.website_meta_keywords = self.keywordList.keywords().join(", ");
+ }
self.saveMetaData(data).then(function () {
self.$el.modal('hide');
});
diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js
index e4e41e802fa..17dd829708f 100644
--- a/addons/website/static/src/js/website.snippets.js
+++ b/addons/website/static/src/js/website.snippets.js
@@ -24,6 +24,7 @@
},
save: function () {
this.snippets.make_active(false);
+ this.snippets.clean_for_save();
remove_added_snippet_id();
this._super();
},
@@ -44,7 +45,14 @@
/* ----- SNIPPET SELECTOR ---- */
website.snippet = {};
-
+ var observer = new website.Observer(function (mutations) {
+ if (!_(mutations).find(function (m) {
+ return m.type === 'childList' && m.addedNodes.length > 0;
+ })) {
+ return;
+ }
+ hack_to_add_snippet_id()
+ });
// puts $el at the same absolute position as $target
function hack_to_add_snippet_id () {
@@ -78,7 +86,12 @@
}
this.$active_snipped_id = false;
hack_to_add_snippet_id();
- $("body").on('DOMNodeInserted', hack_to_add_snippet_id);
+ this.snippets = [];
+
+ observer.observe(document.body, {
+ childList: true,
+ subtree: true,
+ });
},
dom_filter: function (dom, sibling) {
if (typeof dom === "string") {
@@ -206,6 +219,14 @@
}
}
},
+ clean_for_save: function () {
+ for (var k in this.snippets) {
+ var editor = $(this.snippets[k]).data("snippet-editor");
+ if (editor) {
+ editor.clean_for_save();
+ }
+ }
+ },
make_active: function ($snipped_id) {
if ($snipped_id && this.$active_snipped_id && this.$active_snipped_id.get(0) === $snipped_id.get(0)) {
return;
@@ -214,6 +235,9 @@
this.snippet_blur(this.$active_snipped_id);
}
if ($snipped_id) {
+ if(_.indexOf(this.snippets, $snipped_id.get(0)) === -1) {
+ this.snippets.push($snipped_id.get(0));
+ }
this.$active_snipped_id = $snipped_id;
this.create_overlay(this.$active_snipped_id);
this.snippet_focus($snipped_id);
@@ -295,17 +319,32 @@
}
+ var $dark = $(openerp.qweb.render('website.snippet_dark_for_dropzone'))
+ .css('height', $("body")[0].scrollHeight + 'px');
+ $("body").append($dark);
+
$('.oe_drop_zone').droppable({
over: function(){
if( action === 'insert'){
dropped = true;
- $(this).first().after($toInsert);
+ $(this).first().addClass("oe_drop_active").after($toInsert);
+ $dark.find("td:first")
+ .css('height', $toInsert.offset().top+'px');
+ $dark.find("tr:eq(1) td:first")
+ .css('width', $toInsert.offset().left+'px');
+ $dark.find("td.center")
+ .addClass("active")
+ .css('height', $toInsert.outerHeight()+'px')
+ .css('width', $toInsert.outerWidth()+'px');
}
},
out: function(){
if( action === 'insert'){
+ $(this).removeClass("oe_drop_active");
dropped = false;
$toInsert.detach();
+ $dark.find("td.center").removeClass("active");
+ $("body").scroll(); // trigger a scroll to reset position for jquery api
}
},
drop: function(){
@@ -314,15 +353,8 @@
});
},
stop: function(ev, ui){
- if (action === 'insert' && ! dropped) {
- var el = $('.oe_drop_zone').nearest({x: ui.position.left, y: ui.position.top}).first()
- if (el) {
- el.after($toInsert)
- dropped = true;
- }
- }
-
$('.oe_drop_zone').droppable('destroy').remove();
+ $("#dark_for_dropzone").remove();
if (dropped) {
var $target = false;
if(action === 'insert'){
@@ -373,7 +405,7 @@
var sibling_selector = selector.siblings;
var vertical_child_selector = selector.vertical_children;
- var zone_template = "";
+ var zone_template = openerp.qweb.render('website.snippet_drop_zone');
if(child_selector){
self.dom_filter(child_selector).each(function (){
@@ -393,7 +425,7 @@
var temp_left = 0;
$zone.find('> *:not(.oe_drop_zone):visible').each(function () {
var $col = $(this);
- $template.css('height', ($col.outerHeight() + parseInt($col.css("margin-top")) + parseInt($col.css("margin-bottom")))+'px');
+ $template.css('height', ($col.outerHeight() + parseInt($col.css("margin-top")) + parseInt($col.css("margin-bottom")) - 8)+'px');
$lastinsert = $template.clone();
$(this).after($lastinsert);
@@ -562,7 +594,8 @@
* Displayed into the overlay options on focus
*/
_readXMLData: function() {
- this.$el = this.parent.$snippets.siblings("[data-snippet-id='"+this.snippet_id+"']").clone();
+ var self = this;
+ this.$el = this.parent.$snippets.filter(function () { return $(this).data("snippet-id") == self.snippet_id; }).clone();
this.$editor = this.$el.find(".oe_snippet_options");
var $options = this.$overlay.find(".oe_overlay_options");
this.$editor.prependTo($options.find(".oe_options ul"));
@@ -597,18 +630,28 @@
});
},
_drag_and_drop_after_insert_dropzone: function (){},
- _drag_and_drop_active_drop_zone: function ($zones){
+ _drag_and_drop_active_drop_zone: function (){
var self = this;
- $zones.droppable({
+ var $dark = $("#dark_for_dropzone");
+ $('.oe_drop_zone').droppable({
over: function(){
- $(".oe_drop_zone.hide").removeClass("hide");
- $(this).addClass("hide").first().after(self.$target);
+ $(this).first().addClass("oe_drop_active").after(self.$target);
+ $dark.find("td:first")
+ .css('height', self.$target.offset().top+'px');
+ $dark.find("tr:eq(1) td:first")
+ .css('width', self.$target.offset().left+'px');
+ $dark.find("td.center")
+ .addClass("active")
+ .css('height', self.$target.outerHeight()+'px')
+ .css('width', self.$target.outerWidth()+'px');
self.dropped = true;
},
out: function(){
- $(this).removeClass("hide");
+ $(this).removeClass("oe_drop_active");
+ $dark.find("td.center").removeClass("active");
self.$target.detach();
self.dropped = false;
+ $("body").scroll(); // trigger a scroll to reset position for jquery api
},
});
},
@@ -632,8 +675,12 @@
$("body").addClass('move-important');
+ var $dark = $(openerp.qweb.render('website.snippet_dark_for_dropzone'))
+ .css('height', $("body")[0].scrollHeight + 'px');
+ $("body").append($dark);
+
self._drag_and_drop_after_insert_dropzone();
- self._drag_and_drop_active_drop_zone($('.oe_drop_zone'));
+ self._drag_and_drop_active_drop_zone();
},
_drag_and_drop_stop: function (){
var self = this;
@@ -643,6 +690,7 @@
self.$overlay.removeClass("hidden");
$("body").removeClass('move-important');
$('.oe_drop_zone').droppable('destroy').remove();
+ $('#dark_for_dropzone').remove();
$(".oe_drop_clone, .oe_drop_to_remove").remove();
self.parent.editor_busy = false;
self.get_parent_block();
@@ -718,8 +766,9 @@
start: function () {
var self = this;
this.$overlay.on('click', '.oe_snippet_remove', function () {
- self.$target.detach();
self.onBlur();
+ var index = _.indexOf(self.parent.snippets, self.$target.get(0));
+ delete self.parent.snippets[index];
self.$target.remove();
return false;
});
@@ -749,10 +798,18 @@
this.$overlay.removeClass('oe_active');
},
+ /* clean_for_save
+ * function called just before save vue
+ */
+ clean_for_save: function () {
+
+ },
+
change_background: function (bg, ul_options) {
var self = this;
this.set_options_background(bg, ul_options);
var $ul = this.$editor.find(ul_options);
+ var bg_value = (typeof bg === 'string' ? this.$target.find(bg) : $(bg)).css("background-image").replace(/url\(['"]*|['"]*\)/g, "");
// bind envent on options
var $li = $ul.find("li");
@@ -931,23 +988,25 @@
_drag_and_drop_after_insert_dropzone: function(){
var self = this;
- var $zones = $(".row:has(> .oe_drop_zone)").each(function () {
- var $row = $(this);
- var width = $row.innerWidth();
- var pos = 0;
- while (width > pos + self.size.width) {
- var $last = $row.find("> .oe_drop_zone:last");
- $last.each(function () {
- pos = $(this).position().left;
- });
- if (width > pos + self.size.width) {
- $row.append("");
- var $add_drop = $last.clone();
- $row.append($add_drop);
- self._drag_and_drop_active_drop_zone($add_drop);
- }
- }
- });
+ // commented for perf
+
+ // var $zones = $(".row:has(> .oe_drop_zone)").each(function () {
+ // var $row = $(this);
+ // var width = $row.innerWidth();
+ // var pos = 0;
+ // while (width > pos + self.size.width) {
+ // var $last = $row.find("> .oe_drop_zone:last");
+ // $last.each(function () {
+ // pos = $(this).position().left;
+ // });
+ // if (width > pos + self.size.width) {
+ // $row.append("");
+ // var $add_drop = $last.clone();
+ // $row.append($add_drop);
+ // self._drag_and_drop_active_drop_zone($add_drop);
+ // }
+ // }
+ // });
},
_drag_and_drop_start: function () {
this._super();
@@ -983,6 +1042,11 @@
},
});
+ website.snippet.animationRegistry.carousel = website.snippet.Animation.extend({
+ start: function () {
+ this.$target.carousel();
+ },
+ });
website.snippet.editorRegistry.carousel = website.snippet.editorRegistry.resize.extend({
build_snippet: function() {
var id = 0;
@@ -1005,6 +1069,13 @@
this._super();
this.$target.carousel('cycle');
},
+ clean_for_save: function () {
+ this._super();
+ this.$target.find(".item").removeClass("next prev left right");
+ if(!this.$target.find(".item.active").length) {
+ this.$target.find(".item:first").addClass("active");
+ }
+ },
start : function () {
this._super();
@@ -1029,18 +1100,14 @@
self.$target.carousel();
});
- this.$target.on('dblclick', '.item.active .carousel-image img', function (event) {
- $('#oe_rte_toolbar .cke_button__image .cke_button__image_icon').click();
- });
-
this.rebind_event();
},
// rebind event to active carousel on edit mode
rebind_event: function () {
var self = this;
- this.$target.on('click', '.carousel-control', function () {
+ this.$target.off('click').on('click', '.carousel-control', function () {
self.$target.carousel($(this).data('slide')); });
- this.$target.on('click', '.carousel-indicators [data-target]', function () {
+ this.$target.off('click').on('click', '.carousel-indicators [data-target]', function () {
self.$target.carousel(+$(this).data('slide-to')); });
},
on_add: function (e) {
@@ -1050,8 +1117,13 @@
var index = $active.index();
this.$target.find('.carousel-control, .carousel-indicators').removeClass("hidden");
this.$indicators.append('');
- $active.clone().removeClass('active').insertAfter($active);
+
+ var $clone = this.$el.find(".item.active").clone();
+ var bg = this.$editor.find('ul[name="carousel-background"] li:not([data-value="'+ $active.css("background-image").replace(/.*:\/\/[^\/]+|\)$/g, '') +'"]):first').data("value");
+ $clone.css("background-image", "url('"+ bg +"')");
+ $clone.removeClass('active').insertAfter($active);
this.$target.carousel().carousel(++index);
+ this.rebind_event();
},
on_remove: function (e) {
e.preventDefault();
@@ -1068,7 +1140,8 @@
});
setTimeout(function () {
new_index = index % cycle;
- self.$target.carousel( new_index + 1 );
+ self.$target.carousel().carousel( new_index + 1 );
+ self.rebind_event();
}, 500);
} else {
this.$target.find('.carousel-control, .carousel-indicators').addClass("hidden");
diff --git a/addons/website/static/src/xml/website.seo.xml b/addons/website/static/src/xml/website.seo.xml
index 96a38a75d32..580779283ad 100644
--- a/addons/website/static/src/xml/website.seo.xml
+++ b/addons/website/static/src/xml/website.seo.xml
@@ -48,12 +48,13 @@
+
+ -->
diff --git a/addons/website_blog/controllers/main.py b/addons/website_blog/controllers/main.py
index 7d40e080636..81b0610cb11 100644
--- a/addons/website_blog/controllers/main.py
+++ b/addons/website_blog/controllers/main.py
@@ -150,6 +150,13 @@ class WebsiteBlog(http.Controller):
'unable_editor': post.get('unable_editor')
}
+ if blog_post:
+ values['main_object'] = blog_post
+ elif tag:
+ values['main_object'] = tag
+ elif category:
+ values['main_object'] = category
+
return request.website.render("website_blog.index", values)
@website.route(['/blog/nav'], type='http', auth="public")
@@ -178,7 +185,7 @@ class WebsiteBlog(http.Controller):
url = request.httprequest.host_url
request.session.body = post.get('body')
if request.context['is_public_user']: # purpose of this ?
- return '%s/admin#action=redirect&url=%s/blog/%s/post' % (url, url, blog_post_id)
+ return '%s/web#action=redirect&url=%s/blog/%s/post' % (url, url, blog_post_id)
if request.session.get('body') and blog_post_id:
request.registry['blog.post'].message_post(
diff --git a/addons/website_blog/models/website_blog.py b/addons/website_blog/models/website_blog.py
index b1d188bf8cc..9f4a214a8b9 100644
--- a/addons/website_blog/models/website_blog.py
+++ b/addons/website_blog/models/website_blog.py
@@ -41,6 +41,9 @@ class BlogCategory(osv.Model):
'blog.post', 'category_id',
'Blogs',
),
+ 'website_meta_title': fields.char("Website meta title", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
@@ -54,6 +57,9 @@ class BlogTag(osv.Model):
'blog_post_ids': fields.many2many(
'blog.post', string='Posts',
),
+ 'website_meta_title': fields.char("Website meta title", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
@@ -144,6 +150,9 @@ class BlogPost(osv.Model):
'res.users', 'Last Contributor',
select=True, readonly=True,
),
+ 'website_meta_title': fields.char("Website meta title", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
def create_history(self, cr, uid, ids, vals, context=None):
diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py
index 54091a0fbb2..16b76c58213 100644
--- a/addons/website_event/controllers/main.py
+++ b/addons/website_event/controllers/main.py
@@ -154,9 +154,10 @@ class website_event(http.Controller):
@website.route(['/event/'], type='http', auth="public", multilang=True)
def event(self, event_id=None, **post):
event_obj = request.registry['event.event']
+ event = event_obj.browse(request.cr, request.uid, event_id, dict(request.context, show_address_only=1))
values = {
- 'event_id': event_obj.browse(request.cr, request.uid, event_id,
- dict(request.context, show_address_only=1)),
+ 'event_id': event,
+ 'main_object': event,
'range': range,
'float': float,
}
diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py
index 0362b5845b7..237b0fcead2 100644
--- a/addons/website_event/models/event.py
+++ b/addons/website_event/models/event.py
@@ -45,6 +45,9 @@ class event(osv.osv):
string='Website Messages',
help="Website communication history",
),
+ 'website_meta_title': fields.char("Website meta title", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
_defaults = {
'website_published': False,
diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py
index 04ebbeaf39e..f48464335eb 100644
--- a/addons/website_sale/models/product.py
+++ b/addons/website_sale/models/product.py
@@ -50,6 +50,9 @@ class product_template(osv.Model):
'website_style_ids' : fields.many2many('website.product.style','product_website_style_rel', 'product_id', 'style_id', 'Styles'),
'website_sequence': fields.integer('Sequence', help="Determine the display order in the Website E-commerce"),
'website_url': fields.function(_website_url, string="Website url"),
+ 'website_meta_title': fields.char("Website meta title", size=70, translate=True),
+ 'website_meta_description': fields.text("Website meta description", size=160, translate=True),
+ 'website_meta_keywords': fields.char("Website meta keywords", translate=True),
}
_defaults = {
'website_size_x': 1,
diff --git a/addons/website_sale/views/website_sale.xml b/addons/website_sale/views/website_sale.xml
index b458c36aa0e..a263a01ed2e 100644
--- a/addons/website_sale/views/website_sale.xml
+++ b/addons/website_sale/views/website_sale.xml
@@ -623,7 +623,7 @@