-
-
Notifications
You must be signed in to change notification settings - Fork 493
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ADD] website_sale_infinite_scroll: add module
- Loading branch information
1 parent
12263d2
commit be1e802
Showing
23 changed files
with
573 additions
and
0 deletions.
There are no files selected for viewing
1 change: 1 addition & 0 deletions
1
setup/website_sale_infinite_scroll/odoo/addons/website_sale_infinite_scroll
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../../../website_sale_infinite_scroll |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import setuptools | ||
|
||
setuptools.setup( | ||
setup_requires=['setuptools-odoo'], | ||
odoo_addon=True, | ||
) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
# Copyright 2020 Advitus MB | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). | ||
|
||
from . import models | ||
from . import controllers |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# Copyright 2020 Advitus MB | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). | ||
|
||
{ | ||
"name": "eCommerce Infinite Scroll", | ||
"category": "Website", | ||
"version": "14.0.1.0.0", | ||
"author": "Advitus MB, Ooops, Cetmix, Odoo Community Association (OCA)", | ||
"website": "https://github.com/OCA/e-commerce", | ||
"license": "LGPL-3", | ||
"depends": ["website_sale"], | ||
"data": [ | ||
"views/assets.xml", | ||
"views/templates.xml", | ||
"views/res_config_settings.xml", | ||
], | ||
"maintainers": ["dessanhemrayev", "CetmixGitDrone"], | ||
"application": False, | ||
"installable": True, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Copyright 2020 Advitus MB | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). | ||
|
||
from . import main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# Copyright 2020 Advitus MB | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0). | ||
|
||
from odoo import http | ||
from odoo.http import request | ||
|
||
from odoo.addons.website_sale.controllers.main import WebsiteSale | ||
|
||
|
||
class WebsiteSaleInfinityScroll(WebsiteSale): | ||
@http.route() | ||
def shop(self, page=0, category=None, ppg=False, search="", **post): | ||
res = super().shop( | ||
page=page, | ||
category=category, | ||
search=search, | ||
ppg=self._get_shop_ppg(ppg), | ||
**post | ||
) | ||
return request.render("website_sale.products", res.qcontext) | ||
|
||
def _get_shop_ppg(self, ppg): | ||
return ( | ||
request.website.infinity_scroll_ppg | ||
if request.website.viewref("website_sale_infinite_scroll.scroll_products") | ||
.sudo() | ||
.active | ||
else ppg | ||
) | ||
|
||
@http.route( | ||
[ | ||
"""/website_sale_infinite_scroll""", | ||
"""/website_sale_infinite_scroll/""" """page/<int:page>""", | ||
"""/website_sale_infinite_scroll/""" | ||
"""category/<model("product.public.category", """ | ||
""""[('website_id', 'in', (False, current_website_id))]")""" | ||
""":category>""", | ||
"""/website_sale_infinite_scroll/category/""" | ||
"""<model("product.public.category", "[('website_id', 'in', """ | ||
"""(False, current_website_id))]"):category>/page/<int:page>""", | ||
], | ||
type="http", | ||
auth="public", | ||
methods=["POST"], | ||
website=True, | ||
) | ||
def website_sale_infinite_scroll_get_page( | ||
self, page=0, category=None, search="", ppg=False, **post | ||
): | ||
res = super().shop(page=page, category=category, search=search, ppg=ppg, **post) | ||
if page > res.qcontext["pager"]["page_count"]: | ||
return False | ||
return request.render( | ||
"website_sale_infinite_scroll.infinite_products", | ||
res.qcontext, | ||
) | ||
|
||
@http.route( | ||
["/infinite_scroll_preloader"], | ||
type="http", | ||
auth="public", | ||
website=True, | ||
multilang=False, | ||
sitemap=False, | ||
) | ||
def get_website_sale_infinite_scroll_preloader(self): | ||
website = request.website | ||
response = request.redirect( | ||
website.image_url(website, "infinite_scroll_preloader"), code=301 | ||
) | ||
response.headers["Cache-Control"] = ( | ||
"public, max-age=%s" % http.STATIC_CACHE_LONG | ||
) | ||
return response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from . import website | ||
from . import res_config_settings |
10 changes: 10 additions & 0 deletions
10
website_sale_infinite_scroll/models/res_config_settings.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
from odoo import fields, models | ||
|
||
|
||
class ResConfigSettings(models.TransientModel): | ||
_inherit = "res.config.settings" | ||
|
||
website_sale_infinite_scroll_preloader = fields.Binary( | ||
related="website_id.infinite_scroll_preloader", | ||
readonly=False, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import base64 | ||
|
||
from odoo import fields, models, tools | ||
from odoo.modules.module import get_resource_path | ||
|
||
|
||
class Website(models.Model): | ||
|
||
_inherit = "website" | ||
_description = "Website" | ||
|
||
def _default_preloader(self): | ||
img_path = get_resource_path("web", "static/src/img/throbber-large.gif") | ||
with tools.file_open(img_path, "rb") as f: | ||
return base64.b64encode(f.read()) | ||
|
||
infinite_scroll_preloader = fields.Binary( | ||
string="eCommerce Infinite Scroll", default=_default_preloader | ||
) | ||
infinity_scroll_ppg = fields.Integer( | ||
default=21, | ||
string="Number of products in the grid on the shop for infinity scroll", | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
To select different preload go to * General Settings > Website: | ||
- "Website sale infinite scroll preloader" change preloader; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
* Cetmix <https://cetmix.com> | ||
* Dessan Hemrayev <dessanhemrayev@gmail.com> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This module removes pagination in /shop page and replaces it with infinite scrolling of products. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Go to /shop page > Customize > activate "Infinite Products Scroll" |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
odoo.define("website_sale_infinite_scroll.main", function (require) { | ||
"use strict"; | ||
|
||
var sAnimations = require("website.content.snippets.animation"); | ||
var ajax = require("web.ajax"); | ||
var core = require("web.core"); | ||
var _t = core._t; | ||
|
||
sAnimations.registry.infinite_scroll = sAnimations.Class.extend({ | ||
selector: "#wrapwrap", | ||
allow_load: true, | ||
init: function () { | ||
var self = this; | ||
this._super.apply(this, arguments); | ||
// Parse current page number and compute next one | ||
var current_url = window.location.pathname; | ||
|
||
if (current_url.indexOf("/shop") !== -1 && self._check_pagination()) { | ||
var current_arguments = window.location.search; | ||
self.current_page = 1; | ||
if (current_url.indexOf("/page") === -1) { | ||
current_url = current_url.replace( | ||
"/shop", | ||
"/shop/page/" + self.current_page | ||
); | ||
} | ||
var match = current_url.match(/\/page\/(\d*)/); | ||
self.current_page = match[1]; | ||
current_url = current_url.replace("/page/" + self.current_page, ""); | ||
self.next_page = self.current_page; | ||
// Build fetch endpoint url | ||
self.fetch_url = | ||
current_url.replace("/shop", "/website_sale_infinite_scroll") + | ||
"/page/" + | ||
self.next_page + | ||
current_arguments; | ||
} | ||
}, | ||
|
||
start: function () { | ||
var current_url = window.location.pathname; | ||
if (current_url.indexOf("/shop") !== -1) { | ||
var self = this; | ||
const container = this.el; | ||
container.addEventListener("scroll", () => { | ||
if (self._check_pagination()) { | ||
self._onScroll(); | ||
} | ||
}); | ||
} | ||
}, | ||
_check_pagination: function () { | ||
var pagination = document.querySelector(".products_pager .pagination"); | ||
if (!pagination) return false; | ||
var style = window.getComputedStyle(pagination).display; | ||
return style === "none"; | ||
}, | ||
|
||
load_next_page: function () { | ||
var self = this; | ||
self.next_page++; | ||
// Set page in fetch url | ||
var url = self.fetch_url.replace( | ||
"/page/" + self.current_page, | ||
"/page/" + self.next_page | ||
); | ||
|
||
// Add spinner | ||
var $spinner = $("<span/>", { | ||
class: "website_sale_infinite_scroll-spinner", | ||
text: _t("Loading more products..."), | ||
}); | ||
self.$el.append($spinner); | ||
ajax.post(url, {}).then(function (table) { | ||
// Remove spinner | ||
self.$el.find(".website_sale_infinite_scroll-spinner").remove(); | ||
// Append table | ||
if (table) { | ||
self.$("tbody").append(table); | ||
self.allow_load = true; | ||
} else { | ||
self.allow_load = false; | ||
} | ||
}); | ||
}, | ||
|
||
_onScroll: function () { | ||
var self = this; | ||
var documentRect = document.documentElement.getBoundingClientRect(); | ||
if ( | ||
documentRect.bottom < document.documentElement.clientHeight + 100 && | ||
self.allow_load | ||
) { | ||
self.load_next_page(); | ||
} | ||
}, | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
odoo.define("website_sale_infinite_scroll.tour", function (require) { | ||
"use strict"; | ||
|
||
var tour = require("web_tour.tour"); | ||
|
||
var steps = [ | ||
{ | ||
trigger: "#wrapwrap", | ||
run: function () { | ||
window.location.href = "/website_sale_infinite_scroll/page/2"; | ||
}, | ||
}, | ||
{ | ||
trigger: "#wrapwrap", | ||
run: function () { | ||
window.location.href = "/shop"; | ||
window.location.href = "/website_sale_infinite_scroll/page/1000"; | ||
}, | ||
}, | ||
]; | ||
tour.register( | ||
"website_sale_infinite_scroll", | ||
{ | ||
url: "/shop", | ||
test: true, | ||
}, | ||
steps | ||
); | ||
return { | ||
steps: steps, | ||
}; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
.website_sale_infinite_scroll-spinner { | ||
text-align: center; | ||
margin: 0 auto; | ||
display: block; | ||
background: url(/infinite_scroll_preloader) center top no-repeat; | ||
padding-top: 115px; | ||
margin-top: 30px; | ||
} | ||
|
||
#scrollUp { | ||
color: rgba(0, 0, 0, 0.7) !important; | ||
mix-blend-mode: unset !important; | ||
} | ||
|
||
.website_sale_infinite_scroll_custom { | ||
> form { | ||
height: 100%; | ||
height: -moz-available; /* WebKit-based browsers will ignore this. */ | ||
height: -webkit-fill-available; /* Mozilla-based browsers will ignore this. */ | ||
height: fill-available; | ||
} | ||
} | ||
|
||
/* Safari only */ | ||
|
||
@media not all and (min-resolution: 0.001dpcm) { | ||
/* Styles only for Safari 6 and earlier versions */ | ||
.only-safari { | ||
padding-bottom: 0.75rem !important; | ||
} | ||
} | ||
|
||
/* Styles only for Safari 7 and later */ | ||
_::-webkit-full-page-media, | ||
_:future, | ||
:root .only-safari { | ||
padding-bottom: 0.75rem !important; | ||
} | ||
|
||
@media not all and (min-resolution: 0.001dpcm) and (-webkit-min-device-pixel-ratio: 0) and (min-color-index: 0) { | ||
.only-safari { | ||
padding-bottom: 0.75rem !important; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import test_website_sale_infinite_scroll |
Oops, something went wrong.