[MERGE] Sync with main branch

bzr revid: tde@openerp.com-20130923082728-uo43x67ej7vgxeea
This commit is contained in:
Thibault Delavallée
2013-09-23 10:27:28 +02:00
40 changed files with 546 additions and 287 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

+10 -9
View File
@@ -6,7 +6,7 @@
<field eval="[(4, ref('base.group_sale_salesman'))]" name="groups_id"/>
</record>
<!--
<!--
Resource: product.category
-->
@@ -227,7 +227,7 @@ HDD SH-1</field>
</record>
<record id="product_product_4" model="product.product">
<field name="name">PC Assemble SC349</field>
<field name="name">iPad Retina Display</field>
<field name="default_code">PCSC349</field>
<field name="categ_id" ref="product_category_4"/>
<field name="public_categ_id" ref="Computer_all_in_one"/>
@@ -236,14 +236,13 @@ HDD SH-1</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description_sale">19" LCD Monitor
Processor Core i5 2.70 Ghz
2GB RAM
HDD SH-1</field>
<field name="description_sale">7.9‑inch (diagonal) LED-backlit, 128Gb
Dual-core A5 with quad-core graphics
FaceTime HD Camera, 1.2 MP Photos</field>
</record>
<record id="product_product_5" model="product.product">
<field name="name">PC Assemble + Custom (PC on Demand)</field>
<field name="name">Bose Mini Bluetooth Speaker</field>
<field name="default_code">PC-DEM</field>
<field name="categ_id" ref="product_category_4"/>
<field name="public_categ_id" ref="services"/>
@@ -253,9 +252,11 @@ HDD SH-1</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">Custom computer assembled on order based on customer's requirement.</field>
<field name="description_sale">Bose's smallest portable Bluetooth speaker</field>
</record>
<record id="product_product_6" model="product.product">
<field name="name">iPad Mini</field>
<field name="name">15” LCD Monitor</field>
<field name="default_code">LCD15</field>
<field name="categ_id" ref="product_category_8"/>
@@ -278,7 +279,7 @@ HDD SH-1</field>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
<record id="product_product_8" model="product.product">
<field name="name">USB Keyboard, QWERTY</field>
<field name="name">iPod Accessory</field>
<field name="default_code">KeyQ</field>
<field name="categ_id" ref="product_category_8"/>
<field name="public_categ_id" ref="Keyboard_Mouse"/>
@@ -311,7 +312,7 @@ HDD SH-1</field>
<field name="uom_po_id" ref="product_uom_unit"/>
</record>
<record id="product_product_11" model="product.product">
<field name="name">Mouse, Laser</field>
<field name="name">iPod</field>
<field name="default_code">M-Las</field>
<field name="categ_id" ref="product_category_8"/>
<field name="public_categ_id" ref="Keyboard_Mouse"/>
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

+34 -11
View File
@@ -7,7 +7,7 @@
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website">
<img src="">
<img src="website_home.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div>
@@ -45,7 +45,7 @@
</div>
<div class="oe_span6">
<div class="oe_bg_img oe_centered">
<img class="oe_picture" src="">
<img class="oe_picture oe_screenshot" src="website_edit.png">
</div>
</div>
</div>
@@ -56,7 +56,7 @@
<h2 class="oe_slogan">Awsome. Astonishingly Beautiful.</h2>
<h3 class="oe_slogan">Professional themes and building blocks</h3>
<div class="oe_span6">
<img class="oe_picture oe_screenshot" src="">
<img class="oe_picture oe_screenshot" src="website_theme.png">
</div>
<div class="oe_span6">
<p class='oe_mt32'>
@@ -86,16 +86,16 @@
references, "our team" page, blogs, newsletters, etc.
</p><p>
Traditional eCommerce and CMS have poor backends as it's not their
core focus. The OpenERP integration allows you to benefit from the
core focus. With the OpenERP integration, you benefit from the
best management software to follow-up on your orders, your jobs
applicants, your leads, etc.
</p><p>
You don't need anymore to synchronize your management software and
your ecommerce.
You don't have to synchronize your management software and
your ecommerce. It works out-of-the-box.
</p>
</div>
<div class="oe_span6">
<img class="oe_picture oe_screenshot" src="">
<img class="oe_picture oe_screenshot" src="website_events.png">
</div>
</div>
</section>
@@ -106,7 +106,7 @@
<h3 class="oe_slogan">Responsive content on all pages</h3>
<div class="oe_span6">
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="">
<img class="oe_picture oe_screenshot" src="website_mobile.png">
</div>
</div>
<div class="oe_span6">
@@ -139,7 +139,7 @@
</div>
<div class="oe_span6">
<div class="oe_bg_img">
<img class="oe_picture oe_screenshot" src="">
<img class="oe_picture oe_screenshot" src="website_seo.png">
</div>
</div>
</div>
@@ -182,18 +182,41 @@
CSS and our modularity allows to distribute your themes easily.
</p><p>
The building block approach allows the website to remain clean
after the end-users start creating new contents.
after the end-users start creating new contents. The template
editor allows advanced customization without development.
</p>
</div>
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture" src="">
<img class="oe_picture oe_screenshot" src="website_editor.png">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row">
<h2 class="oe_slogan">Fuild Grid Layouting</h2>
<h3 class="oe_slogan">Organize building blocks easily</h3>
<div class="oe_span6">
<div class="oe_row_img oe_centered">
<img class="oe_picture oe_screenshot" src="website_grid.png">
</div>
</div>
<div class="oe_span6">
<p class='oe_mt32'>
Design perfect pages by drag and droping building blocks and scale
them to fit the layout you are looking for.
</p><p>
Building blocks are based on a responsive, mobile friendly fluid
grid system that appropriately scales up to 12 columns as the
device or viewport size increases.
</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row">
<h2 class="oe_slogan">Fully Integrated With Others Apps</h2>
<h3 class="oe_slogan">Get hundreds of open source apps for free</h3>
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

+12 -36
View File
@@ -283,32 +283,19 @@ table.editorbar-panel td.selected {
/* ---- SNIPPET MANIPULATOR ---- */
.oe_overlay {
display: block;
display: none;
position: absolute;
background: transparent;
border-radius: 3px;
opacity: 0;
transition: opacity 100ms linear;
box-sizing: border-box;
pointer-events: none;
}
.oe_overlay.oe_hover {
opacity: 1;
cursor: pointer;
}
.oe_overlay.oe_selected, .oe_overlay.oe_active {
opacity: 1;
.oe_overlay.oe_active {
display: block;
border-style: dashed;
border-width: 1px;
box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.3), 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset;
}
.oe_overlay.oe_selected {
border-color: rgba(0, 153, 255, 0.5);
}
.oe_overlay .oe_handle {
display: none !important;
}
.oe_overlay.oe_active {
border-color: rgba(153, 0, 255, 0.5);
}
.oe_overlay.oe_active .oe_handle {
@@ -356,39 +343,22 @@ table.editorbar-panel td.selected {
width: 100%;
text-align: center;
top: -11px;
display: none;
z-index: 1002;
}
.oe_overlay .oe_overlay_options > * {
margin: 0 -2px 0 -3px;
display: inline-block;
}
.oe_overlay .oe_overlay_options * {
border-radius: 0;
}
.oe_overlay .oe_overlay_options .btn, .oe_overlay .oe_overlay_options a {
pointer-events: auto;
cursor: pointer;
}
.oe_overlay .oe_overlay_options .dropdown {
display: inline-block;
}
.oe_overlay .oe_overlay_options .dropdown-menu {
text-align: left;
min-width: 180px;
}
.oe_overlay .oe_overlay_options .oe_label {
position: absolute;
top: 3px;
right: 6px;
background: white;
font-size: 75%;
color: rgba(153, 0, 255, 0.5);
padding: 0 5px;
}
.oe_overlay .oe_overlay_options .dropdown-menu select, .oe_overlay .oe_overlay_options .dropdown-menu input {
display: block;
}
.oe_overlay.oe_active .oe_overlay_options {
display: block;
}
.oe_handle {
pointer-events: auto;
@@ -550,10 +520,16 @@ table.editorbar-panel td.selected {
.oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list {
width: 50%;
height: 32px;
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;
padding: 0 4px 0 4px;
font-size: 14px;
font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace;
line-height: normal;
}
.oe_ace_view_editor .ace_editor {
position: absolute;
+11 -28
View File
@@ -249,27 +249,18 @@ table.editorbar-panel
/* ---- SNIPPET MANIPULATOR ---- */
.oe_overlay
display: block
display: none
position: absolute
background: transparent
border-radius: 3px
opacity: 0
transition: opacity 100ms linear
box-sizing: border-box
pointer-events: none
&.oe_hover
opacity: 1
cursor: pointer
&.oe_selected, &.oe_active
opacity: 1
&.oe_active
display: block
border-style: dashed
border-width: 1px
box-shadow: 0px 0px 0px 1px rgba(255,255,255,0.3), 0px 0px 0px 1px rgba(255,255,255,0.3) inset
&.oe_selected
border-color: rgba(0, 153, 255, 0.5)
.oe_handle
display: none !important
&.oe_active
border-color: rgba(153, 0, 255, 0.5)
.oe_handle
display: block !important
@@ -310,31 +301,17 @@ table.editorbar-panel
width: 100%
text-align: center
top: -11px
display: none
z-index: 1002
> *
margin: 0 -2px 0 -3px
display: inline-block
*
border-radius: 0
.btn, a
pointer-events: auto
cursor: pointer
.dropdown
display: inline-block
.dropdown-menu
text-align: left
min-width: 180px
.oe_label
position: absolute
top: 3px
right: 6px
background: #fff
font-size: 75%
color: rgba(153, 0, 255, 0.5)
padding: 0 5px
.dropdown-menu select,.dropdown-menu input
display: block
&.oe_active .oe_overlay_options
display: block
.oe_handle
pointer-events: auto
@@ -460,6 +437,10 @@ $editorbar_height: 40px
// TODO Fix => might break with themes
$navbar_height: 51px
@mixin editor-font
font-size: 14px
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace
line-height: normal
.oe_ace_view_editor
transition: all 0.2s ease-in
-webkit-transition: all 0.2s ease-in
@@ -481,9 +462,11 @@ $navbar_height: 51px
.oe_view_list
width: 50%
height: $editorbar_height - 8px
@include editor-font
.btn
height: $editorbar_height - 8px
padding: 0 4px 0 4px
@include editor-font
.ace_editor
position: absolute
top: $editorbar_height
@@ -17,7 +17,7 @@
'hidden.bs.modal': 'destroy'
},
start: function () {
document.getElementById("mobile-viewport").src = window.location.href + "?mobile-preview=true";
document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview";
this.$el.modal();
},
});
+2 -4
View File
@@ -16,7 +16,7 @@
website.seo = {};
function analyzeKeyword(htmlPage, keyword) {
return htmlPage.isInTitle(keyword) ? {
return htmlPage.isInTitle(keyword) ? {
title: 'keyword-in-title',
description: "This keyword is used in the page title",
} : htmlPage.isInDescription(keyword) ? {
@@ -350,8 +350,6 @@
});
self.keywordList.appendTo($modal.find('.js_seo_keywords_list'));
$modal.modal();
// Avoid the 'Edit' button in the background boucing needlessly
$modal.on('click', function (e) { e.stopPropagation(); });
},
suggestImprovements: function () {
var tips = [];
@@ -410,7 +408,7 @@
setTimeout(function () {
var title = self.$('input[name=seo_page_title]').val();
self.htmlPage.changeTitle(title);
}, 1);
}, 0);
},
descriptionChanged: function () {
var self = this;
@@ -7,7 +7,7 @@
website.EditorBar.include({
start: function () {
var self = this;
$("body").on('click', function (event) {
$("[data-oe-model]").on('click', function (event) {
var tag = event.srcElement.tagName.toLowerCase();
var $this = $(event.srcElement);
if (!(tag === 'a' || tag === "button") && !$this.parents("a, button").length) {
@@ -86,19 +86,19 @@
},
dom_filter: function (dom) {
if (typeof dom === "string") {
var exclude = ":not(#oe_manipulators):not(#website-top-navbar):not(.oe_snippet)";
var include = "[data-oe-model]";
var sdom = dom.split(',');
dom = "";
_.each(sdom, function (val) {
val = val.replace(/^\s+|\s+$/g, '');
dom += "body > " + exclude + " " + val + ", ";
dom += "body " + include + " " + val + ", ";
val = val.split(" ");
dom += "body > "+ val.shift() + exclude + val.join(" ") + ", ";
dom += "body "+ val.shift() + include + val.join(" ") + ", ";
});
dom = dom.replace(/,\s*$/g, '');
return $(dom);
} else {
return $(dom).parents("#oe_manipulators, #website-top-navbar").length || $(dom).hasClass("oe_snippet") ? $("") : $(dom);
return $(dom).is("[data-oe-model]") || $(dom).parents("[data-oe-model]").length ? $(dom) : $("");
}
},
start: function() {
@@ -208,7 +208,7 @@
}
self.make_active($target);
});
$("body > :not(:has(#website-top-view)):not(#oe_manipulators)").on('click', function (ev) {
$("[data-oe-model]").on('click', function (ev) {
if (!snipped_event_flag && self.$active_snipped_id && !self.$active_snipped_id.parents("[data-snippet-id]:first")) {
self.make_active(false);
}
@@ -276,14 +276,14 @@
if($target.length && !self.editor_busy) {
if($selected_target != $target){
if($selected_target && $selected_target.data('overlay')){
$selected_target.data('overlay').removeClass('oe_selected');
$selected_target.data('overlay').removeClass('oe_hover');
}
$selected_target = $target;
self.create_overlay($target);
$target.data('overlay').addClass('oe_selected');
$target.data('overlay').addClass('oe_hover');
}
} else if($selected_target && $selected_target.data('overlay')) {
$selected_target.data('overlay').removeClass('oe_selected');
$selected_target.data('overlay').removeClass('oe_hover');
}
});
},
@@ -861,7 +861,6 @@
var cursor = $handle.css("cursor")+'-important';
$("body").addClass(cursor);
self.$overlay.addClass('oe_hover');
var body_mousemove = function (event){
event.preventDefault();
@@ -940,10 +939,16 @@
var beginCol = Number(beginClass.match(/col-md-([0-9]+)|$/)[1] || 0);
var beginOffset = Number(beginClass.match(/col-md-offset-([0-9-]+)|$/)[1] || beginClass.match(/col-lg-offset-([0-9-]+)|$/)[1] || 0);
var offset = Number(this.grid.w[0][current].match(/col-md-offset-([0-9-]+)|$/)[1] || 0);
if (offset < 0) {
offset = 0;
}
var colSize = beginCol - (offset - beginOffset);
if (colSize <= 0) {
colSize = 1;
offset = beginOffset + beginCol - 1;
}
this.$target.attr("class",this.$target.attr("class").replace(/\s*(col-lg-offset-|col-md-offset-|col-md-)([0-9-]+)/g, ''));
var colSize = beginCol - (offset - beginOffset);
this.$target.addClass('col-md-' + (colSize > 12 ? 12 : colSize));
if (offset > 0) {
this.$target.addClass('col-md-offset-' + offset);
@@ -6,8 +6,8 @@
<div class="modal-content">
<div class="modal-header">
<button title="Close" type="button" class="close" data-dismiss="modal">×</button>
<h2 class="modal-title">Promote <small class="js_seo_page_url"></small></h2>
<h4>Get your page efficiently referenced in Google to attract more visitors.</h4>
<h3 class="modal-title js_seo_page_url"></h3>
<h4 class="text-muted">Get this page efficiently referenced in Google to attract more visitors.</h4>
</div>
<div class="modal-body">
<div class="js_seo_tips" />
@@ -73,14 +73,16 @@
<t t-name="website.snippet_overlay">
<div class="oe_overlay">
<div class="oe_overlay_options">
<a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Get Container Block"><span class="glyphicon glyphicon-open"/></a>
<div class="dropdown oe_options hidden">
<a href="#" data-toggle="dropdown" class="btn btn-default btn-sm" title="Customize">Customize <span class="caret"/></a>
<ul class="dropdown-menu" role="menu"></ul>
<div class="btn-group">
<a href="#" class="btn btn-default btn-sm oe_snippet_parent" title="Get Container Block"><span class="glyphicon glyphicon-open"/></a>
<div class="dropdown oe_options hidden btn-group">
<a href="#" data-toggle="dropdown" class="btn btn-default btn-sm" title="Customize">Customize <span class="caret"/></a>
<ul class="dropdown-menu" role="menu"></ul>
</div>
<a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate"><span class="glyphicon glyphicon-tags"/></a>
<a href="#" class="btn btn-default btn-sm oe_snippet_move" title="move"><span class="glyphicon glyphicon-move"/></a>
<a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove"><span class="glyphicon glyphicon-remove"/></a>
</div>
<a href="#" class="btn btn-default btn-sm oe_snippet_clone" title="Duplicate"><span class="glyphicon glyphicon-tags"/></a>
<a href="#" class="btn btn-default btn-sm oe_snippet_move" title="move"><span class="glyphicon glyphicon-move"/></a>
<a href="#" class="btn btn-default btn-sm oe_snippet_remove" title="Remove"><span class="glyphicon glyphicon-remove"/></a>
</div>
</div>
</t>
@@ -179,7 +181,7 @@
<a href="/page/website.contactus" class="btn btn-success btn-large">Contact us</a>
</p>
</div>
<div class="carousel-image">
<div class="carousel-image hidden-xs">
<img src="/website/static/src/img/banner/banner_picture.png" alt="Banner OpenERP Image"/>
</div>
</div>
@@ -244,8 +246,8 @@
<section class="oe_snippet_body">
<div class="container">
<div class="row">
<div class="col-md-6">
<h3 class="mt48">Enterprise Social Network</h3>
<div class="col-md-6 mt32">
<h3>Enterprise Social Network</h3>
<p>
Make every employee feel more connected and engaged
with twitter-like features for your own company. Follow
@@ -258,8 +260,8 @@
and business applications.
</p>
</div>
<div class="col-md-6">
<img class="img-responsive shadow mt32 mb32" src="/website/static/src/img/text_image.png"/>
<div class="col-md-6 mt16 mb16">
<img class="img-responsive shadow" src="/website/static/src/img/text_image.png"/>
</div>
</div>
</div>
@@ -274,11 +276,11 @@
<section class="oe_snippet_body">
<div class="container">
<div class="row">
<div class="col-md-6">
<img class="img-responsive shadow mt32 mb32" src="/website/static/src/img/image_text.jpg"/>
<div class="col-md-6 mt16 mb16">
<img class="img-responsive shadow" src="/website/static/src/img/image_text.jpg"/>
</div>
<div class="col-md-6">
<h3 class="mt48">Manage Your Shops</h3>
<div class="col-md-6 mt32">
<h3>Manage Your Shops</h3>
<p>
OpenERP's Point of Sale introduces a super clean
interface with no installation required that runs
@@ -344,10 +346,10 @@
<div class="container">
<div class="row">
<div class="col-md-12 text-center mt16 mb32">
<h1>
OpenERP Project Management<br/>
<small>Infinitely flexible. Incredibly easy to use.</small>
</h1>
<h2>
OpenERP Project Management
</h2>
<h3 class="text-muted">Infinitely flexible. Incredibly easy to use.</h3>
</div>
<div class="col-md-12 mb16 mt16">
<p>
@@ -357,7 +359,7 @@
minute details, from the customer contract to the
billing.
</p><p>
Organize projects around your own processes. Work
Organize projects around <b>your own processes</b>. Work
on tasks and issues using the kanban view, schedule
tasks using the gantt chart and control deadlines
in the calendar view. Every project may have it's
@@ -369,6 +371,16 @@
</section>
</div>
<div t-name="website.snippets.title" data-snippet-id='title' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'>
<div class="oe_snippet_thumbnail">Title</div>
<div class="oe_snippet_body row">
<div class="col-md-12">
<h2>Your Website Title</h2>
<h3 class="text-muted">Great products for great people</h3>
</div>
</div>
</div>
<div t-name="website.snippets.hr" data-snippet-id='hr' data-category='structure' data-selector-children='.oe_structure, [data-oe-type=html]'>
<div class="oe_snippet_thumbnail">
<hr style="position: absolute;top: 61px;margin: 0;width: 100%;border-color: #888;"/>
@@ -395,7 +407,7 @@
<section class="oe_snippet_body dark mt16 mb16">
<div class="container">
<div class="row">
<div class="col-md-12 text-center mt32 mb16">
<div class="col-md-12 text-center mt32 mb32">
<h2>Work with the hardware you already have...</h2>
</div>
<div class="col-md-12">
@@ -730,7 +742,6 @@
</section>
</div>
<div t-name="website.snippets.references" data-snippet-id='references' data-category='business' data-selector-children='.oe_structure, [data-oe-type=html]'>
<div class='oe_snippet_thumbnail'>References</div>
<section class="oe_snippet_body mb32 mt16">
@@ -744,8 +755,8 @@
More than 500 happy customers.
</h3>
</div>
<div class="col-md-4 col-md-offset-1">
<blockquote class="mt16 mb32" data-snippet-id="quote">
<div class="col-md-4 col-md-offset-1 mt16 mb32">
<blockquote data-snippet-id="quote">
<p>
OpenERP provides essential platform for our project management.
Things are better organized and more visible with it.
@@ -753,8 +764,8 @@
<small>John Doe, CEO</small>
</blockquote>
</div>
<div class="col-md-4 col-md-offset-2">
<blockquote class="mt16 mb32" data-snippet-id="quote">
<div class="col-md-4 col-md-offset-2 mt16 mb32">
<blockquote data-snippet-id="quote">
<p>
OpenERP provides essential platform for our project management.
Things are better organized and more visible with it.
+1 -1
View File
@@ -11,7 +11,7 @@
<div id="wrap" t-if="editable">
<div class="container">
<div class="alert alert-info" t-if="theme_changed">
<div class="alert alert-info mt32" t-if="theme_changed">
<button type="button" class="close" data-dismiss="alert">&amp;times;</button>
<p>
<h4>Theme Changed!</h4>
+1 -1
View File
@@ -70,7 +70,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/page/website.homepage"><em>Open</em><b>ERP</b></a>
<a class="navbar-brand" href="/page/website.homepage"><em>Your</em><b>Company</b></a>
</div>
<div class="collapse navbar-collapse navbar-top-collapse">
<ul class="nav navbar-nav navbar-right" id="top_menu">
+2
View File
@@ -15,6 +15,8 @@ OpenERP E-Commerce
'views/website_sale.xml',
'security/ir.model.access.csv',
'security/website_sale.xml',
],
'demo': [
'website_sale_demo.xml',
],
'qweb': ['static/src/xml/*.xml'],
+6 -2
View File
@@ -63,8 +63,7 @@ class Ecommerce(http.Controller):
product_obj = request.registry.get('product.template')
domain = [("sale_ok", "=", True)]
if SUPERUSER_ID != request.uid:
domain += [('website_published', '=', True)]
domain += [('website_published', '=', True)]
if post.get("search"):
domain += ['|', '|', '|',
@@ -109,9 +108,14 @@ class Ecommerce(http.Controller):
request.context['pricelist'] = self.get_pricelist()
category = None
if post.get('category_id') and int(post.get('category_id')):
category = category_obj.browse(request.cr, request.uid, int(post.get('category_id')), context=request.context)
product = product_obj.browse(request.cr, request.uid, product_id, context=request.context)
values = {
'category_id': post.get('category_id') and int(post.get('category_id')) or None,
'category': category,
'search': post.get("search"),
'categories': self.get_categories(),
'category_list': category_list,
@@ -7,7 +7,7 @@
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.openerp.com/saas_master/demo?lang=en_US&module=website_sale">
<img src="">
<img src="website_sale_home.png">
</a>
<div class="oe_demo_footer oe_centeralign">Online Demo</div>
</div>
@@ -43,7 +43,7 @@
</div>
<div class="oe_span6">
<div class="oe_bg_img oe_centered">
<img class="oe_picture" src="">
<img class="oe_picture" src="website_sale_product.png">
</div>
</div>
</div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

@@ -0,0 +1,2 @@
sass:
sass -t expanded --unix-newlines --watch website_sale.sass:website_sale.css&
@@ -1,34 +1,88 @@
.css_product {
width: 170px;
margin-left: 16px;
}
.css_product .css_content {
height: 174px;
margin-bottom: 6px;
@charset "utf-8";
/* ---- Default Styles Description ---- */
.oe_product_image {
position: absolute;
left: 15px;
right: 15px;
top: 15px;
bottom: 50px;
}
.ellipsis {
overflow: hidden;
position: relative;
.oe_product_description {
bottom: 0;
position: absolute;
left: 15px;
right: 15px;
border-top: 1px solid #dddddd;
}
.ellipsis .end {
position: absolute;
bottom: 0;
right: 0;
text-align: right;
width: 26px;
background-size: 100% 100%;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAABCAMAAACfZeZEAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wDWRdwAAAP90Uk5TgsRjMZXhS30YrvDUP3Emow1YibnM9+ggOZxrBtpRRo94gxItwLOoX/vsHdA2yGgL8+TdKUK8VFufmHSGgAQWJNc9tk+rb5KMCA8aM0iwpWV6dwP9+fXuFerm3yMs0jDOysY8wr5FTldeoWKabgEJ8RATG+IeIdsn2NUqLjQ3OgBDumC3SbRMsVKsValZplydZpZpbJOQco2KdYeEe36BDAL8/vgHBfr2CvTyDu8R7esU6RcZ5ecc4+Af3iLcJSjZ1ivT0S/PMs3LNck4x8U7wz7Bv0G9RLtHuEq1TbJQr1OtVqqnWqRdoqBhnmSbZ5mXapRtcJGOc4t2eYiFfH9AS7qYlgAAARlJREFUKM9jqK9fEGS7VNrDI2+F/nyB1Z4Fa5UKN4TbbeLY7FW0Tatkp3jp7mj7vXzl+4yrDsYoVx+JYz7mXXNSp/a0RN25JMcLPP8umzRcTZW77tNyk63tdprzXdmO+2ZdD9MFe56Y9z3LUG96mcX02n/CW71JH6Qmf8px/cw77ZvVzB+BCj8D5vxhn/vXZh6D4uzf1rN+Cc347j79q/zUL25TPrJMfG/5LvuNZP8rixeZz/mf+vU+Vut+5NL5gPOeb/sd1dZbTs03hBuvmV5JuaRyMfk849nEM7qnEk6IHI8/qn049hB35QGHiv0yZXuMdkXtYC3ebrglcqvYxoj1muvC1nDlrzJYGbpcdHHIMo2FwYv+j3QAAOBSfkZYITwUAAAAAElFTkSuQmCC);
background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white), color-stop(50%, white));
background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
background: linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
.oe_shop_top .oe_product_description {
top: 0;
bottom: auto;
border-top-style: none;
}
.oe_shop_top .oe_product_image {
top: 15px;
bottom: 50px;
}
.oe_shop_center .oe_product_description {
text-align: center;
border-top-style: none;
}
/* Products Options */
.oe_product.oe_image_full .oe_product_image {
left: 0;
right: 0;
top: 0;
bottom: 0;
}
/* ---- Default Styles ---- */
.oe_product {
border: 1px solid rgba(100, 100, 100, 0.2);
}
.oe_product .oe_product_image img {
max-width: 100%;
max-height: 100%;
z-index: 4;
}
.oe_product_description {
background: rgba(255, 255, 255, 0.8);
padding: 5px 0 5px 0;
z-index: 5;
}
.oe_subdescription {
line-height: 1.2;
margin-bottom: 4px;
}
/* ---- Grid Style ---- */
.style1 .oe_product .oe_product_image {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
/* ---- Product Sizes ---- */
.oe-height-1 {
height: 170px;
}
.oe-height-2 {
height: 255px;
}
.oe-height-3 {
height: 340px;
}
.oe-height-4 {
height: 510px;
}
.ellipsis .fill {
background: #fff;
height: 100%;
position: absolute;
width: 100%;
}
@@ -0,0 +1,86 @@
@charset "utf-8"
/* ---- Default Styles Description ---- */
.oe_product_image
position: absolute
left: 15px
right: 15px
top: 15px
bottom: 50px
.oe_product_description
bottom: 0
position: absolute
left: 15px
right: 15px
border-top: 1px solid #dddddd
.oe_shop_top /* Option 1 */
.oe_product_description
top: 0
bottom: auto
border-top-style: none
.oe_product_image
top: 15px
bottom: 50px
.oe_shop_center /* Option 2 */
.oe_product_description
text-align: center
border-top-style: none
/* Products Options */
.oe_product.oe_image_full
.oe_product_image
left: 0
right: 0
top: 0
bottom: 0
/* ---- Default Styles ---- */
.oe_product
border: 1px solid rgba(100,100,100,0.2)
.oe_product .oe_product_image img
max-width: 100%
max-height: 100%
z-index: 4
.oe_product_description
background: rgba(255,255, 255, 0.8)
padding: 5px 0 5px 0
z-index: 5
.oe_subdescription
line-height: 1.2
margin-bottom: 4px
/* ---- Grid Style ---- */
.style1
.oe_product .oe_product_image
position: absolute
left: 0
right: 0
top: 0
bottom: 0
/* ---- Product Sizes ---- */
.oe-height-1
height: 170px
.oe-height-2
height: 255px
.oe-height-3
height: 340px
.oe-height-4
height: 510px
Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB

+168 -107
View File
@@ -64,44 +64,6 @@
</li>
</xpath>
</template>
<!-- Page Shop -->
<template id="layout" name="Products Layout">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<t t-raw="head or ''"/>
</t>
<t t-set="title">Shop - <t t-raw="title">Categories</t></t>
<div id="wrap">
<div class="oe_structure"/>
<div class="container oe_website_sale">
<div class="row">
<div class="col-md-12" id="shop_content">
<t t-raw="shop_content" />
</div>
</div>
</div>
</div>
</t>
</template>
<template id="products_categories" inherit_id="website_sale.layout" inherit_option_id="website_sale.layout" name="Left Product Categories">
<xpath expr="//div[@id='shop_content']" position="before">
<div class="col-md-3">
<ul class="nav nav-pills nav-stacked">
<li t-att-class=" '' if category_id else 'active' " class='active'><a href="/shop/">All Products</a></li>
<t t-foreach="categories" t-as="category">
<t t-call="website_sale.categories_recursive"/>
</t>
</ul>
</div>
</xpath>
<xpath expr="//div[@id='shop_content']" position="attributes">
<attribute name="class">col-md-9</attribute>
</xpath>
</template>
<!-- List of categories -->
<template id="categories_recursive">
@@ -118,91 +80,163 @@
<!-- Product list -->
<template id="products" page="True">
<t t-call="website_sale.layout">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<link rel='stylesheet' href='/website_sale/static/src/css/website_sale.css'/>
<t t-raw="head or ''"/>
</t>
<t t-set="title">Product</t>
<t t-set="shop_content">
<a t-if="editable" t-attf-href="/shop/#{ category_id and ('category/%s/' % category_id) or ''}add_product/" class="btn btn-default pull-right">Create New Product</a>
<div t-if="editable" class="clearfix"/>
<t t-call="website.pager">
<t t-set="classname">pull-left</t>
</t>
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right pagination">
<input type="text" name="search" class="search-query col-md-2 form-control" placeholder="Search" t-att-value="search or '' or ''"/>
</form>
<div class="clearfix"/>
<div class='row grid grid-align-top'>
<t t-foreach="products" t-as="product">
<div class="css_product col-md-2 mb16 thumbnail text-center" data-publish="">
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
<div class="ellipsis css_content">
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&amp;category_id=%s' % category_id) or ''}" style="text-decoration: none; display: block;">
<h5 t-field="product.name"> </h5>
<img class="img-rounded" t-att-src="product.img('image_small')"/>
</a>
<small t-field="product.description_sale"></small>
<span class="end">&amp;#133;</span><span class="fill"></span>
</div>
<div>
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
<small class="text-error" style="text-decoration: line-through;"><t t-esc="product.product_variant_ids[0].lst_price" /> €</small>
</t>
<b><t t-esc="product.product_variant_ids[0].price" /> €</b>
</div>
<div class="mb8 mt8">
<a t-attf-href="./add_cart/?product_id=#{ product.id }" class="btn btn-default btn-sm btn-success">Add to basket</a>
</div>
<t t-set="title">Our Products</t>
<div id="wrap">
<div class="oe_structure"/>
<div class="container oe_website_sale">
<div class="row">
<div class="col-sm-4">
<h1>Our Products</h1>
</div><div class="col-sm-4 pagination text-center">
<a t-if="editable" t-attf-href="/shop/#{ category_id and ('category/%s/' % category_id) or ''}add_product/" class="btn btn-default">New Product</a>
</div><div class="col-sm-4">
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right pagination">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-search"/></span>
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search or ''"/>
</div>
</form>
<t t-call="website.pager">
<t t-set="classname">pull-left</t>
</t>
</div>
</div>
<div class='row style_default'>
<div class="col-md-12" id="products_grid">
<t t-foreach="products" t-as="product">
<div t-attf-class="col-md-#{ product.website_sizex } oe_product oe-height-#{ product.website_sizey } #{ product.website_product_class}" t-att-data-publish="product.website_published" data-snippet-id="colmd">
<div class="oe_product_description">
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&amp;category_id=%s' % category_id) or ''}">
<b t-field="product.name"/>
</a>
<!-- This should be an option -->
<div t-if="product.description_sale" class="text-muted oe_subdescription">
<!-- TODO: replace by a smart t-field on field.text: description_sale -->
<small t-raw="product.description_sale.replace('\n','&lt;br/&gt;') "/>
</div>
<div>
<b>
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
<span class="text-danger" style="text-decoration: line-through;">
<t t-esc="product.product_variant_ids[0].lst_price" /> €
</span>&amp;nbsp;
</t>
<t t-esc="product.product_variant_ids[0].price" /> €
</b>
<a t-attf-href="./add_cart/?product_id=#{ product.id }">
<span class="icon-shopping-cart"/>
</a>
</div>
</div>
<div class="oe_product_image text-center">
<a t-attf-href="/shop/product/#{ product.id }/?#{ search and ('search=%s' % search) or ''}#{ category_id and ('&amp;category_id=%s' % category_id) or ''}">
<img class="img" t-att-src="product.img('image')"/>
</a>
</div>
</div>
</t>
</div>
</div>
<div class="text-center">
<t t-call="website.pager" />
</div>
</t>
</div>
<div class="oe_structure mb32"/>
</div>
</t>
</template>
<!-- product -->
<template id="product" name="Product">
<t t-call="website_sale.layout">
<t t-set="title">Product</t>
<t t-set="shop_content">
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right">
<input type="text" name="search" class="search-query col-md-2 form-control" placeholder="Search..." t-att-value="search or '' or ''"/>
</form>
<div class="clearfix"/>
<div id="product_detail">
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
<h1 t-field="product.name">Product Name</h1>
<a t-if="len(product.product_variant_ids) &lt;= 1" t-attf-href="./add_cart/?product_id=#{ product.id }" class="btn btn-default btn-sm btn-success pull-right">Add to basket</a>
<form t-if="len(product.product_variant_ids) > 1" action="./add_cart/" class="pull-right">
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="product">
<input type="radio" name="product_id" t-att-value="product.id" t-att-checked="product == product.product_variant_ids[0] or None"/>
<t t-esc="product.variants or ''">Standard</t>
<span class="badge" t-if="product.price_extra"><t t-esc="product.price_extra > 0 and '+' or ''"/><t t-esc="product.price_extra"/> €</span>
</label><br/>
<button class="btn btn-sm btn-success">Add to basket</button>
</form>
<div class="pull-right">
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
<h5 class="text-error" style="text-decoration: line-through;" title="Price without reduction"><t t-field="product.product_variant_ids[0].lst_price" /> €</h5>
<h4><t t-esc="product.product_variant_ids[0].price" /> €</h4>
</t>
<h4 t-if="product.product_variant_ids[0].lst_price == product.product_variant_ids[0].price"><t t-field="product.product_variant_ids[0].lst_price" /> €</h4>
</div>
<img class="media-object img-responsive" t-att-src="product.img('image_medium')"/>
<div t-field="product.website_description"></div>
</div>
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
</t>
<t t-set="title" t-raw="product.name"/>
<div id="wrap">
<section class="container mt8">
<div class="row">
<div class="col-sm-5">
<ol class="breadcrumb">
<li><a href="/shop">Products</a></li>
<li t-if="category"><a t-att-href="'/shop/category/%s' % (category_id,)"><t t-field="category.name"/></a></li>
<li class="active" t-field="product.name">Product Name</li>
</ol>
</div><div class="col-sm-3">
<t t-call="website.publish"><t t-set="object" t-value="product"/></t>
</div><div class="col-sm-3 col-sm-offset-1">
<form t-attf-action="/shop/#{ category_id and ('category/%s/' % category_id) or ''}" method="get" class="pull-right">
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-search"/></span>
<input type="text" name="search" class="search-query form-control" placeholder="Search..." t-att-value="search or ''"/>
</div>
</form>
</div>
</div>
</section>
<section class="container oe_website_sale mb16" id="product_detail">
<div class="row">
<div class="col-sm-7 col-md-7 col-lg-7">
<img class="img" t-att-src="product.img('image')" style="max-height: 500px"/>
</div><div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1">
<h1 t-field="product.name">Product Name</h1>
<form action="./add_cart/">
<input type="hidden" t-if="len(product.product_variant_ids) &lt;= 1" name="product_id" t-att-value="product.id"/>
<t t-if="len(product.product_variant_ids) &gt; 1">
<label label-default="label-default" class="radio" t-foreach="product.product_variant_ids" t-as="product">
<input type="radio" name="product_id" t-att-value="product.id" t-att-checked="product == product.product_variant_ids[0] or None"/>
<t t-esc="product.variants or ''">Standard</t>
<span class="badge" t-if="product.price_extra">
<t t-esc="product.price_extra > 0 and '+' or ''"/><t t-esc="product.price_extra"/> €
</span>
</label>
<br/>
</t>
<div>
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
<h5 class="text-error" style="text-decoration: line-through;" title="Price without reduction"><t t-field="product.product_variant_ids[0].lst_price" /> €</h5>
<h4><t t-esc="product.product_variant_ids[0].price" /> €</h4>
</t>
<h4 t-if="product.product_variant_ids[0].lst_price == product.product_variant_ids[0].price">
<b><t t-field="product.product_variant_ids[0].lst_price" /> €</b>
</h4>
</div>
<button class="btn btn-primary btn-lg mt8">Add to Cart</button>
<hr t-if="product.description_sale"/>
<p t-field="product.description_sale" class="text-muted"/>
<hr/>
<p class="text-muted">
30-day money-back guarantee<br/>
Free Shipping in U.S.<br/>
Buy now, get in 2 days
</p>
</form>
</div>
</div>
</section>
<div t-field="product.website_description" class="oe_structure" id="product_full_description"/>
</div>
</t>
</template>
<template id="recommended_products" inherit_id="website_sale.product" inherit_option_id="website_sale.product" name="Recommended Products">
<xpath expr="//div[@id='product_detail']" position="inside">
<div class="mt32" t-if="product.recommended_products()">
<xpath expr="//div[@id='product_full_description']" position="after">
<div class="container mt32" t-if="product.recommended_products()">
<h3>Customers who have bought this product also bought:</h3>
<div class='row mt16' style="margin-left: 15px !important;">
<t t-foreach="product.recommended_products()" t-as="product">
@@ -223,9 +257,14 @@
<!-- Page Shop my cart -->
<template id="mycart" name="My cart" page="True">
<t t-call="website_sale.layout">
<t t-set="title">My cart</t>
<t t-set="shop_content">
<t t-call="website.layout">
<t t-set="head">
<script type="text/javascript" src="/website_sale/static/src/js/website_sale.js"></script>
<t t-raw="head or ''"/>
</t>
<t t-set="title">Your Cart</t>
<div id="wrap">
<div class="container oe_website_sale">
<div class="col-md-12 oe_mycart">
<h1>My Shopping Cart</h1>
<table class='table' id="mycart_products">
@@ -288,9 +327,31 @@
</table>
<a t-if="website_sale_order and website_sale_order.order_line" href="/shop/checkout/" class="btn btn-success">Proceed To Payment</a>
</div>
</t>
</div>
<div class="oe_structure"/>
</div>
</t>
</template>
<!-- Page Shop -->
<template id="products_categories" inherit_option_id="website_sale.products" name="Product Categories">
<xpath expr="//div[@id='products_grid']" position="before">
<div class="col-md-3">
<ul class="nav nav-pills nav-stacked mt16">
<li t-att-class=" '' if category_id else 'active' "><a href="/shop/">All Products</a></li>
<t t-foreach="categories" t-as="category">
<t t-call="website_sale.categories_recursive"/>
</t>
</ul>
</div>
</xpath>
<xpath expr="//div[@id='products_grid']" position="attributes">
<attribute name="class">col-md-9</attribute>
</xpath>
</template>
<template id="suggested_products_list" inherit_id="website_sale.mycart" inherit_option_id="website_sale.mycart" name="Suggested Products in list view">
<xpath expr="//table[@id='mycart_products']" position="after">
<table t-if="suggested_products" class='table table-hover table-condensed'>
+8
View File
@@ -36,6 +36,14 @@ class product_template(osv.osv):
'website_description': fields.html('Description for the website'),
'suggested_product_id': fields.many2one('product.template', 'Suggested For Product'),
'suggested_product_ids': fields.one2many('product.template', 'suggested_product_id', 'Suggested Products'),
'website_sizex': fields.selection(map(lambda x: (str(x+1),str(x+1)), range(12)), 'Size X'),
'website_sizey': fields.selection(map(lambda x: (str(x+1),str(x+1)), range(6)), 'Size Y'),
'website_product_class': fields.selection([('','Default'), ('oe_image_full','Image Full')], 'Size Y'),
}
_defaults = {
'website_sizex': 3,
'website_sizey': 2,
'website_product_class': '',
}
def recommended_products(self, cr, uid, ids, context=None):
+53 -8
View File
@@ -1,24 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<data noupdate="0">
<record id="product.product_product_consultant" model="product.product">
<field name="website_published" eval="True"/>
</record>
<record id="product.product_product_1" model="product.product">
<field name="website_published" eval="True"/>
</record>
<record id="product.product_product_2" model="product.product">
<field name="website_published" eval="True"/>
<field name="image" file="website/static/description/website_edit.png"/>
</record>
<record id="product.product_product_4" model="product.product">
<field name="website_published" eval="True"/>
<field name="website_product_class">oe_image_full</field>
<field name="website_sizex">6</field>
<field name="website_sizey">4</field>
<field name="website_description" type="html">
<section snippet-id="text-image" class="mt16 mb16 dark">
<div class="container">
<div class="row">
<div class="col-md-5 col-md-offset-1 mt64">
<h3>Why you'll love an iPad.</h3>
<p>
Right from the start, there’s a lot to love about
iPad. It’s simple yet powerful. Thin and light yet
full-featured. It can do just about everything and
be just about anything.
</p><p>
And because it’s so easy to use, it’s easy to love.
</p>
</div>
<div class="col-md-5 mt16 mb16">
<img class="img img-responsive" src="/website_sale/static/src/img/ipad_why.png"/>
</div>
</div>
</div>
</section>
<section snippet-id="image-text" class="mt16 mb16">
<div class="container">
<div class="row">
<div class="col-md-5 col-md-offset-1">
<img class="img img-responsive" src="/website_sale/static/src/img/ipad_experience.png"/>
</div>
<div class="col-md-6 mt64">
<h3>The full iPad experience.</h3>
<h4 class="small">There is less of it, but no less to it.</h4>
<p>
Everything you love about iPad — the beautiful
screen, fast and fluid performance, FaceTime and
iSight cameras, thousands of amazing apps, 10-hour
battery life* — is everything you’ll love about
iPad mini, too. And you can hold it in one hand.
</p>
<p>
<a href="http://openerp.com">Learn more »</a>
</p>
</div>
</div>
</div>
</section>
</field>
</record>
<record id="product.product_product_5" model="product.product">
<field name="website_published" eval="True"/>
<field name="website_sizex">6</field>
</record>
<record id="product.product_product_6" model="product.product">
<field name="website_published" eval="True"/>
<field name="website_product_class">oe_image_full</field>
</record>
<record id="product.product_product_7" model="product.product">
<field name="website_published" eval="True"/>